Name: series-workflow5mkd9 Phase: Succeeded StartedAt: 2026-09-07 18:11:31 +0000 UTC FinishedAt: 2026-09-07 21:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[0] Phase: Succeeded StartedAt: 2026-09-07 18:11:31 +0000 UTC FinishedAt: 2026-09-07 18:14:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 18:11:31 +0000 UTC FinishedAt: 2026-09-07 18:14:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_MD", "MD_RAID1", "MD_RAID10", "MD_RAID456", "MD_LINEAR", "DM_RAID" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_MD", "MD_RAID1", "MD_RAID10", "MD_RAID456", "MD_LINEAR", "DM_RAID" ], "series_id": "7d257b5c-4433-41a0-b63e-dadc753ea572" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "mddev_stack_rdev_into", "mddev_update_io_opt", "md_add_new_disk", "remove_and_add_spares", "rdev_attr_store", "md_start_sync", "raid1_add_disk", "raid10_add_disk", "raid5_add_disk", "raid5_store_skip_copy", "linear_add" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTUQmIzM0OywKICAgICYjMzQ7TURfUkFJRDEmIzM0OywKICAgICYjMzQ7TURfUkFJRDEwJiMzNDssCiAgICAmIzM0O01EX1JBSUQ0NTYmIzM0OywKICAgICYjMzQ7TURfTElORUFSJiMzNDssCiAgICAmIzM0O0RNX1JBSUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZGRldl9zdGFja19yZGV2X2ludG8mIzM0OywKICAgICYjMzQ7bWRkZXZfdXBkYXRlX2lvX29wdCYjMzQ7LAogICAgJiMzNDttZF9hZGRfbmV3X2Rpc2smIzM0OywKICAgICYjMzQ7cmVtb3ZlX2FuZF9hZGRfc3BhcmVzJiMzNDssCiAgICAmIzM0O3JkZXZfYXR0cl9zdG9yZSYjMzQ7LAogICAgJiMzNDttZF9zdGFydF9zeW5jJiMzNDssCiAgICAmIzM0O3JhaWQxX2FkZF9kaXNrJiMzNDssCiAgICAmIzM0O3JhaWQxMF9hZGRfZGlzayYjMzQ7LAogICAgJiMzNDtyYWlkNV9hZGRfZGlzayYjMzQ7LAogICAgJiMzNDtyYWlkNV9zdG9yZV9za2lwX2NvcHkmIzM0OywKICAgICYjMzQ7bGluZWFyX2FkZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgc3Vic3lzdGVtIGFuZCBibG9jayBsYXllciBoZWxwZXIgZnVuY3Rpb25zIHRvIHJlc3RydWN0dXJlIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIHVwZGF0ZWQgYWNyb3NzIG1kLWxpbmVhciwgcmFpZDEsIHJhaWQxMCwgYW5kIHJhaWQ1IGFycmF5cy4gU3BlY2lmaWNhbGx5LCBpdCBwYXNzZXMgYW4gZXhpc3Rpbmcgb3IgbmV3bHkgc3RhcnRlZCBgc3RydWN0IHF1ZXVlX2xpbWl0c2AgdGhyb3VnaCB2YXJpb3VzIGhvdC1hZGQvcmVtb3ZlL3VwZGF0ZSBjYWxsIHBhdGhzIHRvIGF2b2lkIGxvY2staW52ZXJzaW9uIGRlYWRsb2NrcyBiZXR3ZWVuIGBxLVx1MDAzZWxpbWl0c19sb2NrYCwgYXJyYXkgc3VzcGVuc2lvbiwgYW5kIGByZWNvbmZpZ19tdXRleGAuXG5cbkFsbCBgc3RydWN0IHF1ZXVlX2xpbWl0c2AgaW5zdGFuY2VzIG9uIHRoZSBzdGFjayBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAodmlhIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClgLCB3aGljaCByZXR1cm5zIGBxLVx1MDAzZWxpbWl0c2AgYnkgdmFsdWUsIG9yIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlX3RyeWxvY2soKWAgd2hpY2ggcG9wdWxhdGVzIGAqbGltYCkuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgYnl0ZXMgYXJlIHJlYWQsIHBhc3NlZCB0byBjb250cm9sIGZsb3csIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBkZWFkbG9ja3MsIGxvY2tpbmcgb3JkZXIgdmlvbGF0aW9ucywgb3IgcmVmZXJlbmNlL3N0YXRlIGVycm9ycywgd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4va2VybmVsIGRlYnVnZ2VycyByYXRoZXIgdGhhbiBLTVNBTi4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgdGhlcmVmb3JlIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RydWN0dXJlcyBsb2NrIGFjcXVpc2l0aW9uIGFuZCBxdWV1ZSBsaW1pdHMgcHJvcGFnYXRpb24gaW4gdGhlIE1EIChzb2Z0d2FyZSBSQUlEKSBsYXllciB0byBwcmV2ZW50IGRlYWRsb2NrcyBiZXR3ZWVuIHEtXHUwMDNlbGltaXRzX2xvY2ssIHJlY29uZmlnX211dGV4LCBhbmQgbWRkZXZfc3VzcGVuZC4gSXQgYWx0ZXJzIGRpc2sgYWRkaXRpb24vcmVtb3ZhbCBhbmQgc3lzZnMvaW9jdGwgaGFuZGxpbmcgYWNyb3NzIG11bHRpcGxlIFJBSUQgcGVyc29uYWxpdGllcyAocmFpZDEsIHJhaWQxMCwgcmFpZDUsIGxpbmVhciwgZG0tcmFpZCkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRpc2NvdmVyIHBvdGVudGlhbCBkZWFkbG9ja3MsIGxvY2tpbmcgb3JkZXIgdmlvbGF0aW9ucywgcmFjZSBjb25kaXRpb25zLCBvciBzdGF0ZSBjb3JydXB0aW9ucyBkdXJpbmcgY29uY3VycmVudCBSQUlEIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYzYzZiZjI2NmEyNGNmNTc1NGI3YmMwNDUwMTFlNzQzZDJlM2Q3N2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE4OjEzOjE1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcmFpZC5jIGIvZHJpdmVycy9tZC9kbS1yYWlkLmNcbmluZGV4IDhmNWE1ZTEzNDJhOTUuLjIxYTE5MjJiZWU0ZmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL2RtLXJhaWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9kbS1yYWlkLmNcbkBAIC0zOTIzLDcgJiM0MzszOTIzLDcgQEAgc3RhdGljIHZvaWQgYXR0ZW1wdF9yZXN0b3JlX29mX2ZhdWx0eV9kZXZpY2VzKHN0cnVjdCByYWlkX3NldCAqcnMpXG4gXHRcdFx0Y2xlYXJfYml0KEZhdWx0eSwgXHUwMDI2ci1cdTAwM2VmbGFncyk7XG4gXHRcdFx0Y2xlYXJfYml0KFdyaXRlRXJyb3JTZWVuLCBcdTAwMjZyLVx1MDAzZWZsYWdzKTtcbiBcbi1cdFx0XHRpZiAobWRkZXYtXHUwMDNlcGVycy1cdTAwM2Vob3RfYWRkX2Rpc2sobWRkZXYsIHIpKSB7XG4mIzQzO1x0XHRcdGlmIChtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhtZGRldiwgciwgTlVMTCkpIHtcbiBcdFx0XHRcdC8qIEZhaWxlZCB0byByZXZpdmUgdGhpcyBkZXZpY2UsIHRyeSBuZXh0ICovXG4gXHRcdFx0XHRyLVx1MDAzZXJhaWRfZGlzayA9IHItXHUwMDNlc2F2ZWRfcmFpZF9kaXNrID0gLTE7XG4gXHRcdFx0XHRyLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC1hdXRvZGV0ZWN0LmMgYi9kcml2ZXJzL21kL21kLWF1dG9kZXRlY3QuY1xuaW5kZXggNGI4MDE2NWFmZDIzMy4uOTI5NTEzMTA5NjU3ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLWF1dG9kZXRlY3QuY1xuQEAgLTIxMyw3ICYjNDM7MjEzLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1kX3NldHVwX2RyaXZlKHN0cnVjdCBtZF9zZXR1cF9hcmdzICphcmdzKVxuIFx0XHRcdFx0KDEgXHUwMDNjXHUwMDNjIE1EX0RJU0tfQUNUSVZFKSB8ICgxIFx1MDAzY1x1MDAzYyBNRF9ESVNLX1NZTkMpO1xuIFx0XHR9XG4gXG4tXHRcdG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXHUwMDI2ZGluZm8pO1xuJiM0MztcdFx0bWRfYWRkX25ld19kaXNrKG1kZGV2LCBcdTAwMjZkaW5mbywgTlVMTCk7XG4gXHR9XG4gXG4gXHRpZiAoIWVycilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLWxpbmVhci5jIGIvZHJpdmVycy9tZC9tZC1saW5lYXIuY1xuaW5kZXggNzNiMzY3YjYxYjg3My4uMWY0NGMyZDdkYjkzZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQtbGluZWFyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvbWQtbGluZWFyLmNcbkBAIC0xODYsNyAmIzQzOzE4Niw4IEBAIHN0YXRpYyBpbnQgbGluZWFyX3J1bihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBsaW5lYXJfYWRkKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuJiM0MztzdGF0aWMgaW50IGxpbmVhcl9hZGQoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0LyogQWRkaW5nIGEgZHJpdmUgdG8gYSBsaW5lYXIgYXJyYXkgYWxsb3dzIHRoZSBhcnJheSB0byBncm93LlxuIFx0ICogSXQgaXMgcGVybWl0dGVkIGlmIHRoZSBuZXcgZHJpdmUgaGFzIGEgbWF0Y2hpbmcgc3VwZXJibG9ja1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuY1xuaW5kZXggNjgwYjM0YTYzY2IzZC4uYzQwNTRkMDZkMTA3MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC5jXG5AQCAtOTQsOCAmIzQzOzk0LDggQEAgc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJlc3luY193YWl0KTtcbiAgKi9cbiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1kX21pc2Nfd3E7XG4gXG4tc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldixcbi1cdFx0XHRcdCBzdHJ1Y3QgbWRfcmRldiAqdGhpcyk7XG4mIzQzO3N0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICp0aGlzLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIHN0YXRpYyB2b2lkIG1kZGV2X2RldGFjaChzdHJ1Y3QgbWRkZXYgKm1kZGV2KTtcbiBzdGF0aWMgdm9pZCBleHBvcnRfcmRldihzdHJ1Y3QgbWRfcmRldiAqcmRldik7XG4gc3RhdGljIHZvaWQgbWRfd2FrZXVwX3RocmVhZF9kaXJlY3RseShzdHJ1Y3QgbWRfdGhyZWFkIF9fcmN1ICoqdGhyZWFkKTtcbkBAIC0yOTgxLDcgJiM0MzsyOTgxLDcgQEAgdm9pZCBtZF91cGRhdGVfc2Ioc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZvcmNlX2NoYW5nZSlcbiB9XG4gRVhQT1JUX1NZTUJPTChtZF91cGRhdGVfc2IpO1xuIFxuLXN0YXRpYyBpbnQgYWRkX2JvdW5kX3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4mIzQzO3N0YXRpYyBpbnQgYWRkX2JvdW5kX3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYsIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gcmRldi1cdTAwM2VtZGRldjtcbiBcdGludCBlcnIgPSAwO1xuQEAgLTI5OTQsNyAmIzQzOzI5OTQsNyBAQCBzdGF0aWMgaW50IGFkZF9ib3VuZF9yZGV2KHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIFx0XHQgKi9cbiBcdFx0c3VwZXJfdHlwZXNbbWRkZXYtXHUwMDNlbWFqb3JfdmVyc2lvbl0uXG4gXHRcdFx0dmFsaWRhdGVfc3VwZXIobWRkZXYsIE5VTEwvKmZyZXNoZXN0Ki8sIHJkZXYpO1xuLVx0XHRlcnIgPSBtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhtZGRldiwgcmRldik7XG4mIzQzO1x0XHRlcnIgPSBtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhtZGRldiwgcmRldiwgbGltKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdG1kX2tpY2tfcmRldl9mcm9tX2FycmF5KHJkZXYpO1xuIFx0XHRcdHJldHVybiBlcnI7XG5AQCAtMzAzMyw3ICYjNDM7MzAzMywxMyBAQCBzdGF0aWMgaW50IGNtZF9tYXRjaChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnN0cilcbiBzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeSB7XG4gXHRzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7XG4gXHRzc2l6ZV90ICgqc2hvdykoc3RydWN0IG1kX3JkZXYgKiwgY2hhciAqKTtcbi1cdHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IG1kX3JkZXYgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQGxpbTogYSBxdWV1ZSBsaW1pdHMgdXBkYXRlIHRoZSBjYWxsZXIgb3ducywgb3IgTlVMTC4gIFN0b3JlcyB0aGF0XG4mIzQzO1x0ICogY2FuIGFkZCBhIGxlZyB0byB0aGUgYXJyYXkgbXVzdCBzdGFjayBpbnRvIGl0IHJhdGhlciB0aGFuIHRha2VcbiYjNDM7XHQgKiBxLVx1MDAzZWxpbWl0c19sb2NrIHRoZW1zZWx2ZXMsIHNlZSBtZF9zdGFydF9zeW5jKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdFx0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XG4gfTtcbiBcbiBzdGF0aWMgc3NpemVfdFxuQEAgLTMwNzksNyAmIzQzOzMwODUsOCBAQCBzdGF0ZV9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3N0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sXG4mIzQzO1x0ICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHQvKiBjYW4gd3JpdGVcbiBcdCAqICBmYXVsdHkgIC0gc2ltdWxhdGVzIGFuIGVycm9yXG5AQCAtMzExMCw3ICYjNDM7MzExNyw3IEBAIHN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHR9IGVsc2UgaWYgKGNtZF9tYXRjaChidWYsIFwmIzM0O3JlbW92ZVwmIzM0OykpIHtcbiBcdFx0aWYgKHJkZXYtXHUwMDNlbWRkZXYtXHUwMDNlcGVycykge1xuIFx0XHRcdGNsZWFyX2JpdChCbG9ja2VkLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMocmRldi1cdTAwM2VtZGRldiwgcmRldik7XG4mIzQzO1x0XHRcdHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LVx1MDAzZW1kZGV2LCByZGV2LCBsaW0pO1xuIFx0XHR9XG4gXHRcdGlmIChyZGV2LVx1MDAzZXJhaWRfZGlzayBcdTAwM2U9IDApXG4gXHRcdFx0ZXJyID0gLUVCVVNZO1xuQEAgLTMyMjksNyAmIzQzOzMyMzYsNyBAQCBzdGF0ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIFx0XHRcdGlmICghbWRkZXZfaXNfY2x1c3RlcmVkKHJkZXYtXHUwMDNlbWRkZXYpIHx8XG4gXHRcdFx0ICAgIChlcnIgPSBtZGRldi1cdTAwM2VjbHVzdGVyX29wcy1cdTAwM2VnYXRoZXJfYml0bWFwcyhyZGV2KSkgPT0gMCkge1xuIFx0XHRcdFx0Y2xlYXJfYml0KEZhdWx0eSwgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4tXHRcdFx0XHRlcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBhZGRfYm91bmRfcmRldihyZGV2LCBsaW0pO1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlXG4gXHRcdFx0ZXJyID0gLUVCVVNZO1xuQEAgLTMyNTcsNyAmIzQzOzMyNjQsOCBAQCBlcnJvcnNfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1lcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7ZXJyb3JzX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sXG4mIzQzO1x0ICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0dW5zaWduZWQgaW50IG47XG4gXHRpbnQgcnY7XG5AQCAtMzI4Myw3ICYjNDM7MzI5MSw4IEBAIHNsb3Rfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1zbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3Nsb3Rfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbiYjNDM7XHQgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0aW50IHNsb3Q7XG4gXHRpbnQgZXJyO1xuQEAgLTMzMTQsNyAmIzQzOzMzMjMsNyBAQCBzbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHRcdGlmIChyZGV2LVx1MDAzZW1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X3JlbW92ZV9kaXNrID09IE5VTEwpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGNsZWFyX2JpdChCbG9ja2VkLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYpO1xuJiM0MztcdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYsIGxpbSk7XG4gXHRcdGlmIChyZGV2LVx1MDAzZXJhaWRfZGlzayBcdTAwM2U9IDApXG4gXHRcdFx0cmV0dXJuIC1FQlVTWTtcbiBcdFx0c2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsIFx1MDAyNnJkZXYtXHUwMDNlbWRkZXYtXHUwMDNlcmVjb3ZlcnkpO1xuQEAgLTMzNDQsNyAmIzQzOzMzNTMsOCBAQCBzbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHRcdFx0cmRldi1cdTAwM2VzYXZlZF9yYWlkX2Rpc2sgPSAtMTtcbiBcdFx0Y2xlYXJfYml0KEluX3N5bmMsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuIFx0XHRjbGVhcl9iaXQoQml0bWFwX3N5bmMsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuLVx0XHRlcnIgPSByZGV2LVx1MDAzZW1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X2FkZF9kaXNrKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYpO1xuJiM0MztcdFx0ZXJyID0gcmRldi1cdTAwM2VtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhyZGV2LVx1MDAzZW1kZGV2LCByZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGxpbSk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRyZGV2LVx1MDAzZXJhaWRfZGlzayA9IC0xO1xuIFx0XHRcdHJldHVybiBlcnI7XG5AQCAtMzM3Nyw3ICYjNDM7MzM4Nyw4IEBAIG9mZnNldF9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLW9mZnNldF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiM0MztvZmZzZXRfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbiYjNDM7XHQgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0O1xuIFx0aWYgKGtzdHJ0b3VsbChidWYsIDEwLCBcdTAwMjZvZmZzZXQpIFx1MDAzYyAwKVxuQEAgLTM0MDMsNyAmIzQzOzM0MTQsOCBAQCBzdGF0aWMgc3NpemVfdCBuZXdfb2Zmc2V0X3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IG5ld19vZmZzZXRfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsXG4tXHRcdFx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO1x0XHRcdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGxvbmcgbmV3X29mZnNldDtcbiBcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSByZGV2LVx1MDAzZW1kZGV2O1xuQEAgLTM1MTAsNyAmIzQzOzM1MjIsOCBAQCBzdGF0aWMgaW50IHN0cmljdF9ibG9ja3NfdG9fc2VjdG9ycyhjb25zdCBjaGFyICpidWYsIHNlY3Rvcl90ICpzZWN0b3JzKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXJkZXZfc2l6ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiM0MztyZGV2X3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHRzdHJ1Y3QgbWRkZXYgKm15X21kZGV2ID0gcmRldi1cdTAwM2VtZGRldjtcbiBcdHNlY3Rvcl90IG9sZHNlY3RvcnMgPSByZGV2LVx1MDAzZXNlY3RvcnM7XG5AQCAtMzU3Miw3ICYjNDM7MzU4NSw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXG4gXHRyZXR1cm4gc3ByaW50ZihwYWdlLCBcJiMzNDslbGx1XFxuXCYjMzQ7LCByZWNvdmVyeV9zdGFydCk7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3N0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGxvbmcgcmVjb3Zlcnlfc3RhcnQ7XG4gXG5AQCAtMzYxMSw3ICYjNDM7MzYyNSw5IEBAIHN0YXRpYyBzc2l6ZV90IGJiX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXG4ge1xuIFx0cmV0dXJuIGJhZGJsb2Nrc19zaG93KFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCAwKTtcbiB9XG4tc3RhdGljIHNzaXplX3QgYmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG4mIzQzO1xuJiM0MztzdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdGludCBydiA9IGJhZGJsb2Nrc19zdG9yZShcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcGFnZSwgbGVuLCAwKTtcbiBcdC8qIE1heWJlIHRoYXQgYWNrIHdhcyBhbGwgd2UgbmVlZGVkICovXG5AQCAtMzYyNiw3ICYjNDM7MzY0Miw5IEBAIHN0YXRpYyBzc2l6ZV90IHViYl9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIHtcbiBcdHJldHVybiBiYWRibG9ja3Nfc2hvdyhcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcGFnZSwgMSk7XG4gfVxuLXN0YXRpYyBzc2l6ZV90IHViYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHViYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdFx0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHRyZXR1cm4gYmFkYmxvY2tzX3N0b3JlKFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCBsZW4sIDEpO1xuIH1cbkBAIC0zNjQwLDcgJiM0MzszNjU4LDggQEAgcHBsX3NlY3Rvcl9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXBwbF9zZWN0b3Jfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7cHBsX3NlY3Rvcl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxuJiM0MztcdFx0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGxvbmcgc2VjdG9yO1xuIFxuQEAgLTM2NzksNyAmIzQzOzM2OTgsOCBAQCBwcGxfc2l6ZV9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXBwbF9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3BwbF9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sXG4mIzQzO1x0ICAgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbiBcbkBAIC0zNzQwLDYgJiM0MzszNzYwLDkgQEAgcmRldl9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuIFx0c3RydWN0IHJkZXZfc3lzZnNfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5LCBhdHRyKTtcbiBcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBtZF9yZGV2LCBrb2JqKTtcbiBcdHN0cnVjdCBrZXJuZnNfbm9kZSAqa24gPSBOVUxMO1xuJiM0MztcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiYjNDM7XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDtcbiBcdGJvb2wgc3VzcGVuZCA9IGZhbHNlO1xuIFx0c3NpemVfdCBydjtcbiBcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSBSRUFEX09OQ0UocmRldi1cdTAwM2VtZGRldik7XG5AQCAtMzc2MCwxNSAmIzQzOzM3ODMsMzcgQEAgcmRldl9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdHN1c3BlbmQgPSB0cnVlO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlc2UgY2FuIGFkZCBhIGxlZyBiYWNrLCB3aGljaCBzdGFja3MgaXRzIGxpbWl0czsgdGhlIG90aGVyXG4mIzQzO1x0ICogc3RhdGVfc3RvcmUoKSB2YWx1ZXMgbmV2ZXIgcmVhY2ggLVx1MDAzZWhvdF9hZGRfZGlzaygpLiAgcS1cdTAwM2VsaW1pdHNfbG9ja1xuJiM0MztcdCAqIG5lc3RzIG91dHNpZGUgdGhlIGxvY2sgYW5kIHRoZSBzdXNwZW5kLCBzZWUgbWRfc3RhcnRfc3luYygpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICgoZW50cnktXHUwMDNlc3RvcmUgPT0gc2xvdF9zdG9yZSB8fFxuJiM0MztcdCAgICAgKGVudHJ5LVx1MDAzZXN0b3JlID09IHN0YXRlX3N0b3JlIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgIChjbWRfbWF0Y2gocGFnZSwgXCYjMzQ7cmVtb3ZlXCYjMzQ7KSB8fCBjbWRfbWF0Y2gocGFnZSwgXCYjMzQ7cmUtYWRkXCYjMzQ7KSkpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuJiM0MztcdFx0cSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4mIzQzO1x0XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuJiM0MztcdFx0bGltcCA9IFx1MDAyNmxpbTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cnYgPSBzdXNwZW5kID8gbWRkZXZfc3VzcGVuZF9hbmRfbG9jayhtZGRldikgOiBtZGRldl9sb2NrKG1kZGV2KTtcbiBcdGlmICghcnYpIHtcbiBcdFx0aWYgKHJkZXYtXHUwMDNlbWRkZXYgPT0gTlVMTClcbiBcdFx0XHRydiA9IC1FTk9ERVY7XG4gXHRcdGVsc2Vcbi1cdFx0XHRydiA9IGVudHJ5LVx1MDAzZXN0b3JlKHJkZXYsIHBhZ2UsIGxlbmd0aCk7XG4mIzQzO1x0XHRcdHJ2ID0gZW50cnktXHUwMDNlc3RvcmUocmRldiwgcGFnZSwgbGVuZ3RoLCBsaW1wKTtcbiYjNDM7XHRcdC8qIGFwcGx5IHRoZSBsaW1pdHMgYmVmb3JlIHRoZSBhcnJheSB0YWtlcyBJL08gYWdhaW4gKi9cbiYjNDM7XHRcdGlmIChsaW1wKSB7XG4mIzQzO1x0XHRcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApO1xuJiM0MztcdFx0XHRsaW1wID0gTlVMTDtcbiYjNDM7XHRcdH1cbiBcdFx0c3VzcGVuZCA/IG1kZGV2X3VubG9ja19hbmRfcmVzdW1lKG1kZGV2KSA6IG1kZGV2X3VubG9jayhtZGRldik7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKGxpbXApXG4mIzQzO1x0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcbiYjNDM7XG4gXHRpZiAoa24pXG4gXHRcdHN5c2ZzX3VuYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa24pO1xuIFxuQEAgLTYyNzUsMjAgJiM0Mzs2MzIwLDg5IEBAIGludCBtZGRldl9zdGFja19uZXdfcmRldihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobWRkZXZfc3RhY2tfbmV3X3JkZXYpO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBTdGFjayBhIG5ldyByZGV2IGludG8gbGltaXRzIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyBsaW1pdHNfbG9jayBmb3IgYW5kXG4mIzQzOyAqIHdpbGwgY29tbWl0IGl0c2VsZi4gIFVzZWQgZnJvbSBwYXRocyB0aGF0IG11c3QgdGFrZSBsaW1pdHNfbG9jayBiZWZvcmVcbiYjNDM7ICogcXVpZXNjaW5nIHRoZSBhcnJheSwgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cbiYjNDM7ICovXG4mIzQzO2ludCBtZGRldl9zdGFja19yZGV2X2ludG8oc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHF1ZXVlX2xpbWl0cyB0bXAgPSAqbGltO1xuJiM0MztcbiYjNDM7XHRpZiAobWRkZXZfaXNfZG0obWRkZXYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChxdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocmRldi1cdTAwM2ViZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlcXVldWUpIFx1MDAzZVxuJiM0MztcdCAgICBxdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUobWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZSkpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDslczogaW5jb21wYXRpYmxlIGxvZ2ljYWxfYmxvY2tfc2l6ZSwgY2FuIG5vdCBhZGRcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgbWRuYW1lKG1kZGV2KSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHF1ZXVlX2xpbWl0c19zdGFja19iZGV2KFx1MDAyNnRtcCwgcmRldi1cdTAwM2ViZGV2LCByZGV2LVx1MDAzZWRhdGFfb2Zmc2V0LFxuJiM0MztcdFx0XHRcdG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlZGlza19uYW1lKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFxdWV1ZV9saW1pdHNfc3RhY2tfaW50ZWdyaXR5X2JkZXYoXHUwMDI2dG1wLCByZGV2LVx1MDAzZWJkZXYpKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7JXM6IGluY29tcGF0aWJsZSBpbnRlZ3JpdHkgcHJvZmlsZSBmb3IgJXBnXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIG1kbmFtZShtZGRldiksIHJkZXYtXHUwMDNlYmRldik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOWElPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KmxpbSA9IHRtcDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtZGRldl9zdGFja19yZGV2X2ludG8pO1xuJiM0MztcbiYjNDM7LyogZm9yIGNhbGxlcnMgdGhhdCBtdXN0IG5vdCB3YWl0IGZvciBxLVx1MDAzZWxpbWl0c19sb2NrLCBzZWUgbWRfc3RhcnRfc3luYygpICovXG4mIzQzO3N0YXRpYyBib29sIG1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKHN0cnVjdCBtZGRldiAqbWRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxO1xuJiM0MztcbiYjNDM7XHRpZiAobWRkZXZfaXNfZG0obWRkZXYpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRxID0gbWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayhxLCBsaW0pO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIHVwZGF0ZSB0aGUgb3B0aW1hbCBJL08gc2l6ZSBhZnRlciBhIHJlc2hhcGUgKi9cbi12b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMpXG4mIzQzO3ZvaWQgbWRkZXZfdXBkYXRlX2lvX29wdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB1bnNpZ25lZCBpbnQgbnJfc3RyaXBlcyxcbiYjNDM7XHRcdFx0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4tXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiYjNDM7XHRzdHJ1Y3QgcXVldWVfbGltaXRzIG93bjtcbiBcbiBcdGlmIChtZGRldl9pc19kbShtZGRldikpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdpdGggYW4gdXBkYXRlIG93bmVkIGJ5IHRoZSBjYWxsZXIganVzdCBjaGFuZ2UgaXQgaW4gcGxhY2U7IGl0IGlzXG4mIzQzO1x0ICogY29tbWl0dGVkLCBhbmQgdGhlIGFycmF5IHJlc3VtZWQsIGJ5IHdob2V2ZXIgc3RhcnRlZCBpdC4gIFRha2luZ1xuJiM0MztcdCAqIHEtXHUwMDNlbGltaXRzX2xvY2sgaGVyZSB3b3VsZCBuZXN0IGl0IGluc2lkZSByZWNvbmZpZ19tdXRleCBhbmQgdGhlXG4mIzQzO1x0ICogc3VzcGVuZCwgd2hpY2ggZGVhZGxvY2tzLCBzZWUgbWRfc3RhcnRfc3luYygpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChsaW0pIHtcbiYjNDM7XHRcdGxpbS1cdTAwM2Vpb19vcHQgPSBsaW0tXHUwMDNlaW9fbWluICogbnJfc3RyaXBlcztcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2FsbGVkIGZyb20gdGhlIHN5bmMgdGhyZWFkLCB3aGljaCBtZF9yZWFwX3N5bmNfdGhyZWFkKCkgd2FpdHMgZm9yXG4mIzQzO1x0ICogd2l0aCByZWNvbmZpZ19tdXRleCBoZWxkLCBzbyBkb24mIzM5O3Qgd2FpdCBmb3IgcS1cdTAwM2VsaW1pdHNfbG9jayBoZXJlLlxuJiM0MztcdCAqIGlvX29wdCBpcyBhIGhpbnQsIHNraXBwaW5nIGl0IG9uIGEgY29udGVuZGVkIHBhc3MgaXMgZmluZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKG1kZGV2LCBcdTAwMjZvd24pKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdC8qIGRvbiYjMzk7dCBib3RoZXIgdXBkYXRpbmcgaW9fb3B0IGlmIHdlIGNhbiYjMzk7dCBzdXNwZW5kIHRoZSBhcnJheSAqL1xuLVx0aWYgKG1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKSBcdTAwM2MgMClcbiYjNDM7XHRpZiAobWRkZXZfc3VzcGVuZChtZGRldiwgZmFsc2UpIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlKTtcbiBcdFx0cmV0dXJuO1xuLVx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlKTtcbi1cdGxpbS5pb19vcHQgPSBsaW0uaW9fbWluICogbnJfc3RyaXBlcztcbi1cdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4mIzQzO1x0fVxuJiM0MztcdG93bi5pb19vcHQgPSBvd24uaW9fbWluICogbnJfc3RyaXBlcztcbiYjNDM7XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZvd24pO1xuIFx0bWRkZXZfcmVzdW1lKG1kZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobWRkZXZfdXBkYXRlX2lvX29wdCk7XG5AQCAtNzQ4Niw3ICYjNDM7NzYwMCw4IEBAIHN0YXRpYyBpbnQgZ2V0X2Rpc2tfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB2b2lkIF9fdXNlciAqIGFyZylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgbWRfYWRkX25ld19kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgKmluZm8pXG4mIzQzO2ludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbyxcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0c3RydWN0IG1kX3JkZXYgKnJkZXY7XG4gXHRkZXZfdCBkZXYgPSBNS0RFVihpbmZvLVx1MDAzZW1ham9yLGluZm8tXHUwMDNlbWlub3IpO1xuQEAgLTc2MzQsMTEgJiM0Mzs3NzQ5LDExIEBAIGludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbylcbiBcdFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRcdG1kZGV2LVx1MDAzZWNsdXN0ZXJfb3BzLVx1MDAzZWFkZF9uZXdfZGlza19jYW5jZWwobWRkZXYpO1xuIFx0XHRcdFx0ZWxzZVxuLVx0XHRcdFx0XHRlcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTtcbiYjNDM7XHRcdFx0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYsIGxpbSk7XG4gXHRcdFx0fVxuIFxuIFx0XHR9IGVsc2UgaWYgKCFlcnIpXG4tXHRcdFx0ZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldik7XG4mIzQzO1x0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYsIGxpbSk7XG4gXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtNzY5MSw3ICYjNDM7NzgwNiw4IEBAIGludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGhvdF9yZW1vdmVfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBkZXZfdCBkZXYpXG4mIzQzO3N0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIGRldl90IGRldixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCBtZF9yZGV2ICpyZGV2O1xuIFxuQEAgLTc3MDYsNyAmIzQzOzc4MjIsNyBAQCBzdGF0aWMgaW50IGhvdF9yZW1vdmVfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBkZXZfdCBkZXYpXG4gXHRcdGdvdG8ga2lja19yZGV2O1xuIFxuIFx0Y2xlYXJfYml0KEJsb2NrZWQsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuLVx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCByZGV2KTtcbiYjNDM7XHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIHJkZXYsIGxpbSk7XG4gXG4gXHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2sgXHUwMDNlPSAwKVxuIFx0XHRnb3RvIGJ1c3k7XG5AQCAtODI5MSw2ICYjNDM7ODQwNywyMiBAQCBzdGF0aWMgaW5saW5lIGludCBtZF9pb2N0bF92YWxpZCh1bnNpZ25lZCBpbnQgY21kKVxuIFx0fVxuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQ29tbWFuZHMgdGhhdCBjYW4gcmVhY2ggLVx1MDAzZWhvdF9hZGRfZGlzaygpLiAgQUREX05FV19ESVNLIG9ubHkgZG9lcyBzbyBmb3IgYVxuJiM0MzsgKiBqb3VybmFsIGRldmljZSBvciBhIHBlcnNvbmFsaXR5IHdpdGhvdXQgLVx1MDAzZWhvdF9yZW1vdmVfZGlzaywgYnV0IHRoYXQgZGVwZW5kc1xuJiM0MzsgKiBvbiBkaXNrIGluZm8gc3RpbGwgaW4gdXNlciBtZW1vcnkgaGVyZSwgc28gaXQgaXMgaW5jbHVkZWQgYXMgYSB3aG9sZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIG1kX2lvY3RsX21heV9hZGRfZGlzayh1bnNpZ25lZCBpbnQgY21kKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChjbWQpIHtcbiYjNDM7XHRjYXNlIEFERF9ORVdfRElTSzpcbiYjNDM7XHRjYXNlIEhPVF9SRU1PVkVfRElTSzpcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIG1kX2lvY3RsX25lZWRfc3VzcGVuZCh1bnNpZ25lZCBpbnQgY21kKVxuIHtcbiBcdHN3aXRjaCAoY21kKSB7XG5AQCAtODM0Niw2ICYjNDM7ODQ3OCw5IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0dW5zaWduZWQgaW50IG5vaW9fZmxhZ3MgPSAwO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG4gXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4mIzQzO1x0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7XG4gXHRib29sIHN1c3BlbmQ7XG4gXG4gXHRlcnIgPSBtZF9pb2N0bF92YWxpZChjbWQpO1xuQEAgLTgzOTYsMTEgJiM0Mzs4NTMxLDIwIEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0aWYgKCFtZF9pc19yZHdyKG1kZGV2KSlcbiBcdFx0Zmx1c2hfd29yayhcdTAwMjZtZGRldi1cdTAwM2VzeW5jX3dvcmspO1xuIFxuJiM0MztcdC8qIHEtXHUwMDNlbGltaXRzX2xvY2sgbmVzdHMgb3V0c2lkZSBib3RoLCBzZWUgbWRfc3RhcnRfc3luYygpICovXG4mIzQzO1x0aWYgKG1kX2lvY3RsX21heV9hZGRfZGlzayhjbWQpIFx1MDAyNlx1MDAyNiAhbWRkZXZfaXNfZG0obWRkZXYpKSB7XG4mIzQzO1x0XHRxID0gbWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZTtcbiYjNDM7XHRcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XG4mIzQzO1x0XHRsaW1wID0gXHUwMDI2bGltO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRzdXNwZW5kID0gbWRfaW9jdGxfbmVlZF9zdXNwZW5kKGNtZCk7XG4gXHRlcnIgPSBzdXNwZW5kID8gbWRkZXZfc3VzcGVuZF9hbmRfbG9jayhtZGRldikgOiBtZGRldl9sb2NrKG1kZGV2KTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0cHJfZGVidWcoXCYjMzQ7bWQ6IGlvY3RsIGxvY2sgaW50ZXJydXB0ZWQsIHJlYXNvbiAlZCwgY21kICVkXFxuXCYjMzQ7LFxuIFx0XHRcdCBlcnIsIGNtZCk7XG4mIzQzO1x0XHRpZiAobGltcClcbiYjNDM7XHRcdFx0cXVldWVfbGltaXRzX2NhbmNlbF91cGRhdGUocSk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0aWYgKHN1c3BlbmQpXG5AQCAtODQ0Miw3ICYjNDM7ODU4Niw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0XHRnb3RvIHVubG9jaztcbiBcbiBcdGNhc2UgSE9UX1JFTU9WRV9ESVNLOlxuLVx0XHRlcnIgPSBob3RfcmVtb3ZlX2Rpc2sobWRkZXYsIG5ld19kZWNvZGVfZGV2KGFyZykpO1xuJiM0MztcdFx0ZXJyID0gaG90X3JlbW92ZV9kaXNrKG1kZGV2LCBuZXdfZGVjb2RlX2RldihhcmcpLCBsaW1wKTtcbiBcdFx0Z290byB1bmxvY2s7XG4gXG4gXHRjYXNlIEFERF9ORVdfRElTSzpcbkBAIC04NDU4LDcgJiM0Mzs4NjAyLDcgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4gXHRcdFx0XHQvKiBOZWVkIHRvIGNsZWFyIHJlYWQtb25seSBmb3IgdGhpcyAqL1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0ZWxzZVxuLVx0XHRcdFx0ZXJyID0gbWRfYWRkX25ld19kaXNrKG1kZGV2LCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBtZF9hZGRfbmV3X2Rpc2sobWRkZXYsIFx1MDAyNmluZm8sIGxpbXApO1xuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuQEAgLTg0OTYsNyAmIzQzOzg2NDAsNyBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmluZm8sIGFyZ3AsIHNpemVvZihpbmZvKSkpXG4gXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0ZWxzZVxuLVx0XHRcdGVyciA9IG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXHUwMDI2aW5mbyk7XG4mIzQzO1x0XHRcdGVyciA9IG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXHUwMDI2aW5mbywgbGltcCk7XG4gXHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuIFxuQEAgLTg1MjksNiAmIzQzOzg2NzMsOSBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbiBcdCAgICBlcnIgIT0gLUVJTlZBTClcbiBcdFx0bWRkZXYtXHUwMDNlaG9sZF9hY3RpdmUgPSAwO1xuIFxuJiM0MztcdGlmIChsaW1wKVxuJiM0MztcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltcCk7XG4mIzQzO1xuIFx0aWYgKHN1c3BlbmQpIHtcbiBcdFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZ3MpO1xuIFx0XHRtZGRldl91bmxvY2tfYW5kX3Jlc3VtZShtZGRldik7XG5AQCAtMTAxNjcsOCAmIzQzOzEwMzE0LDggQEAgc3RhdGljIGludCByZW1vdmVfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICp0aGlzKVxuIFx0cmV0dXJuIHJlbW92ZWQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsXG4tXHRcdFx0XHQgc3RydWN0IG1kX3JkZXYgKnRoaXMpXG4mIzQzO3N0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICp0aGlzLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0c3RydWN0IG1kX3JkZXYgKnJkZXY7XG4gXHRpbnQgc3BhcmVzID0gMDtcbkBAIC0xMDE5MSw3ICYjNDM7MTAzMzgsNyBAQCBzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIXRlc3RfYml0KEpvdXJuYWwsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuIFx0XHRcdHJkZXYtXHUwMDNlcmVjb3Zlcnlfb2Zmc2V0ID0gMDtcbi1cdFx0aWYgKG1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7XG4mIzQzO1x0XHRpZiAobWRkZXYtXHUwMDNlcGVycy1cdTAwM2Vob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYsIGxpbSkgPT0gMCkge1xuIFx0XHRcdC8qIGZhaWx1cmUgaGVyZSBpcyBPSyAqL1xuIFx0XHRcdHN5c2ZzX2xpbmtfcmRldihtZGRldiwgcmRldik7XG4gXHRcdFx0aWYgKCF0ZXN0X2JpdChKb3VybmFsLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbkBAIC0xMDIwNiw3ICYjNDM7MTAzNTMsOCBAQCBzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxuIFx0cmV0dXJuIHNwYXJlcztcbiB9XG4gXG4tc3RhdGljIGJvb2wgbWRfY2hvb3NlX3N5bmNfYWN0aW9uKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCAqc3BhcmVzKVxuJiM0MztzdGF0aWMgYm9vbCBtZF9jaG9vc2Vfc3luY19hY3Rpb24oc3RydWN0IG1kZGV2ICptZGRldiwgaW50ICpzcGFyZXMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0LyogQ2hlY2sgaWYgcmVzaGFwZSBpcyBpbiBwcm9ncmVzcyBmaXJzdC4gKi9cbiBcdGlmIChtZGRldi1cdTAwM2VyZXNoYXBlX3Bvc2l0aW9uICE9IE1heFNlY3Rvcikge1xuQEAgLTEwMjM0LDcgJiM0MzsxMDM4Miw3IEBAIHN0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcylcbiBcdCAqIGFsc28gcmVtb3ZlZCBhbmQgcmUtYWRkZWQsIHRvIGFsbG93IHRoZSBwZXJzb25hbGl0eSB0byBmYWlsIHRoZVxuIFx0ICogcmUtYWRkLlxuIFx0ICovXG4tXHQqc3BhcmVzID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMKTtcbiYjNDM7XHQqc3BhcmVzID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMLCBsaW0pO1xuIFx0aWYgKCpzcGFyZXMgfHwgdGVzdF9iaXQoTURfUkVDT1ZFUllfTEFaWV9SRUNPVkVSLCBcdTAwMjZtZGRldi1cdTAwM2VyZWNvdmVyeSkpIHtcbiBcdFx0Y2xlYXJfYml0KE1EX1JFQ09WRVJZX1NZTkMsIFx1MDAyNm1kZGV2LVx1MDAzZXJlY292ZXJ5KTtcbiBcdFx0Y2xlYXJfYml0KE1EX1JFQ09WRVJZX0NIRUNLLCBcdTAwMjZtZGRldi1cdTAwM2VyZWNvdmVyeSk7XG5AQCAtMTAyNTYsNiAmIzQzOzEwNDA0LDkgQEAgc3RhdGljIGJvb2wgbWRfY2hvb3NlX3N5bmNfYWN0aW9uKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCAqc3BhcmVzKVxuIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cylcbiB7XG4gXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gY29udGFpbmVyX29mKHdzLCBzdHJ1Y3QgbWRkZXYsIHN5bmNfd29yayk7XG4mIzQzO1x0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuJiM0MztcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbXAgPSBOVUxMO1xuIFx0aW50IHNwYXJlcyA9IDA7XG4gXHRib29sIHN1c3BlbmQgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGludCBub2lvX2ZsYWdzID0gMDtcbkBAIC0xMDI2Nyw2ICYjNDM7MTA0MTgsMTcgQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxuIFx0ICovXG4gXHRpZiAoKG1kZGV2LVx1MDAzZXJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yIHx8ICFtZF9pc19yZHdyKG1kZGV2KSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbWRfc3BhcmVzX25lZWRfY2hhbmdlKG1kZGV2KSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEFkZGluZyBhIHNwYXJlIGJlbG93IHN0YWNrcyBpdHMgbGltaXRzLCB3aGljaCBuZWVkc1xuJiM0MztcdFx0ICogcS1cdTAwM2VsaW1pdHNfbG9jay4gIFRha2UgaXQgYmVmb3JlIHN1c3BlbmRpbmc6IGl0cyBob2xkZXJcbiYjNDM7XHRcdCAqIHdhaXRzIGluIGJsa19tcV9mcmVlemVfcXVldWUoKSBmb3IgSS9PIHRoYXRcbiYjNDM7XHRcdCAqIG1kZGV2LVx1MDAzZXN1c3BlbmRlZCBob2xkcyBiYWNrLCBzbyB0aGUgb3RoZXIgb3JkZXIgZGVhZGxvY2tzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuJiM0MztcdFx0XHRxID0gbWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZTtcbiYjNDM7XHRcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbiYjNDM7XHRcdFx0bGltcCA9IFx1MDAyNmxpbTtcbiYjNDM7XHRcdH1cbiBcdFx0c3VzcGVuZCA9IHRydWU7XG4gXHRcdG1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKTtcbiBcdFx0bm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xuQEAgLTEwMjgxLDYgJiM0MzsxMDQ0MywxMiBAQCBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXG4gXHRpZiAoIXN1c3BlbmQgXHUwMDI2XHUwMDI2IChtZGRldi1cdTAwM2VyZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvciB8fCAhbWRfaXNfcmR3cihtZGRldikpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG1kX3NwYXJlc19uZWVkX2NoYW5nZShtZGRldikpIHtcbiBcdFx0bWRkZXZfdW5sb2NrKG1kZGV2KTtcbiYjNDM7XHRcdC8qIHNlZSBhYm92ZTogcS1cdTAwM2VsaW1pdHNfbG9jayBuZXN0cyBvdXRzaWRlIGJvdGggKi9cbiYjNDM7XHRcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpKSB7XG4mIzQzO1x0XHRcdHEgPSBtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlO1xuJiM0MztcdFx0XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuJiM0MztcdFx0XHRsaW1wID0gXHUwMDI2bGltO1xuJiM0MztcdFx0fVxuIFx0XHRtZGRldl9zdXNwZW5kX2FuZF9sb2NrX25vaW50cihtZGRldik7XG4gXHRcdHN1c3BlbmQgPSB0cnVlO1xuIFx0XHRub2lvX2ZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG5AQCAtMTAyOTQsMTEgJiM0MzsxMDQ2MiwxMSBAQCBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXG4gXHRcdCAqIEFzIHdlIG9ubHkgYWRkIGRldmljZXMgdGhhdCBhcmUgYWxyZWFkeSBpbi1zeW5jLCB3ZSBjYW5cbiBcdFx0ICogYWN0aXZhdGUgdGhlIHNwYXJlcyBpbW1lZGlhdGVseS5cbiBcdFx0ICovXG4tXHRcdHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldiwgTlVMTCk7XG4mIzQzO1x0XHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIE5VTEwsIGxpbXApO1xuIFx0XHRnb3RvIG5vdF9ydW5uaW5nO1xuIFx0fVxuIFxuLVx0aWYgKCFtZF9jaG9vc2Vfc3luY19hY3Rpb24obWRkZXYsIFx1MDAyNnNwYXJlcykpXG4mIzQzO1x0aWYgKCFtZF9jaG9vc2Vfc3luY19hY3Rpb24obWRkZXYsIFx1MDAyNnNwYXJlcywgbGltcCkpXG4gXHRcdGdvdG8gbm90X3J1bm5pbmc7XG4gXG4gXHRpZiAoIW1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlc3luY19yZXF1ZXN0KVxuQEAgLTEwMzI5LDYgJiM0MzsxMDQ5Nyw4IEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cylcbiBcdCAqICAgICBodHRwczovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODIwMFxuIFx0ICogVGhlcmVmb3JlLCB1c2UgX19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKS5cbiBcdCAqL1xuJiM0MztcdGlmIChsaW1wKVxuJiM0MztcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltcCk7XG4gXHRpZiAoc3VzcGVuZCkge1xuIFx0XHRtZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFncyk7XG4gXHRcdF9fbWRkZXZfcmVzdW1lKG1kZGV2LCBmYWxzZSk7XG5AQCAtMTAzNTEsNiAmIzQzOzEwNTIxLDggQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxuIFx0ICogICAgIGh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MjAwXG4gXHQgKiBUaGVyZWZvcmUsIHVzZSBfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpLlxuIFx0ICovXG4mIzQzO1x0aWYgKGxpbXApXG4mIzQzO1x0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcbiBcdGlmIChzdXNwZW5kKSB7XG4gXHRcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWdzKTtcbiBcdFx0X19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKTtcbkBAIC0xMDc5Myw2ICYjNDM7MTA5NjUsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBtZF9pbml0KHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgY2hlY2tfc2JfY2hhbmdlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbiB7XG4mIzQzO1x0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4gXHRzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfMSAqc2IgPSBwYWdlX2FkZHJlc3MocmRldi1cdTAwM2VzYl9wYWdlKTtcbiBcdHN0cnVjdCBtZF9yZGV2ICpyZGV2MiwgKnRtcDtcbiBcdGludCByb2xlLCByZXQ7XG5AQCAtMTA4NDksNyAmIzQzOzExMDIyLDI0IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3NiX2NoYW5nZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4gXHRcdFx0XHRcdHJkZXYyLVx1MDAzZXNhdmVkX3JhaWRfZGlzayA9IC0xO1xuIFx0XHRcdFx0ZWxzZVxuIFx0XHRcdFx0XHRyZGV2Mi1cdTAwM2VzYXZlZF9yYWlkX2Rpc2sgPSByb2xlO1xuLVx0XHRcdFx0cmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCByZGV2Mik7XG4mIzQzO1x0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHQgKiByZWNvbmZpZ19tdXRleCBpcyBoZWxkLCBzbyBkb24mIzM5O3Qgd2FpdCBmb3JcbiYjNDM7XHRcdFx0XHQgKiBxLVx1MDAzZWxpbWl0c19sb2NrOyBNRF9SRUNPVkVSWV9ORUVERUQgYmVsb3dcbiYjNDM7XHRcdFx0XHQgKiBsZWF2ZXMgYSBza2lwcGVkIGFkZCB0byBtZF9zdGFydF9zeW5jKCkuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0aWYgKG1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKG1kZGV2LCBcdTAwMjZsaW0pKSB7XG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9XG4mIzQzO1x0XHRcdFx0XHRcdG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4mIzQzO1xuJiM0MztcdFx0XHRcdFx0cmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgIHJkZXYyLCBcdTAwMjZsaW0pO1xuJiM0MztcdFx0XHRcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgXHUwMDI2bGltKTtcbiYjNDM7XHRcdFx0XHR9IGVsc2UgaWYgKG1kZGV2X2lzX2RtKG1kZGV2KSkge1xuJiM0MztcdFx0XHRcdFx0cmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgIHJkZXYyLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdFx0cmV0ID0gcmVtb3ZlX3NwYXJlcyhtZGRldiwgcmRldjIpO1xuJiM0MztcdFx0XHRcdH1cbiBcdFx0XHRcdHByX2luZm8oXCYjMzQ7QWN0aXZhdGVkIHNwYXJlOiAlcGdcXG5cJiMzNDssXG4gXHRcdFx0XHRcdHJkZXYyLVx1MDAzZWJkZXYpO1xuIFx0XHRcdFx0Lyogd2FrZXVwIG1kZGV2LVx1MDAzZXRocmVhZCBoZXJlLCBzbyBhcnJheSBjb3VsZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaFxuaW5kZXggYjZkMmU4OTI5YTBmOS4uY2VjYThjZmNkY2I5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC5oXG5AQCAtNzY1LDcgJiM0Mzs3NjUsOCBAQCBzdHJ1Y3QgbWRfcGVyc29uYWxpdHlcbiBcdCAqIGlmIGFwcHJvcHJpYXRlLCBhbmQgc2hvdWxkIGFib3J0IHJlY292ZXJ5IGlmIG5lZWRlZFxuIFx0ICovXG4gXHR2b2lkICgqZXJyb3JfaGFuZGxlcikoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xuLVx0aW50ICgqaG90X2FkZF9kaXNrKSAoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xuJiM0MztcdGludCAoKmhvdF9hZGRfZGlzaykoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIFx0aW50ICgqaG90X3JlbW92ZV9kaXNrKSAoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xuIFx0aW50ICgqc3BhcmVfYWN0aXZlKSAoc3RydWN0IG1kZGV2ICptZGRldik7XG4gXHRzZWN0b3JfdCAoKnN5bmNfcmVxdWVzdCkoc3RydWN0IG1kZGV2ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLFxuQEAgLTEwNDEsMTMgJiM0MzsxMDQyLDE3IEBAIHN0cnVjdCBtZHVfZGlza19pbmZvX3M7XG4gZXh0ZXJuIGludCBtZHBfbWFqb3I7XG4gdm9pZCBtZF9hdXRvc3RhcnRfYXJyYXlzKGludCBwYXJ0KTtcbiBpbnQgbWRfc2V0X2FycmF5X2luZm8oc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9hcnJheV9pbmZvX3MgKmluZm8pO1xuLWludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbyk7XG4mIzQzO2ludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbyxcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIGludCBkb19tZF9ydW4oc3RydWN0IG1kZGV2ICptZGRldik7XG4gI2RlZmluZSBNRERFVl9TVEFDS19JTlRFR1JJVFlcdCgxdSBcdTAwM2NcdTAwM2MgMClcbiBpbnQgbWRkZXZfc3RhY2tfcmRldl9saW1pdHMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBtZGRldl9zdGFja19uZXdfcmRldihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7XG4tdm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzKTtcbiYjNDM7aW50IG1kZGV2X3N0YWNrX3JkZXZfaW50byhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuJiM0Mzt2b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbWRfZm9wcztcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmNcbmluZGV4IGYwNjQ2ZmIyNDM3MWYuLmRkMzQ4YjU2OTVkMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL3JhaWQxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvcmFpZDEuY1xuQEAgLTE4OTgsNyAmIzQzOzE4OTgsOCBAQCBzdGF0aWMgYm9vbCByYWlkMV9yZW1vdmVfY29uZihzdHJ1Y3QgcjFjb25mICpjb25mLCBpbnQgZGlzaylcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJhaWQxX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuJiM0MztzdGF0aWMgaW50IHJhaWQxX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuJiM0MztcdFx0XHQgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHRzdHJ1Y3QgcjFjb25mICpjb25mID0gbWRkZXYtXHUwMDNlcHJpdmF0ZTtcbiBcdGludCBlcnIgPSAtRUVYSVNUO1xuQEAgLTE5MjMsNyAmIzQzOzE5MjQsMTAgQEAgc3RhdGljIGludCByYWlkMV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbiBcdGZvciAobWlycm9yID0gZmlyc3Q7IG1pcnJvciBcdTAwM2M9IGxhc3Q7IG1pcnJvciYjNDM7JiM0MzspIHtcbiBcdFx0cCA9IGNvbmYtXHUwMDNlbWlycm9ycyAmIzQzOyBtaXJyb3I7XG4gXHRcdGlmICghcC1cdTAwM2VyZGV2KSB7XG4tXHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xuJiM0MztcdFx0XHRpZiAobGltKVxuJiM0MztcdFx0XHRcdGVyciA9IG1kZGV2X3N0YWNrX3JkZXZfaW50byhtZGRldiwgcmRldiwgbGltKTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuY1xuaW5kZXggMTA5M2M3OThkOWRkZS4uNjQxNjE5MzI4YTZjNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcbkBAIC0yMDk1LDcgJiM0MzsyMDk1LDggQEAgc3RhdGljIGludCByYWlkMTBfc3BhcmVfYWN0aXZlKHN0cnVjdCBtZGRldiAqbWRkZXYpXG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcmFpZDEwX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuJiM0MztzdGF0aWMgaW50IHJhaWQxMF9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCByMTBjb25mICpjb25mID0gbWRkZXYtXHUwMDNlcHJpdmF0ZTtcbiBcdGludCBlcnIgPSAtRUVYSVNUO1xuQEAgLTIxMzAsNyAmIzQzOzIxMzEsMTAgQEAgc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xuJiM0MztcdFx0aWYgKGxpbSlcbiYjNDM7XHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfcmRldl9pbnRvKG1kZGV2LCByZGV2LCBsaW0pO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRlcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0cC1cdTAwM2VoZWFkX3Bvc2l0aW9uID0gMDtcbkBAIC0yMTQ3LDcgJiM0MzsyMTUxLDEwIEBAIHN0YXRpYyBpbnQgcmFpZDEwX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIFx0XHRjbGVhcl9iaXQoSW5fc3luYywgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4gXHRcdHNldF9iaXQoUmVwbGFjZW1lbnQsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuIFx0XHRyZGV2LVx1MDAzZXJhaWRfZGlzayA9IHJlcGxfc2xvdDtcbi1cdFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xuJiM0MztcdFx0aWYgKGxpbSlcbiYjNDM7XHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfcmRldl9pbnRvKG1kZGV2LCByZGV2LCBsaW0pO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRlcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0Y29uZi1cdTAwM2VmdWxsc3luYyA9IDE7XG5AQCAtNDQ4NCw3ICYjNDM7NDQ5MSw3IEBAIHN0YXRpYyBpbnQgcmFpZDEwX3N0YXJ0X3Jlc2hhcGUoc3RydWN0IG1kZGV2ICptZGRldilcbiBcdFx0cmRldl9mb3JfZWFjaChyZGV2LCBtZGRldilcbiBcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2sgXHUwMDNjIDAgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICF0ZXN0X2JpdChGYXVsdHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdFx0XHRpZiAocmFpZDEwX2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7XG4mIzQzO1x0XHRcdFx0aWYgKHJhaWQxMF9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkge1xuIFx0XHRcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2sgXHUwMDNlPVxuIFx0XHRcdFx0XHQgICAgY29uZi1cdTAwM2VwcmV2LnJhaWRfZGlza3MpXG4gXHRcdFx0XHRcdFx0c2V0X2JpdChJbl9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbkBAIC00OTIxLDcgJiM0Mzs0OTI4LDcgQEAgc3RhdGljIHZvaWQgZW5kX3Jlc2hhcGUoc3RydWN0IHIxMGNvbmYgKmNvbmYpXG4gXHRjb25mLVx1MDAzZXJlc2hhcGVfc2FmZSA9IE1heFNlY3RvcjtcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjb25mLVx1MDAzZWRldmljZV9sb2NrKTtcbiBcbi1cdG1kZGV2X3VwZGF0ZV9pb19vcHQoY29uZi1cdTAwM2VtZGRldiwgcmFpZDEwX25yX3N0cmlwZXMoY29uZikpO1xuJiM0MztcdG1kZGV2X3VwZGF0ZV9pb19vcHQoY29uZi1cdTAwM2VtZGRldiwgcmFpZDEwX25yX3N0cmlwZXMoY29uZiksIE5VTEwpO1xuIFx0Y29uZi1cdTAwM2VmdWxsc3luYyA9IDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuY1xuaW5kZXggYjkxNTQ1Y2UwOTBkZS4uMjI3NTljNjMxYzRkOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkNS5jXG5AQCAtNzI4OCw2ICYjNDM7NzI4OCw5IEBAIHN0YXRpYyBzc2l6ZV90XG4gcmFpZDVfc3RvcmVfc2tpcF9jb3B5KHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IHI1Y29uZiAqY29uZjtcbiYjNDM7XHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4mIzQzO1x0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7XG4gXHR1bnNpZ25lZCBsb25nIG5ldztcbiBcdGludCBlcnI7XG4gXG5AQCAtNzI5NywyMyAmIzQzOzczMDAsMzMgQEAgcmFpZDVfc3RvcmVfc2tpcF9jb3B5KHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0bmV3ID0gISFuZXc7XG4gXG4mIzQzO1x0LyogcS1cdTAwM2VsaW1pdHNfbG9jayBuZXN0cyBvdXRzaWRlIGJvdGgsIHNlZSBtZF9zdGFydF9zeW5jKCkgKi9cbiYjNDM7XHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuJiM0MztcdFx0cSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4mIzQzO1x0XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuJiM0MztcdFx0bGltcCA9IFx1MDAyNmxpbTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZXJyID0gbWRkZXZfc3VzcGVuZF9hbmRfbG9jayhtZGRldik7XG4tXHRpZiAoZXJyKVxuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGlmIChsaW1wKVxuJiM0MztcdFx0XHRxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShxKTtcbiBcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4gXHRjb25mID0gbWRkZXYtXHUwMDNlcHJpdmF0ZTtcbiBcdGlmICghY29uZilcbiBcdFx0ZXJyID0gLUVOT0RFVjtcbiBcdGVsc2UgaWYgKG5ldyAhPSBjb25mLVx1MDAzZXNraXBfY29weSkge1xuLVx0XHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4tXHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbi1cbiBcdFx0Y29uZi1cdTAwM2Vza2lwX2NvcHkgPSBuZXc7XG4tXHRcdGlmIChuZXcpXG4tXHRcdFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1NUQUJMRV9XUklURVM7XG4tXHRcdGVsc2Vcbi1cdFx0XHRsaW0uZmVhdHVyZXMgXHUwMDI2PSB+QkxLX0ZFQVRfU1RBQkxFX1dSSVRFUztcbi1cdFx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgXHUwMDI2bGltKTtcbiYjNDM7XHRcdGlmIChsaW1wKSB7XG4mIzQzO1x0XHRcdGlmIChuZXcpXG4mIzQzO1x0XHRcdFx0bGltcC1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9TVEFCTEVfV1JJVEVTO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0bGltcC1cdTAwM2VmZWF0dXJlcyBcdTAwMjY9IH5CTEtfRkVBVF9TVEFCTEVfV1JJVEVTO1xuJiM0MztcdFx0fVxuIFx0fVxuJiM0MztcdGlmIChsaW1wKVxuJiM0MztcdFx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltcCkgPzogZXJyO1xuIFx0bWRkZXZfdW5sb2NrX2FuZF9yZXN1bWUobWRkZXYpO1xuIFx0cmV0dXJuIGVyciA/OiBsZW47XG4gfVxuQEAgLTg0NDEsNyAmIzQzOzg0NTQsOCBAQCBzdGF0aWMgaW50IHJhaWQ1X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCByYWlkNV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbiYjNDM7c3RhdGljIGludCByYWlkNV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0c3RydWN0IHI1Y29uZiAqY29uZiA9IG1kZGV2LVx1MDAzZXByaXZhdGU7XG4gXHRpbnQgcmV0LCBlcnIgPSAtRUVYSVNUO1xuQEAgLTg3MjgsNyAmIzQzOzg3NDIsNyBAQCBzdGF0aWMgaW50IHJhaWQ1X3N0YXJ0X3Jlc2hhcGUoc3RydWN0IG1kZGV2ICptZGRldilcbiBcdFx0cmRldl9mb3JfZWFjaChyZGV2LCBtZGRldilcbiBcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2sgXHUwMDNjIDAgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICF0ZXN0X2JpdChGYXVsdHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdFx0XHRpZiAocmFpZDVfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHtcbiYjNDM7XHRcdFx0XHRpZiAocmFpZDVfYWRkX2Rpc2sobWRkZXYsIHJkZXYsIE5VTEwpID09IDApIHtcbiBcdFx0XHRcdFx0aWYgKHJkZXYtXHUwMDNlcmFpZF9kaXNrXG4gXHRcdFx0XHRcdCAgICBcdTAwM2U9IGNvbmYtXHUwMDNlcHJldmlvdXNfcmFpZF9kaXNrcylcbiBcdFx0XHRcdFx0XHRzZXRfYml0KEluX3N5bmMsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuQEAgLTg3OTksNyAmIzQzOzg4MTMsNyBAQCBzdGF0aWMgdm9pZCBlbmRfcmVzaGFwZShzdHJ1Y3QgcjVjb25mICpjb25mKVxuIFx0XHR3YWtlX3VwKFx1MDAyNmNvbmYtXHUwMDNld2FpdF9mb3JfcmVzaGFwZSk7XG4gXG4gXHRcdG1kZGV2X3VwZGF0ZV9pb19vcHQoY29uZi1cdTAwM2VtZGRldixcbi1cdFx0XHRjb25mLVx1MDAzZXJhaWRfZGlza3MgLSBjb25mLVx1MDAzZW1heF9kZWdyYWRlZCk7XG4mIzQzO1x0XHRcdGNvbmYtXHUwMDNlcmFpZF9kaXNrcyAtIGNvbmYtXHUwMDNlbWF4X2RlZ3JhZGVkLCBOVUxMKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDRmNzkwNWMzNDEyYjguLmI3NWU4NTI5MWUyOTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTEwMSw2ICYjNDM7MTEwMSwzMiBAQCBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKTtcbiBcdHJldHVybiBxLVx1MDAzZWxpbWl0cztcbiB9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZV90cnlsb2NrIC0gdHJ5IHRvIHN0YXJ0IGFuIGF0b21pYyB1cGRhdGUgb2YgcXVldWVcbiYjNDM7ICpcdGxpbWl0c1xuJiM0MzsgKiBAcTpcdFx0cXVldWUgdG8gdXBkYXRlXG4mIzQzOyAqIEBsaW06XHRyZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgbGltaXRzIG9uIHN1Y2Nlc3NcbiYjNDM7ICpcbiYjNDM7ICogTGlrZSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKCksIGJ1dCBmYWlscyBpbnN0ZWFkIG9mIHdhaXRpbmcgd2hlbiBhbm90aGVyXG4mIzQzOyAqIHVwZGF0ZSBpcyBpbiBmbGlnaHQuICBGb3IgY2FsbGVycyB0aGF0IG11c3Qgbm90IGJsb2NrIG9uIHEtXHUwMDNlbGltaXRzX2xvY2tcbiYjNDM7ICogYmVjYXVzZSB0aGV5IGhvbGQgc29tZXRoaW5nIGl0cyBjdXJyZW50IG93bmVyIGlzIHdhaXRpbmcgZm9yLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBwcm9jZXNzIGNvbnRleHQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2xcbiYjNDM7cXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZV90cnlsb2NrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuJiM0MztcdF9fY29uZF9hY3F1aXJlcyh0cnVlLCBcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNnEtXHUwMDNlbGltaXRzX2xvY2spKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQqbGltID0gcS1cdTAwM2VsaW1pdHM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4gXHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkgX19yZWxlYXNlcyhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKTtcbiBpbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9NRCYjMzQ7LAogICAgJiMzNDtNRF9SQUlEMSYjMzQ7LAogICAgJiMzNDtNRF9SQUlEMTAmIzM0OywKICAgICYjMzQ7TURfUkFJRDQ1NiYjMzQ7LAogICAgJiMzNDtNRF9MSU5FQVImIzM0OywKICAgICYjMzQ7RE1fUkFJRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21kZGV2X3N0YWNrX3JkZXZfaW50byYjMzQ7LAogICAgJiMzNDttZGRldl91cGRhdGVfaW9fb3B0JiMzNDssCiAgICAmIzM0O21kX2FkZF9uZXdfZGlzayYjMzQ7LAogICAgJiMzNDtyZW1vdmVfYW5kX2FkZF9zcGFyZXMmIzM0OywKICAgICYjMzQ7cmRldl9hdHRyX3N0b3JlJiMzNDssCiAgICAmIzM0O21kX3N0YXJ0X3N5bmMmIzM0OywKICAgICYjMzQ7cmFpZDFfYWRkX2Rpc2smIzM0OywKICAgICYjMzQ7cmFpZDEwX2FkZF9kaXNrJiMzNDssCiAgICAmIzM0O3JhaWQ1X2FkZF9kaXNrJiMzNDssCiAgICAmIzM0O3JhaWQ1X3N0b3JlX3NraXBfY29weSYjMzQ7LAogICAgJiMzNDtsaW5lYXJfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RydWN0dXJlcyBsb2NrIGFjcXVpc2l0aW9uIGFuZCBxdWV1ZSBsaW1pdHMgcHJvcGFnYXRpb24gaW4gdGhlIE1EIChzb2Z0d2FyZSBSQUlEKSBsYXllciB0byBwcmV2ZW50IGRlYWRsb2NrcyBiZXR3ZWVuIHEtXHUwMDNlbGltaXRzX2xvY2ssIHJlY29uZmlnX211dGV4LCBhbmQgbWRkZXZfc3VzcGVuZC4gSXQgYWx0ZXJzIGRpc2sgYWRkaXRpb24vcmVtb3ZhbCBhbmQgc3lzZnMvaW9jdGwgaGFuZGxpbmcgYWNyb3NzIG11bHRpcGxlIFJBSUQgcGVyc29uYWxpdGllcyAocmFpZDEsIHJhaWQxMCwgcmFpZDUsIGxpbmVhciwgZG0tcmFpZCkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRpc2NvdmVyIHBvdGVudGlhbCBkZWFkbG9ja3MsIGxvY2tpbmcgb3JkZXIgdmlvbGF0aW9ucywgcmFjZSBjb25kaXRpb25zLCBvciBzdGF0ZSBjb3JydXB0aW9ucyBkdXJpbmcgY29uY3VycmVudCBSQUlEIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYzYzZiZjI2NmEyNGNmNTc1NGI3YmMwNDUwMTFlNzQzZDJlM2Q3N2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE4OjEzOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkLmMgYi9kcml2ZXJzL21kL2RtLXJhaWQuYwppbmRleCA4ZjVhNWUxMzQyYTk1Li4yMWExOTIyYmVlNGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXJhaWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL2RtLXJhaWQuYwpAQCAtMzkyMyw3ICYjNDM7MzkyMyw3IEBAIHN0YXRpYyB2b2lkIGF0dGVtcHRfcmVzdG9yZV9vZl9mYXVsdHlfZGV2aWNlcyhzdHJ1Y3QgcmFpZF9zZXQgKnJzKQogCQkJY2xlYXJfYml0KEZhdWx0eSwgJmFtcDtyLSZndDtmbGFncyk7CiAJCQljbGVhcl9iaXQoV3JpdGVFcnJvclNlZW4sICZhbXA7ci0mZ3Q7ZmxhZ3MpOwogCi0JCQlpZiAobWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhtZGRldiwgcikpIHsKJiM0MzsJCQlpZiAobWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhtZGRldiwgciwgTlVMTCkpIHsKIAkJCQkvKiBGYWlsZWQgdG8gcmV2aXZlIHRoaXMgZGV2aWNlLCB0cnkgbmV4dCAqLwogCQkJCXItJmd0O3JhaWRfZGlzayA9IHItJmd0O3NhdmVkX3JhaWRfZGlzayA9IC0xOwogCQkJCXItJmd0O2ZsYWdzID0gZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLWF1dG9kZXRlY3QuYyBiL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jCmluZGV4IDRiODAxNjVhZmQyMzMuLjkyOTUxMzEwOTY1N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jCkBAIC0yMTMsNyAmIzQzOzIxMyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtZF9zZXR1cF9kcml2ZShzdHJ1Y3QgbWRfc2V0dXBfYXJncyAqYXJncykKIAkJCQkoMSAmbHQ7Jmx0OyBNRF9ESVNLX0FDVElWRSkgfCAoMSAmbHQ7Jmx0OyBNRF9ESVNLX1NZTkMpOwogCQl9CiAKLQkJbWRfYWRkX25ld19kaXNrKG1kZGV2LCAmYW1wO2RpbmZvKTsKJiM0MzsJCW1kX2FkZF9uZXdfZGlzayhtZGRldiwgJmFtcDtkaW5mbywgTlVMTCk7CiAJfQogCiAJaWYgKCFlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLWxpbmVhci5jIGIvZHJpdmVycy9tZC9tZC1saW5lYXIuYwppbmRleCA3M2IzNjdiNjFiODczLi4xZjQ0YzJkN2RiOTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLWxpbmVhci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvbWQtbGluZWFyLmMKQEAgLTE4Niw3ICYjNDM7MTg2LDggQEAgc3RhdGljIGludCBsaW5lYXJfcnVuKHN0cnVjdCBtZGRldiAqbWRkZXYpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBsaW5lYXJfYWRkKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KQomIzQzO3N0YXRpYyBpbnQgbGluZWFyX2FkZChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldiwKJiM0MzsJCSAgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAkvKiBBZGRpbmcgYSBkcml2ZSB0byBhIGxpbmVhciBhcnJheSBhbGxvd3MgdGhlIGFycmF5IHRvIGdyb3cuCiAJICogSXQgaXMgcGVybWl0dGVkIGlmIHRoZSBuZXcgZHJpdmUgaGFzIGEgbWF0Y2hpbmcgc3VwZXJibG9jawpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDY4MGIzNGE2M2NiM2QuLmM0MDU0ZDA2ZDEwNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmMKQEAgLTk0LDggJiM0Mzs5NCw4IEBAIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZXN5bmNfd2FpdCk7CiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWRfbWlzY193cTsKIAotc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwKLQkJCQkgc3RydWN0IG1kX3JkZXYgKnRoaXMpOwomIzQzO3N0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICp0aGlzLAomIzQzOwkJCQkgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTsKIHN0YXRpYyB2b2lkIG1kZGV2X2RldGFjaChzdHJ1Y3QgbWRkZXYgKm1kZGV2KTsKIHN0YXRpYyB2b2lkIGV4cG9ydF9yZGV2KHN0cnVjdCBtZF9yZGV2ICpyZGV2KTsKIHN0YXRpYyB2b2lkIG1kX3dha2V1cF90aHJlYWRfZGlyZWN0bHkoc3RydWN0IG1kX3RocmVhZCBfX3JjdSAqKnRocmVhZCk7CkBAIC0yOTgxLDcgJiM0MzsyOTgxLDcgQEAgdm9pZCBtZF91cGRhdGVfc2Ioc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZvcmNlX2NoYW5nZSkKIH0KIEVYUE9SVF9TWU1CT0wobWRfdXBkYXRlX3NiKTsKIAotc3RhdGljIGludCBhZGRfYm91bmRfcmRldihzdHJ1Y3QgbWRfcmRldiAqcmRldikKJiM0MztzdGF0aWMgaW50IGFkZF9ib3VuZF9yZGV2KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJc3RydWN0IG1kZGV2ICptZGRldiA9IHJkZXYtJmd0O21kZGV2OwogCWludCBlcnIgPSAwOwpAQCAtMjk5NCw3ICYjNDM7Mjk5NCw3IEBAIHN0YXRpYyBpbnQgYWRkX2JvdW5kX3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJCSAqLwogCQlzdXBlcl90eXBlc1ttZGRldi0mZ3Q7bWFqb3JfdmVyc2lvbl0uCiAJCQl2YWxpZGF0ZV9zdXBlcihtZGRldiwgTlVMTC8qZnJlc2hlc3QqLywgcmRldik7Ci0JCWVyciA9IG1kZGV2LSZndDtwZXJzLSZndDtob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYpOwomIzQzOwkJZXJyID0gbWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhtZGRldiwgcmRldiwgbGltKTsKIAkJaWYgKGVycikgewogCQkJbWRfa2lja19yZGV2X2Zyb21fYXJyYXkocmRldik7CiAJCQlyZXR1cm4gZXJyOwpAQCAtMzAzMyw3ICYjNDM7MzAzMywxMyBAQCBzdGF0aWMgaW50IGNtZF9tYXRjaChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnN0cikKIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5IHsKIAlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CiAJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBtZF9yZGV2ICosIGNoYXIgKik7Ci0Jc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiYjNDM7CS8qCiYjNDM7CSAqIEBsaW06IGEgcXVldWUgbGltaXRzIHVwZGF0ZSB0aGUgY2FsbGVyIG93bnMsIG9yIE5VTEwuICBTdG9yZXMgdGhhdAomIzQzOwkgKiBjYW4gYWRkIGEgbGVnIHRvIHRoZSBhcnJheSBtdXN0IHN0YWNrIGludG8gaXQgcmF0aGVyIHRoYW4gdGFrZQomIzQzOwkgKiBxLSZndDtsaW1pdHNfbG9jayB0aGVtc2VsdmVzLCBzZWUgbWRfc3RhcnRfc3luYygpLgomIzQzOwkgKi8KJiM0MzsJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbiwKJiM0MzsJCQkgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTsKIH07CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0zMDc5LDcgJiM0MzszMDg1LDggQEAgc3RhdGVfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIH0KIAogc3RhdGljIHNzaXplX3QKLXN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7c3RhdGVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKJiM0MzsJICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAkvKiBjYW4gd3JpdGUKIAkgKiAgZmF1bHR5ICAtIHNpbXVsYXRlcyBhbiBlcnJvcgpAQCAtMzExMCw3ICYjNDM7MzExNyw3IEBAIHN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiAJfSBlbHNlIGlmIChjbWRfbWF0Y2goYnVmLCAmIzM0O3JlbW92ZSYjMzQ7KSkgewogCQlpZiAocmRldi0mZ3Q7bWRkZXYtJmd0O3BlcnMpIHsKIAkJCWNsZWFyX2JpdChCbG9ja2VkLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKLQkJCXJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LSZndDttZGRldiwgcmRldik7CiYjNDM7CQkJcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtJmd0O21kZGV2LCByZGV2LCBsaW0pOwogCQl9CiAJCWlmIChyZGV2LSZndDtyYWlkX2Rpc2sgJmd0Oz0gMCkKIAkJCWVyciA9IC1FQlVTWTsKQEAgLTMyMjksNyAmIzQzOzMyMzYsNyBAQCBzdGF0ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogCQkJaWYgKCFtZGRldl9pc19jbHVzdGVyZWQocmRldi0mZ3Q7bWRkZXYpIHx8CiAJCQkgICAgKGVyciA9IG1kZGV2LSZndDtjbHVzdGVyX29wcy0mZ3Q7Z2F0aGVyX2JpdG1hcHMocmRldikpID09IDApIHsKIAkJCQljbGVhcl9iaXQoRmF1bHR5LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKLQkJCQllcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTsKJiM0MzsJCQkJZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTsKIAkJCX0KIAkJfSBlbHNlCiAJCQllcnIgPSAtRUJVU1k7CkBAIC0zMjU3LDcgJiM0MzszMjY0LDggQEAgZXJyb3JzX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpCiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1lcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0MztlcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKJiM0MzsJICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJdW5zaWduZWQgaW50IG47CiAJaW50IHJ2OwpAQCAtMzI4Myw3ICYjNDM7MzI5MSw4IEBAIHNsb3Rfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIH0KIAogc3RhdGljIHNzaXplX3QKLXNsb3Rfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0MztzbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCiYjNDM7CSAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAlpbnQgc2xvdDsKIAlpbnQgZXJyOwpAQCAtMzMxNCw3ICYjNDM7MzMyMyw3IEBAIHNsb3Rfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIAkJaWYgKHJkZXYtJmd0O21kZGV2LSZndDtwZXJzLSZndDtob3RfcmVtb3ZlX2Rpc2sgPT0gTlVMTCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQljbGVhcl9iaXQoQmxvY2tlZCwgJmFtcDtyZGV2LSZndDtmbGFncyk7Ci0JCXJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LSZndDttZGRldiwgcmRldik7CiYjNDM7CQlyZW1vdmVfYW5kX2FkZF9zcGFyZXMocmRldi0mZ3Q7bWRkZXYsIHJkZXYsIGxpbSk7CiAJCWlmIChyZGV2LSZndDtyYWlkX2Rpc2sgJmd0Oz0gMCkKIAkJCXJldHVybiAtRUJVU1k7CiAJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmYW1wO3JkZXYtJmd0O21kZGV2LSZndDtyZWNvdmVyeSk7CkBAIC0zMzQ0LDcgJiM0MzszMzUzLDggQEAgc2xvdF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogCQkJcmRldi0mZ3Q7c2F2ZWRfcmFpZF9kaXNrID0gLTE7CiAJCWNsZWFyX2JpdChJbl9zeW5jLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKIAkJY2xlYXJfYml0KEJpdG1hcF9zeW5jLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKLQkJZXJyID0gcmRldi0mZ3Q7bWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhyZGV2LSZndDttZGRldiwgcmRldik7CiYjNDM7CQllcnIgPSByZGV2LSZndDttZGRldi0mZ3Q7cGVycy0mZ3Q7aG90X2FkZF9kaXNrKHJkZXYtJmd0O21kZGV2LCByZGV2LAomIzQzOwkJCQkJCSAgICAgbGltKTsKIAkJaWYgKGVycikgewogCQkJcmRldi0mZ3Q7cmFpZF9kaXNrID0gLTE7CiAJCQlyZXR1cm4gZXJyOwpAQCAtMzM3Nyw3ICYjNDM7MzM4Nyw4IEBAIG9mZnNldF9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKQogfQogCiBzdGF0aWMgc3NpemVfdAotb2Zmc2V0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7b2Zmc2V0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCiYjNDM7CSAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQ7CiAJaWYgKGtzdHJ0b3VsbChidWYsIDEwLCAmYW1wO29mZnNldCkgJmx0OyAwKQpAQCAtMzQwMyw3ICYjNDM7MzQxNCw4IEBAIHN0YXRpYyBzc2l6ZV90IG5ld19vZmZzZXRfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIH0KIAogc3RhdGljIHNzaXplX3QgbmV3X29mZnNldF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwKLQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7CQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKJiM0MzsJCQkJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBuZXdfb2Zmc2V0OwogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSByZGV2LSZndDttZGRldjsKQEAgLTM1MTAsNyAmIzQzOzM1MjIsOCBAQCBzdGF0aWMgaW50IHN0cmljdF9ibG9ja3NfdG9fc2VjdG9ycyhjb25zdCBjaGFyICpidWYsIHNlY3Rvcl90ICpzZWN0b3JzKQogfQogCiBzdGF0aWMgc3NpemVfdAotcmRldl9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7cmRldl9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCiYjNDM7CQlzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJc3RydWN0IG1kZGV2ICpteV9tZGRldiA9IHJkZXYtJmd0O21kZGV2OwogCXNlY3Rvcl90IG9sZHNlY3RvcnMgPSByZGV2LSZndDtzZWN0b3JzOwpAQCAtMzU3Miw3ICYjNDM7MzU4NSw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpCiAJcmV0dXJuIHNwcmludGYocGFnZSwgJiMzNDslbGx1XG4mIzM0OywgcmVjb3Zlcnlfc3RhcnQpOwogfQogCi1zdGF0aWMgc3NpemVfdCByZWNvdmVyeV9zdGFydF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQomIzQzO3N0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCiYjNDM7CQkJCSAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHJlY292ZXJ5X3N0YXJ0OwogCkBAIC0zNjExLDcgJiM0MzszNjI1LDkgQEAgc3RhdGljIHNzaXplX3QgYmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIHsKIAlyZXR1cm4gYmFkYmxvY2tzX3Nob3coJmFtcDtyZGV2LSZndDtiYWRibG9ja3MsIHBhZ2UsIDApOwogfQotc3RhdGljIHNzaXplX3QgYmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pCiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgYmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4sCiYjNDM7CQkJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCWludCBydiA9IGJhZGJsb2Nrc19zdG9yZSgmYW1wO3JkZXYtJmd0O2JhZGJsb2NrcywgcGFnZSwgbGVuLCAwKTsKIAkvKiBNYXliZSB0aGF0IGFjayB3YXMgYWxsIHdlIG5lZWRlZCAqLwpAQCAtMzYyNiw3ICYjNDM7MzY0Miw5IEBAIHN0YXRpYyBzc2l6ZV90IHViYl9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKQogewogCXJldHVybiBiYWRibG9ja3Nfc2hvdygmYW1wO3JkZXYtJmd0O2JhZGJsb2NrcywgcGFnZSwgMSk7CiB9Ci1zdGF0aWMgc3NpemVfdCB1YmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pCiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgdWJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLAomIzQzOwkJCSBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJcmV0dXJuIGJhZGJsb2Nrc19zdG9yZSgmYW1wO3JkZXYtJmd0O2JhZGJsb2NrcywgcGFnZSwgbGVuLCAxKTsKIH0KQEAgLTM2NDAsNyAmIzQzOzM2NTgsOCBAQCBwcGxfc2VjdG9yX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpCiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1wcGxfc2VjdG9yX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7cHBsX3NlY3Rvcl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLAomIzQzOwkJIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgc2VjdG9yOwogCkBAIC0zNjc5LDcgJiM0MzszNjk4LDggQEAgcHBsX3NpemVfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIH0KIAogc3RhdGljIHNzaXplX3QKLXBwbF9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7cHBsX3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKJiM0MzsJICAgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIApAQCAtMzc0MCw2ICYjNDM7Mzc2MCw5IEBAIHJkZXZfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAlzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHJkZXZfc3lzZnNfZW50cnksIGF0dHIpOwogCXN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBtZF9yZGV2LCBrb2JqKTsKIAlzdHJ1Y3Qga2VybmZzX25vZGUgKmtuID0gTlVMTDsKJiM0MzsJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7CiAJYm9vbCBzdXNwZW5kID0gZmFsc2U7CiAJc3NpemVfdCBydjsKIAlzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gUkVBRF9PTkNFKHJkZXYtJmd0O21kZGV2KTsKQEAgLTM3NjAsMTUgJiM0MzszNzgzLDM3IEBAIHJkZXZfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAkJCXN1c3BlbmQgPSB0cnVlOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBUaGVzZSBjYW4gYWRkIGEgbGVnIGJhY2ssIHdoaWNoIHN0YWNrcyBpdHMgbGltaXRzOyB0aGUgb3RoZXIKJiM0MzsJICogc3RhdGVfc3RvcmUoKSB2YWx1ZXMgbmV2ZXIgcmVhY2ggLSZndDtob3RfYWRkX2Rpc2soKS4gIHEtJmd0O2xpbWl0c19sb2NrCiYjNDM7CSAqIG5lc3RzIG91dHNpZGUgdGhlIGxvY2sgYW5kIHRoZSBzdXNwZW5kLCBzZWUgbWRfc3RhcnRfc3luYygpLgomIzQzOwkgKi8KJiM0MzsJaWYgKChlbnRyeS0mZ3Q7c3RvcmUgPT0gc2xvdF9zdG9yZSB8fAomIzQzOwkgICAgIChlbnRyeS0mZ3Q7c3RvcmUgPT0gc3RhdGVfc3RvcmUgJmFtcDsmYW1wOwomIzQzOwkgICAgICAoY21kX21hdGNoKHBhZ2UsICYjMzQ7cmVtb3ZlJiMzNDspIHx8IGNtZF9tYXRjaChwYWdlLCAmIzM0O3JlLWFkZCYjMzQ7KSkpKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhbWRkZXZfaXNfZG0obWRkZXYpKSB7CiYjNDM7CQlxID0gbWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlOwomIzQzOwkJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTsKJiM0MzsJCWxpbXAgPSAmYW1wO2xpbTsKJiM0MzsJfQomIzQzOwogCXJ2ID0gc3VzcGVuZCA/IG1kZGV2X3N1c3BlbmRfYW5kX2xvY2sobWRkZXYpIDogbWRkZXZfbG9jayhtZGRldik7CiAJaWYgKCFydikgewogCQlpZiAocmRldi0mZ3Q7bWRkZXYgPT0gTlVMTCkKIAkJCXJ2ID0gLUVOT0RFVjsKIAkJZWxzZQotCQkJcnYgPSBlbnRyeS0mZ3Q7c3RvcmUocmRldiwgcGFnZSwgbGVuZ3RoKTsKJiM0MzsJCQlydiA9IGVudHJ5LSZndDtzdG9yZShyZGV2LCBwYWdlLCBsZW5ndGgsIGxpbXApOwomIzQzOwkJLyogYXBwbHkgdGhlIGxpbWl0cyBiZWZvcmUgdGhlIGFycmF5IHRha2VzIEkvTyBhZ2FpbiAqLwomIzQzOwkJaWYgKGxpbXApIHsKJiM0MzsJCQlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTsKJiM0MzsJCQlsaW1wID0gTlVMTDsKJiM0MzsJCX0KIAkJc3VzcGVuZCA/IG1kZGV2X3VubG9ja19hbmRfcmVzdW1lKG1kZGV2KSA6IG1kZGV2X3VubG9jayhtZGRldik7CiAJfQogCiYjNDM7CWlmIChsaW1wKQomIzQzOwkJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltcCk7CiYjNDM7CiAJaWYgKGtuKQogCQlzeXNmc191bmJyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtuKTsKIApAQCAtNjI3NSwyMCAmIzQzOzYzMjAsODkgQEAgaW50IG1kZGV2X3N0YWNrX25ld19yZGV2KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwobWRkZXZfc3RhY2tfbmV3X3JkZXYpOwogCiYjNDM7LyoKJiM0MzsgKiBTdGFjayBhIG5ldyByZGV2IGludG8gbGltaXRzIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyBsaW1pdHNfbG9jayBmb3IgYW5kCiYjNDM7ICogd2lsbCBjb21taXQgaXRzZWxmLiAgVXNlZCBmcm9tIHBhdGhzIHRoYXQgbXVzdCB0YWtlIGxpbWl0c19sb2NrIGJlZm9yZQomIzQzOyAqIHF1aWVzY2luZyB0aGUgYXJyYXksIHNlZSBtZF9zdGFydF9zeW5jKCkuCiYjNDM7ICovCiYjNDM7aW50IG1kZGV2X3N0YWNrX3JkZXZfaW50byhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldiwKJiM0MzsJCQkgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgdG1wID0gKmxpbTsKJiM0MzsKJiM0MzsJaWYgKG1kZGV2X2lzX2RtKG1kZGV2KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocXVldWVfbG9naWNhbF9ibG9ja19zaXplKHJkZXYtJmd0O2JkZXYtJmd0O2JkX2Rpc2stJmd0O3F1ZXVlKSAmZ3Q7CiYjNDM7CSAgICBxdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUobWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlKSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IGluY29tcGF0aWJsZSBsb2dpY2FsX2Jsb2NrX3NpemUsIGNhbiBub3QgYWRkXG4mIzM0OywKJiM0MzsJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXF1ZXVlX2xpbWl0c19zdGFja19iZGV2KCZhbXA7dG1wLCByZGV2LSZndDtiZGV2LCByZGV2LSZndDtkYXRhX29mZnNldCwKJiM0MzsJCQkJbWRkZXYtJmd0O2dlbmRpc2stJmd0O2Rpc2tfbmFtZSk7CiYjNDM7CiYjNDM7CWlmICghcXVldWVfbGltaXRzX3N0YWNrX2ludGVncml0eV9iZGV2KCZhbXA7dG1wLCByZGV2LSZndDtiZGV2KSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IGluY29tcGF0aWJsZSBpbnRlZ3JpdHkgcHJvZmlsZSBmb3IgJXBnXG4mIzM0OywKJiM0MzsJCSAgICAgICBtZG5hbWUobWRkZXYpLCByZGV2LSZndDtiZGV2KTsKJiM0MzsJCXJldHVybiAtRU5YSU87CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmxpbSA9IHRtcDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3N0YWNrX3JkZXZfaW50byk7CiYjNDM7CiYjNDM7LyogZm9yIGNhbGxlcnMgdGhhdCBtdXN0IG5vdCB3YWl0IGZvciBxLSZndDtsaW1pdHNfbG9jaywgc2VlIG1kX3N0YXJ0X3N5bmMoKSAqLwomIzQzO3N0YXRpYyBib29sIG1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKHN0cnVjdCBtZGRldiAqbWRkZXYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKJiM0MzsKJiM0MzsJaWYgKG1kZGV2X2lzX2RtKG1kZGV2KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcSA9IG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayhxLCBsaW0pOwomIzQzO30KJiM0MzsKIC8qIHVwZGF0ZSB0aGUgb3B0aW1hbCBJL08gc2l6ZSBhZnRlciBhIHJlc2hhcGUgKi8KLXZvaWQgbWRkZXZfdXBkYXRlX2lvX29wdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB1bnNpZ25lZCBpbnQgbnJfc3RyaXBlcykKJiM0Mzt2b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMsCiYjNDM7CQkJIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKLQlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyBvd247CiAKIAlpZiAobWRkZXZfaXNfZG0obWRkZXYpKQogCQlyZXR1cm47CiAKJiM0MzsJLyoKJiM0MzsJICogV2l0aCBhbiB1cGRhdGUgb3duZWQgYnkgdGhlIGNhbGxlciBqdXN0IGNoYW5nZSBpdCBpbiBwbGFjZTsgaXQgaXMKJiM0MzsJICogY29tbWl0dGVkLCBhbmQgdGhlIGFycmF5IHJlc3VtZWQsIGJ5IHdob2V2ZXIgc3RhcnRlZCBpdC4gIFRha2luZwomIzQzOwkgKiBxLSZndDtsaW1pdHNfbG9jayBoZXJlIHdvdWxkIG5lc3QgaXQgaW5zaWRlIHJlY29uZmlnX211dGV4IGFuZCB0aGUKJiM0MzsJICogc3VzcGVuZCwgd2hpY2ggZGVhZGxvY2tzLCBzZWUgbWRfc3RhcnRfc3luYygpLgomIzQzOwkgKi8KJiM0MzsJaWYgKGxpbSkgewomIzQzOwkJbGltLSZndDtpb19vcHQgPSBsaW0tJmd0O2lvX21pbiAqIG5yX3N0cmlwZXM7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ2FsbGVkIGZyb20gdGhlIHN5bmMgdGhyZWFkLCB3aGljaCBtZF9yZWFwX3N5bmNfdGhyZWFkKCkgd2FpdHMgZm9yCiYjNDM7CSAqIHdpdGggcmVjb25maWdfbXV0ZXggaGVsZCwgc28gZG9uJiMzOTt0IHdhaXQgZm9yIHEtJmd0O2xpbWl0c19sb2NrIGhlcmUuCiYjNDM7CSAqIGlvX29wdCBpcyBhIGhpbnQsIHNraXBwaW5nIGl0IG9uIGEgY29udGVuZGVkIHBhc3MgaXMgZmluZS4KJiM0MzsJICovCiYjNDM7CWlmICghbWRkZXZfc3RhY2tfbGltaXRzX3RyeWxvY2sobWRkZXYsICZhbXA7b3duKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKiBkb24mIzM5O3QgYm90aGVyIHVwZGF0aW5nIGlvX29wdCBpZiB3ZSBjYW4mIzM5O3Qgc3VzcGVuZCB0aGUgYXJyYXkgKi8KLQlpZiAobWRkZXZfc3VzcGVuZChtZGRldiwgZmFsc2UpICZsdDsgMCkKJiM0MzsJaWYgKG1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKSAmbHQ7IDApIHsKJiM0MzsJCXF1ZXVlX2xpbWl0c19jYW5jZWxfdXBkYXRlKG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZSk7CiAJCXJldHVybjsKLQlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZSk7Ci0JbGltLmlvX29wdCA9IGxpbS5pb19taW4gKiBucl9zdHJpcGVzOwotCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZSwgJmFtcDtsaW0pOwomIzQzOwl9CiYjNDM7CW93bi5pb19vcHQgPSBvd24uaW9fbWluICogbnJfc3RyaXBlczsKJiM0MzsJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlLCAmYW1wO293bik7CiAJbWRkZXZfcmVzdW1lKG1kZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3VwZGF0ZV9pb19vcHQpOwpAQCAtNzQ4Niw3ICYjNDM7NzYwMCw4IEBAIHN0YXRpYyBpbnQgZ2V0X2Rpc2tfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB2b2lkIF9fdXNlciAqIGFyZykKIAlyZXR1cm4gMDsKIH0KIAotaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKQomIzQzO2ludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbywKJiM0MzsJCSAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJc3RydWN0IG1kX3JkZXYgKnJkZXY7CiAJZGV2X3QgZGV2ID0gTUtERVYoaW5mby0mZ3Q7bWFqb3IsaW5mby0mZ3Q7bWlub3IpOwpAQCAtNzYzNCwxMSAmIzQzOzc3NDksMTEgQEAgaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKQogCQkJCWlmIChlcnIpCiAJCQkJCW1kZGV2LSZndDtjbHVzdGVyX29wcy0mZ3Q7YWRkX25ld19kaXNrX2NhbmNlbChtZGRldik7CiAJCQkJZWxzZQotCQkJCQllcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTsKJiM0MzsJCQkJCWVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYsIGxpbSk7CiAJCQl9CiAKIAkJfSBlbHNlIGlmICghZXJyKQotCQkJZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldik7CiYjNDM7CQkJZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTsKIAogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTc2OTEsNyAmIzQzOzc4MDYsOCBAQCBpbnQgbWRfYWRkX25ld19kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgKmluZm8pCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIGRldl90IGRldikKJiM0MztzdGF0aWMgaW50IGhvdF9yZW1vdmVfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBkZXZfdCBkZXYsCiYjNDM7CQkJICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXN0cnVjdCBtZF9yZGV2ICpyZGV2OwogCkBAIC03NzA2LDcgJiM0Mzs3ODIyLDcgQEAgc3RhdGljIGludCBob3RfcmVtb3ZlX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgZGV2X3QgZGV2KQogCQlnb3RvIGtpY2tfcmRldjsKIAogCWNsZWFyX2JpdChCbG9ja2VkLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKLQlyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIHJkZXYpOwomIzQzOwlyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIHJkZXYsIGxpbSk7CiAKIAlpZiAocmRldi0mZ3Q7cmFpZF9kaXNrICZndDs9IDApCiAJCWdvdG8gYnVzeTsKQEAgLTgyOTEsNiAmIzQzOzg0MDcsMjIgQEAgc3RhdGljIGlubGluZSBpbnQgbWRfaW9jdGxfdmFsaWQodW5zaWduZWQgaW50IGNtZCkKIAl9CiB9CiAKJiM0MzsvKgomIzQzOyAqIENvbW1hbmRzIHRoYXQgY2FuIHJlYWNoIC0mZ3Q7aG90X2FkZF9kaXNrKCkuICBBRERfTkVXX0RJU0sgb25seSBkb2VzIHNvIGZvciBhCiYjNDM7ICogam91cm5hbCBkZXZpY2Ugb3IgYSBwZXJzb25hbGl0eSB3aXRob3V0IC0mZ3Q7aG90X3JlbW92ZV9kaXNrLCBidXQgdGhhdCBkZXBlbmRzCiYjNDM7ICogb24gZGlzayBpbmZvIHN0aWxsIGluIHVzZXIgbWVtb3J5IGhlcmUsIHNvIGl0IGlzIGluY2x1ZGVkIGFzIGEgd2hvbGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgbWRfaW9jdGxfbWF5X2FkZF9kaXNrKHVuc2lnbmVkIGludCBjbWQpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGNtZCkgewomIzQzOwljYXNlIEFERF9ORVdfRElTSzoKJiM0MzsJY2FzZSBIT1RfUkVNT1ZFX0RJU0s6CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIG1kX2lvY3RsX25lZWRfc3VzcGVuZCh1bnNpZ25lZCBpbnQgY21kKQogewogCXN3aXRjaCAoY21kKSB7CkBAIC04MzQ2LDYgJiM0Mzs4NDc4LDkgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsCiAJdW5zaWduZWQgaW50IG5vaW9fZmxhZ3MgPSAwOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltOwomIzQzOwlzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDsKIAlib29sIHN1c3BlbmQ7CiAKIAllcnIgPSBtZF9pb2N0bF92YWxpZChjbWQpOwpAQCAtODM5NiwxMSAmIzQzOzg1MzEsMjAgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsCiAJaWYgKCFtZF9pc19yZHdyKG1kZGV2KSkKIAkJZmx1c2hfd29yaygmYW1wO21kZGV2LSZndDtzeW5jX3dvcmspOwogCiYjNDM7CS8qIHEtJmd0O2xpbWl0c19sb2NrIG5lc3RzIG91dHNpZGUgYm90aCwgc2VlIG1kX3N0YXJ0X3N5bmMoKSAqLwomIzQzOwlpZiAobWRfaW9jdGxfbWF5X2FkZF9kaXNrKGNtZCkgJmFtcDsmYW1wOyAhbWRkZXZfaXNfZG0obWRkZXYpKSB7CiYjNDM7CQlxID0gbWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlOwomIzQzOwkJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTsKJiM0MzsJCWxpbXAgPSAmYW1wO2xpbTsKJiM0MzsJfQomIzQzOwogCXN1c3BlbmQgPSBtZF9pb2N0bF9uZWVkX3N1c3BlbmQoY21kKTsKIAllcnIgPSBzdXNwZW5kID8gbWRkZXZfc3VzcGVuZF9hbmRfbG9jayhtZGRldikgOiBtZGRldl9sb2NrKG1kZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByX2RlYnVnKCYjMzQ7bWQ6IGlvY3RsIGxvY2sgaW50ZXJydXB0ZWQsIHJlYXNvbiAlZCwgY21kICVkXG4mIzM0OywKIAkJCSBlcnIsIGNtZCk7CiYjNDM7CQlpZiAobGltcCkKJiM0MzsJCQlxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShxKTsKIAkJZ290byBvdXQ7CiAJfQogCWlmIChzdXNwZW5kKQpAQCAtODQ0Miw3ICYjNDM7ODU4Niw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLAogCQlnb3RvIHVubG9jazsKIAogCWNhc2UgSE9UX1JFTU9WRV9ESVNLOgotCQllcnIgPSBob3RfcmVtb3ZlX2Rpc2sobWRkZXYsIG5ld19kZWNvZGVfZGV2KGFyZykpOwomIzQzOwkJZXJyID0gaG90X3JlbW92ZV9kaXNrKG1kZGV2LCBuZXdfZGVjb2RlX2RldihhcmcpLCBsaW1wKTsKIAkJZ290byB1bmxvY2s7CiAKIAljYXNlIEFERF9ORVdfRElTSzoKQEAgLTg0NTgsNyAmIzQzOzg2MDIsNyBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSwKIAkJCQkvKiBOZWVkIHRvIGNsZWFyIHJlYWQtb25seSBmb3IgdGhpcyAqLwogCQkJCWJyZWFrOwogCQkJZWxzZQotCQkJCWVyciA9IG1kX2FkZF9uZXdfZGlzayhtZGRldiwgJmFtcDtpbmZvKTsKJiM0MzsJCQkJZXJyID0gbWRfYWRkX25ld19kaXNrKG1kZGV2LCAmYW1wO2luZm8sIGxpbXApOwogCQkJZ290byB1bmxvY2s7CiAJCX0KIAkJYnJlYWs7CkBAIC04NDk2LDcgJiM0Mzs4NjQwLDcgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2luZm8sIGFyZ3AsIHNpemVvZihpbmZvKSkpCiAJCQllcnIgPSAtRUZBVUxUOwogCQllbHNlCi0JCQllcnIgPSBtZF9hZGRfbmV3X2Rpc2sobWRkZXYsICZhbXA7aW5mbyk7CiYjNDM7CQkJZXJyID0gbWRfYWRkX25ld19kaXNrKG1kZGV2LCAmYW1wO2luZm8sIGxpbXApOwogCQlnb3RvIHVubG9jazsKIAl9CiAKQEAgLTg1MjksNiAmIzQzOzg2NzMsOSBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSwKIAkgICAgZXJyICE9IC1FSU5WQUwpCiAJCW1kZGV2LSZndDtob2xkX2FjdGl2ZSA9IDA7CiAKJiM0MzsJaWYgKGxpbXApCiYjNDM7CQlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTsKJiM0MzsKIAlpZiAoc3VzcGVuZCkgewogCQltZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFncyk7CiAJCW1kZGV2X3VubG9ja19hbmRfcmVzdW1lKG1kZGV2KTsKQEAgLTEwMTY3LDggJiM0MzsxMDMxNCw4IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqdGhpcykKIAlyZXR1cm4gcmVtb3ZlZDsKIH0KIAotc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwKLQkJCQkgc3RydWN0IG1kX3JkZXYgKnRoaXMpCiYjNDM7c3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnRoaXMsCiYjNDM7CQkJCSBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJc3RydWN0IG1kX3JkZXYgKnJkZXY7CiAJaW50IHNwYXJlcyA9IDA7CkBAIC0xMDE5MSw3ICYjNDM7MTAzMzgsNyBAQCBzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LAogCQkJY29udGludWU7CiAJCWlmICghdGVzdF9iaXQoSm91cm5hbCwgJmFtcDtyZGV2LSZndDtmbGFncykpCiAJCQlyZGV2LSZndDtyZWNvdmVyeV9vZmZzZXQgPSAwOwotCQlpZiAobWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhtZGRldiwgcmRldikgPT0gMCkgewomIzQzOwkJaWYgKG1kZGV2LSZndDtwZXJzLSZndDtob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYsIGxpbSkgPT0gMCkgewogCQkJLyogZmFpbHVyZSBoZXJlIGlzIE9LICovCiAJCQlzeXNmc19saW5rX3JkZXYobWRkZXYsIHJkZXYpOwogCQkJaWYgKCF0ZXN0X2JpdChKb3VybmFsLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkKQEAgLTEwMjA2LDcgJiM0MzsxMDM1Myw4IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsCiAJcmV0dXJuIHNwYXJlczsKIH0KIAotc3RhdGljIGJvb2wgbWRfY2hvb3NlX3N5bmNfYWN0aW9uKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCAqc3BhcmVzKQomIzQzO3N0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcywKJiM0MzsJCQkJICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJLyogQ2hlY2sgaWYgcmVzaGFwZSBpcyBpbiBwcm9ncmVzcyBmaXJzdC4gKi8KIAlpZiAobWRkZXYtJmd0O3Jlc2hhcGVfcG9zaXRpb24gIT0gTWF4U2VjdG9yKSB7CkBAIC0xMDIzNCw3ICYjNDM7MTAzODIsNyBAQCBzdGF0aWMgYm9vbCBtZF9jaG9vc2Vfc3luY19hY3Rpb24oc3RydWN0IG1kZGV2ICptZGRldiwgaW50ICpzcGFyZXMpCiAJICogYWxzbyByZW1vdmVkIGFuZCByZS1hZGRlZCwgdG8gYWxsb3cgdGhlIHBlcnNvbmFsaXR5IHRvIGZhaWwgdGhlCiAJICogcmUtYWRkLgogCSAqLwotCSpzcGFyZXMgPSByZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIE5VTEwpOwomIzQzOwkqc3BhcmVzID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMLCBsaW0pOwogCWlmICgqc3BhcmVzIHx8IHRlc3RfYml0KE1EX1JFQ09WRVJZX0xBWllfUkVDT1ZFUiwgJmFtcDttZGRldi0mZ3Q7cmVjb3ZlcnkpKSB7CiAJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmYW1wO21kZGV2LSZndDtyZWNvdmVyeSk7CiAJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9DSEVDSywgJmFtcDttZGRldi0mZ3Q7cmVjb3ZlcnkpOwpAQCAtMTAyNTYsNiAmIzQzOzEwNDA0LDkgQEAgc3RhdGljIGJvb2wgbWRfY2hvb3NlX3N5bmNfYWN0aW9uKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCAqc3BhcmVzKQogc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQogewogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSBjb250YWluZXJfb2Yod3MsIHN0cnVjdCBtZGRldiwgc3luY193b3JrKTsKJiM0MzsJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7CiAJaW50IHNwYXJlcyA9IDA7CiAJYm9vbCBzdXNwZW5kID0gZmFsc2U7CiAJdW5zaWduZWQgaW50IG5vaW9fZmxhZ3MgPSAwOwpAQCAtMTAyNjcsNiAmIzQzOzEwNDE4LDE3IEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAkgKi8KIAlpZiAoKG1kZGV2LSZndDtyZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvciB8fCAhbWRfaXNfcmR3cihtZGRldikpICZhbXA7JmFtcDsKIAkgICAgbWRfc3BhcmVzX25lZWRfY2hhbmdlKG1kZGV2KSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEFkZGluZyBhIHNwYXJlIGJlbG93IHN0YWNrcyBpdHMgbGltaXRzLCB3aGljaCBuZWVkcwomIzQzOwkJICogcS0mZ3Q7bGltaXRzX2xvY2suICBUYWtlIGl0IGJlZm9yZSBzdXNwZW5kaW5nOiBpdHMgaG9sZGVyCiYjNDM7CQkgKiB3YWl0cyBpbiBibGtfbXFfZnJlZXplX3F1ZXVlKCkgZm9yIEkvTyB0aGF0CiYjNDM7CQkgKiBtZGRldi0mZ3Q7c3VzcGVuZGVkIGhvbGRzIGJhY2ssIHNvIHRoZSBvdGhlciBvcmRlciBkZWFkbG9ja3MuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghbWRkZXZfaXNfZG0obWRkZXYpKSB7CiYjNDM7CQkJcSA9IG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZTsKJiM0MzsJCQlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpOwomIzQzOwkJCWxpbXAgPSAmYW1wO2xpbTsKJiM0MzsJCX0KIAkJc3VzcGVuZCA9IHRydWU7CiAJCW1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKTsKIAkJbm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpOwpAQCAtMTAyODEsNiAmIzQzOzEwNDQzLDEyIEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAlpZiAoIXN1c3BlbmQgJmFtcDsmYW1wOyAobWRkZXYtJmd0O3Jlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yIHx8ICFtZF9pc19yZHdyKG1kZGV2KSkgJmFtcDsmYW1wOwogCSAgICBtZF9zcGFyZXNfbmVlZF9jaGFuZ2UobWRkZXYpKSB7CiAJCW1kZGV2X3VubG9jayhtZGRldik7CiYjNDM7CQkvKiBzZWUgYWJvdmU6IHEtJmd0O2xpbWl0c19sb2NrIG5lc3RzIG91dHNpZGUgYm90aCAqLwomIzQzOwkJaWYgKCFtZGRldl9pc19kbShtZGRldikpIHsKJiM0MzsJCQlxID0gbWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlOwomIzQzOwkJCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7CiYjNDM7CQkJbGltcCA9ICZhbXA7bGltOwomIzQzOwkJfQogCQltZGRldl9zdXNwZW5kX2FuZF9sb2NrX25vaW50cihtZGRldik7CiAJCXN1c3BlbmQgPSB0cnVlOwogCQlub2lvX2ZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7CkBAIC0xMDI5NCwxMSAmIzQzOzEwNDYyLDExIEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAkJICogQXMgd2Ugb25seSBhZGQgZGV2aWNlcyB0aGF0IGFyZSBhbHJlYWR5IGluLXN5bmMsIHdlIGNhbgogCQkgKiBhY3RpdmF0ZSB0aGUgc3BhcmVzIGltbWVkaWF0ZWx5LgogCQkgKi8KLQkJcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMKTsKJiM0MzsJCXJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldiwgTlVMTCwgbGltcCk7CiAJCWdvdG8gbm90X3J1bm5pbmc7CiAJfQogCi0JaWYgKCFtZF9jaG9vc2Vfc3luY19hY3Rpb24obWRkZXYsICZhbXA7c3BhcmVzKSkKJiM0MzsJaWYgKCFtZF9jaG9vc2Vfc3luY19hY3Rpb24obWRkZXYsICZhbXA7c3BhcmVzLCBsaW1wKSkKIAkJZ290byBub3RfcnVubmluZzsKIAogCWlmICghbWRkZXYtJmd0O3BlcnMtJmd0O3N5bmNfcmVxdWVzdCkKQEAgLTEwMzI5LDYgJiM0MzsxMDQ5Nyw4IEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAkgKiAgICAgaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgyMDAKIAkgKiBUaGVyZWZvcmUsIHVzZSBfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpLgogCSAqLwomIzQzOwlpZiAobGltcCkKJiM0MzsJCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApOwogCWlmIChzdXNwZW5kKSB7CiAJCW1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWdzKTsKIAkJX19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKTsKQEAgLTEwMzUxLDYgJiM0MzsxMDUyMSw4IEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAkgKiAgICAgaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgyMDAKIAkgKiBUaGVyZWZvcmUsIHVzZSBfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpLgogCSAqLwomIzQzOwlpZiAobGltcCkKJiM0MzsJCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApOwogCWlmIChzdXNwZW5kKSB7CiAJCW1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWdzKTsKIAkJX19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKTsKQEAgLTEwNzkzLDYgJiM0MzsxMDk2NSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG1kX2luaXQodm9pZCkKIAogc3RhdGljIHZvaWQgY2hlY2tfc2JfY2hhbmdlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldikKIHsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07CiAJc3RydWN0IG1kcF9zdXBlcmJsb2NrXzEgKnNiID0gcGFnZV9hZGRyZXNzKHJkZXYtJmd0O3NiX3BhZ2UpOwogCXN0cnVjdCBtZF9yZGV2ICpyZGV2MiwgKnRtcDsKIAlpbnQgcm9sZSwgcmV0OwpAQCAtMTA4NDksNyAmIzQzOzExMDIyLDI0IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3NiX2NoYW5nZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJCQkJCXJkZXYyLSZndDtzYXZlZF9yYWlkX2Rpc2sgPSAtMTsKIAkJCQllbHNlCiAJCQkJCXJkZXYyLSZndDtzYXZlZF9yYWlkX2Rpc2sgPSByb2xlOwotCQkJCXJldCA9IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldiwgcmRldjIpOwomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiByZWNvbmZpZ19tdXRleCBpcyBoZWxkLCBzbyBkb24mIzM5O3Qgd2FpdCBmb3IKJiM0MzsJCQkJICogcS0mZ3Q7bGltaXRzX2xvY2s7IE1EX1JFQ09WRVJZX05FRURFRCBiZWxvdwomIzQzOwkJCQkgKiBsZWF2ZXMgYSBza2lwcGVkIGFkZCB0byBtZF9zdGFydF9zeW5jKCkuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlpZiAobWRkZXZfc3RhY2tfbGltaXRzX3RyeWxvY2sobWRkZXYsICZhbXA7bGltKSkgewomIzQzOwkJCQkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPQomIzQzOwkJCQkJCW1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZTsKJiM0MzsKJiM0MzsJCQkJCXJldCA9IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldiwKJiM0MzsJCQkJCQkJCSAgICByZGV2MiwgJmFtcDtsaW0pOwomIzQzOwkJCQkJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgJmFtcDtsaW0pOwomIzQzOwkJCQl9IGVsc2UgaWYgKG1kZGV2X2lzX2RtKG1kZGV2KSkgewomIzQzOwkJCQkJcmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LAomIzQzOwkJCQkJCQkJICAgIHJkZXYyLCBOVUxMKTsKJiM0MzsJCQkJfSBlbHNlIHsKJiM0MzsJCQkJCXJldCA9IHJlbW92ZV9zcGFyZXMobWRkZXYsIHJkZXYyKTsKJiM0MzsJCQkJfQogCQkJCXByX2luZm8oJiMzNDtBY3RpdmF0ZWQgc3BhcmU6ICVwZ1xuJiMzNDssCiAJCQkJCXJkZXYyLSZndDtiZGV2KTsKIAkJCQkvKiB3YWtldXAgbWRkZXYtJmd0O3RocmVhZCBoZXJlLCBzbyBhcnJheSBjb3VsZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oCmluZGV4IGI2ZDJlODkyOWEwZjkuLmNlY2E4Y2ZjZGNiOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmgKQEAgLTc2NSw3ICYjNDM7NzY1LDggQEAgc3RydWN0IG1kX3BlcnNvbmFsaXR5CiAJICogaWYgYXBwcm9wcmlhdGUsIGFuZCBzaG91bGQgYWJvcnQgcmVjb3ZlcnkgaWYgbmVlZGVkCiAJICovCiAJdm9pZCAoKmVycm9yX2hhbmRsZXIpKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KTsKLQlpbnQgKCpob3RfYWRkX2Rpc2spIChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7CiYjNDM7CWludCAoKmhvdF9hZGRfZGlzaykoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsCiYjNDM7CQkJICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7CiAJaW50ICgqaG90X3JlbW92ZV9kaXNrKSAoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpOwogCWludCAoKnNwYXJlX2FjdGl2ZSkgKHN0cnVjdCBtZGRldiAqbWRkZXYpOwogCXNlY3Rvcl90ICgqc3luY19yZXF1ZXN0KShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JfbnIsCkBAIC0xMDQxLDEzICYjNDM7MTA0MiwxNyBAQCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zOwogZXh0ZXJuIGludCBtZHBfbWFqb3I7CiB2b2lkIG1kX2F1dG9zdGFydF9hcnJheXMoaW50IHBhcnQpOwogaW50IG1kX3NldF9hcnJheV9pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfYXJyYXlfaW5mb19zICppbmZvKTsKLWludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbyk7CiYjNDM7aW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvLAomIzQzOwkJICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7CiBpbnQgZG9fbWRfcnVuKHN0cnVjdCBtZGRldiAqbWRkZXYpOwogI2RlZmluZSBNRERFVl9TVEFDS19JTlRFR1JJVFkJKDF1ICZsdDsmbHQ7IDApCiBpbnQgbWRkZXZfc3RhY2tfcmRldl9saW1pdHMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLAogCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOwogaW50IG1kZGV2X3N0YWNrX25ld19yZGV2KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KTsKLXZvaWQgbWRkZXZfdXBkYXRlX2lvX29wdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB1bnNpZ25lZCBpbnQgbnJfc3RyaXBlcyk7CiYjNDM7aW50IG1kZGV2X3N0YWNrX3JkZXZfaW50byhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldiwKJiM0MzsJCQkgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7CiYjNDM7dm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzLAomIzQzOwkJCSBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pOwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG1kX2ZvcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBmMDY0NmZiMjQzNzFmLi5kZDM0OGI1Njk1ZDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC0xODk4LDcgJiM0MzsxODk4LDggQEAgc3RhdGljIGJvb2wgcmFpZDFfcmVtb3ZlX2NvbmYoc3RydWN0IHIxY29uZiAqY29uZiwgaW50IGRpc2spCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgcmFpZDFfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiYjNDM7c3RhdGljIGludCByYWlkMV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldiwKJiM0MzsJCQkgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAlzdHJ1Y3QgcjFjb25mICpjb25mID0gbWRkZXYtJmd0O3ByaXZhdGU7CiAJaW50IGVyciA9IC1FRVhJU1Q7CkBAIC0xOTIzLDcgJiM0MzsxOTI0LDEwIEBAIHN0YXRpYyBpbnQgcmFpZDFfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJZm9yIChtaXJyb3IgPSBmaXJzdDsgbWlycm9yICZsdDs9IGxhc3Q7IG1pcnJvciYjNDM7JiM0MzspIHsKIAkJcCA9IGNvbmYtJmd0O21pcnJvcnMgJiM0MzsgbWlycm9yOwogCQlpZiAoIXAtJmd0O3JkZXYpIHsKLQkJCWVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTsKJiM0MzsJCQlpZiAobGltKQomIzQzOwkJCQllcnIgPSBtZGRldl9zdGFja19yZGV2X2ludG8obWRkZXYsIHJkZXYsIGxpbSk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQllcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDEwOTNjNzk4ZDlkZGUuLjY0MTYxOTMyOGE2YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtMjA5NSw3ICYjNDM7MjA5NSw4IEBAIHN0YXRpYyBpbnQgcmFpZDEwX3NwYXJlX2FjdGl2ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiYjNDM7c3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsCiYjNDM7CQkJICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXN0cnVjdCByMTBjb25mICpjb25mID0gbWRkZXYtJmd0O3ByaXZhdGU7CiAJaW50IGVyciA9IC1FRVhJU1Q7CkBAIC0yMTMwLDcgJiM0MzsyMTMxLDEwIEBAIHN0YXRpYyBpbnQgcmFpZDEwX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KQogCQkJY29udGludWU7CiAJCX0KIAotCQllcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7CiYjNDM7CQlpZiAobGltKQomIzQzOwkJCWVyciA9IG1kZGV2X3N0YWNrX3JkZXZfaW50byhtZGRldiwgcmRldiwgbGltKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQllcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQlwLSZndDtoZWFkX3Bvc2l0aW9uID0gMDsKQEAgLTIxNDcsNyAmIzQzOzIxNTEsMTAgQEAgc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJCWNsZWFyX2JpdChJbl9zeW5jLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKIAkJc2V0X2JpdChSZXBsYWNlbWVudCwgJmFtcDtyZGV2LSZndDtmbGFncyk7CiAJCXJkZXYtJmd0O3JhaWRfZGlzayA9IHJlcGxfc2xvdDsKLQkJZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpOwomIzQzOwkJaWYgKGxpbSkKJiM0MzsJCQllcnIgPSBtZGRldl9zdGFja19yZGV2X2ludG8obWRkZXYsIHJkZXYsIGxpbSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAkJY29uZi0mZ3Q7ZnVsbHN5bmMgPSAxOwpAQCAtNDQ4NCw3ICYjNDM7NDQ5MSw3IEBAIHN0YXRpYyBpbnQgcmFpZDEwX3N0YXJ0X3Jlc2hhcGUoc3RydWN0IG1kZGV2ICptZGRldikKIAkJcmRldl9mb3JfZWFjaChyZGV2LCBtZGRldikKIAkJCWlmIChyZGV2LSZndDtyYWlkX2Rpc2sgJmx0OyAwICZhbXA7JmFtcDsKIAkJCSAgICAhdGVzdF9iaXQoRmF1bHR5LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkgewotCQkJCWlmIChyYWlkMTBfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHsKJiM0MzsJCQkJaWYgKHJhaWQxMF9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkgewogCQkJCQlpZiAocmRldi0mZ3Q7cmFpZF9kaXNrICZndDs9CiAJCQkJCSAgICBjb25mLSZndDtwcmV2LnJhaWRfZGlza3MpCiAJCQkJCQlzZXRfYml0KEluX3N5bmMsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpOwpAQCAtNDkyMSw3ICYjNDM7NDkyOCw3IEBAIHN0YXRpYyB2b2lkIGVuZF9yZXNoYXBlKHN0cnVjdCByMTBjb25mICpjb25mKQogCWNvbmYtJmd0O3Jlc2hhcGVfc2FmZSA9IE1heFNlY3RvcjsKIAlzcGluX3VubG9ja19pcnEoJmFtcDtjb25mLSZndDtkZXZpY2VfbG9jayk7CiAKLQltZGRldl91cGRhdGVfaW9fb3B0KGNvbmYtJmd0O21kZGV2LCByYWlkMTBfbnJfc3RyaXBlcyhjb25mKSk7CiYjNDM7CW1kZGV2X3VwZGF0ZV9pb19vcHQoY29uZi0mZ3Q7bWRkZXYsIHJhaWQxMF9ucl9zdHJpcGVzKGNvbmYpLCBOVUxMKTsKIAljb25mLSZndDtmdWxsc3luYyA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCBiOTE1NDVjZTA5MGRlLi4yMjc1OWM2MzFjNGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC03Mjg4LDYgJiM0Mzs3Mjg4LDkgQEAgc3RhdGljIHNzaXplX3QKIHJhaWQ1X3N0b3JlX3NraXBfY29weShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCByNWNvbmYgKmNvbmY7CiYjNDM7CXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gTlVMTDsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbXAgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgbmV3OwogCWludCBlcnI7CiAKQEAgLTcyOTcsMjMgJiM0Mzs3MzAwLDMzIEBAIHJhaWQ1X3N0b3JlX3NraXBfY29weShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAluZXcgPSAhIW5ldzsKIAomIzQzOwkvKiBxLSZndDtsaW1pdHNfbG9jayBuZXN0cyBvdXRzaWRlIGJvdGgsIHNlZSBtZF9zdGFydF9zeW5jKCkgKi8KJiM0MzsJaWYgKCFtZGRldl9pc19kbShtZGRldikpIHsKJiM0MzsJCXEgPSBtZGRldi0mZ3Q7Z2VuZGlzay0mZ3Q7cXVldWU7CiYjNDM7CQlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpOwomIzQzOwkJbGltcCA9ICZhbXA7bGltOwomIzQzOwl9CiYjNDM7CiAJZXJyID0gbWRkZXZfc3VzcGVuZF9hbmRfbG9jayhtZGRldik7Ci0JaWYgKGVycikKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaWYgKGxpbXApCiYjNDM7CQkJcXVldWVfbGltaXRzX2NhbmNlbF91cGRhdGUocSk7CiAJCXJldHVybiBlcnI7CiYjNDM7CX0KIAljb25mID0gbWRkZXYtJmd0O3ByaXZhdGU7CiAJaWYgKCFjb25mKQogCQllcnIgPSAtRU5PREVWOwogCWVsc2UgaWYgKG5ldyAhPSBjb25mLSZndDtza2lwX2NvcHkpIHsKLQkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBtZGRldi0mZ3Q7Z2VuZGlzay0mZ3Q7cXVldWU7Ci0JCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTsKLQogCQljb25mLSZndDtza2lwX2NvcHkgPSBuZXc7Ci0JCWlmIChuZXcpCi0JCQlsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfU1RBQkxFX1dSSVRFUzsKLQkJZWxzZQotCQkJbGltLmZlYXR1cmVzICZhbXA7PSB+QkxLX0ZFQVRfU1RBQkxFX1dSSVRFUzsKLQkJZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgJmFtcDtsaW0pOwomIzQzOwkJaWYgKGxpbXApIHsKJiM0MzsJCQlpZiAobmV3KQomIzQzOwkJCQlsaW1wLSZndDtmZWF0dXJlcyB8PSBCTEtfRkVBVF9TVEFCTEVfV1JJVEVTOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJbGltcC0mZ3Q7ZmVhdHVyZXMgJmFtcDs9IH5CTEtfRkVBVF9TVEFCTEVfV1JJVEVTOwomIzQzOwkJfQogCX0KJiM0MzsJaWYgKGxpbXApCiYjNDM7CQllcnIgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKSA/OiBlcnI7CiAJbWRkZXZfdW5sb2NrX2FuZF9yZXN1bWUobWRkZXYpOwogCXJldHVybiBlcnIgPzogbGVuOwogfQpAQCAtODQ0MSw3ICYjNDM7ODQ1NCw4IEBAIHN0YXRpYyBpbnQgcmFpZDVfcmVtb3ZlX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCByYWlkNV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldikKJiM0MztzdGF0aWMgaW50IHJhaWQ1X2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LAomIzQzOwkJCSAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXN0cnVjdCByNWNvbmYgKmNvbmYgPSBtZGRldi0mZ3Q7cHJpdmF0ZTsKIAlpbnQgcmV0LCBlcnIgPSAtRUVYSVNUOwpAQCAtODcyOCw3ICYjNDM7ODc0Miw3IEBAIHN0YXRpYyBpbnQgcmFpZDVfc3RhcnRfcmVzaGFwZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogCQlyZGV2X2Zvcl9lYWNoKHJkZXYsIG1kZGV2KQogCQkJaWYgKHJkZXYtJmd0O3JhaWRfZGlzayAmbHQ7IDAgJmFtcDsmYW1wOwogCQkJICAgICF0ZXN0X2JpdChGYXVsdHksICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpKSB7Ci0JCQkJaWYgKHJhaWQ1X2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7CiYjNDM7CQkJCWlmIChyYWlkNV9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkgewogCQkJCQlpZiAocmRldi0mZ3Q7cmFpZF9kaXNrCiAJCQkJCSAgICAmZ3Q7PSBjb25mLSZndDtwcmV2aW91c19yYWlkX2Rpc2tzKQogCQkJCQkJc2V0X2JpdChJbl9zeW5jLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKQEAgLTg3OTksNyAmIzQzOzg4MTMsNyBAQCBzdGF0aWMgdm9pZCBlbmRfcmVzaGFwZShzdHJ1Y3QgcjVjb25mICpjb25mKQogCQl3YWtlX3VwKCZhbXA7Y29uZi0mZ3Q7d2FpdF9mb3JfcmVzaGFwZSk7CiAKIAkJbWRkZXZfdXBkYXRlX2lvX29wdChjb25mLSZndDttZGRldiwKLQkJCWNvbmYtJmd0O3JhaWRfZGlza3MgLSBjb25mLSZndDttYXhfZGVncmFkZWQpOwomIzQzOwkJCWNvbmYtJmd0O3JhaWRfZGlza3MgLSBjb25mLSZndDttYXhfZGVncmFkZWQsIE5VTEwpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggNGY3OTA1YzM0MTJiOC4uYjc1ZTg1MjkxZTI5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0xMTAxLDYgJiM0MzsxMTAxLDMyIEBAIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiAJbXV0ZXhfbG9jaygmYW1wO3EtJmd0O2xpbWl0c19sb2NrKTsKIAlyZXR1cm4gcS0mZ3Q7bGltaXRzOwogfQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayAtIHRyeSB0byBzdGFydCBhbiBhdG9taWMgdXBkYXRlIG9mIHF1ZXVlCiYjNDM7ICoJbGltaXRzCiYjNDM7ICogQHE6CQlxdWV1ZSB0byB1cGRhdGUKJiM0MzsgKiBAbGltOglyZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgbGltaXRzIG9uIHN1Y2Nlc3MKJiM0MzsgKgomIzQzOyAqIExpa2UgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpLCBidXQgZmFpbHMgaW5zdGVhZCBvZiB3YWl0aW5nIHdoZW4gYW5vdGhlcgomIzQzOyAqIHVwZGF0ZSBpcyBpbiBmbGlnaHQuICBGb3IgY2FsbGVycyB0aGF0IG11c3Qgbm90IGJsb2NrIG9uIHEtJmd0O2xpbWl0c19sb2NrCiYjNDM7ICogYmVjYXVzZSB0aGV5IGhvbGQgc29tZXRoaW5nIGl0cyBjdXJyZW50IG93bmVyIGlzIHdhaXRpbmcgZm9yLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogcHJvY2VzcyBjb250ZXh0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3F1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKJiM0MzsJCQkJICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiYjNDM7CV9fY29uZF9hY3F1aXJlcyh0cnVlLCAmYW1wO3EtJmd0O2xpbWl0c19sb2NrKQomIzQzO3sKJiM0MzsJaWYgKCFtdXRleF90cnlsb2NrKCZhbXA7cS0mZ3Q7bGltaXRzX2xvY2spKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkqbGltID0gcS0mZ3Q7bGltaXRzOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBpbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCQlzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pIF9fcmVsZWFzZXMoJmFtcDtxLSZndDtsaW1pdHNfbG9jayk7CiBpbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzY1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUQgUkFJRCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGZ1enotd29ydGh5LCB3aGF0IGtpbmQgb2YgY29uZmlndXJhdGlvbiBpcyBuZWVkZWQsIGFuZCBpZiB3ZSBjYW4gaWRlbnRpZnkgc3BlY2lmaWMgc3ltYm9scyB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxsIGFib3V0IHJlc29sdmluZyBsb2NrIG9yZGVyaW5nIGlzc3VlcyBhbmQgcG90ZW50aWFsIGRlYWRsb2NrcyB3aXRoaW4gdGhlIE1EIChNdWx0aXBsZSBEZXZpY2VzL3NvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aG9zZSBsb2NrczogYHEtJmd0O2xpbWl0c19sb2NrYCwgYHJlY29uZmlnX211dGV4YCwgYW5kIGBtZGRldl9zdXNwZW5kKClgLiAgVGhlIGNvZGUgdG91Y2hlcyBhIGxvdCBvZiBmaWxlcyB3aXRoaW4gYGRyaXZlcnMvbWQvYCwgc28gaXQmIzM5O3MgYSBwcmV0dHkgY2VudHJhbCBhcmVhLgoKSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkaW5nIHRoaXMgbmV3IGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlX3RyeWxvY2tgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggdGhlbiBzZWVtcyB0byBiZSBwcm9wYWdhdGluZyBjaGFuZ2VzIHRocm91Z2hvdXQgdGhlIE1EIHN1YnN5c3RlbSwgbW9kaWZ5aW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgYW5kIHVwZGF0aW5nIGxvY2sgYWNxdWlzaXRpb24gc3RyYXRlZ2llcy4gU3BlY2lmaWNhbGx5OgoKKiAgIEl0IHVwZGF0ZXMgY2FsbHMgcmVsYXRlZCB0byBhZGRpbmcgZGlza3MgKGBob3RfYWRkX2Rpc2tgLCBgbWRfYWRkX25ld19kaXNrYCkgYW5kIGFkanVzdGluZyBxdWV1ZSBsaW1pdHMgaW4gdGhlIGBkbS1yYWlkLmNgLCBgbWQtYXV0b2RldGVjdC5jYCwgYW5kIGBtZC1saW5lYXIuY2AgZmlsZXMuCiogICBUaGUgYG1kLmNgIGZpbGUgc2VlcyB0aGUgbW9zdCBjaGFuZ2VzLCBpbmNsdWRpbmcgYSBuZXcgYHF1ZXVlX2xpbWl0c2AgcGFyYW1ldGVyIGJlaW5nIGFkZGVkIHRvIHRoZSByZGV2IHN5c2ZzIGVudHJ5IGBzdG9yZWAgbWV0aG9kLiBUaGlzIGFsc28gaW52b2x2ZXMgY2hhbmdlcyB0byBob3cgbG9ja3MgYXJlIGFjcXVpcmVkIGluIGByZGV2X2F0dHJfc3RvcmUoKWAsIGFkZGluZyBuZXcgZnVuY3Rpb25zIGxpa2UgYG1kZGV2X3N0YWNrX3JkZXZfaW50bygpYCBhbmQgYG1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKClgLCBhbmQgdXBkYXRlcyB0byBgbWRkZXZfdXBkYXRlX2lvX29wdCgpYCBhbmQgb3RoZXIgY29yZSBNRCBmdW5jdGlvbnMgKGBtZF9hZGRfbmV3X2Rpc2soKWAsIGBob3RfcmVtb3ZlX2Rpc2soKWAsIGByZW1vdmVfYW5kX2FkZF9zcGFyZXMoKWAsIGV0Yy4pLgoqICAgSXQmIzM5O3MgYWxzbyB1cGRhdGluZyBmdW5jdGlvbnMgYWNyb3NzIHNldmVyYWwgUkFJRCBpbXBsZW1lbnRhdGlvbnMgKGByYWlkMS5jYCwgYHJhaWQxMC5jYCwgYHJhaWQ1LmNgKSB0byBoYW5kbGUgdGhpcyBgcXVldWVfbGltaXRzYCBzdHJ1Y3QuCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBjb2RlLiBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIHJlYWNoYWJpbGl0eS4gTUQgUkFJRCwgYmVpbmcgYSBjb3JlIHBhcnQgb2Ygc3RvcmFnZSBtYW5hZ2VtZW50LCBzaG91bGQgYmUgcHJldHR5IGVhc2lseSByZWFjaGFibGUsIGVzcGVjaWFsbHkgaW4gYSBmdXp6aW5nIGNvbnRleHQuIEZyb20gd2hhdCBJIGtub3csIGl0JiMzOTtzIGFjY2Vzc2libGUgdGhyb3VnaCBpb2N0bHMgb24gYC9kZXYvbWQqYCwgYW5kIHN5c2ZzIGVudHJpZXMgdW5kZXIgYC9zeXMvYmxvY2svbWRYL21kLy4uLmAuIFN5emthbGxlciBzaG91bGQgYWxyZWFkeSBoYXZlIGdvb2QgY292ZXJhZ2UgZm9yIHRoZXNlIGludGVyZmFjZXMuIElmIHNvLCB0aGF0IGdyZWF0bHkgaW5jcmVhc2VzIHRoZSBsaWtlbGlob29kIG9mIGZpbmRpbmcgYnVncy4KCkxhc3RseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgTUQgUkFJRCBhbmQgaXRzIHN1Yi1jb21wb25lbnRzIGFyZSBlbmFibGVkIHRvIHRyaWdnZXIgdGhlc2UgdXBkYXRlZCBjb2RlIHBhdGhzLiBUaW1lIHRvIGdyZXAgZm9yIHRoZSByZWxldmFudCBgQ09ORklHX01EKmAgYW5kIGBDT05GSUdfQkxLX0RFVl9NRCpgIG9wdGlvbnMgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoaWNoIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBzZXQgZm9yIGEgZ29vZCBmdXp6aW5nIHJ1bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9NRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvS2NvbmZpZz0xMz1pZiBNRFxuZHJpdmVycy9tZC9LY29uZmlnLTE0LVxuZHJpdmVycy9tZC9LY29uZmlnOjE1OmNvbmZpZyBCTEtfREVWX01EXG5kcml2ZXJzL21kL0tjb25maWctMTYtXHR0cmlzdGF0ZSBcJiMzNDtSQUlEIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgxMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIE1EIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIE1EIChNdWx0aXBsZSBEZXZpY2UpIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhpcyBrZXJuZWwgYnVpbGQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBkcml2ZXJzL21kL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQsIG5hdHVyYWxseS4gSSBmaWd1cmUgdGhlIGZpcnN0IDUwIGxpbmVzIG9yIHNvIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgY29yZSBNRCBzZXR0aW5ncy4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IHZhcmlhYmxlcyBhbmQgYW55IGNyaXRpY2FsIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGFmZmVjdCBob3cgTUQgaXMgY29uZmlndXJlZCwgYW5kIHdoYXQgdGhlIGJhc2UtbGV2ZWwgY2hvaWNlcyBhcmUgZm9yIFJBSUQsIExWTSwgYW5kIGFueSBvdGhlciByZWxldmFudCBibG9jayBkZXZpY2UgbWFuYWdlbWVudCBjb21wb25lbnRzLiBJdCYjMzk7cyBhIHF1aWNrIHdheSB0byBnZXQgY29udGV4dCBhbmQgc2VlIGhvdyB0aGluZ3MgYXJlIHN0cnVjdHVyZWQgYmVmb3JlIGRpZ2dpbmcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgQmxvY2sgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTURcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7TXVsdGlwbGUgZGV2aWNlcyBkcml2ZXIgc3VwcG9ydCAoUkFJRCBhbmQgTFZNKVwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBTdXBwb3J0IG11bHRpcGxlIHBoeXNpY2FsIHNwaW5kbGVzIHRocm91Z2ggYSBzaW5nbGUgbG9naWNhbCBkZXZpY2UuXG4gIDExOlx0XHQgIFJlcXVpcmVkIGZvciBSQUlEIGFuZCBsb2dpY2FsIHZvbHVtZSBtYW5hZ2VtZW50LlxuICAxMjpcdFxuICAxMzpcdGlmIE1EXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIEJMS19ERVZfTURcbiAgMTY6XHRcdHRyaXN0YXRlIFwmIzM0O1JBSUQgc3VwcG9ydFwmIzM0O1xuICAxNzpcdFx0c2VsZWN0IEJMT0NLX0hPTERFUl9ERVBSRUNBVEVEIGlmIFNZU0ZTXG4gIDE4Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgMTk6XHRcdCMgQkxPQ0tfTEVHQUNZX0FVVE9MT0FEIHJlcXVpcmVtZW50IHNob3VsZCBiZSByZW1vdmVkXG4gIDIwOlx0XHQjIGFmdGVyIHJlbGV2YW50IG1kYWRtIGVuaGFuY2VtZW50cyAtIHRvIG1ha2UgXCYjMzQ7bmFtZXM9eWVzXCYjMzQ7XG4gIDIxOlx0XHQjIHRoZSBkZWZhdWx0IC0gYXJlIHdpZGVseSBhdmFpbGFibGUuXG4gIDIyOlx0XHRzZWxlY3QgQkxPQ0tfTEVHQUNZX0FVVE9MT0FEXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFRoaXMgZHJpdmVyIGxldHMgeW91IGNvbWJpbmUgc2V2ZXJhbCBoYXJkIGRpc2sgcGFydGl0aW9ucyBpbnRvIG9uZVxuICAyNTpcdFx0ICBsb2dpY2FsIGJsb2NrIGRldmljZS4gVGhpcyBjYW4gYmUgdXNlZCB0byBzaW1wbHkgYXBwZW5kIG9uZVxuICAyNjpcdFx0ICBwYXJ0aXRpb24gdG8gYW5vdGhlciBvbmUgb3IgdG8gY29tYmluZSBzZXZlcmFsIHJlZHVuZGFudCBoYXJkIGRpc2tzXG4gIDI3Olx0XHQgIGludG8gYSBSQUlEMS80LzUgZGV2aWNlIHNvIGFzIHRvIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGhhcmRcbiAgMjg6XHRcdCAgZGlzayBmYWlsdXJlcy4gVGhpcyBpcyBjYWxsZWQgXCYjMzQ7U29mdHdhcmUgUkFJRFwmIzM0OyBzaW5jZSB0aGUgY29tYmluaW5nIG9mXG4gIDI5Olx0XHQgIHRoZSBwYXJ0aXRpb25zIGlzIGRvbmUgYnkgdGhlIGtlcm5lbC4gXCYjMzQ7SGFyZHdhcmUgUkFJRFwmIzM0OyBtZWFucyB0aGF0IHRoZVxuICAzMDpcdFx0ICBjb21iaW5pbmcgaXMgZG9uZSBieSBhIGRlZGljYXRlZCBjb250cm9sbGVyOyBpZiB5b3UgaGF2ZSBzdWNoIGFcbiAgMzE6XHRcdCAgY29udHJvbGxlciwgeW91IGRvIG5vdCBuZWVkIHRvIHNheSBZIGhlcmUuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgU29mdHdhcmUgUkFJRCBvbiBMaW51eCBpcyBjb250YWluZWQgaW4gdGhlXG4gIDM0Olx0XHQgIFNvZnR3YXJlIFJBSUQgbWluaS1IT1dUTywgYXZhaWxhYmxlIGZyb21cbiAgMzU6XHRcdCAgXHUwMDNjaHR0cHM6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXHUwMDNlLiBUaGVyZSB5b3Ugd2lsbCBhbHNvIGxlYXJuXG4gIDM2Olx0XHQgIHdoZXJlIHRvIGdldCB0aGUgc3VwcG9ydGluZyB1c2VyIHNwYWNlIHV0aWxpdGllcyByYWlkdG9vbHMuXG4gIDM3Olx0XG4gIDM4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM5Olx0XG4gIDQwOlx0Y29uZmlnIE1EX0JJVE1BUFxuICA0MTpcdFx0Ym9vbCBcJiMzNDtNRCBSQUlEIGJpdG1hcCBzdXBwb3J0XCYjMzQ7XG4gIDQyOlx0XHRkZWZhdWx0IHlcbiAgNDM6XHRcdGRlcGVuZHMgb24gQkxLX0RFVl9NRFxuICA0NDpcdFx0aGVscFxuICA0NTpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgc3VwcG9ydCBmb3IgdGhlIHdyaXRlIGludGVudCBiaXRtYXAgd2lsbCBiZVxuICA0NjpcdFx0ICBlbmFibGVkLiBUaGUgYml0bWFwIGNhbiBiZSB1c2VkIHRvIG9wdGltaXplIHJlc3luYyBzcGVlZCBhZnRlciBwb3dlclxuICA0NzpcdFx0ICBmYWlsdXJlIG9yIHJlYWRkaW5nIGEgZGlzaywgbGltaXRpbmcgaXQgdG8gcmVjb3JkZWQgZGlydHkgc2VjdG9ycyBpblxuICA0ODpcdFx0ICBiaXRtYXAuXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIFRoaXMgZmVhdHVyZSBjYW4gYmUgYWRkZWQgdG8gZXhpc3RpbmcgTUQgYXJyYXkgb3IgTUQgYXJyYXkgY2FuIGJlXG4gIDUxOlx0XHQgIGNyZWF0ZWQgd2l0aCBiaXRtYXAgdmlhIG1kYWRtKDgpLlxuICA1MjpcdFxuICA1MzpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICA1NDpcdFxuICA1NTpcdGNvbmZpZyBNRF9MTEJJVE1BUFxuICA1NjpcdFx0Ym9vbCBcJiMzNDtNRCBSQUlEIGxvY2tsZXNzIGJpdG1hcCBzdXBwb3J0XCYjMzQ7XG4gIDU3Olx0XHRkZXBlbmRzIG9uIEJMS19ERVZfTURcbiAgNTg6XHRcdGhlbHBcbiAgNTk6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHN1cHBvcnQgZm9yIHRoZSBsb2NrbGVzcyB3cml0ZSBpbnRlbnQgYml0bWFwIHdpbGxcbiAgNjA6XHRcdCAgYmUgZW5hYmxlZC5cbiAgNjE6XHRcbiAgNjI6XHRcdCAgTm90ZSwgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZS5cbiAgNjM6XHRcbiAgNjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjU6XHRcbiAgNjY6XHRjb25maWcgTURfQVVUT0RFVEVDVFxuICA2NzpcdFx0Ym9vbCBcJiMzNDtBdXRvZGV0ZWN0IFJBSUQgYXJyYXlzIGR1cmluZyBrZXJuZWwgYm9vdFwmIzM0O1xuICA2ODpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX01EPXlcbiAgNjk6XHRcdGRlZmF1bHQgeVxuICA3MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTY2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFJBSUQgUGVyc29uYWxpdHkgQ29uZmlndXJhdGlvbnMgaW4gYGRyaXZlcnMvbWQvS2NvbmZpZ2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcyBvciBvdmVybG9va2VkIG1vZGlmaWNhdGlvbnMuIE15IHByaW1hcnkgZm9jdXMgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbWQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gUkFJRCBwZXJzb25hbGl0aWVzIHRoYXQgaGF2ZSBiZWVuIGFsdGVyZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBsaW5lYXIsIHJhaWQxLCByYWlkMTAsIGFuZCByYWlkNDU2L3JhaWQ1LiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBtb2RpZmljYXRpb25zIG1hZGUgYXJlIGNvbnNpc3RlbnQgYWNyb3NzIGFsbCBhZmZlY3RlZCBSQUlEIGxldmVscyBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMgaW4gaG93IHRoZXNlIHBlcnNvbmFsaXRpZXMgYXJlIGRlZmluZWQgb3IgZW5hYmxlZC4gSSYjMzk7bGwgYmUgbWV0aWN1bG91c2x5IGNoZWNraW5nIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBhbnkgY29uZGl0aW9uYWwgbG9naWMgdG8gZ2V0IGEgaG9saXN0aWMgdmlldyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2VzLiBUaGlzIHRob3JvdWdoIGFuYWx5c2lzIHNob3VsZCBoZWxwIG1lIGlkZW50aWZ5IGFuZCByZWN0aWZ5IGFueSBwb3RlbnRpYWwgaXNzdWVzIGJlZm9yZSB0aGV5IGNhdXNlIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3MTpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUga2VybmVsIHdpbGwgdHJ5IHRvIGF1dG9kZXRlY3QgcmFpZFxuICA3MjpcdFx0ICBhcnJheXMgYXMgcGFydCBvZiBpdHMgYm9vdCBwcm9jZXNzLlxuICA3MzpcdFxuICA3NDpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IHVzZSByYWlkIGFuZCBzYXkgWSwgdGhpcyBhdXRvZGV0ZWN0aW9uIGNhbiBjYXVzZVxuICA3NTpcdFx0ICBhIHNldmVyYWwtc2Vjb25kIGRlbGF5IGluIHRoZSBib290IHRpbWUgZHVlIHRvIHZhcmlvdXNcbiAgNzY6XHRcdCAgc3luY2hyb25pc2F0aW9uIHN0ZXBzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyBzdGVwLlxuICA3NzpcdFxuICA3ODpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICA3OTpcdFxuICA4MDpcdGNvbmZpZyBNRF9CSVRNQVBfRklMRVxuICA4MTpcdFx0Ym9vbCBcJiMzNDtNRCBiaXRtYXAgZmlsZSBzdXBwb3J0IChkZXByZWNhdGVkKVwmIzM0O1xuICA4MjpcdFx0ZGVmYXVsdCB5XG4gIDgzOlx0XHRkZXBlbmRzIG9uIE1EX0JJVE1BUFxuICA4NDpcdFx0aGVscFxuICA4NTpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgc3VwcG9ydCBmb3Igd3JpdGUgaW50ZW50IGJpdG1hcHMgaW4gZmlsZXMgb24gYW5cbiAgODY6XHRcdCAgZXh0ZXJuYWwgZmlsZSBzeXN0ZW0gaXMgZW5hYmxlZC4gIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIGludGVybmFsXG4gIDg3Olx0XHQgIGJpdG1hcHMgbmVhciB0aGUgTUQgc3VwZXJibG9jaywgYW5kIHZlcnkgcHJvYmxlbWF0aWMgY29kZSB0aGF0IGFidXNlc1xuICA4ODpcdFx0ICB2YXJpb3VzIGtlcm5lbCBBUElzIGFuZCBjYW4gb25seSB3b3JrIHdpdGggZmlsZXMgb24gYSBmaWxlIHN5c3RlbSBub3RcbiAgODk6XHRcdCAgYWN0dWFsbHkgc2l0dGluZyBvbiB0aGUgTUQgZGV2aWNlLlxuICA5MDpcdFxuICA5MTpcdGNvbmZpZyBNRF9MSU5FQVJcbiAgOTI6XHRcdHRyaXN0YXRlIFwmIzM0O0xpbmVhciAoYXBwZW5kKSBtb2RlXCYjMzQ7XG4gIDkzOlx0XHRkZXBlbmRzIG9uIEJMS19ERVZfTURcbiAgOTQ6XHRcdGhlbHBcbiAgOTU6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBtdWx0aXBsZSBkZXZpY2VzIGRyaXZlciB3aWxsIGJlIGFibGUgdG9cbiAgOTY6XHRcdCAgdXNlIHRoZSBzby1jYWxsZWQgbGluZWFyIG1vZGUsIGkuZS4gaXQgd2lsbCBjb21iaW5lIHRoZSBoYXJkIGRpc2tcbiAgOTc6XHRcdCAgcGFydGl0aW9ucyBieSBzaW1wbHkgYXBwZW5kaW5nIG9uZSB0byB0aGUgb3RoZXIuXG4gIDk4Olx0XG4gIDk5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDEwMDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBsaW5lYXIuXG4gMTAxOlx0XG4gMTAyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMTAzOlx0XG4gMTA0Olx0Y29uZmlnIE1EX1JBSUQwXG4gMTA1Olx0XHR0cmlzdGF0ZSBcJiMzNDtSQUlELTAgKHN0cmlwaW5nKSBtb2RlXCYjMzQ7XG4gMTA2Olx0XHRkZXBlbmRzIG9uIEJMS19ERVZfTURcbiAxMDc6XHRcdGhlbHBcbiAxMDg6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBtdWx0aXBsZSBkZXZpY2VzIGRyaXZlciB3aWxsIGJlIGFibGUgdG9cbiAxMDk6XHRcdCAgdXNlIHRoZSBzby1jYWxsZWQgcmFpZDAgbW9kZSwgaS5lLiBpdCB3aWxsIGNvbWJpbmUgdGhlIGhhcmQgZGlza1xuIDExMDpcdFx0ICBwYXJ0aXRpb25zIGludG8gb25lIGxvZ2ljYWwgZGV2aWNlIGluIHN1Y2ggYSBmYXNoaW9uIGFzIHRvIGZpbGwgdGhlbVxuIDExMTpcdFx0ICB1cCBldmVubHksIG9uZSBjaHVuayBoZXJlIGFuZCBvbmUgY2h1bmsgdGhlcmUuIFRoaXMgd2lsbCBpbmNyZWFzZVxuIDExMjpcdFx0ICB0aGUgdGhyb3VnaHB1dCByYXRlIGlmIHRoZSBwYXJ0aXRpb25zIHJlc2lkZSBvbiBkaXN0aW5jdCBkaXNrcy5cbiAxMTM6XHRcbiAxMTQ6XHRcdCAgSW5mb3JtYXRpb24gYWJvdXQgU29mdHdhcmUgUkFJRCBvbiBMaW51eCBpcyBjb250YWluZWQgaW4gdGhlXG4gMTE1Olx0XHQgIFNvZnR3YXJlLVJBSUQgbWluaS1IT1dUTywgYXZhaWxhYmxlIGZyb21cbiAxMTY6XHRcdCAgXHUwMDNjaHR0cHM6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXHUwMDNlLiBUaGVyZSB5b3Ugd2lsbCBhbHNvXG4gMTE3Olx0XHQgIGxlYXJuIHdoZXJlIHRvIGdldCB0aGUgc3VwcG9ydGluZyB1c2VyIHNwYWNlIHV0aWxpdGllcyByYWlkdG9vbHMuXG4gMTE4Olx0XG4gMTE5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDEyMDpcdFx0ICB3aWxsIGJlIGNhbGxlZCByYWlkMC5cbiAxMjE6XHRcbiAxMjI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxMjM6XHRcbiAxMjQ6XHRjb25maWcgTURfUkFJRDFcbiAxMjU6XHRcdHRyaXN0YXRlIFwmIzM0O1JBSUQtMSAobWlycm9yaW5nKSBtb2RlXCYjMzQ7XG4gMTI2Olx0XHRkZXBlbmRzIG9uIEJMS19ERVZfTURcbiAxMjc6XHRcdGhlbHBcbiAxMjg6XHRcdCAgQSBSQUlELTEgc2V0IGNvbnNpc3RzIG9mIHNldmVyYWwgZGlzayBkcml2ZXMgd2hpY2ggYXJlIGV4YWN0IGNvcGllc1xuIDEyOTpcdFx0ICBvZiBlYWNoIG90aGVyLiAgSW4gdGhlIGV2ZW50IG9mIGEgbWlycm9yIGZhaWx1cmUsIHRoZSBSQUlEIGRyaXZlclxuIDEzMDpcdFx0ICB3aWxsIGNvbnRpbnVlIHRvIHVzZSB0aGUgb3BlcmF0aW9uYWwgbWlycm9ycyBpbiB0aGUgc2V0LCBwcm92aWRpbmdcbiAxMzE6XHRcdCAgYW4gZXJyb3IgZnJlZSBNRCAobXVsdGlwbGUgZGV2aWNlKSB0byB0aGUgaGlnaGVyIGxldmVscyBvZiB0aGVcbiAxMzI6XHRcdCAga2VybmVsLiAgSW4gYSBzZXQgd2l0aCBOIGRyaXZlcywgdGhlIGF2YWlsYWJsZSBzcGFjZSBpcyB0aGUgY2FwYWNpdHlcbiAxMzM6XHRcdCAgb2YgYSBzaW5nbGUgZHJpdmUsIGFuZCB0aGUgc2V0IHByb3RlY3RzIGFnYWluc3QgYSBmYWlsdXJlIG9mIChOIC0gMSlcbiAxMzQ6XHRcdCAgZHJpdmVzLlxuIDEzNTpcdFxuIDEzNjpcdFx0ICBJbmZvcm1hdGlvbiBhYm91dCBTb2Z0d2FyZSBSQUlEIG9uIExpbnV4IGlzIGNvbnRhaW5lZCBpbiB0aGVcbiAxMzc6XHRcdCAgU29mdHdhcmUtUkFJRCBtaW5pLUhPV1RPLCBhdmFpbGFibGUgZnJvbVxuIDEzODpcdFx0ICBcdTAwM2NodHRwczovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG9cdTAwM2UuICBUaGVyZSB5b3Ugd2lsbCBhbHNvXG4gMTM5Olx0XHQgIGxlYXJuIHdoZXJlIHRvIGdldCB0aGUgc3VwcG9ydGluZyB1c2VyIHNwYWNlIHV0aWxpdGllcyByYWlkdG9vbHMuXG4gMTQwOlx0XG4gMTQxOlx0XHQgIElmIHlvdSB3YW50IHRvIHVzZSBzdWNoIGEgUkFJRC0xIHNldCwgc2F5IFkuICBUbyBjb21waWxlIHRoaXMgY29kZVxuIDE0MjpcdFx0ICBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByYWlkMS5cbiAxNDM6XHRcbiAxNDQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxNDU6XHRcbiAxNDY6XHRjb25maWcgTURfUkFJRDEwXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtSQUlELTEwIChtaXJyb3JlZCBzdHJpcGluZykgbW9kZVwmIzM0O1xuIDE0ODpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX01EXG4gMTQ5Olx0XHRoZWxwXG4gMTUwOlx0XHQgIFJBSUQtMTAgcHJvdmlkZXMgYSBjb21iaW5hdGlvbiBvZiBzdHJpcGluZyAoUkFJRC0wKSBhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTUwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkNvbnNpZGVyaW5nIFJBSUQgT3B0aW9ucyoqCgpBbHJpZ2h0LCBJJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIHByaW1hcmlseSBvbiB0aGUgbW9yZSBjb21tb24gUkFJRCBjb25maWd1cmF0aW9ucywgYnV0IGl0JiMzOTtzIGNydWNpYWwgdG8gYmUgdGhvcm91Z2guIExldCYjMzk7cyBub3Qgb3Zlcmxvb2sgc29tZSBvZiB0aGUgbGVzcy11c2VkIGJ1dCBwb3RlbnRpYWxseSByZWxldmFudCBvcHRpb25zLiBUaW1lIHRvIGV4cGFuZCBteSBtZW50YWwgY2hlY2tsaXN0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBlc3BlY2lhbGx5IGluIHNwZWNpZmljIHVzZSBjYXNlcyB3aGVyZSB0aGVzZSBhbHRlcm5hdGl2ZXMgbWlnaHQgYmUgaWRlYWwuIE15IGluaXRpYWwgY29uc2lkZXJhdGlvbnMgY292ZXJlZCB0aGUgd29ya2hvcnNlcywgYnV0IGEgZGVlcGVyIGRpdmUgaXMgbmVjZXNzYXJ5LiBTcGVjaWZpY2FsbHksIGxldCYjMzk7cyBhbHNvIGdpdmUgYSB0aG9yb3VnaCBvbmNlLW92ZXIgdG8gUkFJRCA0LCA1LCBhbmQgNiDigJMgcmV2aXNpdGluZyB0aGVpciBzdHJlbmd0aHMsIHdlYWtuZXNzZXMsIGFuZCBwb3RlbnRpYWwgYXBwbGljYWJpbGl0eS4gSSBzaG91bGQgYWxzbyByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgRE0tUkFJRCYjMzk7cyBjYXBhYmlsaXRpZXMgYW5kIGl0cyBwbGFjZSBpbiB0aGlzIGxhbmRzY2FwZS4gQSBjb21wcmVoZW5zaXZlIHZpZXcgcmVxdWlyZXMgdGhpcyBtb3JlIGdyYW51bGFyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUxOlx0XHQgIG1pcnJvcmluZyAoUkFJRC0xKSB3aXRoIGVhc2llciBjb25maWd1cmF0aW9uIGFuZCBtb3JlIGZsZXhpYmxlXG4gMTUyOlx0XHQgIGxheW91dC5cbiAxNTM6XHRcdCAgVW5saWtlIFJBSUQtMCwgYnV0IGxpa2UgUkFJRC0xLCBSQUlELTEwIHJlcXVpcmVzIGFsbCBkZXZpY2VzIHRvXG4gMTU0Olx0XHQgIGJlIHRoZSBzYW1lIHNpemUgKG9yIGF0IGxlYXN0LCBvbmx5IGFzIG11Y2ggYXMgdGhlIHNtYWxsZXN0IGRldmljZVxuIDE1NTpcdFx0ICB3aWxsIGJlIHVzZWQpLlxuIDE1NjpcdFx0ICBSQUlELTEwIHByb3ZpZGVzIGEgdmFyaWV0eSBvZiBsYXlvdXRzIHRoYXQgcHJvdmlkZSBkaWZmZXJlbnQgbGV2ZWxzXG4gMTU3Olx0XHQgIG9mIHJlZHVuZGFuY3kgYW5kIHBlcmZvcm1hbmNlLlxuIDE1ODpcdFxuIDE1OTpcdFx0ICBSQUlELTEwIHJlcXVpcmVzIG1kYWRtLTEuNy4wIG9yIGxhdGVyLCBhdmFpbGFibGUgYXQ6XG4gMTYwOlx0XG4gMTYxOlx0XHQgIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL3JhaWQvbWRhZG0vXG4gMTYyOlx0XG4gMTYzOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMTY0Olx0XG4gMTY1Olx0Y29uZmlnIE1EX1JBSUQ0NTZcbiAxNjY6XHRcdHRyaXN0YXRlIFwmIzM0O1JBSUQtNC9SQUlELTUvUkFJRC02IG1vZGVcJiMzNDtcbiAxNjc6XHRcdGRlcGVuZHMgb24gQkxLX0RFVl9NRFxuIDE2ODpcdFx0c2VsZWN0IFJBSUQ2X1BRXG4gMTY5Olx0XHRzZWxlY3QgQ1JDMzJcbiAxNzA6XHRcdHNlbGVjdCBBU1lOQ19NRU1DUFlcbiAxNzE6XHRcdHNlbGVjdCBBU1lOQ19YT1JcbiAxNzI6XHRcdHNlbGVjdCBBU1lOQ19QUVxuIDE3MzpcdFx0c2VsZWN0IEFTWU5DX1JBSUQ2X1JFQ09WXG4gMTc0Olx0XHRoZWxwXG4gMTc1Olx0XHQgIEEgUkFJRC01IHNldCBvZiBOIGRyaXZlcyB3aXRoIGEgY2FwYWNpdHkgb2YgQyBNQiBwZXIgZHJpdmUgcHJvdmlkZXNcbiAxNzY6XHRcdCAgdGhlIGNhcGFjaXR5IG9mIEMgKiAoTiAtIDEpIE1CLCBhbmQgcHJvdGVjdHMgYWdhaW5zdCBhIGZhaWx1cmVcbiAxNzc6XHRcdCAgb2YgYSBzaW5nbGUgZHJpdmUuIEZvciBhIGdpdmVuIHNlY3RvciAocm93KSBudW1iZXIsIChOIC0gMSkgZHJpdmVzXG4gMTc4Olx0XHQgIGNvbnRhaW4gZGF0YSBzZWN0b3JzLCBhbmQgb25lIGRyaXZlIGNvbnRhaW5zIHRoZSBwYXJpdHkgcHJvdGVjdGlvbi5cbiAxNzk6XHRcdCAgRm9yIGEgUkFJRC00IHNldCwgdGhlIHBhcml0eSBibG9ja3MgYXJlIHByZXNlbnQgb24gYSBzaW5nbGUgZHJpdmUsXG4gMTgwOlx0XHQgIHdoaWxlIGEgUkFJRC01IHNldCBkaXN0cmlidXRlcyB0aGUgcGFyaXR5IGFjcm9zcyB0aGUgZHJpdmVzIGluIG9uZVxuIDE4MTpcdFx0ICBvZiB0aGUgYXZhaWxhYmxlIHBhcml0eSBkaXN0cmlidXRpb24gbWV0aG9kcy5cbiAxODI6XHRcbiAxODM6XHRcdCAgQSBSQUlELTYgc2V0IG9mIE4gZHJpdmVzIHdpdGggYSBjYXBhY2l0eSBvZiBDIE1CIHBlciBkcml2ZVxuIDE4NDpcdFx0ICBwcm92aWRlcyB0aGUgY2FwYWNpdHkgb2YgQyAqIChOIC0gMikgTUIsIGFuZCBwcm90ZWN0c1xuIDE4NTpcdFx0ICBhZ2FpbnN0IGEgZmFpbHVyZSBvZiBhbnkgdHdvIGRyaXZlcy4gRm9yIGEgZ2l2ZW4gc2VjdG9yXG4gMTg2Olx0XHQgIChyb3cpIG51bWJlciwgKE4gLSAyKSBkcml2ZXMgY29udGFpbiBkYXRhIHNlY3RvcnMsIGFuZCB0d29cbiAxODc6XHRcdCAgZHJpdmVzIGNvbnRhaW5zIHR3byBpbmRlcGVuZGVudCByZWR1bmRhbmN5IHN5bmRyb21lcy4gIExpa2VcbiAxODg6XHRcdCAgUkFJRC01LCBSQUlELTYgZGlzdHJpYnV0ZXMgdGhlIHN5bmRyb21lcyBhY3Jvc3MgdGhlIGRyaXZlc1xuIDE4OTpcdFx0ICBpbiBvbmUgb2YgdGhlIGF2YWlsYWJsZSBwYXJpdHkgZGlzdHJpYnV0aW9uIG1ldGhvZHMuXG4gMTkwOlx0XG4gMTkxOlx0XHQgIEluZm9ybWF0aW9uIGFib3V0IFNvZnR3YXJlIFJBSUQgb24gTGludXggaXMgY29udGFpbmVkIGluIHRoZVxuIDE5MjpcdFx0ICBTb2Z0d2FyZS1SQUlEIG1pbmktSE9XVE8sIGF2YWlsYWJsZSBmcm9tXG4gMTkzOlx0XHQgIFx1MDAzY2h0dHBzOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1x1MDAzZS4gVGhlcmUgeW91IHdpbGwgYWxzb1xuIDE5NDpcdFx0ICBsZWFybiB3aGVyZSB0byBnZXQgdGhlIHN1cHBvcnRpbmcgdXNlciBzcGFjZSB1dGlsaXRpZXMgcmFpZHRvb2xzLlxuIDE5NTpcdFxuIDE5NjpcdFx0ICBJZiB5b3Ugd2FudCB0byB1c2Ugc3VjaCBhIFJBSUQtNC9SQUlELTUvUkFJRC02IHNldCwgc2F5IFkuICBUb1xuIDE5NzpcdFx0ICBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE5ODpcdFx0ICB3aWxsIGJlIGNhbGxlZCByYWlkNDU2LlxuIDE5OTpcdFxuIDIwMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDIwMTpcdFxuIDIwMjpcdGNvbmZpZyBNRF9DTFVTVEVSXG4gMjAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtDbHVzdGVyIFN1cHBvcnQgZm9yIE1EXCYjMzQ7XG4gMjA0Olx0XHRzZWxlY3QgTURfQklUTUFQXG4gMjA1Olx0XHRkZXBlbmRzIG9uIEJMS19ERVZfTURcbiAyMDY6XHRcdGRlcGVuZHMgb24gRExNXG4gMjA3Olx0XHRkZWZhdWx0IG5cbiAyMDg6XHRcdGhlbHBcbiAyMDk6XHRcdENsdXN0ZXJpbmcgc3VwcG9ydCBmb3IgTUQgZGV2aWNlcy4gVGhpcyBlbmFibGVzIGxvY2tpbmcgYW5kXG4gMjEwOlx0XHRzeW5jaHJvbml6YXRpb24gYWNyb3NzIG11bHRpcGxlIHN5c3RlbXMgb24gdGhlIGNsdXN0ZXIsIHNvIGFsbFxuIDIxMTpcdFx0bm9kZXMgaW4gdGhlIGNsdXN0ZXIgY2FuIGFjY2VzcyB0aGUgTUQgZGV2aWNlcyBzaW11bHRhbmVvdXNseS5cbiAyMTI6XHRcbiAyMTM6XHRcdFRoaXMgYnJpbmdzIHRoZSByZWR1bmRhbmN5IChhbmQgdXB0aW1lKSBvZiBSQUlEIGxldmVscyBhY3Jvc3MgdGhlXG4gMjE0Olx0XHRub2RlcyBvZiB0aGUgY2x1c3Rlci4gQ3VycmVudGx5LCBpdCBjYW4gd29yayB3aXRoIHJhaWQxIGFuZCByYWlkMTBcbiAyMTU6XHRcdChsaW1pdGVkIHN1cHBvcnQpLlxuIDIxNjpcdFxuIDIxNzpcdFx0SWYgdW5zdXJlLCBzYXkgTi5cbiAyMTg6XHRcbiAyMTk6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9tZC9iY2FjaGUvS2NvbmZpZ1wmIzM0O1xuIDIyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg5MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydCBhbmQgdXNpbmcgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlOgoKKipDaGVja2luZyBETS1SQUlEIGluIGEgQnJvYWRlciBDb250ZXh0KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgaXNzdWUsIGFuZCBJJiMzOTt2ZSBhbHJlYWR5IGNvbnNpZGVyZWQgW21lbnRpb24gcHJldmlvdXMgcG9pbnRzIGlmIHRoZSBvcmlnaW5hbCBjb250ZXh0IGlzIGF2YWlsYWJsZV0uIE5vdywgSSBuZWVkIHRvIGV4cGFuZCBteSBmb2N1cyBhIGJpdC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIHNvbWV0aGluZyByZWxhdGVkIHRvIERNLVJBSUQuIEl0JiMzOTtzIG9mdGVuIHRoZSBlbGVwaGFudCBpbiB0aGUgcm9vbSB0aGF0IGdldHMgZm9yZ290dGVuIHdoZW4gZGlhZ25vc2luZyBjb21wbGV4IHN0b3JhZ2UgaXNzdWVzLiBUaGluZ3MgZ2V0IGhhaXJ5IGZhc3Qgd2hlbiB5b3UgaGF2ZSBMVk0sIE1EIGFuZCBETS1SQUlEIGFsbCBwbGF5aW5nIHRvZ2V0aGVyLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHR5cGljYWwgZmFpbHVyZSBtb2RlcywgZ290Y2hhcywgYW5kIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBjb21wb25lbnRzIGluIHRoYXQgc3RhY2suIFNwZWNpZmljYWxseSwgYXJlIHRoZSBrZXJuZWwgbW9kdWxlcyBsb2FkZWQ/IElzIHRoZSBkZXZpY2UgbWFwcGVyIGxheWVyIGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBhbmQgaG93IGFib3V0IHRoZSBSQUlEIGNvbmZpZ3VyYXRpb24gaXRzZWxmPyBJJiMzOTtsbCBwcm9iYWJseSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgc29tZSBvZiB0aGUgbW9yZSBhZHZhbmNlZCBmZWF0dXJlcyBsaWtlIG11bHRpcGF0aGluZyBhbmQgc25hcHNob3R0aW5nIGFzIHBvdGVudGlhbCBjb21wbGljYXRpbmcgZmFjdG9ycy4gSSBzdXNwZWN0IERNLVJBSUQgaGVyZSwgYnV0IGl0cyB3b3J0aCBhIHF1aWNrIGNoZWNrIHRvIHJ1bGUgaXQgb3V0IGJlZm9yZSBJIGdvIGRlZXBlciBkb3duIGEgcmFiYml0IGhvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBETV9SQUlEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9LY29uZmlnPTQyMD1jb25maWcgRE1fTE9HX1VTRVJTUEFDRVxuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy00MzAtXG5kcml2ZXJzL21kL0tjb25maWc6NDMxOmNvbmZpZyBETV9SQUlEXG5kcml2ZXJzL21kL0tjb25maWctNDMyLSAgICAgICB0cmlzdGF0ZSBcJiMzNDtSQUlEIDEvNC81LzYvMTAgdGFyZ2V0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjY1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzIGluIHRoZSBNRCBMYXllcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgdGhpcyBwYXRjaCBpcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGlzIGEgcmVzb3VuZGluZyAmIzM0O3llcy4mIzM0OyBUaGUgbW9kaWZpY2F0aW9ucyB0b3VjaCBjcml0aWNhbCBhcmVhcyBvZiB0aGUgTUQgKE11bHRpcGxlIERldmljZSkgbGF5ZXI6IGxvY2tpbmcgaGllcmFyY2hpZXMgaW52b2x2aW5nIG11dGV4ZXMgYW5kIGxvY2tzIGxpa2UgYHEtJmd0O2xpbWl0c19sb2NrYCBhbmQgYHJlY29uZmlnX211dGV4YCwgcXVldWUgbGltaXRzIGhhbmRsaW5nLCBhbmQgZGlzayBhZGRpdGlvbi9yZW1vdmFsLCBhbGwgYWNyb3NzIHNldmVyYWwgUkFJRCBwZXJzb25hbGl0aWVzLiBTcGVjaWZpY2FsbHksIGNoYW5nZXMgaW4gaW9jdGwgaGFuZGxpbmcsIHN5c2ZzIGludGVyYWN0aW9ucywgc3luYyB0aHJlYWQgZXhlY3V0aW9uLCBhbmQgYGhvdF9hZGRfZGlza2AgY2FsbGJhY2tzIGluZGljYXRlIGEgaGlnaCBsaWtlbGlob29kIG9mIGludHJvZHVjaW5nIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciBvdGhlciBjb25jdXJyZW5jeS1yZWxhdGVkIGJ1Z3MuIEdpdmVuIHRoYXQgdGhlc2UgY29kZSBwYXRocyBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGlvY3RscyBhbmQgc3lzZnMsIGZ1enppbmcgaXMgYWJzb2x1dGVseSBjcnVjaWFsIHRvIHRlc3QgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIG5ldyBsb2NraW5nIG9yZGVyIGFuZCBxdWV1ZSBsaW1pdCBpbXBsZW1lbnRhdGlvbnMuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyB0byB0YXJnZXQgd2l0aCB0aGUgZnV6emVyLiBXZSBuZWVkIHRvIHNlbGVjdCB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgZW50cnkgcG9pbnRzIHRoYXQgZW5jYXBzdWxhdGUgdGhlIGNoYW5nZWQgbG9naWMuCgpIZXJlJiMzOTtzIG15IGxpc3QsIGJhc2VkIG9uIHRoZSBtb2RpZmllZCBhbmQgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnM6CgoqICAgSW4gYGRyaXZlcnMvbWQvbWQuY2A6IGBtZGRldl9zdGFja19yZGV2X2ludG9gLCBgbWRkZXZfdXBkYXRlX2lvX29wdGAsIGBtZF9hZGRfbmV3X2Rpc2tgLCBgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzYCwgYGhvdF9yZW1vdmVfZGlza2AsIGByZGV2X2F0dHJfc3RvcmVgLCBgbWRfaW9jdGxgLCBgbWRfc3RhcnRfc3luY2AsIGBjaGVja19zYl9jaGFuZ2VzYCwgYGFkZF9ib3VuZF9yZGV2YC4KKiAgIEluIGBkcml2ZXJzL21kL3JhaWQxLmNgOiBgcmFpZDFfYWRkX2Rpc2tgCiogICBJbiBgZHJpdmVycy9tZC9yYWlkMTAuY2A6IGByYWlkMTBfYWRkX2Rpc2tgCiogICBJbiBgZHJpdmVycy9tZC9yYWlkNS5jYDogYHJhaWQ1X2FkZF9kaXNrYCwgYHJhaWQ1X3N0b3JlX3NraXBfY29weWAKKiAgIEluIGBkcml2ZXJzL21kL21kLWxpbmVhci5jYDogYGxpbmVhcl9hZGRgCgpJIGFsc28gY29uZmlybWVkIHRoYXQgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9ja2AgaXMgYSBzdGF0aWMgaW5saW5lIGluIGBpbmNsdWRlL2xpbnV4L2Jsa2Rldi5oYCwgYXMgZXhwZWN0ZWQuCgpGaW5hbGx5LCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gdHJpZ2dlciB0aGUgZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgbXVsdGlwbGUgUkFJRCBwZXJzb25hbGl0aWVzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHksIHNvIHdlIG5lZWQgdG8gZW5hYmxlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIGFsbCByZWxldmFudCBjb2RlIHBhdGhzIGFyZSB0ZXN0ZWQ6CgoqICAgYEJMS19ERVZfTURgCiogICBgTURfUkFJRDFgCiogICBgTURfUkFJRDEwYAoqICAgYE1EX1JBSUQ0NTZgCiogICBgTURfTElORUFSYAoqICAgYERNX1JBSURgCgpJIGFtIGFsc28gZG91YmxlLWNoZWNraW5nIHRoZSBjb25maWd1cmF0aW9uIGNvdmVyYWdlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgZmlsZXMgcmVsYXRlZCB0byBtdWx0aXBsZSBSQUlEIGltcGxlbWVudGF0aW9ucywgc28gZW5hYmxpbmcgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIHNob3VsZCBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlLCBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYERNX1JBSURgICh3aGljaCBkZXBlbmRzIG9uIGBCTEtfREVWX0RNYCBhbmQgaW5kaXJlY3RseSBvbiBgTURfUkFJRDQ1NmApIGlzIHJlbGV2YW50IGJlY2F1c2Ugb2YgdGhlIGBkcml2ZXJzL21kL2RtLXJhaWQuY2AgY2hhbmdlLCBhbmQgdG8gYSBsZXNzZXIgZXh0ZW50LCBgTURfQVVUT0RFVEVDVGAgYXMgd2VsbC4gV2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIGZvY3VzaW5nIG9uIHRoZSBsaXN0ZWQgc3ltYm9scywgd2UgY2FuIHBlcmZvcm0gYSBjb21wcmVoZW5zaXZlIGZ1enppbmcgY2FtcGFpZ24gb24gdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERNX1JBSUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21kLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21kL0tjb25maWc9NDIwPWNvbmZpZyBETV9MT0dfVVNFUlNQQUNFXG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTQzMC1cbmRyaXZlcnMvbWQvS2NvbmZpZzo0MzE6Y29uZmlnIERNX1JBSURcbmRyaXZlcnMvbWQvS2NvbmZpZy00MzItICAgICAgIHRyaXN0YXRlIFwmIzM0O1JBSUQgMS80LzUvNi8xMCB0YXJnZXRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBSQUlEKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBSQUlEIGNvbmZpZ3VyYXRpb24uIFRoZSBjb250ZXh0IHN1Z2dlc3RzIHRoYXQgdGhlIHJlbGV2YW50IGNvZGUgd2lsbCBiZSBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9tZC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIG1vZHVsZSBjb25maWd1cmF0aW9uIGZvciB0aGUgUkFJRCBkcml2ZXJzIHdpbGwgYmUuIEl0JiMzOTtzIGEgbmF0dXJhbCBzdGFydGluZyBwb2ludC4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lIDQzMS4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2x1ZSB0aGVyZSB0byB3aGF0IGlzIGJlaW5nIGNvbmZpZ3VyZWQgYW5kIHdoZXJlIHRoaW5ncyBhcmUgZGVmaW5lZC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB3aGF0ZXZlciBJJiMzOTttIGxvb2tpbmcgZm9yIHdpbGwgYmUgcmVsYXRlZCB0byB3aGF0ZXZlciBpcyBvbiB0aGF0IGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MjU6XHRcdCAgVGhlIHVzZXJzcGFjZSBsb2dnaW5nIG1vZHVsZSBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3JcbiA0MjY6XHRcdCAgcmVsYXlpbmcgdGhlIGRtLWRpcnR5LWxvZyBBUEkgdG8gdXNlcnNwYWNlLiAgTG9nIGRlc2lnbnNcbiA0Mjc6XHRcdCAgd2hpY2ggYXJlIG1vcmUgc3VpdGVkIHRvIHVzZXJzcGFjZSBpbXBsZW1lbnRhdGlvbiAoZS5nLlxuIDQyODpcdFx0ICBzaGFyZWQgc3RvcmFnZSBsb2dzKSBvciBleHBlcmltZW50YWwgbG9ncyBjYW4gYmUgaW1wbGVtZW50ZWRcbiA0Mjk6XHRcdCAgYnkgbGV2ZXJhZ2luZyB0aGlzIGZyYW1ld29yay5cbiA0MzA6XHRcbiA0MzE6XHRjb25maWcgRE1fUkFJRFxuIDQzMjpcdCAgICAgICB0cmlzdGF0ZSBcJiMzNDtSQUlEIDEvNC81LzYvMTAgdGFyZ2V0XCYjMzQ7XG4gNDMzOlx0ICAgICAgIGRlcGVuZHMgb24gQkxLX0RFVl9ETVxuIDQzNDpcdCAgICAgICBzZWxlY3QgTURfUkFJRDBcbiA0MzU6XHQgICAgICAgc2VsZWN0IE1EX1JBSUQxXG4gNDM2Olx0ICAgICAgIHNlbGVjdCBNRF9SQUlEMTBcbiA0Mzc6XHQgICAgICAgc2VsZWN0IE1EX1JBSUQ0NTZcbiA0Mzg6XHQgICAgICAgc2VsZWN0IE1EX0JJVE1BUFxuIDQzOTpcdCAgICAgICBzZWxlY3QgQkxLX0RFVl9NRFxuIDQ0MDpcdFx0aGVscFxuIDQ0MTpcdFx0IEEgZG0gdGFyZ2V0IHRoYXQgc3VwcG9ydHMgUkFJRDEsIFJBSUQxMCwgUkFJRDQsIFJBSUQ1IGFuZCBSQUlENiBtYXBwaW5nc1xuIDQ0MjpcdFxuIDQ0MzpcdFx0IEEgUkFJRC01IHNldCBvZiBOIGRyaXZlcyB3aXRoIGEgY2FwYWNpdHkgb2YgQyBNQiBwZXIgZHJpdmUgcHJvdmlkZXNcbiA0NDQ6XHRcdCB0aGUgY2FwYWNpdHkgb2YgQyAqIChOIC0gMSkgTUIsIGFuZCBwcm90ZWN0cyBhZ2FpbnN0IGEgZmFpbHVyZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzcwNAoJCQkJCQkJb3V0cHV0OiAyODUKCQkJCQkJCXRob3VnaHRzOiAzODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1EIFJBSUQgTGF5ZXIgUmVmYWN0b3JpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBiYXNlZCBvbiB0aGUgY29uZmlnc+KAlGBCTEtfREVWX01EYCwgYE1EX1JBSUQxYCwgYE1EX1JBSUQxMGAsIGBNRF9SQUlENDU2YCwgYE1EX0xJTkVBUmAsIGFuZCBgRE1fUkFJRGDigJRpdCYjMzk7cyBjbGVhcmx5IGZvY3VzZWQgb24gdGhlIE1EIChzb2Z0d2FyZSBSQUlEKSBsYXllci4gVGhlIGNvcmUgb2YgdGhpcyByZWZhY3RvciBzZWVtcyB0byBiZSBhYm91dCBob3cgcXVldWUgbGltaXRzIGFyZSB1cGRhdGVkIGFuZCB0aGUgb3JkZXIgaW4gd2hpY2ggbG9ja3MgYXJlIGFjcXVpcmVkLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgcS0mZ3Q7bGltaXRzX2xvY2tgLCBgcmVjb25maWdfbXV0ZXhgLCBhbmQgZGV2aWNlIHN1c3BlbnNpb24uCgpUaGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZV90cnlsb2NrKClgIGFuZCBgbWRkZXZfc3RhY2tfcmRldl9pbnRvKClgLiBBbnl0aW1lIHlvdSBtZXNzIHdpdGggbG9jayBoaWVyYXJjaGllcyBpbiB0aGlzIGtpbmQgb2YgbG93LWxldmVsIGNvZGUsIG15IGFudGVubmEgZ28gdXAuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG9wZXJhdGlvbnMgZHVyaW5nIGhvdC1hZGQsIHNwYXJlIHJlbW92YWwvYWRkaXRpb24sIHJlc2hhcGVzLCBhbmQgdGhvc2UgYXJlIGFsbCBzZW5zaXRpdmUgcG9pbnRzLiBJdCYjMzk7cyBhbHNvIHdvcnRoIG5vdGluZyBob3cgbWFueSBpbnRlcmFjdGlvbnMgdGhlIGtlcm5lbCBoYXMgd2l0aCB0aG9zZS4gV2Ugc2hvdWxkIGJlIGV4dHJhIHZpZ2lsYW50LCBhbmQgdGhhdCBtZWFucyB3ZSB3aWxsIG5lZWQgdG8gZ2l2ZSBpdCBzcGVjaWFsIGF0dGVudGlvbiB0byBhdm9pZCBzdWJ0bGUgZGVhZGxvY2tzLCBsb2NraW5nIGluY29uc2lzdGVuY2llcywgYW5kIHBvdGVudGlhbCBzdGF0ZSByZWdyZXNzaW9ucy4KCkxldCYjMzk7cyBkbyBhIHNhbml0eSBjaGVjayBvbiB0aGUgZm9jdXMgc3ltYm9scy4gTG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IGEgZ29vZCBsaXN0OiBgbWRkZXZfc3RhY2tfcmRldl9pbnRvYCwgYG1kZGV2X3VwZGF0ZV9pb19vcHRgLCBgbWRfYWRkX25ld19kaXNrYCwgYHJlbW92ZV9hbmRfYWRkX3NwYXJlc2AsIGByZGV2X2F0dHJfc3RvcmVgLCBgbWRfc3RhcnRfc3luY2AsIGByYWlkMV9hZGRfZGlza2AsIGByYWlkMTBfYWRkX2Rpc2tgLCBgcmFpZDVfYWRkX2Rpc2tgLCBgcmFpZDVfc3RvcmVfc2tpcF9jb3B5YCwgYW5kIGBsaW5lYXJfYWRkYC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgbGlzdC4KClRoZXkgYXJlIGFsbCBzcGVjaWZpYyB0byBNRCBSQUlELCBhbmQgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgd2Ugd2FudC4gVGhleSBhcmUgYWxzbyBwcmVzZW50IGluIHRoZSBtb2RpZmllZCBDIGZpbGVzIHdoaWNoIG1lYW5zIGl0IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgcmV2aWV3LgoKSSBuZWVkIHRvIGZsYWcgdGhpcyBmb3IgZnV6emluZyBhbmQgZXh0ZW5zaXZlIHRlc3RpbmcuIE5vdywgSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX01EJiMzNDssCiAgICAmIzM0O01EX1JBSUQxJiMzNDssCiAgICAmIzM0O01EX1JBSUQxMCYjMzQ7LAogICAgJiMzNDtNRF9SQUlENDU2JiMzNDssCiAgICAmIzM0O01EX0xJTkVBUiYjMzQ7LAogICAgJiMzNDtETV9SQUlEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWRkZXZfc3RhY2tfcmRldl9pbnRvJiMzNDssCiAgICAmIzM0O21kZGV2X3VwZGF0ZV9pb19vcHQmIzM0OywKICAgICYjMzQ7bWRfYWRkX25ld19kaXNrJiMzNDssCiAgICAmIzM0O3JlbW92ZV9hbmRfYWRkX3NwYXJlcyYjMzQ7LAogICAgJiMzNDtyZGV2X2F0dHJfc3RvcmUmIzM0OywKICAgICYjMzQ7bWRfc3RhcnRfc3luYyYjMzQ7LAogICAgJiMzNDtyYWlkMV9hZGRfZGlzayYjMzQ7LAogICAgJiMzNDtyYWlkMTBfYWRkX2Rpc2smIzM0OywKICAgICYjMzQ7cmFpZDVfYWRkX2Rpc2smIzM0OywKICAgICYjMzQ7cmFpZDVfc3RvcmVfc2tpcF9jb3B5JiMzNDssCiAgICAmIzM0O2xpbmVhcl9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzdHJ1Y3R1cmVzIGxvY2sgYWNxdWlzaXRpb24gYW5kIHF1ZXVlIGxpbWl0cyBwcm9wYWdhdGlvbiBpbiB0aGUgTUQgKHNvZnR3YXJlIFJBSUQpIGxheWVyIHRvIHByZXZlbnQgZGVhZGxvY2tzIGJldHdlZW4gcS1cdTAwM2VsaW1pdHNfbG9jaywgcmVjb25maWdfbXV0ZXgsIGFuZCBtZGRldl9zdXNwZW5kLiBJdCBhbHRlcnMgZGlzayBhZGRpdGlvbi9yZW1vdmFsIGFuZCBzeXNmcy9pb2N0bCBoYW5kbGluZyBhY3Jvc3MgbXVsdGlwbGUgUkFJRCBwZXJzb25hbGl0aWVzIChyYWlkMSwgcmFpZDEwLCByYWlkNSwgbGluZWFyLCBkbS1yYWlkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGlzY292ZXIgcG90ZW50aWFsIGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGNvcnJ1cHRpb25zIGR1cmluZyBjb25jdXJyZW50IFJBSUQgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX01EJiMzNDssCiAgICAmIzM0O01EX1JBSUQxJiMzNDssCiAgICAmIzM0O01EX1JBSUQxMCYjMzQ7LAogICAgJiMzNDtNRF9SQUlENDU2JiMzNDssCiAgICAmIzM0O01EX0xJTkVBUiYjMzQ7LAogICAgJiMzNDtETV9SQUlEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWRkZXZfc3RhY2tfcmRldl9pbnRvJiMzNDssCiAgICAmIzM0O21kZGV2X3VwZGF0ZV9pb19vcHQmIzM0OywKICAgICYjMzQ7bWRfYWRkX25ld19kaXNrJiMzNDssCiAgICAmIzM0O3JlbW92ZV9hbmRfYWRkX3NwYXJlcyYjMzQ7LAogICAgJiMzNDtyZGV2X2F0dHJfc3RvcmUmIzM0OywKICAgICYjMzQ7bWRfc3RhcnRfc3luYyYjMzQ7LAogICAgJiMzNDtyYWlkMV9hZGRfZGlzayYjMzQ7LAogICAgJiMzNDtyYWlkMTBfYWRkX2Rpc2smIzM0OywKICAgICYjMzQ7cmFpZDVfYWRkX2Rpc2smIzM0OywKICAgICYjMzQ7cmFpZDVfc3RvcmVfc2tpcF9jb3B5JiMzNDssCiAgICAmIzM0O2xpbmVhcl9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzdHJ1Y3R1cmVzIGxvY2sgYWNxdWlzaXRpb24gYW5kIHF1ZXVlIGxpbWl0cyBwcm9wYWdhdGlvbiBpbiB0aGUgTUQgKHNvZnR3YXJlIFJBSUQpIGxheWVyIHRvIHByZXZlbnQgZGVhZGxvY2tzIGJldHdlZW4gcS1cdTAwM2VsaW1pdHNfbG9jaywgcmVjb25maWdfbXV0ZXgsIGFuZCBtZGRldl9zdXNwZW5kLiBJdCBhbHRlcnMgZGlzayBhZGRpdGlvbi9yZW1vdmFsIGFuZCBzeXNmcy9pb2N0bCBoYW5kbGluZyBhY3Jvc3MgbXVsdGlwbGUgUkFJRCBwZXJzb25hbGl0aWVzIChyYWlkMSwgcmFpZDEwLCByYWlkNSwgbGluZWFyLCBkbS1yYWlkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGlzY292ZXIgcG90ZW50aWFsIGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGNvcnJ1cHRpb25zIGR1cmluZyBjb25jdXJyZW50IFJBSUQgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1EIChzb2Z0d2FyZSBSQUlEKSBzdWJzeXN0ZW0gYW5kIGJsb2NrIGxheWVyIGhlbHBlciBmdW5jdGlvbnMgdG8gcmVzdHJ1Y3R1cmUgaG93IHF1ZXVlIGxpbWl0cyBhcmUgdXBkYXRlZCBhY3Jvc3MgbWQtbGluZWFyLCByYWlkMSwgcmFpZDEwLCBhbmQgcmFpZDUgYXJyYXlzLiBTcGVjaWZpY2FsbHksIGl0IHBhc3NlcyBhbiBleGlzdGluZyBvciBuZXdseSBzdGFydGVkIGBzdHJ1Y3QgcXVldWVfbGltaXRzYCB0aHJvdWdoIHZhcmlvdXMgaG90LWFkZC9yZW1vdmUvdXBkYXRlIGNhbGwgcGF0aHMgdG8gYXZvaWQgbG9jay1pbnZlcnNpb24gZGVhZGxvY2tzIGJldHdlZW4gYHEtXHUwMDNlbGltaXRzX2xvY2tgLCBhcnJheSBzdXNwZW5zaW9uLCBhbmQgYHJlY29uZmlnX211dGV4YC5cblxuQWxsIGBzdHJ1Y3QgcXVldWVfbGltaXRzYCBpbnN0YW5jZXMgb24gdGhlIHN0YWNrIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlICh2aWEgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAsIHdoaWNoIHJldHVybnMgYHEtXHUwMDNlbGltaXRzYCBieSB2YWx1ZSwgb3IgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jaygpYCB3aGljaCBwb3B1bGF0ZXMgYCpsaW1gKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgcmVhZCwgcGFzc2VkIHRvIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCBvciByZWZlcmVuY2Uvc3RhdGUgZXJyb3JzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWdnZXJzIHJhdGhlciB0aGFuIEtNU0FOLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyB0aGVyZWZvcmUgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYzYzZiZjI2NmEyNGNmNTc1NGI3YmMwNDUwMTFlNzQzZDJlM2Q3N2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE4OjEzOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkLmMgYi9kcml2ZXJzL21kL2RtLXJhaWQuYwppbmRleCA4ZjVhNWUxMzQyYTk1Li4yMWExOTIyYmVlNGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXJhaWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL2RtLXJhaWQuYwpAQCAtMzkyMyw3ICYjNDM7MzkyMyw3IEBAIHN0YXRpYyB2b2lkIGF0dGVtcHRfcmVzdG9yZV9vZl9mYXVsdHlfZGV2aWNlcyhzdHJ1Y3QgcmFpZF9zZXQgKnJzKQogCQkJY2xlYXJfYml0KEZhdWx0eSwgJmFtcDtyLSZndDtmbGFncyk7CiAJCQljbGVhcl9iaXQoV3JpdGVFcnJvclNlZW4sICZhbXA7ci0mZ3Q7ZmxhZ3MpOwogCi0JCQlpZiAobWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhtZGRldiwgcikpIHsKJiM0MzsJCQlpZiAobWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhtZGRldiwgciwgTlVMTCkpIHsKIAkJCQkvKiBGYWlsZWQgdG8gcmV2aXZlIHRoaXMgZGV2aWNlLCB0cnkgbmV4dCAqLwogCQkJCXItJmd0O3JhaWRfZGlzayA9IHItJmd0O3NhdmVkX3JhaWRfZGlzayA9IC0xOwogCQkJCXItJmd0O2ZsYWdzID0gZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLWF1dG9kZXRlY3QuYyBiL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jCmluZGV4IDRiODAxNjVhZmQyMzMuLjkyOTUxMzEwOTY1N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jCkBAIC0yMTMsNyAmIzQzOzIxMyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtZF9zZXR1cF9kcml2ZShzdHJ1Y3QgbWRfc2V0dXBfYXJncyAqYXJncykKIAkJCQkoMSAmbHQ7Jmx0OyBNRF9ESVNLX0FDVElWRSkgfCAoMSAmbHQ7Jmx0OyBNRF9ESVNLX1NZTkMpOwogCQl9CiAKLQkJbWRfYWRkX25ld19kaXNrKG1kZGV2LCAmYW1wO2RpbmZvKTsKJiM0MzsJCW1kX2FkZF9uZXdfZGlzayhtZGRldiwgJmFtcDtkaW5mbywgTlVMTCk7CiAJfQogCiAJaWYgKCFlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLWxpbmVhci5jIGIvZHJpdmVycy9tZC9tZC1saW5lYXIuYwppbmRleCA3M2IzNjdiNjFiODczLi4xZjQ0YzJkN2RiOTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLWxpbmVhci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvbWQtbGluZWFyLmMKQEAgLTE4Niw3ICYjNDM7MTg2LDggQEAgc3RhdGljIGludCBsaW5lYXJfcnVuKHN0cnVjdCBtZGRldiAqbWRkZXYpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBsaW5lYXJfYWRkKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KQomIzQzO3N0YXRpYyBpbnQgbGluZWFyX2FkZChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldiwKJiM0MzsJCSAgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAkvKiBBZGRpbmcgYSBkcml2ZSB0byBhIGxpbmVhciBhcnJheSBhbGxvd3MgdGhlIGFycmF5IHRvIGdyb3cuCiAJICogSXQgaXMgcGVybWl0dGVkIGlmIHRoZSBuZXcgZHJpdmUgaGFzIGEgbWF0Y2hpbmcgc3VwZXJibG9jawpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDY4MGIzNGE2M2NiM2QuLmM0MDU0ZDA2ZDEwNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmMKQEAgLTk0LDggJiM0Mzs5NCw4IEBAIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZXN5bmNfd2FpdCk7CiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWRfbWlzY193cTsKIAotc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwKLQkJCQkgc3RydWN0IG1kX3JkZXYgKnRoaXMpOwomIzQzO3N0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICp0aGlzLAomIzQzOwkJCQkgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTsKIHN0YXRpYyB2b2lkIG1kZGV2X2RldGFjaChzdHJ1Y3QgbWRkZXYgKm1kZGV2KTsKIHN0YXRpYyB2b2lkIGV4cG9ydF9yZGV2KHN0cnVjdCBtZF9yZGV2ICpyZGV2KTsKIHN0YXRpYyB2b2lkIG1kX3dha2V1cF90aHJlYWRfZGlyZWN0bHkoc3RydWN0IG1kX3RocmVhZCBfX3JjdSAqKnRocmVhZCk7CkBAIC0yOTgxLDcgJiM0MzsyOTgxLDcgQEAgdm9pZCBtZF91cGRhdGVfc2Ioc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZvcmNlX2NoYW5nZSkKIH0KIEVYUE9SVF9TWU1CT0wobWRfdXBkYXRlX3NiKTsKIAotc3RhdGljIGludCBhZGRfYm91bmRfcmRldihzdHJ1Y3QgbWRfcmRldiAqcmRldikKJiM0MztzdGF0aWMgaW50IGFkZF9ib3VuZF9yZGV2KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJc3RydWN0IG1kZGV2ICptZGRldiA9IHJkZXYtJmd0O21kZGV2OwogCWludCBlcnIgPSAwOwpAQCAtMjk5NCw3ICYjNDM7Mjk5NCw3IEBAIHN0YXRpYyBpbnQgYWRkX2JvdW5kX3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJCSAqLwogCQlzdXBlcl90eXBlc1ttZGRldi0mZ3Q7bWFqb3JfdmVyc2lvbl0uCiAJCQl2YWxpZGF0ZV9zdXBlcihtZGRldiwgTlVMTC8qZnJlc2hlc3QqLywgcmRldik7Ci0JCWVyciA9IG1kZGV2LSZndDtwZXJzLSZndDtob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYpOwomIzQzOwkJZXJyID0gbWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhtZGRldiwgcmRldiwgbGltKTsKIAkJaWYgKGVycikgewogCQkJbWRfa2lja19yZGV2X2Zyb21fYXJyYXkocmRldik7CiAJCQlyZXR1cm4gZXJyOwpAQCAtMzAzMyw3ICYjNDM7MzAzMywxMyBAQCBzdGF0aWMgaW50IGNtZF9tYXRjaChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnN0cikKIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5IHsKIAlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CiAJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBtZF9yZGV2ICosIGNoYXIgKik7Ci0Jc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiYjNDM7CS8qCiYjNDM7CSAqIEBsaW06IGEgcXVldWUgbGltaXRzIHVwZGF0ZSB0aGUgY2FsbGVyIG93bnMsIG9yIE5VTEwuICBTdG9yZXMgdGhhdAomIzQzOwkgKiBjYW4gYWRkIGEgbGVnIHRvIHRoZSBhcnJheSBtdXN0IHN0YWNrIGludG8gaXQgcmF0aGVyIHRoYW4gdGFrZQomIzQzOwkgKiBxLSZndDtsaW1pdHNfbG9jayB0aGVtc2VsdmVzLCBzZWUgbWRfc3RhcnRfc3luYygpLgomIzQzOwkgKi8KJiM0MzsJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbiwKJiM0MzsJCQkgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTsKIH07CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0zMDc5LDcgJiM0MzszMDg1LDggQEAgc3RhdGVfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIH0KIAogc3RhdGljIHNzaXplX3QKLXN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7c3RhdGVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKJiM0MzsJICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAkvKiBjYW4gd3JpdGUKIAkgKiAgZmF1bHR5ICAtIHNpbXVsYXRlcyBhbiBlcnJvcgpAQCAtMzExMCw3ICYjNDM7MzExNyw3IEBAIHN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiAJfSBlbHNlIGlmIChjbWRfbWF0Y2goYnVmLCAmIzM0O3JlbW92ZSYjMzQ7KSkgewogCQlpZiAocmRldi0mZ3Q7bWRkZXYtJmd0O3BlcnMpIHsKIAkJCWNsZWFyX2JpdChCbG9ja2VkLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKLQkJCXJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LSZndDttZGRldiwgcmRldik7CiYjNDM7CQkJcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtJmd0O21kZGV2LCByZGV2LCBsaW0pOwogCQl9CiAJCWlmIChyZGV2LSZndDtyYWlkX2Rpc2sgJmd0Oz0gMCkKIAkJCWVyciA9IC1FQlVTWTsKQEAgLTMyMjksNyAmIzQzOzMyMzYsNyBAQCBzdGF0ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogCQkJaWYgKCFtZGRldl9pc19jbHVzdGVyZWQocmRldi0mZ3Q7bWRkZXYpIHx8CiAJCQkgICAgKGVyciA9IG1kZGV2LSZndDtjbHVzdGVyX29wcy0mZ3Q7Z2F0aGVyX2JpdG1hcHMocmRldikpID09IDApIHsKIAkJCQljbGVhcl9iaXQoRmF1bHR5LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKLQkJCQllcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTsKJiM0MzsJCQkJZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTsKIAkJCX0KIAkJfSBlbHNlCiAJCQllcnIgPSAtRUJVU1k7CkBAIC0zMjU3LDcgJiM0MzszMjY0LDggQEAgZXJyb3JzX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpCiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1lcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0MztlcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKJiM0MzsJICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJdW5zaWduZWQgaW50IG47CiAJaW50IHJ2OwpAQCAtMzI4Myw3ICYjNDM7MzI5MSw4IEBAIHNsb3Rfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIH0KIAogc3RhdGljIHNzaXplX3QKLXNsb3Rfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0MztzbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCiYjNDM7CSAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAlpbnQgc2xvdDsKIAlpbnQgZXJyOwpAQCAtMzMxNCw3ICYjNDM7MzMyMyw3IEBAIHNsb3Rfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIAkJaWYgKHJkZXYtJmd0O21kZGV2LSZndDtwZXJzLSZndDtob3RfcmVtb3ZlX2Rpc2sgPT0gTlVMTCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQljbGVhcl9iaXQoQmxvY2tlZCwgJmFtcDtyZGV2LSZndDtmbGFncyk7Ci0JCXJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LSZndDttZGRldiwgcmRldik7CiYjNDM7CQlyZW1vdmVfYW5kX2FkZF9zcGFyZXMocmRldi0mZ3Q7bWRkZXYsIHJkZXYsIGxpbSk7CiAJCWlmIChyZGV2LSZndDtyYWlkX2Rpc2sgJmd0Oz0gMCkKIAkJCXJldHVybiAtRUJVU1k7CiAJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmYW1wO3JkZXYtJmd0O21kZGV2LSZndDtyZWNvdmVyeSk7CkBAIC0zMzQ0LDcgJiM0MzszMzUzLDggQEAgc2xvdF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogCQkJcmRldi0mZ3Q7c2F2ZWRfcmFpZF9kaXNrID0gLTE7CiAJCWNsZWFyX2JpdChJbl9zeW5jLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKIAkJY2xlYXJfYml0KEJpdG1hcF9zeW5jLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKLQkJZXJyID0gcmRldi0mZ3Q7bWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhyZGV2LSZndDttZGRldiwgcmRldik7CiYjNDM7CQllcnIgPSByZGV2LSZndDttZGRldi0mZ3Q7cGVycy0mZ3Q7aG90X2FkZF9kaXNrKHJkZXYtJmd0O21kZGV2LCByZGV2LAomIzQzOwkJCQkJCSAgICAgbGltKTsKIAkJaWYgKGVycikgewogCQkJcmRldi0mZ3Q7cmFpZF9kaXNrID0gLTE7CiAJCQlyZXR1cm4gZXJyOwpAQCAtMzM3Nyw3ICYjNDM7MzM4Nyw4IEBAIG9mZnNldF9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKQogfQogCiBzdGF0aWMgc3NpemVfdAotb2Zmc2V0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7b2Zmc2V0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCiYjNDM7CSAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQ7CiAJaWYgKGtzdHJ0b3VsbChidWYsIDEwLCAmYW1wO29mZnNldCkgJmx0OyAwKQpAQCAtMzQwMyw3ICYjNDM7MzQxNCw4IEBAIHN0YXRpYyBzc2l6ZV90IG5ld19vZmZzZXRfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIH0KIAogc3RhdGljIHNzaXplX3QgbmV3X29mZnNldF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwKLQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7CQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKJiM0MzsJCQkJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBuZXdfb2Zmc2V0OwogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSByZGV2LSZndDttZGRldjsKQEAgLTM1MTAsNyAmIzQzOzM1MjIsOCBAQCBzdGF0aWMgaW50IHN0cmljdF9ibG9ja3NfdG9fc2VjdG9ycyhjb25zdCBjaGFyICpidWYsIHNlY3Rvcl90ICpzZWN0b3JzKQogfQogCiBzdGF0aWMgc3NpemVfdAotcmRldl9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7cmRldl9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCiYjNDM7CQlzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJc3RydWN0IG1kZGV2ICpteV9tZGRldiA9IHJkZXYtJmd0O21kZGV2OwogCXNlY3Rvcl90IG9sZHNlY3RvcnMgPSByZGV2LSZndDtzZWN0b3JzOwpAQCAtMzU3Miw3ICYjNDM7MzU4NSw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpCiAJcmV0dXJuIHNwcmludGYocGFnZSwgJiMzNDslbGx1XG4mIzM0OywgcmVjb3Zlcnlfc3RhcnQpOwogfQogCi1zdGF0aWMgc3NpemVfdCByZWNvdmVyeV9zdGFydF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQomIzQzO3N0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCiYjNDM7CQkJCSAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHJlY292ZXJ5X3N0YXJ0OwogCkBAIC0zNjExLDcgJiM0MzszNjI1LDkgQEAgc3RhdGljIHNzaXplX3QgYmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIHsKIAlyZXR1cm4gYmFkYmxvY2tzX3Nob3coJmFtcDtyZGV2LSZndDtiYWRibG9ja3MsIHBhZ2UsIDApOwogfQotc3RhdGljIHNzaXplX3QgYmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pCiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgYmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4sCiYjNDM7CQkJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCWludCBydiA9IGJhZGJsb2Nrc19zdG9yZSgmYW1wO3JkZXYtJmd0O2JhZGJsb2NrcywgcGFnZSwgbGVuLCAwKTsKIAkvKiBNYXliZSB0aGF0IGFjayB3YXMgYWxsIHdlIG5lZWRlZCAqLwpAQCAtMzYyNiw3ICYjNDM7MzY0Miw5IEBAIHN0YXRpYyBzc2l6ZV90IHViYl9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKQogewogCXJldHVybiBiYWRibG9ja3Nfc2hvdygmYW1wO3JkZXYtJmd0O2JhZGJsb2NrcywgcGFnZSwgMSk7CiB9Ci1zdGF0aWMgc3NpemVfdCB1YmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pCiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgdWJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLAomIzQzOwkJCSBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJcmV0dXJuIGJhZGJsb2Nrc19zdG9yZSgmYW1wO3JkZXYtJmd0O2JhZGJsb2NrcywgcGFnZSwgbGVuLCAxKTsKIH0KQEAgLTM2NDAsNyAmIzQzOzM2NTgsOCBAQCBwcGxfc2VjdG9yX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpCiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1wcGxfc2VjdG9yX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7cHBsX3NlY3Rvcl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLAomIzQzOwkJIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgc2VjdG9yOwogCkBAIC0zNjc5LDcgJiM0MzszNjk4LDggQEAgcHBsX3NpemVfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIH0KIAogc3RhdGljIHNzaXplX3QKLXBwbF9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7cHBsX3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKJiM0MzsJICAgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIApAQCAtMzc0MCw2ICYjNDM7Mzc2MCw5IEBAIHJkZXZfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAlzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHJkZXZfc3lzZnNfZW50cnksIGF0dHIpOwogCXN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBtZF9yZGV2LCBrb2JqKTsKIAlzdHJ1Y3Qga2VybmZzX25vZGUgKmtuID0gTlVMTDsKJiM0MzsJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7CiAJYm9vbCBzdXNwZW5kID0gZmFsc2U7CiAJc3NpemVfdCBydjsKIAlzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gUkVBRF9PTkNFKHJkZXYtJmd0O21kZGV2KTsKQEAgLTM3NjAsMTUgJiM0MzszNzgzLDM3IEBAIHJkZXZfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAkJCXN1c3BlbmQgPSB0cnVlOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBUaGVzZSBjYW4gYWRkIGEgbGVnIGJhY2ssIHdoaWNoIHN0YWNrcyBpdHMgbGltaXRzOyB0aGUgb3RoZXIKJiM0MzsJICogc3RhdGVfc3RvcmUoKSB2YWx1ZXMgbmV2ZXIgcmVhY2ggLSZndDtob3RfYWRkX2Rpc2soKS4gIHEtJmd0O2xpbWl0c19sb2NrCiYjNDM7CSAqIG5lc3RzIG91dHNpZGUgdGhlIGxvY2sgYW5kIHRoZSBzdXNwZW5kLCBzZWUgbWRfc3RhcnRfc3luYygpLgomIzQzOwkgKi8KJiM0MzsJaWYgKChlbnRyeS0mZ3Q7c3RvcmUgPT0gc2xvdF9zdG9yZSB8fAomIzQzOwkgICAgIChlbnRyeS0mZ3Q7c3RvcmUgPT0gc3RhdGVfc3RvcmUgJmFtcDsmYW1wOwomIzQzOwkgICAgICAoY21kX21hdGNoKHBhZ2UsICYjMzQ7cmVtb3ZlJiMzNDspIHx8IGNtZF9tYXRjaChwYWdlLCAmIzM0O3JlLWFkZCYjMzQ7KSkpKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhbWRkZXZfaXNfZG0obWRkZXYpKSB7CiYjNDM7CQlxID0gbWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlOwomIzQzOwkJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTsKJiM0MzsJCWxpbXAgPSAmYW1wO2xpbTsKJiM0MzsJfQomIzQzOwogCXJ2ID0gc3VzcGVuZCA/IG1kZGV2X3N1c3BlbmRfYW5kX2xvY2sobWRkZXYpIDogbWRkZXZfbG9jayhtZGRldik7CiAJaWYgKCFydikgewogCQlpZiAocmRldi0mZ3Q7bWRkZXYgPT0gTlVMTCkKIAkJCXJ2ID0gLUVOT0RFVjsKIAkJZWxzZQotCQkJcnYgPSBlbnRyeS0mZ3Q7c3RvcmUocmRldiwgcGFnZSwgbGVuZ3RoKTsKJiM0MzsJCQlydiA9IGVudHJ5LSZndDtzdG9yZShyZGV2LCBwYWdlLCBsZW5ndGgsIGxpbXApOwomIzQzOwkJLyogYXBwbHkgdGhlIGxpbWl0cyBiZWZvcmUgdGhlIGFycmF5IHRha2VzIEkvTyBhZ2FpbiAqLwomIzQzOwkJaWYgKGxpbXApIHsKJiM0MzsJCQlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTsKJiM0MzsJCQlsaW1wID0gTlVMTDsKJiM0MzsJCX0KIAkJc3VzcGVuZCA/IG1kZGV2X3VubG9ja19hbmRfcmVzdW1lKG1kZGV2KSA6IG1kZGV2X3VubG9jayhtZGRldik7CiAJfQogCiYjNDM7CWlmIChsaW1wKQomIzQzOwkJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltcCk7CiYjNDM7CiAJaWYgKGtuKQogCQlzeXNmc191bmJyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtuKTsKIApAQCAtNjI3NSwyMCAmIzQzOzYzMjAsODkgQEAgaW50IG1kZGV2X3N0YWNrX25ld19yZGV2KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwobWRkZXZfc3RhY2tfbmV3X3JkZXYpOwogCiYjNDM7LyoKJiM0MzsgKiBTdGFjayBhIG5ldyByZGV2IGludG8gbGltaXRzIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyBsaW1pdHNfbG9jayBmb3IgYW5kCiYjNDM7ICogd2lsbCBjb21taXQgaXRzZWxmLiAgVXNlZCBmcm9tIHBhdGhzIHRoYXQgbXVzdCB0YWtlIGxpbWl0c19sb2NrIGJlZm9yZQomIzQzOyAqIHF1aWVzY2luZyB0aGUgYXJyYXksIHNlZSBtZF9zdGFydF9zeW5jKCkuCiYjNDM7ICovCiYjNDM7aW50IG1kZGV2X3N0YWNrX3JkZXZfaW50byhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldiwKJiM0MzsJCQkgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgdG1wID0gKmxpbTsKJiM0MzsKJiM0MzsJaWYgKG1kZGV2X2lzX2RtKG1kZGV2KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocXVldWVfbG9naWNhbF9ibG9ja19zaXplKHJkZXYtJmd0O2JkZXYtJmd0O2JkX2Rpc2stJmd0O3F1ZXVlKSAmZ3Q7CiYjNDM7CSAgICBxdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUobWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlKSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IGluY29tcGF0aWJsZSBsb2dpY2FsX2Jsb2NrX3NpemUsIGNhbiBub3QgYWRkXG4mIzM0OywKJiM0MzsJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXF1ZXVlX2xpbWl0c19zdGFja19iZGV2KCZhbXA7dG1wLCByZGV2LSZndDtiZGV2LCByZGV2LSZndDtkYXRhX29mZnNldCwKJiM0MzsJCQkJbWRkZXYtJmd0O2dlbmRpc2stJmd0O2Rpc2tfbmFtZSk7CiYjNDM7CiYjNDM7CWlmICghcXVldWVfbGltaXRzX3N0YWNrX2ludGVncml0eV9iZGV2KCZhbXA7dG1wLCByZGV2LSZndDtiZGV2KSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IGluY29tcGF0aWJsZSBpbnRlZ3JpdHkgcHJvZmlsZSBmb3IgJXBnXG4mIzM0OywKJiM0MzsJCSAgICAgICBtZG5hbWUobWRkZXYpLCByZGV2LSZndDtiZGV2KTsKJiM0MzsJCXJldHVybiAtRU5YSU87CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmxpbSA9IHRtcDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3N0YWNrX3JkZXZfaW50byk7CiYjNDM7CiYjNDM7LyogZm9yIGNhbGxlcnMgdGhhdCBtdXN0IG5vdCB3YWl0IGZvciBxLSZndDtsaW1pdHNfbG9jaywgc2VlIG1kX3N0YXJ0X3N5bmMoKSAqLwomIzQzO3N0YXRpYyBib29sIG1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKHN0cnVjdCBtZGRldiAqbWRkZXYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKJiM0MzsKJiM0MzsJaWYgKG1kZGV2X2lzX2RtKG1kZGV2KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcSA9IG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayhxLCBsaW0pOwomIzQzO30KJiM0MzsKIC8qIHVwZGF0ZSB0aGUgb3B0aW1hbCBJL08gc2l6ZSBhZnRlciBhIHJlc2hhcGUgKi8KLXZvaWQgbWRkZXZfdXBkYXRlX2lvX29wdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB1bnNpZ25lZCBpbnQgbnJfc3RyaXBlcykKJiM0Mzt2b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMsCiYjNDM7CQkJIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKLQlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyBvd247CiAKIAlpZiAobWRkZXZfaXNfZG0obWRkZXYpKQogCQlyZXR1cm47CiAKJiM0MzsJLyoKJiM0MzsJICogV2l0aCBhbiB1cGRhdGUgb3duZWQgYnkgdGhlIGNhbGxlciBqdXN0IGNoYW5nZSBpdCBpbiBwbGFjZTsgaXQgaXMKJiM0MzsJICogY29tbWl0dGVkLCBhbmQgdGhlIGFycmF5IHJlc3VtZWQsIGJ5IHdob2V2ZXIgc3RhcnRlZCBpdC4gIFRha2luZwomIzQzOwkgKiBxLSZndDtsaW1pdHNfbG9jayBoZXJlIHdvdWxkIG5lc3QgaXQgaW5zaWRlIHJlY29uZmlnX211dGV4IGFuZCB0aGUKJiM0MzsJICogc3VzcGVuZCwgd2hpY2ggZGVhZGxvY2tzLCBzZWUgbWRfc3RhcnRfc3luYygpLgomIzQzOwkgKi8KJiM0MzsJaWYgKGxpbSkgewomIzQzOwkJbGltLSZndDtpb19vcHQgPSBsaW0tJmd0O2lvX21pbiAqIG5yX3N0cmlwZXM7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ2FsbGVkIGZyb20gdGhlIHN5bmMgdGhyZWFkLCB3aGljaCBtZF9yZWFwX3N5bmNfdGhyZWFkKCkgd2FpdHMgZm9yCiYjNDM7CSAqIHdpdGggcmVjb25maWdfbXV0ZXggaGVsZCwgc28gZG9uJiMzOTt0IHdhaXQgZm9yIHEtJmd0O2xpbWl0c19sb2NrIGhlcmUuCiYjNDM7CSAqIGlvX29wdCBpcyBhIGhpbnQsIHNraXBwaW5nIGl0IG9uIGEgY29udGVuZGVkIHBhc3MgaXMgZmluZS4KJiM0MzsJICovCiYjNDM7CWlmICghbWRkZXZfc3RhY2tfbGltaXRzX3RyeWxvY2sobWRkZXYsICZhbXA7b3duKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKiBkb24mIzM5O3QgYm90aGVyIHVwZGF0aW5nIGlvX29wdCBpZiB3ZSBjYW4mIzM5O3Qgc3VzcGVuZCB0aGUgYXJyYXkgKi8KLQlpZiAobWRkZXZfc3VzcGVuZChtZGRldiwgZmFsc2UpICZsdDsgMCkKJiM0MzsJaWYgKG1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKSAmbHQ7IDApIHsKJiM0MzsJCXF1ZXVlX2xpbWl0c19jYW5jZWxfdXBkYXRlKG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZSk7CiAJCXJldHVybjsKLQlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZSk7Ci0JbGltLmlvX29wdCA9IGxpbS5pb19taW4gKiBucl9zdHJpcGVzOwotCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZSwgJmFtcDtsaW0pOwomIzQzOwl9CiYjNDM7CW93bi5pb19vcHQgPSBvd24uaW9fbWluICogbnJfc3RyaXBlczsKJiM0MzsJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlLCAmYW1wO293bik7CiAJbWRkZXZfcmVzdW1lKG1kZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3VwZGF0ZV9pb19vcHQpOwpAQCAtNzQ4Niw3ICYjNDM7NzYwMCw4IEBAIHN0YXRpYyBpbnQgZ2V0X2Rpc2tfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB2b2lkIF9fdXNlciAqIGFyZykKIAlyZXR1cm4gMDsKIH0KIAotaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKQomIzQzO2ludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbywKJiM0MzsJCSAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJc3RydWN0IG1kX3JkZXYgKnJkZXY7CiAJZGV2X3QgZGV2ID0gTUtERVYoaW5mby0mZ3Q7bWFqb3IsaW5mby0mZ3Q7bWlub3IpOwpAQCAtNzYzNCwxMSAmIzQzOzc3NDksMTEgQEAgaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKQogCQkJCWlmIChlcnIpCiAJCQkJCW1kZGV2LSZndDtjbHVzdGVyX29wcy0mZ3Q7YWRkX25ld19kaXNrX2NhbmNlbChtZGRldik7CiAJCQkJZWxzZQotCQkJCQllcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTsKJiM0MzsJCQkJCWVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYsIGxpbSk7CiAJCQl9CiAKIAkJfSBlbHNlIGlmICghZXJyKQotCQkJZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldik7CiYjNDM7CQkJZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTsKIAogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTc2OTEsNyAmIzQzOzc4MDYsOCBAQCBpbnQgbWRfYWRkX25ld19kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgKmluZm8pCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIGRldl90IGRldikKJiM0MztzdGF0aWMgaW50IGhvdF9yZW1vdmVfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBkZXZfdCBkZXYsCiYjNDM7CQkJICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXN0cnVjdCBtZF9yZGV2ICpyZGV2OwogCkBAIC03NzA2LDcgJiM0Mzs3ODIyLDcgQEAgc3RhdGljIGludCBob3RfcmVtb3ZlX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgZGV2X3QgZGV2KQogCQlnb3RvIGtpY2tfcmRldjsKIAogCWNsZWFyX2JpdChCbG9ja2VkLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKLQlyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIHJkZXYpOwomIzQzOwlyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIHJkZXYsIGxpbSk7CiAKIAlpZiAocmRldi0mZ3Q7cmFpZF9kaXNrICZndDs9IDApCiAJCWdvdG8gYnVzeTsKQEAgLTgyOTEsNiAmIzQzOzg0MDcsMjIgQEAgc3RhdGljIGlubGluZSBpbnQgbWRfaW9jdGxfdmFsaWQodW5zaWduZWQgaW50IGNtZCkKIAl9CiB9CiAKJiM0MzsvKgomIzQzOyAqIENvbW1hbmRzIHRoYXQgY2FuIHJlYWNoIC0mZ3Q7aG90X2FkZF9kaXNrKCkuICBBRERfTkVXX0RJU0sgb25seSBkb2VzIHNvIGZvciBhCiYjNDM7ICogam91cm5hbCBkZXZpY2Ugb3IgYSBwZXJzb25hbGl0eSB3aXRob3V0IC0mZ3Q7aG90X3JlbW92ZV9kaXNrLCBidXQgdGhhdCBkZXBlbmRzCiYjNDM7ICogb24gZGlzayBpbmZvIHN0aWxsIGluIHVzZXIgbWVtb3J5IGhlcmUsIHNvIGl0IGlzIGluY2x1ZGVkIGFzIGEgd2hvbGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgbWRfaW9jdGxfbWF5X2FkZF9kaXNrKHVuc2lnbmVkIGludCBjbWQpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGNtZCkgewomIzQzOwljYXNlIEFERF9ORVdfRElTSzoKJiM0MzsJY2FzZSBIT1RfUkVNT1ZFX0RJU0s6CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIG1kX2lvY3RsX25lZWRfc3VzcGVuZCh1bnNpZ25lZCBpbnQgY21kKQogewogCXN3aXRjaCAoY21kKSB7CkBAIC04MzQ2LDYgJiM0Mzs4NDc4LDkgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsCiAJdW5zaWduZWQgaW50IG5vaW9fZmxhZ3MgPSAwOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltOwomIzQzOwlzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDsKIAlib29sIHN1c3BlbmQ7CiAKIAllcnIgPSBtZF9pb2N0bF92YWxpZChjbWQpOwpAQCAtODM5NiwxMSAmIzQzOzg1MzEsMjAgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsCiAJaWYgKCFtZF9pc19yZHdyKG1kZGV2KSkKIAkJZmx1c2hfd29yaygmYW1wO21kZGV2LSZndDtzeW5jX3dvcmspOwogCiYjNDM7CS8qIHEtJmd0O2xpbWl0c19sb2NrIG5lc3RzIG91dHNpZGUgYm90aCwgc2VlIG1kX3N0YXJ0X3N5bmMoKSAqLwomIzQzOwlpZiAobWRfaW9jdGxfbWF5X2FkZF9kaXNrKGNtZCkgJmFtcDsmYW1wOyAhbWRkZXZfaXNfZG0obWRkZXYpKSB7CiYjNDM7CQlxID0gbWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlOwomIzQzOwkJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTsKJiM0MzsJCWxpbXAgPSAmYW1wO2xpbTsKJiM0MzsJfQomIzQzOwogCXN1c3BlbmQgPSBtZF9pb2N0bF9uZWVkX3N1c3BlbmQoY21kKTsKIAllcnIgPSBzdXNwZW5kID8gbWRkZXZfc3VzcGVuZF9hbmRfbG9jayhtZGRldikgOiBtZGRldl9sb2NrKG1kZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByX2RlYnVnKCYjMzQ7bWQ6IGlvY3RsIGxvY2sgaW50ZXJydXB0ZWQsIHJlYXNvbiAlZCwgY21kICVkXG4mIzM0OywKIAkJCSBlcnIsIGNtZCk7CiYjNDM7CQlpZiAobGltcCkKJiM0MzsJCQlxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShxKTsKIAkJZ290byBvdXQ7CiAJfQogCWlmIChzdXNwZW5kKQpAQCAtODQ0Miw3ICYjNDM7ODU4Niw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLAogCQlnb3RvIHVubG9jazsKIAogCWNhc2UgSE9UX1JFTU9WRV9ESVNLOgotCQllcnIgPSBob3RfcmVtb3ZlX2Rpc2sobWRkZXYsIG5ld19kZWNvZGVfZGV2KGFyZykpOwomIzQzOwkJZXJyID0gaG90X3JlbW92ZV9kaXNrKG1kZGV2LCBuZXdfZGVjb2RlX2RldihhcmcpLCBsaW1wKTsKIAkJZ290byB1bmxvY2s7CiAKIAljYXNlIEFERF9ORVdfRElTSzoKQEAgLTg0NTgsNyAmIzQzOzg2MDIsNyBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSwKIAkJCQkvKiBOZWVkIHRvIGNsZWFyIHJlYWQtb25seSBmb3IgdGhpcyAqLwogCQkJCWJyZWFrOwogCQkJZWxzZQotCQkJCWVyciA9IG1kX2FkZF9uZXdfZGlzayhtZGRldiwgJmFtcDtpbmZvKTsKJiM0MzsJCQkJZXJyID0gbWRfYWRkX25ld19kaXNrKG1kZGV2LCAmYW1wO2luZm8sIGxpbXApOwogCQkJZ290byB1bmxvY2s7CiAJCX0KIAkJYnJlYWs7CkBAIC04NDk2LDcgJiM0Mzs4NjQwLDcgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2luZm8sIGFyZ3AsIHNpemVvZihpbmZvKSkpCiAJCQllcnIgPSAtRUZBVUxUOwogCQllbHNlCi0JCQllcnIgPSBtZF9hZGRfbmV3X2Rpc2sobWRkZXYsICZhbXA7aW5mbyk7CiYjNDM7CQkJZXJyID0gbWRfYWRkX25ld19kaXNrKG1kZGV2LCAmYW1wO2luZm8sIGxpbXApOwogCQlnb3RvIHVubG9jazsKIAl9CiAKQEAgLTg1MjksNiAmIzQzOzg2NzMsOSBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSwKIAkgICAgZXJyICE9IC1FSU5WQUwpCiAJCW1kZGV2LSZndDtob2xkX2FjdGl2ZSA9IDA7CiAKJiM0MzsJaWYgKGxpbXApCiYjNDM7CQlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTsKJiM0MzsKIAlpZiAoc3VzcGVuZCkgewogCQltZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFncyk7CiAJCW1kZGV2X3VubG9ja19hbmRfcmVzdW1lKG1kZGV2KTsKQEAgLTEwMTY3LDggJiM0MzsxMDMxNCw4IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqdGhpcykKIAlyZXR1cm4gcmVtb3ZlZDsKIH0KIAotc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwKLQkJCQkgc3RydWN0IG1kX3JkZXYgKnRoaXMpCiYjNDM7c3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnRoaXMsCiYjNDM7CQkJCSBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJc3RydWN0IG1kX3JkZXYgKnJkZXY7CiAJaW50IHNwYXJlcyA9IDA7CkBAIC0xMDE5MSw3ICYjNDM7MTAzMzgsNyBAQCBzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LAogCQkJY29udGludWU7CiAJCWlmICghdGVzdF9iaXQoSm91cm5hbCwgJmFtcDtyZGV2LSZndDtmbGFncykpCiAJCQlyZGV2LSZndDtyZWNvdmVyeV9vZmZzZXQgPSAwOwotCQlpZiAobWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhtZGRldiwgcmRldikgPT0gMCkgewomIzQzOwkJaWYgKG1kZGV2LSZndDtwZXJzLSZndDtob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYsIGxpbSkgPT0gMCkgewogCQkJLyogZmFpbHVyZSBoZXJlIGlzIE9LICovCiAJCQlzeXNmc19saW5rX3JkZXYobWRkZXYsIHJkZXYpOwogCQkJaWYgKCF0ZXN0X2JpdChKb3VybmFsLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkKQEAgLTEwMjA2LDcgJiM0MzsxMDM1Myw4IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsCiAJcmV0dXJuIHNwYXJlczsKIH0KIAotc3RhdGljIGJvb2wgbWRfY2hvb3NlX3N5bmNfYWN0aW9uKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCAqc3BhcmVzKQomIzQzO3N0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcywKJiM0MzsJCQkJICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJLyogQ2hlY2sgaWYgcmVzaGFwZSBpcyBpbiBwcm9ncmVzcyBmaXJzdC4gKi8KIAlpZiAobWRkZXYtJmd0O3Jlc2hhcGVfcG9zaXRpb24gIT0gTWF4U2VjdG9yKSB7CkBAIC0xMDIzNCw3ICYjNDM7MTAzODIsNyBAQCBzdGF0aWMgYm9vbCBtZF9jaG9vc2Vfc3luY19hY3Rpb24oc3RydWN0IG1kZGV2ICptZGRldiwgaW50ICpzcGFyZXMpCiAJICogYWxzbyByZW1vdmVkIGFuZCByZS1hZGRlZCwgdG8gYWxsb3cgdGhlIHBlcnNvbmFsaXR5IHRvIGZhaWwgdGhlCiAJICogcmUtYWRkLgogCSAqLwotCSpzcGFyZXMgPSByZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIE5VTEwpOwomIzQzOwkqc3BhcmVzID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMLCBsaW0pOwogCWlmICgqc3BhcmVzIHx8IHRlc3RfYml0KE1EX1JFQ09WRVJZX0xBWllfUkVDT1ZFUiwgJmFtcDttZGRldi0mZ3Q7cmVjb3ZlcnkpKSB7CiAJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmYW1wO21kZGV2LSZndDtyZWNvdmVyeSk7CiAJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9DSEVDSywgJmFtcDttZGRldi0mZ3Q7cmVjb3ZlcnkpOwpAQCAtMTAyNTYsNiAmIzQzOzEwNDA0LDkgQEAgc3RhdGljIGJvb2wgbWRfY2hvb3NlX3N5bmNfYWN0aW9uKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCAqc3BhcmVzKQogc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQogewogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSBjb250YWluZXJfb2Yod3MsIHN0cnVjdCBtZGRldiwgc3luY193b3JrKTsKJiM0MzsJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7CiAJaW50IHNwYXJlcyA9IDA7CiAJYm9vbCBzdXNwZW5kID0gZmFsc2U7CiAJdW5zaWduZWQgaW50IG5vaW9fZmxhZ3MgPSAwOwpAQCAtMTAyNjcsNiAmIzQzOzEwNDE4LDE3IEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAkgKi8KIAlpZiAoKG1kZGV2LSZndDtyZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvciB8fCAhbWRfaXNfcmR3cihtZGRldikpICZhbXA7JmFtcDsKIAkgICAgbWRfc3BhcmVzX25lZWRfY2hhbmdlKG1kZGV2KSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEFkZGluZyBhIHNwYXJlIGJlbG93IHN0YWNrcyBpdHMgbGltaXRzLCB3aGljaCBuZWVkcwomIzQzOwkJICogcS0mZ3Q7bGltaXRzX2xvY2suICBUYWtlIGl0IGJlZm9yZSBzdXNwZW5kaW5nOiBpdHMgaG9sZGVyCiYjNDM7CQkgKiB3YWl0cyBpbiBibGtfbXFfZnJlZXplX3F1ZXVlKCkgZm9yIEkvTyB0aGF0CiYjNDM7CQkgKiBtZGRldi0mZ3Q7c3VzcGVuZGVkIGhvbGRzIGJhY2ssIHNvIHRoZSBvdGhlciBvcmRlciBkZWFkbG9ja3MuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghbWRkZXZfaXNfZG0obWRkZXYpKSB7CiYjNDM7CQkJcSA9IG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZTsKJiM0MzsJCQlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpOwomIzQzOwkJCWxpbXAgPSAmYW1wO2xpbTsKJiM0MzsJCX0KIAkJc3VzcGVuZCA9IHRydWU7CiAJCW1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKTsKIAkJbm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpOwpAQCAtMTAyODEsNiAmIzQzOzEwNDQzLDEyIEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAlpZiAoIXN1c3BlbmQgJmFtcDsmYW1wOyAobWRkZXYtJmd0O3Jlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yIHx8ICFtZF9pc19yZHdyKG1kZGV2KSkgJmFtcDsmYW1wOwogCSAgICBtZF9zcGFyZXNfbmVlZF9jaGFuZ2UobWRkZXYpKSB7CiAJCW1kZGV2X3VubG9jayhtZGRldik7CiYjNDM7CQkvKiBzZWUgYWJvdmU6IHEtJmd0O2xpbWl0c19sb2NrIG5lc3RzIG91dHNpZGUgYm90aCAqLwomIzQzOwkJaWYgKCFtZGRldl9pc19kbShtZGRldikpIHsKJiM0MzsJCQlxID0gbWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlOwomIzQzOwkJCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7CiYjNDM7CQkJbGltcCA9ICZhbXA7bGltOwomIzQzOwkJfQogCQltZGRldl9zdXNwZW5kX2FuZF9sb2NrX25vaW50cihtZGRldik7CiAJCXN1c3BlbmQgPSB0cnVlOwogCQlub2lvX2ZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7CkBAIC0xMDI5NCwxMSAmIzQzOzEwNDYyLDExIEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAkJICogQXMgd2Ugb25seSBhZGQgZGV2aWNlcyB0aGF0IGFyZSBhbHJlYWR5IGluLXN5bmMsIHdlIGNhbgogCQkgKiBhY3RpdmF0ZSB0aGUgc3BhcmVzIGltbWVkaWF0ZWx5LgogCQkgKi8KLQkJcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMKTsKJiM0MzsJCXJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldiwgTlVMTCwgbGltcCk7CiAJCWdvdG8gbm90X3J1bm5pbmc7CiAJfQogCi0JaWYgKCFtZF9jaG9vc2Vfc3luY19hY3Rpb24obWRkZXYsICZhbXA7c3BhcmVzKSkKJiM0MzsJaWYgKCFtZF9jaG9vc2Vfc3luY19hY3Rpb24obWRkZXYsICZhbXA7c3BhcmVzLCBsaW1wKSkKIAkJZ290byBub3RfcnVubmluZzsKIAogCWlmICghbWRkZXYtJmd0O3BlcnMtJmd0O3N5bmNfcmVxdWVzdCkKQEAgLTEwMzI5LDYgJiM0MzsxMDQ5Nyw4IEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAkgKiAgICAgaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgyMDAKIAkgKiBUaGVyZWZvcmUsIHVzZSBfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpLgogCSAqLwomIzQzOwlpZiAobGltcCkKJiM0MzsJCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApOwogCWlmIChzdXNwZW5kKSB7CiAJCW1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWdzKTsKIAkJX19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKTsKQEAgLTEwMzUxLDYgJiM0MzsxMDUyMSw4IEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAkgKiAgICAgaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgyMDAKIAkgKiBUaGVyZWZvcmUsIHVzZSBfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpLgogCSAqLwomIzQzOwlpZiAobGltcCkKJiM0MzsJCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApOwogCWlmIChzdXNwZW5kKSB7CiAJCW1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWdzKTsKIAkJX19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKTsKQEAgLTEwNzkzLDYgJiM0MzsxMDk2NSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG1kX2luaXQodm9pZCkKIAogc3RhdGljIHZvaWQgY2hlY2tfc2JfY2hhbmdlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldikKIHsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07CiAJc3RydWN0IG1kcF9zdXBlcmJsb2NrXzEgKnNiID0gcGFnZV9hZGRyZXNzKHJkZXYtJmd0O3NiX3BhZ2UpOwogCXN0cnVjdCBtZF9yZGV2ICpyZGV2MiwgKnRtcDsKIAlpbnQgcm9sZSwgcmV0OwpAQCAtMTA4NDksNyAmIzQzOzExMDIyLDI0IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3NiX2NoYW5nZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJCQkJCXJkZXYyLSZndDtzYXZlZF9yYWlkX2Rpc2sgPSAtMTsKIAkJCQllbHNlCiAJCQkJCXJkZXYyLSZndDtzYXZlZF9yYWlkX2Rpc2sgPSByb2xlOwotCQkJCXJldCA9IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldiwgcmRldjIpOwomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiByZWNvbmZpZ19tdXRleCBpcyBoZWxkLCBzbyBkb24mIzM5O3Qgd2FpdCBmb3IKJiM0MzsJCQkJICogcS0mZ3Q7bGltaXRzX2xvY2s7IE1EX1JFQ09WRVJZX05FRURFRCBiZWxvdwomIzQzOwkJCQkgKiBsZWF2ZXMgYSBza2lwcGVkIGFkZCB0byBtZF9zdGFydF9zeW5jKCkuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlpZiAobWRkZXZfc3RhY2tfbGltaXRzX3RyeWxvY2sobWRkZXYsICZhbXA7bGltKSkgewomIzQzOwkJCQkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPQomIzQzOwkJCQkJCW1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZTsKJiM0MzsKJiM0MzsJCQkJCXJldCA9IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldiwKJiM0MzsJCQkJCQkJCSAgICByZGV2MiwgJmFtcDtsaW0pOwomIzQzOwkJCQkJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgJmFtcDtsaW0pOwomIzQzOwkJCQl9IGVsc2UgaWYgKG1kZGV2X2lzX2RtKG1kZGV2KSkgewomIzQzOwkJCQkJcmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LAomIzQzOwkJCQkJCQkJICAgIHJkZXYyLCBOVUxMKTsKJiM0MzsJCQkJfSBlbHNlIHsKJiM0MzsJCQkJCXJldCA9IHJlbW92ZV9zcGFyZXMobWRkZXYsIHJkZXYyKTsKJiM0MzsJCQkJfQogCQkJCXByX2luZm8oJiMzNDtBY3RpdmF0ZWQgc3BhcmU6ICVwZ1xuJiMzNDssCiAJCQkJCXJkZXYyLSZndDtiZGV2KTsKIAkJCQkvKiB3YWtldXAgbWRkZXYtJmd0O3RocmVhZCBoZXJlLCBzbyBhcnJheSBjb3VsZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oCmluZGV4IGI2ZDJlODkyOWEwZjkuLmNlY2E4Y2ZjZGNiOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmgKQEAgLTc2NSw3ICYjNDM7NzY1LDggQEAgc3RydWN0IG1kX3BlcnNvbmFsaXR5CiAJICogaWYgYXBwcm9wcmlhdGUsIGFuZCBzaG91bGQgYWJvcnQgcmVjb3ZlcnkgaWYgbmVlZGVkCiAJICovCiAJdm9pZCAoKmVycm9yX2hhbmRsZXIpKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KTsKLQlpbnQgKCpob3RfYWRkX2Rpc2spIChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7CiYjNDM7CWludCAoKmhvdF9hZGRfZGlzaykoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsCiYjNDM7CQkJICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7CiAJaW50ICgqaG90X3JlbW92ZV9kaXNrKSAoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpOwogCWludCAoKnNwYXJlX2FjdGl2ZSkgKHN0cnVjdCBtZGRldiAqbWRkZXYpOwogCXNlY3Rvcl90ICgqc3luY19yZXF1ZXN0KShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JfbnIsCkBAIC0xMDQxLDEzICYjNDM7MTA0MiwxNyBAQCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zOwogZXh0ZXJuIGludCBtZHBfbWFqb3I7CiB2b2lkIG1kX2F1dG9zdGFydF9hcnJheXMoaW50IHBhcnQpOwogaW50IG1kX3NldF9hcnJheV9pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfYXJyYXlfaW5mb19zICppbmZvKTsKLWludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbyk7CiYjNDM7aW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvLAomIzQzOwkJICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7CiBpbnQgZG9fbWRfcnVuKHN0cnVjdCBtZGRldiAqbWRkZXYpOwogI2RlZmluZSBNRERFVl9TVEFDS19JTlRFR1JJVFkJKDF1ICZsdDsmbHQ7IDApCiBpbnQgbWRkZXZfc3RhY2tfcmRldl9saW1pdHMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLAogCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOwogaW50IG1kZGV2X3N0YWNrX25ld19yZGV2KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KTsKLXZvaWQgbWRkZXZfdXBkYXRlX2lvX29wdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB1bnNpZ25lZCBpbnQgbnJfc3RyaXBlcyk7CiYjNDM7aW50IG1kZGV2X3N0YWNrX3JkZXZfaW50byhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldiwKJiM0MzsJCQkgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7CiYjNDM7dm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzLAomIzQzOwkJCSBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pOwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG1kX2ZvcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBmMDY0NmZiMjQzNzFmLi5kZDM0OGI1Njk1ZDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC0xODk4LDcgJiM0MzsxODk4LDggQEAgc3RhdGljIGJvb2wgcmFpZDFfcmVtb3ZlX2NvbmYoc3RydWN0IHIxY29uZiAqY29uZiwgaW50IGRpc2spCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgcmFpZDFfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiYjNDM7c3RhdGljIGludCByYWlkMV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldiwKJiM0MzsJCQkgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAlzdHJ1Y3QgcjFjb25mICpjb25mID0gbWRkZXYtJmd0O3ByaXZhdGU7CiAJaW50IGVyciA9IC1FRVhJU1Q7CkBAIC0xOTIzLDcgJiM0MzsxOTI0LDEwIEBAIHN0YXRpYyBpbnQgcmFpZDFfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJZm9yIChtaXJyb3IgPSBmaXJzdDsgbWlycm9yICZsdDs9IGxhc3Q7IG1pcnJvciYjNDM7JiM0MzspIHsKIAkJcCA9IGNvbmYtJmd0O21pcnJvcnMgJiM0MzsgbWlycm9yOwogCQlpZiAoIXAtJmd0O3JkZXYpIHsKLQkJCWVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTsKJiM0MzsJCQlpZiAobGltKQomIzQzOwkJCQllcnIgPSBtZGRldl9zdGFja19yZGV2X2ludG8obWRkZXYsIHJkZXYsIGxpbSk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQllcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDEwOTNjNzk4ZDlkZGUuLjY0MTYxOTMyOGE2YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtMjA5NSw3ICYjNDM7MjA5NSw4IEBAIHN0YXRpYyBpbnQgcmFpZDEwX3NwYXJlX2FjdGl2ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiYjNDM7c3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsCiYjNDM7CQkJICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXN0cnVjdCByMTBjb25mICpjb25mID0gbWRkZXYtJmd0O3ByaXZhdGU7CiAJaW50IGVyciA9IC1FRVhJU1Q7CkBAIC0yMTMwLDcgJiM0MzsyMTMxLDEwIEBAIHN0YXRpYyBpbnQgcmFpZDEwX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KQogCQkJY29udGludWU7CiAJCX0KIAotCQllcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7CiYjNDM7CQlpZiAobGltKQomIzQzOwkJCWVyciA9IG1kZGV2X3N0YWNrX3JkZXZfaW50byhtZGRldiwgcmRldiwgbGltKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQllcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQlwLSZndDtoZWFkX3Bvc2l0aW9uID0gMDsKQEAgLTIxNDcsNyAmIzQzOzIxNTEsMTAgQEAgc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJCWNsZWFyX2JpdChJbl9zeW5jLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKIAkJc2V0X2JpdChSZXBsYWNlbWVudCwgJmFtcDtyZGV2LSZndDtmbGFncyk7CiAJCXJkZXYtJmd0O3JhaWRfZGlzayA9IHJlcGxfc2xvdDsKLQkJZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpOwomIzQzOwkJaWYgKGxpbSkKJiM0MzsJCQllcnIgPSBtZGRldl9zdGFja19yZGV2X2ludG8obWRkZXYsIHJkZXYsIGxpbSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAkJY29uZi0mZ3Q7ZnVsbHN5bmMgPSAxOwpAQCAtNDQ4NCw3ICYjNDM7NDQ5MSw3IEBAIHN0YXRpYyBpbnQgcmFpZDEwX3N0YXJ0X3Jlc2hhcGUoc3RydWN0IG1kZGV2ICptZGRldikKIAkJcmRldl9mb3JfZWFjaChyZGV2LCBtZGRldikKIAkJCWlmIChyZGV2LSZndDtyYWlkX2Rpc2sgJmx0OyAwICZhbXA7JmFtcDsKIAkJCSAgICAhdGVzdF9iaXQoRmF1bHR5LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkgewotCQkJCWlmIChyYWlkMTBfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHsKJiM0MzsJCQkJaWYgKHJhaWQxMF9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkgewogCQkJCQlpZiAocmRldi0mZ3Q7cmFpZF9kaXNrICZndDs9CiAJCQkJCSAgICBjb25mLSZndDtwcmV2LnJhaWRfZGlza3MpCiAJCQkJCQlzZXRfYml0KEluX3N5bmMsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpOwpAQCAtNDkyMSw3ICYjNDM7NDkyOCw3IEBAIHN0YXRpYyB2b2lkIGVuZF9yZXNoYXBlKHN0cnVjdCByMTBjb25mICpjb25mKQogCWNvbmYtJmd0O3Jlc2hhcGVfc2FmZSA9IE1heFNlY3RvcjsKIAlzcGluX3VubG9ja19pcnEoJmFtcDtjb25mLSZndDtkZXZpY2VfbG9jayk7CiAKLQltZGRldl91cGRhdGVfaW9fb3B0KGNvbmYtJmd0O21kZGV2LCByYWlkMTBfbnJfc3RyaXBlcyhjb25mKSk7CiYjNDM7CW1kZGV2X3VwZGF0ZV9pb19vcHQoY29uZi0mZ3Q7bWRkZXYsIHJhaWQxMF9ucl9zdHJpcGVzKGNvbmYpLCBOVUxMKTsKIAljb25mLSZndDtmdWxsc3luYyA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCBiOTE1NDVjZTA5MGRlLi4yMjc1OWM2MzFjNGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC03Mjg4LDYgJiM0Mzs3Mjg4LDkgQEAgc3RhdGljIHNzaXplX3QKIHJhaWQ1X3N0b3JlX3NraXBfY29weShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCByNWNvbmYgKmNvbmY7CiYjNDM7CXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gTlVMTDsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbXAgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgbmV3OwogCWludCBlcnI7CiAKQEAgLTcyOTcsMjMgJiM0Mzs3MzAwLDMzIEBAIHJhaWQ1X3N0b3JlX3NraXBfY29weShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAluZXcgPSAhIW5ldzsKIAomIzQzOwkvKiBxLSZndDtsaW1pdHNfbG9jayBuZXN0cyBvdXRzaWRlIGJvdGgsIHNlZSBtZF9zdGFydF9zeW5jKCkgKi8KJiM0MzsJaWYgKCFtZGRldl9pc19kbShtZGRldikpIHsKJiM0MzsJCXEgPSBtZGRldi0mZ3Q7Z2VuZGlzay0mZ3Q7cXVldWU7CiYjNDM7CQlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpOwomIzQzOwkJbGltcCA9ICZhbXA7bGltOwomIzQzOwl9CiYjNDM7CiAJZXJyID0gbWRkZXZfc3VzcGVuZF9hbmRfbG9jayhtZGRldik7Ci0JaWYgKGVycikKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaWYgKGxpbXApCiYjNDM7CQkJcXVldWVfbGltaXRzX2NhbmNlbF91cGRhdGUocSk7CiAJCXJldHVybiBlcnI7CiYjNDM7CX0KIAljb25mID0gbWRkZXYtJmd0O3ByaXZhdGU7CiAJaWYgKCFjb25mKQogCQllcnIgPSAtRU5PREVWOwogCWVsc2UgaWYgKG5ldyAhPSBjb25mLSZndDtza2lwX2NvcHkpIHsKLQkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBtZGRldi0mZ3Q7Z2VuZGlzay0mZ3Q7cXVldWU7Ci0JCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTsKLQogCQljb25mLSZndDtza2lwX2NvcHkgPSBuZXc7Ci0JCWlmIChuZXcpCi0JCQlsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfU1RBQkxFX1dSSVRFUzsKLQkJZWxzZQotCQkJbGltLmZlYXR1cmVzICZhbXA7PSB+QkxLX0ZFQVRfU1RBQkxFX1dSSVRFUzsKLQkJZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgJmFtcDtsaW0pOwomIzQzOwkJaWYgKGxpbXApIHsKJiM0MzsJCQlpZiAobmV3KQomIzQzOwkJCQlsaW1wLSZndDtmZWF0dXJlcyB8PSBCTEtfRkVBVF9TVEFCTEVfV1JJVEVTOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJbGltcC0mZ3Q7ZmVhdHVyZXMgJmFtcDs9IH5CTEtfRkVBVF9TVEFCTEVfV1JJVEVTOwomIzQzOwkJfQogCX0KJiM0MzsJaWYgKGxpbXApCiYjNDM7CQllcnIgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKSA/OiBlcnI7CiAJbWRkZXZfdW5sb2NrX2FuZF9yZXN1bWUobWRkZXYpOwogCXJldHVybiBlcnIgPzogbGVuOwogfQpAQCAtODQ0MSw3ICYjNDM7ODQ1NCw4IEBAIHN0YXRpYyBpbnQgcmFpZDVfcmVtb3ZlX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCByYWlkNV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldikKJiM0MztzdGF0aWMgaW50IHJhaWQ1X2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LAomIzQzOwkJCSAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXN0cnVjdCByNWNvbmYgKmNvbmYgPSBtZGRldi0mZ3Q7cHJpdmF0ZTsKIAlpbnQgcmV0LCBlcnIgPSAtRUVYSVNUOwpAQCAtODcyOCw3ICYjNDM7ODc0Miw3IEBAIHN0YXRpYyBpbnQgcmFpZDVfc3RhcnRfcmVzaGFwZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogCQlyZGV2X2Zvcl9lYWNoKHJkZXYsIG1kZGV2KQogCQkJaWYgKHJkZXYtJmd0O3JhaWRfZGlzayAmbHQ7IDAgJmFtcDsmYW1wOwogCQkJICAgICF0ZXN0X2JpdChGYXVsdHksICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpKSB7Ci0JCQkJaWYgKHJhaWQ1X2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7CiYjNDM7CQkJCWlmIChyYWlkNV9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkgewogCQkJCQlpZiAocmRldi0mZ3Q7cmFpZF9kaXNrCiAJCQkJCSAgICAmZ3Q7PSBjb25mLSZndDtwcmV2aW91c19yYWlkX2Rpc2tzKQogCQkJCQkJc2V0X2JpdChJbl9zeW5jLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKQEAgLTg3OTksNyAmIzQzOzg4MTMsNyBAQCBzdGF0aWMgdm9pZCBlbmRfcmVzaGFwZShzdHJ1Y3QgcjVjb25mICpjb25mKQogCQl3YWtlX3VwKCZhbXA7Y29uZi0mZ3Q7d2FpdF9mb3JfcmVzaGFwZSk7CiAKIAkJbWRkZXZfdXBkYXRlX2lvX29wdChjb25mLSZndDttZGRldiwKLQkJCWNvbmYtJmd0O3JhaWRfZGlza3MgLSBjb25mLSZndDttYXhfZGVncmFkZWQpOwomIzQzOwkJCWNvbmYtJmd0O3JhaWRfZGlza3MgLSBjb25mLSZndDttYXhfZGVncmFkZWQsIE5VTEwpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggNGY3OTA1YzM0MTJiOC4uYjc1ZTg1MjkxZTI5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0xMTAxLDYgJiM0MzsxMTAxLDMyIEBAIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiAJbXV0ZXhfbG9jaygmYW1wO3EtJmd0O2xpbWl0c19sb2NrKTsKIAlyZXR1cm4gcS0mZ3Q7bGltaXRzOwogfQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayAtIHRyeSB0byBzdGFydCBhbiBhdG9taWMgdXBkYXRlIG9mIHF1ZXVlCiYjNDM7ICoJbGltaXRzCiYjNDM7ICogQHE6CQlxdWV1ZSB0byB1cGRhdGUKJiM0MzsgKiBAbGltOglyZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgbGltaXRzIG9uIHN1Y2Nlc3MKJiM0MzsgKgomIzQzOyAqIExpa2UgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpLCBidXQgZmFpbHMgaW5zdGVhZCBvZiB3YWl0aW5nIHdoZW4gYW5vdGhlcgomIzQzOyAqIHVwZGF0ZSBpcyBpbiBmbGlnaHQuICBGb3IgY2FsbGVycyB0aGF0IG11c3Qgbm90IGJsb2NrIG9uIHEtJmd0O2xpbWl0c19sb2NrCiYjNDM7ICogYmVjYXVzZSB0aGV5IGhvbGQgc29tZXRoaW5nIGl0cyBjdXJyZW50IG93bmVyIGlzIHdhaXRpbmcgZm9yLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogcHJvY2VzcyBjb250ZXh0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3F1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKJiM0MzsJCQkJICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiYjNDM7CV9fY29uZF9hY3F1aXJlcyh0cnVlLCAmYW1wO3EtJmd0O2xpbWl0c19sb2NrKQomIzQzO3sKJiM0MzsJaWYgKCFtdXRleF90cnlsb2NrKCZhbXA7cS0mZ3Q7bGltaXRzX2xvY2spKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkqbGltID0gcS0mZ3Q7bGltaXRzOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBpbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCQlzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pIF9fcmVsZWFzZXMoJmFtcDtxLSZndDtsaW1pdHNfbG9jayk7CiBpbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU3NwoJCQkJCQkJb3V0cHV0OiAyNDkKCQkJCQkJCXRob3VnaHRzOiAyMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEV2YWx1YXRpb246IFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcywgd2FycmFudGluZyBhIEtNU0FOIHJ1bi4gSXQgc2VlbXMgdGhlIHBhdGNoIGlzIHByaW1hcmlseSBmb2N1c2VkIG9uIGFkZHJlc3NpbmcgbG9ja2luZyBvcmRlciBhbmQgZGVhZGxvY2sgaXNzdWVzIHdpdGhpbiB0aGUgTUQgUkFJRCBjb2RlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGBxLSZndDtsaW1pdHNfbG9ja2Agd2hlbiB1cGRhdGluZyBxdWV1ZSBsaW1pdHMuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgY2hhbmdpbmcgaG93IGBzdHJ1Y3QgcXVldWVfbGltaXRzYCBpcyBoYW5kbGVkLiBJdCBhcHBlYXJzIHRoYXQgaW5zdGVhZCBvZiBkaXJlY3RseSBtYW5pcHVsYXRpbmcgYHEtJmd0O2xpbWl0c2Agd2l0aGluIGNyaXRpY2FsIHNlY3Rpb25zIHdoZXJlIGRlYWRsb2NrcyBhcmUgcG9zc2libGUsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9jYWwgY29weSAoYGxpbWApIG9mIGBxLSZndDtsaW1pdHNgIHZpYSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCwgd2hpY2ggZXNzZW50aWFsbHkgY29waWVzIHRoZSBjb250ZW50cy4gVGhpcyBsb2NhbCBjb3B5IGlzIHRoZW4gcGFzc2VkIHRvIGZ1bmN0aW9ucyBsaWtlIGBob3RfYWRkX2Rpc2tgLCBgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzYCwgZXRjLiBDcnVjaWFsbHksIHRoZSB1cGRhdGVzIGFyZSB0aGVuIGNvbW1pdHRlZCBiYWNrIHZpYSBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoKWAuIElmIGEgdHJ5IGxvY2sgZmFpbHMsIHRoZSBmdW5jdGlvbnMgc2hvdWxkIHJldHVybi4KCkkmIzM5O3ZlIG1ldGljdWxvdXNseSByZXZpZXdlZCB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIEkgZXhhbWluZWQgdGhlIGluc3RhbmNlcyB3aGVyZSBgc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07YCBhbmQgYHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbXAgPSBOVUxMO2AgYXJlIHVzZWQgYWNyb3NzIHRoZSBwYXRjaGVkIGZ1bmN0aW9ucy4gSW4gZWFjaCBpbnN0YW5jZSAoYHJkZXZfYXR0cl9zdG9yZWAsIGBtZF9pb2N0bGAsIGBtZF9zdGFydF9zeW5jYCwgYGNoZWNrX3NiX2NoYW5nZXNgLCBgbWRkZXZfdXBkYXRlX2lvX29wdGAsIGByYWlkNV9zdG9yZV9za2lwX2NvcHlgIGFuZCBgbWRkZXZfc3RhY2tfcmRldl9pbnRvYCksIGBsaW1gIGlzIGFsd2F5cyBpbml0aWFsaXplZCAqYmVmb3JlKiBpdCYjMzk7cyByZWZlcmVuY2VkLCBwcmltYXJpbHkgYnkgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAsIHdoaWNoIHJldHVybnMgYHEtJmd0O2xpbWl0c2AgYnkgdmFsdWUuICBFdmVuIHdoZW4gYSBwb2ludGVyIHRvIGBsaW1gIGlzIHBhc3NlZCwgaXQgaXMgaW5pdGlhbGl6ZWQuIEluIHRoZSBpbnN0YW5jZXMgd2hlcmUgdGhlIHRyeWxvY2sgaXMgdXNlZCwgaXQgZmFpbHMgYmVmb3JlIHVzYWdlLiBgbWRkZXZfc3RhY2tfcmRldl9pbnRvYCBjb3BpZXMgdGhlIHBhc3NlZC1pbiBgbGltYC4gVGhlIGNvcHkgaXMgdXNlZC4KCkkgc2VlIG5vIHNjZW5hcmlvIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyBiZWluZyByZWFkIG9yIGxlYWtlZC4gVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgYSBjYXJlZnVsIHJlZmFjdG9yaW5nLCBpbXByb3ZpbmcgbG9ja2luZyBhbmQgdGh1cyByZWxpYWJpbGl0eS4gVGhlIGNyaXRpY2FsIGRhdGEgZmxvdyBhbmQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBsaW1gIHN0cnVjdCBhcmUgc2FmZSwgYW5kIHRoZXJlIGFyZSBubyBjb3BpZXMgdG8gdXNlciBzcGFjZSB0aGF0IGFyZSBtb2RpZmllZC4KCkNvbnNpZGVyaW5nIHRoaXMgYW5hbHlzaXMsIG15IGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2ggc3BlY2lmaWMgdHlwZXMgb2YgbWVtb3J5IGVycm9ycyB0aGF0IGFyZSBub3QgYWRkcmVzc2VkIGluIHRoaXMgcGF0Y2guICBHaXZlbiB0aGlzIGlzIGEgcmVmYWN0b3IsIEtBU0FOLCBMT0NLREVQIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSB0aGUgcmlnaHQgdG9vbHMgaGVyZS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGV2YWx1YXRpb24uIExldCYjMzk7cyBmbGFnIHRoaXMgYXMgc2FmZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1EIChzb2Z0d2FyZSBSQUlEKSBzdWJzeXN0ZW0gYW5kIGJsb2NrIGxheWVyIGhlbHBlciBmdW5jdGlvbnMgdG8gcmVzdHJ1Y3R1cmUgaG93IHF1ZXVlIGxpbWl0cyBhcmUgdXBkYXRlZCBhY3Jvc3MgbWQtbGluZWFyLCByYWlkMSwgcmFpZDEwLCBhbmQgcmFpZDUgYXJyYXlzLiBTcGVjaWZpY2FsbHksIGl0IHBhc3NlcyBhbiBleGlzdGluZyBvciBuZXdseSBzdGFydGVkIGBzdHJ1Y3QgcXVldWVfbGltaXRzYCB0aHJvdWdoIHZhcmlvdXMgaG90LWFkZC9yZW1vdmUvdXBkYXRlIGNhbGwgcGF0aHMgdG8gYXZvaWQgbG9jay1pbnZlcnNpb24gZGVhZGxvY2tzIGJldHdlZW4gYHEtXHUwMDNlbGltaXRzX2xvY2tgLCBhcnJheSBzdXNwZW5zaW9uLCBhbmQgYHJlY29uZmlnX211dGV4YC5cblxuQWxsIGBzdHJ1Y3QgcXVldWVfbGltaXRzYCBpbnN0YW5jZXMgb24gdGhlIHN0YWNrIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlICh2aWEgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAsIHdoaWNoIHJldHVybnMgYHEtXHUwMDNlbGltaXRzYCBieSB2YWx1ZSwgb3IgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jaygpYCB3aGljaCBwb3B1bGF0ZXMgYCpsaW1gKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgcmVhZCwgcGFzc2VkIHRvIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCBvciByZWZlcmVuY2Uvc3RhdGUgZXJyb3JzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWdnZXJzIHJhdGhlciB0aGFuIEtNU0FOLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyB0aGVyZWZvcmUgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgc3Vic3lzdGVtIGFuZCBibG9jayBsYXllciBoZWxwZXIgZnVuY3Rpb25zIHRvIHJlc3RydWN0dXJlIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIHVwZGF0ZWQgYWNyb3NzIG1kLWxpbmVhciwgcmFpZDEsIHJhaWQxMCwgYW5kIHJhaWQ1IGFycmF5cy4gU3BlY2lmaWNhbGx5LCBpdCBwYXNzZXMgYW4gZXhpc3Rpbmcgb3IgbmV3bHkgc3RhcnRlZCBgc3RydWN0IHF1ZXVlX2xpbWl0c2AgdGhyb3VnaCB2YXJpb3VzIGhvdC1hZGQvcmVtb3ZlL3VwZGF0ZSBjYWxsIHBhdGhzIHRvIGF2b2lkIGxvY2staW52ZXJzaW9uIGRlYWRsb2NrcyBiZXR3ZWVuIGBxLVx1MDAzZWxpbWl0c19sb2NrYCwgYXJyYXkgc3VzcGVuc2lvbiwgYW5kIGByZWNvbmZpZ19tdXRleGAuXG5cbkFsbCBgc3RydWN0IHF1ZXVlX2xpbWl0c2AgaW5zdGFuY2VzIG9uIHRoZSBzdGFjayBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAodmlhIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClgLCB3aGljaCByZXR1cm5zIGBxLVx1MDAzZWxpbWl0c2AgYnkgdmFsdWUsIG9yIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlX3RyeWxvY2soKWAgd2hpY2ggcG9wdWxhdGVzIGAqbGltYCkuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgYnl0ZXMgYXJlIHJlYWQsIHBhc3NlZCB0byBjb250cm9sIGZsb3csIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBkZWFkbG9ja3MsIGxvY2tpbmcgb3JkZXIgdmlvbGF0aW9ucywgb3IgcmVmZXJlbmNlL3N0YXRlIGVycm9ycywgd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4va2VybmVsIGRlYnVnZ2VycyByYXRoZXIgdGhhbiBLTVNBTi4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgdGhlcmVmb3JlIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjEzOjE1Ljg1OTg3NzI2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1MzAzMzAzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9NRFwiLFxuICAgIFwiTURfUkFJRDFcIixcbiAgICBcIk1EX1JBSUQxMFwiLFxuICAgIFwiTURfUkFJRDQ1NlwiLFxuICAgIFwiTURfTElORUFSXCIsXG4gICAgXCJETV9SQUlEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWRkZXZfc3RhY2tfcmRldl9pbnRvXCIsXG4gICAgXCJtZGRldl91cGRhdGVfaW9fb3B0XCIsXG4gICAgXCJtZF9hZGRfbmV3X2Rpc2tcIixcbiAgICBcInJlbW92ZV9hbmRfYWRkX3NwYXJlc1wiLFxuICAgIFwicmRldl9hdHRyX3N0b3JlXCIsXG4gICAgXCJtZF9zdGFydF9zeW5jXCIsXG4gICAgXCJyYWlkMV9hZGRfZGlza1wiLFxuICAgIFwicmFpZDEwX2FkZF9kaXNrXCIsXG4gICAgXCJyYWlkNV9hZGRfZGlza1wiLFxuICAgIFwicmFpZDVfc3RvcmVfc2tpcF9jb3B5XCIsXG4gICAgXCJsaW5lYXJfYWRkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUQgKHNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSBhbmQgYmxvY2sgbGF5ZXIgaGVscGVyIGZ1bmN0aW9ucyB0byByZXN0cnVjdHVyZSBob3cgcXVldWUgbGltaXRzIGFyZSB1cGRhdGVkIGFjcm9zcyBtZC1saW5lYXIsIHJhaWQxLCByYWlkMTAsIGFuZCByYWlkNSBhcnJheXMuIFNwZWNpZmljYWxseSwgaXQgcGFzc2VzIGFuIGV4aXN0aW5nIG9yIG5ld2x5IHN0YXJ0ZWQgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIHRocm91Z2ggdmFyaW91cyBob3QtYWRkL3JlbW92ZS91cGRhdGUgY2FsbCBwYXRocyB0byBhdm9pZCBsb2NrLWludmVyc2lvbiBkZWFkbG9ja3MgYmV0d2VlbiBgcS1cXHUwMDNlbGltaXRzX2xvY2tgLCBhcnJheSBzdXNwZW5zaW9uLCBhbmQgYHJlY29uZmlnX211dGV4YC5cXG5cXG5BbGwgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIGluc3RhbmNlcyBvbiB0aGUgc3RhY2sgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKHZpYSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCwgd2hpY2ggcmV0dXJucyBgcS1cXHUwMDNlbGltaXRzYCBieSB2YWx1ZSwgb3IgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jaygpYCB3aGljaCBwb3B1bGF0ZXMgYCpsaW1gKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgcmVhZCwgcGFzc2VkIHRvIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCBvciByZWZlcmVuY2Uvc3RhdGUgZXJyb3JzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWdnZXJzIHJhdGhlciB0aGFuIEtNU0FOLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyB0aGVyZWZvcmUgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cnVjdHVyZXMgbG9jayBhY3F1aXNpdGlvbiBhbmQgcXVldWUgbGltaXRzIHByb3BhZ2F0aW9uIGluIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgbGF5ZXIgdG8gcHJldmVudCBkZWFkbG9ja3MgYmV0d2VlbiBxLVxcdTAwM2VsaW1pdHNfbG9jaywgcmVjb25maWdfbXV0ZXgsIGFuZCBtZGRldl9zdXNwZW5kLiBJdCBhbHRlcnMgZGlzayBhZGRpdGlvbi9yZW1vdmFsIGFuZCBzeXNmcy9pb2N0bCBoYW5kbGluZyBhY3Jvc3MgbXVsdGlwbGUgUkFJRCBwZXJzb25hbGl0aWVzIChyYWlkMSwgcmFpZDEwLCByYWlkNSwgbGluZWFyLCBkbS1yYWlkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGlzY292ZXIgcG90ZW50aWFsIGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGNvcnJ1cHRpb25zIGR1cmluZyBjb25jdXJyZW50IFJBSUQgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoxMzoxNS44NTk4ODI4NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUxMDE0NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjNjNmJmMjY2YTI0Y2Y1NzU0YjdiYzA0NTAxMWU3NDNkMmUzZDc3ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDE4OjEzOjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcmFpZC5jIGIvZHJpdmVycy9tZC9kbS1yYWlkLmNcXG5pbmRleCA4ZjVhNWUxMzQyYTk1Li4yMWExOTIyYmVlNGZiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZC5jXFxuKysrIGIvZHJpdmVycy9tZC9kbS1yYWlkLmNcXG5AQCAtMzkyMyw3ICszOTIzLDcgQEAgc3RhdGljIHZvaWQgYXR0ZW1wdF9yZXN0b3JlX29mX2ZhdWx0eV9kZXZpY2VzKHN0cnVjdCByYWlkX3NldCAqcnMpXFxuIFxcdFxcdFxcdGNsZWFyX2JpdChGYXVsdHksIFxcdTAwMjZyLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdFxcdGNsZWFyX2JpdChXcml0ZUVycm9yU2VlbiwgXFx1MDAyNnItXFx1MDAzZWZsYWdzKTtcXG4gXFxuLVxcdFxcdFxcdGlmIChtZGRldi1cXHUwMDNlcGVycy1cXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByKSkge1xcbitcXHRcXHRcXHRpZiAobWRkZXYtXFx1MDAzZXBlcnMtXFx1MDAzZWhvdF9hZGRfZGlzayhtZGRldiwgciwgTlVMTCkpIHtcXG4gXFx0XFx0XFx0XFx0LyogRmFpbGVkIHRvIHJldml2ZSB0aGlzIGRldmljZSwgdHJ5IG5leHQgKi9cXG4gXFx0XFx0XFx0XFx0ci1cXHUwMDNlcmFpZF9kaXNrID0gci1cXHUwMDNlc2F2ZWRfcmFpZF9kaXNrID0gLTE7XFxuIFxcdFxcdFxcdFxcdHItXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jIGIvZHJpdmVycy9tZC9tZC1hdXRvZGV0ZWN0LmNcXG5pbmRleCA0YjgwMTY1YWZkMjMzLi45Mjk1MTMxMDk2NTdmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jXFxuKysrIGIvZHJpdmVycy9tZC9tZC1hdXRvZGV0ZWN0LmNcXG5AQCAtMjEzLDcgKzIxMyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtZF9zZXR1cF9kcml2ZShzdHJ1Y3QgbWRfc2V0dXBfYXJncyAqYXJncylcXG4gXFx0XFx0XFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgTURfRElTS19BQ1RJVkUpIHwgKDEgXFx1MDAzY1xcdTAwM2MgTURfRElTS19TWU5DKTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0bWRfYWRkX25ld19kaXNrKG1kZGV2LCBcXHUwMDI2ZGluZm8pO1xcbitcXHRcXHRtZF9hZGRfbmV3X2Rpc2sobWRkZXYsIFxcdTAwMjZkaW5mbywgTlVMTCk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghZXJyKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLWxpbmVhci5jIGIvZHJpdmVycy9tZC9tZC1saW5lYXIuY1xcbmluZGV4IDczYjM2N2I2MWI4NzMuLjFmNDRjMmQ3ZGI5M2QgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9tZC1saW5lYXIuY1xcbisrKyBiL2RyaXZlcnMvbWQvbWQtbGluZWFyLmNcXG5AQCAtMTg2LDcgKzE4Niw4IEBAIHN0YXRpYyBpbnQgbGluZWFyX3J1bihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGxpbmVhcl9hZGQoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuK3N0YXRpYyBpbnQgbGluZWFyX2FkZChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcXG4rXFx0XFx0ICAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdC8qIEFkZGluZyBhIGRyaXZlIHRvIGEgbGluZWFyIGFycmF5IGFsbG93cyB0aGUgYXJyYXkgdG8gZ3Jvdy5cXG4gXFx0ICogSXQgaXMgcGVybWl0dGVkIGlmIHRoZSBuZXcgZHJpdmUgaGFzIGEgbWF0Y2hpbmcgc3VwZXJibG9ja1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmNcXG5pbmRleCA2ODBiMzRhNjNjYjNkLi5jNDA1NGQwNmQxMDcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvbWQuY1xcbisrKyBiL2RyaXZlcnMvbWQvbWQuY1xcbkBAIC05NCw4ICs5NCw4IEBAIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZXN5bmNfd2FpdCk7XFxuICAqL1xcbiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1kX21pc2Nfd3E7XFxuIFxcbi1zdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxcbi1cXHRcXHRcXHRcXHQgc3RydWN0IG1kX3JkZXYgKnRoaXMpO1xcbitzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqdGhpcyxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XFxuIHN0YXRpYyB2b2lkIG1kZGV2X2RldGFjaChzdHJ1Y3QgbWRkZXYgKm1kZGV2KTtcXG4gc3RhdGljIHZvaWQgZXhwb3J0X3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xcbiBzdGF0aWMgdm9pZCBtZF93YWtldXBfdGhyZWFkX2RpcmVjdGx5KHN0cnVjdCBtZF90aHJlYWQgX19yY3UgKip0aHJlYWQpO1xcbkBAIC0yOTgxLDcgKzI5ODEsNyBAQCB2b2lkIG1kX3VwZGF0ZV9zYihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgZm9yY2VfY2hhbmdlKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wobWRfdXBkYXRlX3NiKTtcXG4gXFxuLXN0YXRpYyBpbnQgYWRkX2JvdW5kX3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuK3N0YXRpYyBpbnQgYWRkX2JvdW5kX3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYsIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gcmRldi1cXHUwMDNlbWRkZXY7XFxuIFxcdGludCBlcnIgPSAwO1xcbkBAIC0yOTk0LDcgKzI5OTQsNyBAQCBzdGF0aWMgaW50IGFkZF9ib3VuZF9yZGV2KHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0c3VwZXJfdHlwZXNbbWRkZXYtXFx1MDAzZW1ham9yX3ZlcnNpb25dLlxcbiBcXHRcXHRcXHR2YWxpZGF0ZV9zdXBlcihtZGRldiwgTlVMTC8qZnJlc2hlc3QqLywgcmRldik7XFxuLVxcdFxcdGVyciA9IG1kZGV2LVxcdTAwM2VwZXJzLVxcdTAwM2Vob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYpO1xcbitcXHRcXHRlcnIgPSBtZGRldi1cXHUwMDNlcGVycy1cXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByZGV2LCBsaW0pO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdG1kX2tpY2tfcmRldl9mcm9tX2FycmF5KHJkZXYpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC0zMDMzLDcgKzMwMzMsMTMgQEAgc3RhdGljIGludCBjbWRfbWF0Y2goY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICpzdHIpXFxuIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5IHtcXG4gXFx0c3RydWN0IGF0dHJpYnV0ZSBhdHRyO1xcbiBcXHRzc2l6ZV90ICgqc2hvdykoc3RydWN0IG1kX3JkZXYgKiwgY2hhciAqKTtcXG4tXFx0c3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7XFxuK1xcdC8qXFxuK1xcdCAqIEBsaW06IGEgcXVldWUgbGltaXRzIHVwZGF0ZSB0aGUgY2FsbGVyIG93bnMsIG9yIE5VTEwuICBTdG9yZXMgdGhhdFxcbitcXHQgKiBjYW4gYWRkIGEgbGVnIHRvIHRoZSBhcnJheSBtdXN0IHN0YWNrIGludG8gaXQgcmF0aGVyIHRoYW4gdGFrZVxcbitcXHQgKiBxLVxcdTAwM2VsaW1pdHNfbG9jayB0aGVtc2VsdmVzLCBzZWUgbWRfc3RhcnRfc3luYygpLlxcbitcXHQgKi9cXG4rXFx0c3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcXG4rXFx0XFx0XFx0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XFxuIH07XFxuIFxcbiBzdGF0aWMgc3NpemVfdFxcbkBAIC0zMDc5LDcgKzMwODUsOCBAQCBzdGF0ZV9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdFxcbi1zdGF0ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbitzdGF0ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxcbitcXHQgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdC8qIGNhbiB3cml0ZVxcbiBcXHQgKiAgZmF1bHR5ICAtIHNpbXVsYXRlcyBhbiBlcnJvclxcbkBAIC0zMTEwLDcgKzMxMTcsNyBAQCBzdGF0ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbiBcXHR9IGVsc2UgaWYgKGNtZF9tYXRjaChidWYsIFxcXCJyZW1vdmVcXFwiKSkge1xcbiBcXHRcXHRpZiAocmRldi1cXHUwMDNlbWRkZXYtXFx1MDAzZXBlcnMpIHtcXG4gXFx0XFx0XFx0Y2xlYXJfYml0KEJsb2NrZWQsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdFxcdHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LVxcdTAwM2VtZGRldiwgcmRldik7XFxuK1xcdFxcdFxcdHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LVxcdTAwM2VtZGRldiwgcmRldiwgbGltKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAocmRldi1cXHUwMDNlcmFpZF9kaXNrIFxcdTAwM2U9IDApXFxuIFxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG5AQCAtMzIyOSw3ICszMjM2LDcgQEAgc3RhdGVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4gXFx0XFx0XFx0aWYgKCFtZGRldl9pc19jbHVzdGVyZWQocmRldi1cXHUwMDNlbWRkZXYpIHx8XFxuIFxcdFxcdFxcdCAgICAoZXJyID0gbWRkZXYtXFx1MDAzZWNsdXN0ZXJfb3BzLVxcdTAwM2VnYXRoZXJfYml0bWFwcyhyZGV2KSkgPT0gMCkge1xcbiBcXHRcXHRcXHRcXHRjbGVhcl9iaXQoRmF1bHR5LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHRcXHRcXHRlcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9IGVsc2VcXG4gXFx0XFx0XFx0ZXJyID0gLUVCVVNZO1xcbkBAIC0zMjU3LDcgKzMyNjQsOCBAQCBlcnJvcnNfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3RcXG4tZXJyb3JzX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuK2Vycm9yc19zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxcbitcXHQgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgbjtcXG4gXFx0aW50IHJ2O1xcbkBAIC0zMjgzLDcgKzMyOTEsOCBAQCBzbG90X3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90XFxuLXNsb3Rfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4rc2xvdF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxcbitcXHQgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuIHtcXG4gXFx0aW50IHNsb3Q7XFxuIFxcdGludCBlcnI7XFxuQEAgLTMzMTQsNyArMzMyMyw3IEBAIHNsb3Rfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4gXFx0XFx0aWYgKHJkZXYtXFx1MDAzZW1kZGV2LVxcdTAwM2VwZXJzLVxcdTAwM2Vob3RfcmVtb3ZlX2Rpc2sgPT0gTlVMTClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdGNsZWFyX2JpdChCbG9ja2VkLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMocmRldi1cXHUwMDNlbWRkZXYsIHJkZXYpO1xcbitcXHRcXHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMocmRldi1cXHUwMDNlbWRkZXYsIHJkZXYsIGxpbSk7XFxuIFxcdFxcdGlmIChyZGV2LVxcdTAwM2VyYWlkX2Rpc2sgXFx1MDAzZT0gMClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFx0XFx0c2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsIFxcdTAwMjZyZGV2LVxcdTAwM2VtZGRldi1cXHUwMDNlcmVjb3ZlcnkpO1xcbkBAIC0zMzQ0LDcgKzMzNTMsOCBAQCBzbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuIFxcdFxcdFxcdHJkZXYtXFx1MDAzZXNhdmVkX3JhaWRfZGlzayA9IC0xO1xcbiBcXHRcXHRjbGVhcl9iaXQoSW5fc3luYywgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0Y2xlYXJfYml0KEJpdG1hcF9zeW5jLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHRlcnIgPSByZGV2LVxcdTAwM2VtZGRldi1cXHUwMDNlcGVycy1cXHUwMDNlaG90X2FkZF9kaXNrKHJkZXYtXFx1MDAzZW1kZGV2LCByZGV2KTtcXG4rXFx0XFx0ZXJyID0gcmRldi1cXHUwMDNlbWRkZXYtXFx1MDAzZXBlcnMtXFx1MDAzZWhvdF9hZGRfZGlzayhyZGV2LVxcdTAwM2VtZGRldiwgcmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBsaW0pO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdHJkZXYtXFx1MDAzZXJhaWRfZGlzayA9IC0xO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC0zMzc3LDcgKzMzODcsOCBAQCBvZmZzZXRfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3RcXG4tb2Zmc2V0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuK29mZnNldF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxcbitcXHQgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0O1xcbiBcXHRpZiAoa3N0cnRvdWxsKGJ1ZiwgMTAsIFxcdTAwMjZvZmZzZXQpIFxcdTAwM2MgMClcXG5AQCAtMzQwMyw3ICszNDE0LDggQEAgc3RhdGljIHNzaXplX3QgbmV3X29mZnNldF9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCBuZXdfb2Zmc2V0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxcbi1cXHRcXHRcXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuK1xcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdfb2Zmc2V0O1xcbiBcXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gcmRldi1cXHUwMDNlbWRkZXY7XFxuQEAgLTM1MTAsNyArMzUyMiw4IEBAIHN0YXRpYyBpbnQgc3RyaWN0X2Jsb2Nrc190b19zZWN0b3JzKGNvbnN0IGNoYXIgKmJ1Ziwgc2VjdG9yX3QgKnNlY3RvcnMpXFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90XFxuLXJkZXZfc2l6ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbityZGV2X3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcXG4rXFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdHN0cnVjdCBtZGRldiAqbXlfbWRkZXYgPSByZGV2LVxcdTAwM2VtZGRldjtcXG4gXFx0c2VjdG9yX3Qgb2xkc2VjdG9ycyA9IHJkZXYtXFx1MDAzZXNlY3RvcnM7XFxuQEAgLTM1NzIsNyArMzU4NSw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXFxuIFxcdHJldHVybiBzcHJpbnRmKHBhZ2UsIFxcXCIlbGx1XFxcXG5cXFwiLCByZWNvdmVyeV9zdGFydCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuK3N0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBsb25nIHJlY292ZXJ5X3N0YXJ0O1xcbiBcXG5AQCAtMzYxMSw3ICszNjI1LDkgQEAgc3RhdGljIHNzaXplX3QgYmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcXG4ge1xcbiBcXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgcGFnZSwgMCk7XFxuIH1cXG4tc3RhdGljIHNzaXplX3QgYmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXFxuK1xcbitzdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcXG4rXFx0XFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdGludCBydiA9IGJhZGJsb2Nrc19zdG9yZShcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCBsZW4sIDApO1xcbiBcXHQvKiBNYXliZSB0aGF0IGFjayB3YXMgYWxsIHdlIG5lZWRlZCAqL1xcbkBAIC0zNjI2LDcgKzM2NDIsOSBAQCBzdGF0aWMgc3NpemVfdCB1YmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcXG4ge1xcbiBcXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgcGFnZSwgMSk7XFxuIH1cXG4tc3RhdGljIHNzaXplX3QgdWJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKVxcbitcXG4rc3RhdGljIHNzaXplX3QgdWJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxcbitcXHRcXHRcXHQgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdHJldHVybiBiYWRibG9ja3Nfc3RvcmUoXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgcGFnZSwgbGVuLCAxKTtcXG4gfVxcbkBAIC0zNjQwLDcgKzM2NTgsOCBAQCBwcGxfc2VjdG9yX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90XFxuLXBwbF9zZWN0b3Jfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4rcHBsX3NlY3Rvcl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxcbitcXHRcXHQgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbG9uZyBzZWN0b3I7XFxuIFxcbkBAIC0zNjc5LDcgKzM2OTgsOCBAQCBwcGxfc2l6ZV9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdFxcbi1wcGxfc2l6ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbitwcGxfc2l6ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxcbitcXHQgICAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBzaXplO1xcbiBcXG5AQCAtMzc0MCw2ICszNzYwLDkgQEAgcmRldl9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxcbiBcXHRzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHJkZXZfc3lzZnNfZW50cnksIGF0dHIpO1xcbiBcXHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgbWRfcmRldiwga29iaik7XFxuIFxcdHN0cnVjdCBrZXJuZnNfbm9kZSAqa24gPSBOVUxMO1xcbitcXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7XFxuK1xcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbitcXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDtcXG4gXFx0Ym9vbCBzdXNwZW5kID0gZmFsc2U7XFxuIFxcdHNzaXplX3QgcnY7XFxuIFxcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSBSRUFEX09OQ0UocmRldi1cXHUwMDNlbWRkZXYpO1xcbkBAIC0zNzYwLDE1ICszNzgzLDM3IEBAIHJkZXZfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcXG4gXFx0XFx0XFx0c3VzcGVuZCA9IHRydWU7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFRoZXNlIGNhbiBhZGQgYSBsZWcgYmFjaywgd2hpY2ggc3RhY2tzIGl0cyBsaW1pdHM7IHRoZSBvdGhlclxcbitcXHQgKiBzdGF0ZV9zdG9yZSgpIHZhbHVlcyBuZXZlciByZWFjaCAtXFx1MDAzZWhvdF9hZGRfZGlzaygpLiAgcS1cXHUwMDNlbGltaXRzX2xvY2tcXG4rXFx0ICogbmVzdHMgb3V0c2lkZSB0aGUgbG9jayBhbmQgdGhlIHN1c3BlbmQsIHNlZSBtZF9zdGFydF9zeW5jKCkuXFxuK1xcdCAqL1xcbitcXHRpZiAoKGVudHJ5LVxcdTAwM2VzdG9yZSA9PSBzbG90X3N0b3JlIHx8XFxuK1xcdCAgICAgKGVudHJ5LVxcdTAwM2VzdG9yZSA9PSBzdGF0ZV9zdG9yZSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAoY21kX21hdGNoKHBhZ2UsIFxcXCJyZW1vdmVcXFwiKSB8fCBjbWRfbWF0Y2gocGFnZSwgXFxcInJlLWFkZFxcXCIpKSkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhbWRkZXZfaXNfZG0obWRkZXYpKSB7XFxuK1xcdFxcdHEgPSBtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlcXVldWU7XFxuK1xcdFxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XFxuK1xcdFxcdGxpbXAgPSBcXHUwMDI2bGltO1xcbitcXHR9XFxuK1xcbiBcXHRydiA9IHN1c3BlbmQgPyBtZGRldl9zdXNwZW5kX2FuZF9sb2NrKG1kZGV2KSA6IG1kZGV2X2xvY2sobWRkZXYpO1xcbiBcXHRpZiAoIXJ2KSB7XFxuIFxcdFxcdGlmIChyZGV2LVxcdTAwM2VtZGRldiA9PSBOVUxMKVxcbiBcXHRcXHRcXHRydiA9IC1FTk9ERVY7XFxuIFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0cnYgPSBlbnRyeS1cXHUwMDNlc3RvcmUocmRldiwgcGFnZSwgbGVuZ3RoKTtcXG4rXFx0XFx0XFx0cnYgPSBlbnRyeS1cXHUwMDNlc3RvcmUocmRldiwgcGFnZSwgbGVuZ3RoLCBsaW1wKTtcXG4rXFx0XFx0LyogYXBwbHkgdGhlIGxpbWl0cyBiZWZvcmUgdGhlIGFycmF5IHRha2VzIEkvTyBhZ2FpbiAqL1xcbitcXHRcXHRpZiAobGltcCkge1xcbitcXHRcXHRcXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcXG4rXFx0XFx0XFx0bGltcCA9IE5VTEw7XFxuK1xcdFxcdH1cXG4gXFx0XFx0c3VzcGVuZCA/IG1kZGV2X3VubG9ja19hbmRfcmVzdW1lKG1kZGV2KSA6IG1kZGV2X3VubG9jayhtZGRldik7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChsaW1wKVxcbitcXHRcXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcXG4rXFxuIFxcdGlmIChrbilcXG4gXFx0XFx0c3lzZnNfdW5icmVha19hY3RpdmVfcHJvdGVjdGlvbihrbik7XFxuIFxcbkBAIC02Mjc1LDIwICs2MzIwLDg5IEBAIGludCBtZGRldl9zdGFja19uZXdfcmRldihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChtZGRldl9zdGFja19uZXdfcmRldik7XFxuIFxcbisvKlxcbisgKiBTdGFjayBhIG5ldyByZGV2IGludG8gbGltaXRzIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyBsaW1pdHNfbG9jayBmb3IgYW5kXFxuKyAqIHdpbGwgY29tbWl0IGl0c2VsZi4gIFVzZWQgZnJvbSBwYXRocyB0aGF0IG11c3QgdGFrZSBsaW1pdHNfbG9jayBiZWZvcmVcXG4rICogcXVpZXNjaW5nIHRoZSBhcnJheSwgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cXG4rICovXFxuK2ludCBtZGRldl9zdGFja19yZGV2X2ludG8oc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbit7XFxuK1xcdHN0cnVjdCBxdWV1ZV9saW1pdHMgdG1wID0gKmxpbTtcXG4rXFxuK1xcdGlmIChtZGRldl9pc19kbShtZGRldikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHF1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShyZGV2LVxcdTAwM2ViZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2VxdWV1ZSkgXFx1MDAzZVxcbitcXHQgICAgcXVldWVfbG9naWNhbF9ibG9ja19zaXplKG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZSkpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCIlczogaW5jb21wYXRpYmxlIGxvZ2ljYWxfYmxvY2tfc2l6ZSwgY2FuIG5vdCBhZGRcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBtZG5hbWUobWRkZXYpKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHF1ZXVlX2xpbWl0c19zdGFja19iZGV2KFxcdTAwMjZ0bXAsIHJkZXYtXFx1MDAzZWJkZXYsIHJkZXYtXFx1MDAzZWRhdGFfb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlZGlza19uYW1lKTtcXG4rXFxuK1xcdGlmICghcXVldWVfbGltaXRzX3N0YWNrX2ludGVncml0eV9iZGV2KFxcdTAwMjZ0bXAsIHJkZXYtXFx1MDAzZWJkZXYpKSB7XFxuK1xcdFxcdHByX2VycihcXFwiJXM6IGluY29tcGF0aWJsZSBpbnRlZ3JpdHkgcHJvZmlsZSBmb3IgJXBnXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgbWRuYW1lKG1kZGV2KSwgcmRldi1cXHUwMDNlYmRldik7XFxuK1xcdFxcdHJldHVybiAtRU5YSU87XFxuK1xcdH1cXG4rXFxuK1xcdCpsaW0gPSB0bXA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3N0YWNrX3JkZXZfaW50byk7XFxuK1xcbisvKiBmb3IgY2FsbGVycyB0aGF0IG11c3Qgbm90IHdhaXQgZm9yIHEtXFx1MDAzZWxpbWl0c19sb2NrLCBzZWUgbWRfc3RhcnRfc3luYygpICovXFxuK3N0YXRpYyBib29sIG1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKHN0cnVjdCBtZGRldiAqbWRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuK3tcXG4rXFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnE7XFxuK1xcbitcXHRpZiAobWRkZXZfaXNfZG0obWRkZXYpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRxID0gbWRkZXYtXFx1MDAzZWdlbmRpc2stXFx1MDAzZXF1ZXVlO1xcbitcXG4rXFx0cmV0dXJuIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayhxLCBsaW0pO1xcbit9XFxuK1xcbiAvKiB1cGRhdGUgdGhlIG9wdGltYWwgSS9PIHNpemUgYWZ0ZXIgYSByZXNoYXBlICovXFxuLXZvaWQgbWRkZXZfdXBkYXRlX2lvX29wdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB1bnNpZ25lZCBpbnQgbnJfc3RyaXBlcylcXG4rdm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzLFxcbitcXHRcXHRcXHQgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuLVxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbitcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIG93bjtcXG4gXFxuIFxcdGlmIChtZGRldl9pc19kbShtZGRldikpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFdpdGggYW4gdXBkYXRlIG93bmVkIGJ5IHRoZSBjYWxsZXIganVzdCBjaGFuZ2UgaXQgaW4gcGxhY2U7IGl0IGlzXFxuK1xcdCAqIGNvbW1pdHRlZCwgYW5kIHRoZSBhcnJheSByZXN1bWVkLCBieSB3aG9ldmVyIHN0YXJ0ZWQgaXQuICBUYWtpbmdcXG4rXFx0ICogcS1cXHUwMDNlbGltaXRzX2xvY2sgaGVyZSB3b3VsZCBuZXN0IGl0IGluc2lkZSByZWNvbmZpZ19tdXRleCBhbmQgdGhlXFxuK1xcdCAqIHN1c3BlbmQsIHdoaWNoIGRlYWRsb2Nrcywgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cXG4rXFx0ICovXFxuK1xcdGlmIChsaW0pIHtcXG4rXFx0XFx0bGltLVxcdTAwM2Vpb19vcHQgPSBsaW0tXFx1MDAzZWlvX21pbiAqIG5yX3N0cmlwZXM7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQ2FsbGVkIGZyb20gdGhlIHN5bmMgdGhyZWFkLCB3aGljaCBtZF9yZWFwX3N5bmNfdGhyZWFkKCkgd2FpdHMgZm9yXFxuK1xcdCAqIHdpdGggcmVjb25maWdfbXV0ZXggaGVsZCwgc28gZG9uJ3Qgd2FpdCBmb3IgcS1cXHUwMDNlbGltaXRzX2xvY2sgaGVyZS5cXG4rXFx0ICogaW9fb3B0IGlzIGEgaGludCwgc2tpcHBpbmcgaXQgb24gYSBjb250ZW5kZWQgcGFzcyBpcyBmaW5lLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFtZGRldl9zdGFja19saW1pdHNfdHJ5bG9jayhtZGRldiwgXFx1MDAyNm93bikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdC8qIGRvbid0IGJvdGhlciB1cGRhdGluZyBpb19vcHQgaWYgd2UgY2FuJ3Qgc3VzcGVuZCB0aGUgYXJyYXkgKi9cXG4tXFx0aWYgKG1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKSBcXHUwMDNjIDApXFxuK1xcdGlmIChtZGRldl9zdXNwZW5kKG1kZGV2LCBmYWxzZSkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHF1ZXVlX2xpbWl0c19jYW5jZWxfdXBkYXRlKG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZSk7XFxuIFxcdFxcdHJldHVybjtcXG4tXFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlcXVldWUpO1xcbi1cXHRsaW0uaW9fb3B0ID0gbGltLmlvX21pbiAqIG5yX3N0cmlwZXM7XFxuLVxcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuK1xcdH1cXG4rXFx0b3duLmlvX29wdCA9IG93bi5pb19taW4gKiBucl9zdHJpcGVzO1xcbitcXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlcXVldWUsIFxcdTAwMjZvd24pO1xcbiBcXHRtZGRldl9yZXN1bWUobWRkZXYpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3VwZGF0ZV9pb19vcHQpO1xcbkBAIC03NDg2LDcgKzc2MDAsOCBAQCBzdGF0aWMgaW50IGdldF9kaXNrX2luZm8oc3RydWN0IG1kZGV2ICptZGRldiwgdm9pZCBfX3VzZXIgKiBhcmcpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgbWRfYWRkX25ld19kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgKmluZm8pXFxuK2ludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbyxcXG4rXFx0XFx0ICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbWRfcmRldiAqcmRldjtcXG4gXFx0ZGV2X3QgZGV2ID0gTUtERVYoaW5mby1cXHUwMDNlbWFqb3IsaW5mby1cXHUwMDNlbWlub3IpO1xcbkBAIC03NjM0LDExICs3NzQ5LDExIEBAIGludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbylcXG4gXFx0XFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0XFx0bWRkZXYtXFx1MDAzZWNsdXN0ZXJfb3BzLVxcdTAwM2VhZGRfbmV3X2Rpc2tfY2FuY2VsKG1kZGV2KTtcXG4gXFx0XFx0XFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRcXHRcXHRlcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTtcXG4rXFx0XFx0XFx0XFx0XFx0ZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0fSBlbHNlIGlmICghZXJyKVxcbi1cXHRcXHRcXHRlcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTtcXG4rXFx0XFx0XFx0ZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTtcXG4gXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG5AQCAtNzY5MSw3ICs3ODA2LDggQEAgaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBob3RfcmVtb3ZlX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgZGV2X3QgZGV2KVxcbitzdGF0aWMgaW50IGhvdF9yZW1vdmVfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBkZXZfdCBkZXYsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbWRfcmRldiAqcmRldjtcXG4gXFxuQEAgLTc3MDYsNyArNzgyMiw3IEBAIHN0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIGRldl90IGRldilcXG4gXFx0XFx0Z290byBraWNrX3JkZXY7XFxuIFxcbiBcXHRjbGVhcl9iaXQoQmxvY2tlZCwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKTtcXG4tXFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCByZGV2KTtcXG4rXFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCByZGV2LCBsaW0pO1xcbiBcXG4gXFx0aWYgKHJkZXYtXFx1MDAzZXJhaWRfZGlzayBcXHUwMDNlPSAwKVxcbiBcXHRcXHRnb3RvIGJ1c3k7XFxuQEAgLTgyOTEsNiArODQwNywyMiBAQCBzdGF0aWMgaW5saW5lIGludCBtZF9pb2N0bF92YWxpZCh1bnNpZ25lZCBpbnQgY21kKVxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qXFxuKyAqIENvbW1hbmRzIHRoYXQgY2FuIHJlYWNoIC1cXHUwMDNlaG90X2FkZF9kaXNrKCkuICBBRERfTkVXX0RJU0sgb25seSBkb2VzIHNvIGZvciBhXFxuKyAqIGpvdXJuYWwgZGV2aWNlIG9yIGEgcGVyc29uYWxpdHkgd2l0aG91dCAtXFx1MDAzZWhvdF9yZW1vdmVfZGlzaywgYnV0IHRoYXQgZGVwZW5kc1xcbisgKiBvbiBkaXNrIGluZm8gc3RpbGwgaW4gdXNlciBtZW1vcnkgaGVyZSwgc28gaXQgaXMgaW5jbHVkZWQgYXMgYSB3aG9sZS5cXG4rICovXFxuK3N0YXRpYyBib29sIG1kX2lvY3RsX21heV9hZGRfZGlzayh1bnNpZ25lZCBpbnQgY21kKVxcbit7XFxuK1xcdHN3aXRjaCAoY21kKSB7XFxuK1xcdGNhc2UgQUREX05FV19ESVNLOlxcbitcXHRjYXNlIEhPVF9SRU1PVkVfRElTSzpcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBtZF9pb2N0bF9uZWVkX3N1c3BlbmQodW5zaWduZWQgaW50IGNtZClcXG4ge1xcbiBcXHRzd2l0Y2ggKGNtZCkge1xcbkBAIC04MzQ2LDYgKzg0NzgsOSBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG4gXFx0dW5zaWduZWQgaW50IG5vaW9fZmxhZ3MgPSAwO1xcbiBcXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcXG4gXFx0c3RydWN0IG1kZGV2ICptZGRldiA9IE5VTEw7XFxuK1xcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gTlVMTDtcXG4rXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XFxuK1xcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbXAgPSBOVUxMO1xcbiBcXHRib29sIHN1c3BlbmQ7XFxuIFxcbiBcXHRlcnIgPSBtZF9pb2N0bF92YWxpZChjbWQpO1xcbkBAIC04Mzk2LDExICs4NTMxLDIwIEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbiBcXHRpZiAoIW1kX2lzX3Jkd3IobWRkZXYpKVxcbiBcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZtZGRldi1cXHUwMDNlc3luY193b3JrKTtcXG4gXFxuK1xcdC8qIHEtXFx1MDAzZWxpbWl0c19sb2NrIG5lc3RzIG91dHNpZGUgYm90aCwgc2VlIG1kX3N0YXJ0X3N5bmMoKSAqL1xcbitcXHRpZiAobWRfaW9jdGxfbWF5X2FkZF9kaXNrKGNtZCkgXFx1MDAyNlxcdTAwMjYgIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xcbitcXHRcXHRxID0gbWRkZXYtXFx1MDAzZWdlbmRpc2stXFx1MDAzZXF1ZXVlO1xcbitcXHRcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xcbitcXHRcXHRsaW1wID0gXFx1MDAyNmxpbTtcXG4rXFx0fVxcbitcXG4gXFx0c3VzcGVuZCA9IG1kX2lvY3RsX25lZWRfc3VzcGVuZChjbWQpO1xcbiBcXHRlcnIgPSBzdXNwZW5kID8gbWRkZXZfc3VzcGVuZF9hbmRfbG9jayhtZGRldikgOiBtZGRldl9sb2NrKG1kZGV2KTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRwcl9kZWJ1ZyhcXFwibWQ6IGlvY3RsIGxvY2sgaW50ZXJydXB0ZWQsIHJlYXNvbiAlZCwgY21kICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgZXJyLCBjbWQpO1xcbitcXHRcXHRpZiAobGltcClcXG4rXFx0XFx0XFx0cXVldWVfbGltaXRzX2NhbmNlbF91cGRhdGUocSk7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcdGlmIChzdXNwZW5kKVxcbkBAIC04NDQyLDcgKzg1ODYsNyBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcbiBcXHRjYXNlIEhPVF9SRU1PVkVfRElTSzpcXG4tXFx0XFx0ZXJyID0gaG90X3JlbW92ZV9kaXNrKG1kZGV2LCBuZXdfZGVjb2RlX2RldihhcmcpKTtcXG4rXFx0XFx0ZXJyID0gaG90X3JlbW92ZV9kaXNrKG1kZGV2LCBuZXdfZGVjb2RlX2RldihhcmcpLCBsaW1wKTtcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcbiBcXHRjYXNlIEFERF9ORVdfRElTSzpcXG5AQCAtODQ1OCw3ICs4NjAyLDcgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuIFxcdFxcdFxcdFxcdC8qIE5lZWQgdG8gY2xlYXIgcmVhZC1vbmx5IGZvciB0aGlzICovXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdGVyciA9IG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXFx1MDAyNmluZm8pO1xcbitcXHRcXHRcXHRcXHRlcnIgPSBtZF9hZGRfbmV3X2Rpc2sobWRkZXYsIFxcdTAwMjZpbmZvLCBsaW1wKTtcXG4gXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTg0OTYsNyArODY0MCw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbiBcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmluZm8sIGFyZ3AsIHNpemVvZihpbmZvKSkpXFxuIFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuIFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0ZXJyID0gbWRfYWRkX25ld19kaXNrKG1kZGV2LCBcXHUwMDI2aW5mbyk7XFxuK1xcdFxcdFxcdGVyciA9IG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXFx1MDAyNmluZm8sIGxpbXApO1xcbiBcXHRcXHRnb3RvIHVubG9jaztcXG4gXFx0fVxcbiBcXG5AQCAtODUyOSw2ICs4NjczLDkgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuIFxcdCAgICBlcnIgIT0gLUVJTlZBTClcXG4gXFx0XFx0bWRkZXYtXFx1MDAzZWhvbGRfYWN0aXZlID0gMDtcXG4gXFxuK1xcdGlmIChsaW1wKVxcbitcXHRcXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcXG4rXFxuIFxcdGlmIChzdXNwZW5kKSB7XFxuIFxcdFxcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWdzKTtcXG4gXFx0XFx0bWRkZXZfdW5sb2NrX2FuZF9yZXN1bWUobWRkZXYpO1xcbkBAIC0xMDE2Nyw4ICsxMDMxNCw4IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqdGhpcylcXG4gXFx0cmV0dXJuIHJlbW92ZWQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsXFxuLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbWRfcmRldiAqdGhpcylcXG4rc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnRoaXMsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuIHtcXG4gXFx0c3RydWN0IG1kX3JkZXYgKnJkZXY7XFxuIFxcdGludCBzcGFyZXMgPSAwO1xcbkBAIC0xMDE5MSw3ICsxMDMzOCw3IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoIXRlc3RfYml0KEpvdXJuYWwsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdFxcdHJkZXYtXFx1MDAzZXJlY292ZXJ5X29mZnNldCA9IDA7XFxuLVxcdFxcdGlmIChtZGRldi1cXHUwMDNlcGVycy1cXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7XFxuK1xcdFxcdGlmIChtZGRldi1cXHUwMDNlcGVycy1cXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByZGV2LCBsaW0pID09IDApIHtcXG4gXFx0XFx0XFx0LyogZmFpbHVyZSBoZXJlIGlzIE9LICovXFxuIFxcdFxcdFxcdHN5c2ZzX2xpbmtfcmRldihtZGRldiwgcmRldik7XFxuIFxcdFxcdFxcdGlmICghdGVzdF9iaXQoSm91cm5hbCwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSlcXG5AQCAtMTAyMDYsNyArMTAzNTMsOCBAQCBzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxcbiBcXHRyZXR1cm4gc3BhcmVzO1xcbiB9XFxuIFxcbi1zdGF0aWMgYm9vbCBtZF9jaG9vc2Vfc3luY19hY3Rpb24oc3RydWN0IG1kZGV2ICptZGRldiwgaW50ICpzcGFyZXMpXFxuK3N0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcyxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuIHtcXG4gXFx0LyogQ2hlY2sgaWYgcmVzaGFwZSBpcyBpbiBwcm9ncmVzcyBmaXJzdC4gKi9cXG4gXFx0aWYgKG1kZGV2LVxcdTAwM2VyZXNoYXBlX3Bvc2l0aW9uICE9IE1heFNlY3Rvcikge1xcbkBAIC0xMDIzNCw3ICsxMDM4Miw3IEBAIHN0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcylcXG4gXFx0ICogYWxzbyByZW1vdmVkIGFuZCByZS1hZGRlZCwgdG8gYWxsb3cgdGhlIHBlcnNvbmFsaXR5IHRvIGZhaWwgdGhlXFxuIFxcdCAqIHJlLWFkZC5cXG4gXFx0ICovXFxuLVxcdCpzcGFyZXMgPSByZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIE5VTEwpO1xcbitcXHQqc3BhcmVzID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMLCBsaW0pO1xcbiBcXHRpZiAoKnNwYXJlcyB8fCB0ZXN0X2JpdChNRF9SRUNPVkVSWV9MQVpZX1JFQ09WRVIsIFxcdTAwMjZtZGRldi1cXHUwMDNlcmVjb3ZlcnkpKSB7XFxuIFxcdFxcdGNsZWFyX2JpdChNRF9SRUNPVkVSWV9TWU5DLCBcXHUwMDI2bWRkZXYtXFx1MDAzZXJlY292ZXJ5KTtcXG4gXFx0XFx0Y2xlYXJfYml0KE1EX1JFQ09WRVJZX0NIRUNLLCBcXHUwMDI2bWRkZXYtXFx1MDAzZXJlY292ZXJ5KTtcXG5AQCAtMTAyNTYsNiArMTA0MDQsOSBAQCBzdGF0aWMgYm9vbCBtZF9jaG9vc2Vfc3luY19hY3Rpb24oc3RydWN0IG1kZGV2ICptZGRldiwgaW50ICpzcGFyZXMpXFxuIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gY29udGFpbmVyX29mKHdzLCBzdHJ1Y3QgbWRkZXYsIHN5bmNfd29yayk7XFxuK1xcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gTlVMTDtcXG4rXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XFxuK1xcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbXAgPSBOVUxMO1xcbiBcXHRpbnQgc3BhcmVzID0gMDtcXG4gXFx0Ym9vbCBzdXNwZW5kID0gZmFsc2U7XFxuIFxcdHVuc2lnbmVkIGludCBub2lvX2ZsYWdzID0gMDtcXG5AQCAtMTAyNjcsNiArMTA0MTgsMTcgQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxcbiBcXHQgKi9cXG4gXFx0aWYgKChtZGRldi1cXHUwMDNlcmVzaGFwZV9wb3NpdGlvbiA9PSBNYXhTZWN0b3IgfHwgIW1kX2lzX3Jkd3IobWRkZXYpKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbWRfc3BhcmVzX25lZWRfY2hhbmdlKG1kZGV2KSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBZGRpbmcgYSBzcGFyZSBiZWxvdyBzdGFja3MgaXRzIGxpbWl0cywgd2hpY2ggbmVlZHNcXG4rXFx0XFx0ICogcS1cXHUwMDNlbGltaXRzX2xvY2suICBUYWtlIGl0IGJlZm9yZSBzdXNwZW5kaW5nOiBpdHMgaG9sZGVyXFxuK1xcdFxcdCAqIHdhaXRzIGluIGJsa19tcV9mcmVlemVfcXVldWUoKSBmb3IgSS9PIHRoYXRcXG4rXFx0XFx0ICogbWRkZXYtXFx1MDAzZXN1c3BlbmRlZCBob2xkcyBiYWNrLCBzbyB0aGUgb3RoZXIgb3JkZXIgZGVhZGxvY2tzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFtZGRldl9pc19kbShtZGRldikpIHtcXG4rXFx0XFx0XFx0cSA9IG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZTtcXG4rXFx0XFx0XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG4rXFx0XFx0XFx0bGltcCA9IFxcdTAwMjZsaW07XFxuK1xcdFxcdH1cXG4gXFx0XFx0c3VzcGVuZCA9IHRydWU7XFxuIFxcdFxcdG1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKTtcXG4gXFx0XFx0bm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xcbkBAIC0xMDI4MSw2ICsxMDQ0MywxMiBAQCBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXFxuIFxcdGlmICghc3VzcGVuZCBcXHUwMDI2XFx1MDAyNiAobWRkZXYtXFx1MDAzZXJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yIHx8ICFtZF9pc19yZHdyKG1kZGV2KSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIG1kX3NwYXJlc19uZWVkX2NoYW5nZShtZGRldikpIHtcXG4gXFx0XFx0bWRkZXZfdW5sb2NrKG1kZGV2KTtcXG4rXFx0XFx0Lyogc2VlIGFib3ZlOiBxLVxcdTAwM2VsaW1pdHNfbG9jayBuZXN0cyBvdXRzaWRlIGJvdGggKi9cXG4rXFx0XFx0aWYgKCFtZGRldl9pc19kbShtZGRldikpIHtcXG4rXFx0XFx0XFx0cSA9IG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZTtcXG4rXFx0XFx0XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG4rXFx0XFx0XFx0bGltcCA9IFxcdTAwMjZsaW07XFxuK1xcdFxcdH1cXG4gXFx0XFx0bWRkZXZfc3VzcGVuZF9hbmRfbG9ja19ub2ludHIobWRkZXYpO1xcbiBcXHRcXHRzdXNwZW5kID0gdHJ1ZTtcXG4gXFx0XFx0bm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xcbkBAIC0xMDI5NCwxMSArMTA0NjIsMTEgQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxcbiBcXHRcXHQgKiBBcyB3ZSBvbmx5IGFkZCBkZXZpY2VzIHRoYXQgYXJlIGFscmVhZHkgaW4tc3luYywgd2UgY2FuXFxuIFxcdFxcdCAqIGFjdGl2YXRlIHRoZSBzcGFyZXMgaW1tZWRpYXRlbHkuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIE5VTEwpO1xcbitcXHRcXHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIE5VTEwsIGxpbXApO1xcbiBcXHRcXHRnb3RvIG5vdF9ydW5uaW5nO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIW1kX2Nob29zZV9zeW5jX2FjdGlvbihtZGRldiwgXFx1MDAyNnNwYXJlcykpXFxuK1xcdGlmICghbWRfY2hvb3NlX3N5bmNfYWN0aW9uKG1kZGV2LCBcXHUwMDI2c3BhcmVzLCBsaW1wKSlcXG4gXFx0XFx0Z290byBub3RfcnVubmluZztcXG4gXFxuIFxcdGlmICghbWRkZXYtXFx1MDAzZXBlcnMtXFx1MDAzZXN5bmNfcmVxdWVzdClcXG5AQCAtMTAzMjksNiArMTA0OTcsOCBAQCBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXFxuIFxcdCAqICAgICBodHRwczovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODIwMFxcbiBcXHQgKiBUaGVyZWZvcmUsIHVzZSBfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpLlxcbiBcXHQgKi9cXG4rXFx0aWYgKGxpbXApXFxuK1xcdFxcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApO1xcbiBcXHRpZiAoc3VzcGVuZCkge1xcbiBcXHRcXHRtZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFncyk7XFxuIFxcdFxcdF9fbWRkZXZfcmVzdW1lKG1kZGV2LCBmYWxzZSk7XFxuQEAgLTEwMzUxLDYgKzEwNTIxLDggQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxcbiBcXHQgKiAgICAgaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgyMDBcXG4gXFx0ICogVGhlcmVmb3JlLCB1c2UgX19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKS5cXG4gXFx0ICovXFxuK1xcdGlmIChsaW1wKVxcbitcXHRcXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcXG4gXFx0aWYgKHN1c3BlbmQpIHtcXG4gXFx0XFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZ3MpO1xcbiBcXHRcXHRfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpO1xcbkBAIC0xMDc5Myw2ICsxMDk2NSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG1kX2luaXQodm9pZClcXG4gXFxuIHN0YXRpYyB2b2lkIGNoZWNrX3NiX2NoYW5nZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuIHtcXG4rXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XFxuIFxcdHN0cnVjdCBtZHBfc3VwZXJibG9ja18xICpzYiA9IHBhZ2VfYWRkcmVzcyhyZGV2LVxcdTAwM2VzYl9wYWdlKTtcXG4gXFx0c3RydWN0IG1kX3JkZXYgKnJkZXYyLCAqdG1wO1xcbiBcXHRpbnQgcm9sZSwgcmV0O1xcbkBAIC0xMDg0OSw3ICsxMTAyMiwyNCBAQCBzdGF0aWMgdm9pZCBjaGVja19zYl9jaGFuZ2VzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbiBcXHRcXHRcXHRcXHRcXHRyZGV2Mi1cXHUwMDNlc2F2ZWRfcmFpZF9kaXNrID0gLTE7XFxuIFxcdFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0XFx0cmRldjItXFx1MDAzZXNhdmVkX3JhaWRfZGlzayA9IHJvbGU7XFxuLVxcdFxcdFxcdFxcdHJldCA9IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldiwgcmRldjIpO1xcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiByZWNvbmZpZ19tdXRleCBpcyBoZWxkLCBzbyBkb24ndCB3YWl0IGZvclxcbitcXHRcXHRcXHRcXHQgKiBxLVxcdTAwM2VsaW1pdHNfbG9jazsgTURfUkVDT1ZFUllfTkVFREVEIGJlbG93XFxuK1xcdFxcdFxcdFxcdCAqIGxlYXZlcyBhIHNraXBwZWQgYWRkIHRvIG1kX3N0YXJ0X3N5bmMoKS5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdGlmIChtZGRldl9zdGFja19saW1pdHNfdHJ5bG9jayhtZGRldiwgXFx1MDAyNmxpbSkpIHtcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPVxcbitcXHRcXHRcXHRcXHRcXHRcXHRtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlcXVldWU7XFxuK1xcbitcXHRcXHRcXHRcXHRcXHRyZXQgPSByZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICByZGV2MiwgXFx1MDAyNmxpbSk7XFxuK1xcdFxcdFxcdFxcdFxcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIFxcdTAwMjZsaW0pO1xcbitcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKG1kZGV2X2lzX2RtKG1kZGV2KSkge1xcbitcXHRcXHRcXHRcXHRcXHRyZXQgPSByZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICByZGV2MiwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdFxcdHJldCA9IHJlbW92ZV9zcGFyZXMobWRkZXYsIHJkZXYyKTtcXG4rXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRcXHRwcl9pbmZvKFxcXCJBY3RpdmF0ZWQgc3BhcmU6ICVwZ1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0cmRldjItXFx1MDAzZWJkZXYpO1xcbiBcXHRcXHRcXHRcXHQvKiB3YWtldXAgbWRkZXYtXFx1MDAzZXRocmVhZCBoZXJlLCBzbyBhcnJheSBjb3VsZFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmggYi9kcml2ZXJzL21kL21kLmhcXG5pbmRleCBiNmQyZTg5MjlhMGY5Li5jZWNhOGNmY2RjYjllIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvbWQuaFxcbisrKyBiL2RyaXZlcnMvbWQvbWQuaFxcbkBAIC03NjUsNyArNzY1LDggQEAgc3RydWN0IG1kX3BlcnNvbmFsaXR5XFxuIFxcdCAqIGlmIGFwcHJvcHJpYXRlLCBhbmQgc2hvdWxkIGFib3J0IHJlY292ZXJ5IGlmIG5lZWRlZFxcbiBcXHQgKi9cXG4gXFx0dm9pZCAoKmVycm9yX2hhbmRsZXIpKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KTtcXG4tXFx0aW50ICgqaG90X2FkZF9kaXNrKSAoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xcbitcXHRpbnQgKCpob3RfYWRkX2Rpc2spKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTtcXG4gXFx0aW50ICgqaG90X3JlbW92ZV9kaXNrKSAoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xcbiBcXHRpbnQgKCpzcGFyZV9hY3RpdmUpIChzdHJ1Y3QgbWRkZXYgKm1kZGV2KTtcXG4gXFx0c2VjdG9yX3QgKCpzeW5jX3JlcXVlc3QpKHN0cnVjdCBtZGRldiAqbWRkZXYsIHNlY3Rvcl90IHNlY3Rvcl9ucixcXG5AQCAtMTA0MSwxMyArMTA0MiwxNyBAQCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zO1xcbiBleHRlcm4gaW50IG1kcF9tYWpvcjtcXG4gdm9pZCBtZF9hdXRvc3RhcnRfYXJyYXlzKGludCBwYXJ0KTtcXG4gaW50IG1kX3NldF9hcnJheV9pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfYXJyYXlfaW5mb19zICppbmZvKTtcXG4taW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKTtcXG4raW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvLFxcbitcXHRcXHQgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTtcXG4gaW50IGRvX21kX3J1bihzdHJ1Y3QgbWRkZXYgKm1kZGV2KTtcXG4gI2RlZmluZSBNRERFVl9TVEFDS19JTlRFR1JJVFlcXHQoMXUgXFx1MDAzY1xcdTAwM2MgMClcXG4gaW50IG1kZGV2X3N0YWNrX3JkZXZfbGltaXRzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcXG4gXFx0XFx0dW5zaWduZWQgaW50IGZsYWdzKTtcXG4gaW50IG1kZGV2X3N0YWNrX25ld19yZGV2KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KTtcXG4tdm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzKTtcXG4raW50IG1kZGV2X3N0YWNrX3JkZXZfaW50byhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xcbit2b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtZF9mb3BzO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jXFxuaW5kZXggZjA2NDZmYjI0MzcxZi4uZGQzNDhiNTY5NWQwNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL21kL3JhaWQxLmNcXG4rKysgYi9kcml2ZXJzL21kL3JhaWQxLmNcXG5AQCAtMTg5OCw3ICsxODk4LDggQEAgc3RhdGljIGJvb2wgcmFpZDFfcmVtb3ZlX2NvbmYoc3RydWN0IHIxY29uZiAqY29uZiwgaW50IGRpc2spXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHJhaWQxX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbitzdGF0aWMgaW50IHJhaWQxX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxcbitcXHRcXHRcXHQgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcjFjb25mICpjb25mID0gbWRkZXYtXFx1MDAzZXByaXZhdGU7XFxuIFxcdGludCBlcnIgPSAtRUVYSVNUO1xcbkBAIC0xOTIzLDcgKzE5MjQsMTAgQEAgc3RhdGljIGludCByYWlkMV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcXG4gXFx0Zm9yIChtaXJyb3IgPSBmaXJzdDsgbWlycm9yIFxcdTAwM2M9IGxhc3Q7IG1pcnJvcisrKSB7XFxuIFxcdFxcdHAgPSBjb25mLVxcdTAwM2VtaXJyb3JzICsgbWlycm9yO1xcbiBcXHRcXHRpZiAoIXAtXFx1MDAzZXJkZXYpIHtcXG4tXFx0XFx0XFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xcbitcXHRcXHRcXHRpZiAobGltKVxcbitcXHRcXHRcXHRcXHRlcnIgPSBtZGRldl9zdGFja19yZGV2X2ludG8obWRkZXYsIHJkZXYsIGxpbSk7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcXG5pbmRleCAxMDkzYzc5OGQ5ZGRlLi42NDE2MTkzMjhhNmM0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmNcXG4rKysgYi9kcml2ZXJzL21kL3JhaWQxMC5jXFxuQEAgLTIwOTUsNyArMjA5NSw4IEBAIHN0YXRpYyBpbnQgcmFpZDEwX3NwYXJlX2FjdGl2ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbiBcXHRyZXR1cm4gY291bnQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcmFpZDEwX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbitzdGF0aWMgaW50IHJhaWQxMF9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdHN0cnVjdCByMTBjb25mICpjb25mID0gbWRkZXYtXFx1MDAzZXByaXZhdGU7XFxuIFxcdGludCBlcnIgPSAtRUVYSVNUO1xcbkBAIC0yMTMwLDcgKzIxMzEsMTAgQEAgc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRlcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7XFxuK1xcdFxcdGlmIChsaW0pXFxuK1xcdFxcdFxcdGVyciA9IG1kZGV2X3N0YWNrX3JkZXZfaW50byhtZGRldiwgcmRldiwgbGltKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRlcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdHAtXFx1MDAzZWhlYWRfcG9zaXRpb24gPSAwO1xcbkBAIC0yMTQ3LDcgKzIxNTEsMTAgQEAgc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuIFxcdFxcdGNsZWFyX2JpdChJbl9zeW5jLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHRzZXRfYml0KFJlcGxhY2VtZW50LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHRyZGV2LVxcdTAwM2VyYWlkX2Rpc2sgPSByZXBsX3Nsb3Q7XFxuLVxcdFxcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcXG4rXFx0XFx0aWYgKGxpbSlcXG4rXFx0XFx0XFx0ZXJyID0gbWRkZXZfc3RhY2tfcmRldl9pbnRvKG1kZGV2LCByZGV2LCBsaW0pO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0Y29uZi1cXHUwMDNlZnVsbHN5bmMgPSAxO1xcbkBAIC00NDg0LDcgKzQ0OTEsNyBAQCBzdGF0aWMgaW50IHJhaWQxMF9zdGFydF9yZXNoYXBlKHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuIFxcdFxcdHJkZXZfZm9yX2VhY2gocmRldiwgbWRkZXYpXFxuIFxcdFxcdFxcdGlmIChyZGV2LVxcdTAwM2VyYWlkX2Rpc2sgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICAhdGVzdF9iaXQoRmF1bHR5LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKSB7XFxuLVxcdFxcdFxcdFxcdGlmIChyYWlkMTBfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHtcXG4rXFx0XFx0XFx0XFx0aWYgKHJhaWQxMF9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkge1xcbiBcXHRcXHRcXHRcXHRcXHRpZiAocmRldi1cXHUwMDNlcmFpZF9kaXNrIFxcdTAwM2U9XFxuIFxcdFxcdFxcdFxcdFxcdCAgICBjb25mLVxcdTAwM2VwcmV2LnJhaWRfZGlza3MpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHNldF9iaXQoSW5fc3luYywgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKTtcXG5AQCAtNDkyMSw3ICs0OTI4LDcgQEAgc3RhdGljIHZvaWQgZW5kX3Jlc2hhcGUoc3RydWN0IHIxMGNvbmYgKmNvbmYpXFxuIFxcdGNvbmYtXFx1MDAzZXJlc2hhcGVfc2FmZSA9IE1heFNlY3RvcjtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZjb25mLVxcdTAwM2VkZXZpY2VfbG9jayk7XFxuIFxcbi1cXHRtZGRldl91cGRhdGVfaW9fb3B0KGNvbmYtXFx1MDAzZW1kZGV2LCByYWlkMTBfbnJfc3RyaXBlcyhjb25mKSk7XFxuK1xcdG1kZGV2X3VwZGF0ZV9pb19vcHQoY29uZi1cXHUwMDNlbWRkZXYsIHJhaWQxMF9ucl9zdHJpcGVzKGNvbmYpLCBOVUxMKTtcXG4gXFx0Y29uZi1cXHUwMDNlZnVsbHN5bmMgPSAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmNcXG5pbmRleCBiOTE1NDVjZTA5MGRlLi4yMjc1OWM2MzFjNGQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuY1xcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuY1xcbkBAIC03Mjg4LDYgKzcyODgsOSBAQCBzdGF0aWMgc3NpemVfdFxcbiByYWlkNV9zdG9yZV9za2lwX2NvcHkoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgcjVjb25mICpjb25mO1xcbitcXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7XFxuK1xcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbitcXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXc7XFxuIFxcdGludCBlcnI7XFxuIFxcbkBAIC03Mjk3LDIzICs3MzAwLDMzIEBAIHJhaWQ1X3N0b3JlX3NraXBfY29weShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0bmV3ID0gISFuZXc7XFxuIFxcbitcXHQvKiBxLVxcdTAwM2VsaW1pdHNfbG9jayBuZXN0cyBvdXRzaWRlIGJvdGgsIHNlZSBtZF9zdGFydF9zeW5jKCkgKi9cXG4rXFx0aWYgKCFtZGRldl9pc19kbShtZGRldikpIHtcXG4rXFx0XFx0cSA9IG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZTtcXG4rXFx0XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG4rXFx0XFx0bGltcCA9IFxcdTAwMjZsaW07XFxuK1xcdH1cXG4rXFxuIFxcdGVyciA9IG1kZGV2X3N1c3BlbmRfYW5kX2xvY2sobWRkZXYpO1xcbi1cXHRpZiAoZXJyKVxcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGlmIChsaW1wKVxcbitcXHRcXHRcXHRxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShxKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbiBcXHRjb25mID0gbWRkZXYtXFx1MDAzZXByaXZhdGU7XFxuIFxcdGlmICghY29uZilcXG4gXFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4gXFx0ZWxzZSBpZiAobmV3ICE9IGNvbmYtXFx1MDAzZXNraXBfY29weSkge1xcbi1cXHRcXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZTtcXG4tXFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xcbi1cXG4gXFx0XFx0Y29uZi1cXHUwMDNlc2tpcF9jb3B5ID0gbmV3O1xcbi1cXHRcXHRpZiAobmV3KVxcbi1cXHRcXHRcXHRsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfU1RBQkxFX1dSSVRFUztcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRsaW0uZmVhdHVyZXMgXFx1MDAyNj0gfkJMS19GRUFUX1NUQUJMRV9XUklURVM7XFxuLVxcdFxcdGVyciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIFxcdTAwMjZsaW0pO1xcbitcXHRcXHRpZiAobGltcCkge1xcbitcXHRcXHRcXHRpZiAobmV3KVxcbitcXHRcXHRcXHRcXHRsaW1wLVxcdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9TVEFCTEVfV1JJVEVTO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdGxpbXAtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjY9IH5CTEtfRkVBVF9TVEFCTEVfV1JJVEVTO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4rXFx0aWYgKGxpbXApXFxuK1xcdFxcdGVyciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApID86IGVycjtcXG4gXFx0bWRkZXZfdW5sb2NrX2FuZF9yZXN1bWUobWRkZXYpO1xcbiBcXHRyZXR1cm4gZXJyID86IGxlbjtcXG4gfVxcbkBAIC04NDQxLDcgKzg0NTQsOCBAQCBzdGF0aWMgaW50IHJhaWQ1X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHJhaWQ1X2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbitzdGF0aWMgaW50IHJhaWQ1X2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxcbitcXHRcXHRcXHQgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcjVjb25mICpjb25mID0gbWRkZXYtXFx1MDAzZXByaXZhdGU7XFxuIFxcdGludCByZXQsIGVyciA9IC1FRVhJU1Q7XFxuQEAgLTg3MjgsNyArODc0Miw3IEBAIHN0YXRpYyBpbnQgcmFpZDVfc3RhcnRfcmVzaGFwZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbiBcXHRcXHRyZGV2X2Zvcl9lYWNoKHJkZXYsIG1kZGV2KVxcbiBcXHRcXHRcXHRpZiAocmRldi1cXHUwMDNlcmFpZF9kaXNrIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgIXRlc3RfYml0KEZhdWx0eSwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSkge1xcbi1cXHRcXHRcXHRcXHRpZiAocmFpZDVfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHtcXG4rXFx0XFx0XFx0XFx0aWYgKHJhaWQ1X2FkZF9kaXNrKG1kZGV2LCByZGV2LCBOVUxMKSA9PSAwKSB7XFxuIFxcdFxcdFxcdFxcdFxcdGlmIChyZGV2LVxcdTAwM2VyYWlkX2Rpc2tcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwM2U9IGNvbmYtXFx1MDAzZXByZXZpb3VzX3JhaWRfZGlza3MpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHNldF9iaXQoSW5fc3luYywgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKTtcXG5AQCAtODc5OSw3ICs4ODEzLDcgQEAgc3RhdGljIHZvaWQgZW5kX3Jlc2hhcGUoc3RydWN0IHI1Y29uZiAqY29uZilcXG4gXFx0XFx0d2FrZV91cChcXHUwMDI2Y29uZi1cXHUwMDNld2FpdF9mb3JfcmVzaGFwZSk7XFxuIFxcbiBcXHRcXHRtZGRldl91cGRhdGVfaW9fb3B0KGNvbmYtXFx1MDAzZW1kZGV2LFxcbi1cXHRcXHRcXHRjb25mLVxcdTAwM2VyYWlkX2Rpc2tzIC0gY29uZi1cXHUwMDNlbWF4X2RlZ3JhZGVkKTtcXG4rXFx0XFx0XFx0Y29uZi1cXHUwMDNlcmFpZF9kaXNrcyAtIGNvbmYtXFx1MDAzZW1heF9kZWdyYWRlZCwgTlVMTCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG5pbmRleCA0Zjc5MDVjMzQxMmI4Li5iNzVlODUyOTFlMjkwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuQEAgLTExMDEsNiArMTEwMSwzMiBAQCBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZxLVxcdTAwM2VsaW1pdHNfbG9jayk7XFxuIFxcdHJldHVybiBxLVxcdTAwM2VsaW1pdHM7XFxuIH1cXG4rXFxuKy8qKlxcbisgKiBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlX3RyeWxvY2sgLSB0cnkgdG8gc3RhcnQgYW4gYXRvbWljIHVwZGF0ZSBvZiBxdWV1ZVxcbisgKlxcdGxpbWl0c1xcbisgKiBAcTpcXHRcXHRxdWV1ZSB0byB1cGRhdGVcXG4rICogQGxpbTpcXHRyZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgbGltaXRzIG9uIHN1Y2Nlc3NcXG4rICpcXG4rICogTGlrZSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKCksIGJ1dCBmYWlscyBpbnN0ZWFkIG9mIHdhaXRpbmcgd2hlbiBhbm90aGVyXFxuKyAqIHVwZGF0ZSBpcyBpbiBmbGlnaHQuICBGb3IgY2FsbGVycyB0aGF0IG11c3Qgbm90IGJsb2NrIG9uIHEtXFx1MDAzZWxpbWl0c19sb2NrXFxuKyAqIGJlY2F1c2UgdGhleSBob2xkIHNvbWV0aGluZyBpdHMgY3VycmVudCBvd25lciBpcyB3YWl0aW5nIGZvci5cXG4rICpcXG4rICogQ29udGV4dDogcHJvY2VzcyBjb250ZXh0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sXFxuK3F1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuK1xcdF9fY29uZF9hY3F1aXJlcyh0cnVlLCBcXHUwMDI2cS1cXHUwMDNlbGltaXRzX2xvY2spXFxuK3tcXG4rXFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZxLVxcdTAwM2VsaW1pdHNfbG9jaykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdCpsaW0gPSBxLVxcdTAwM2VsaW1pdHM7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gaW50IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4gXFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKSBfX3JlbGVhc2VzKFxcdTAwMjZxLVxcdTAwM2VsaW1pdHNfbG9jayk7XFxuIGludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MTM6MTYuNjExNjEzMjk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMzE3MTI0MDE4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX01EXCIsXG4gICAgXCJNRF9SQUlEMVwiLFxuICAgIFwiTURfUkFJRDEwXCIsXG4gICAgXCJNRF9SQUlENDU2XCIsXG4gICAgXCJNRF9MSU5FQVJcIixcbiAgICBcIkRNX1JBSURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZGRldl9zdGFja19yZGV2X2ludG9cIixcbiAgICBcIm1kZGV2X3VwZGF0ZV9pb19vcHRcIixcbiAgICBcIm1kX2FkZF9uZXdfZGlza1wiLFxuICAgIFwicmVtb3ZlX2FuZF9hZGRfc3BhcmVzXCIsXG4gICAgXCJyZGV2X2F0dHJfc3RvcmVcIixcbiAgICBcIm1kX3N0YXJ0X3N5bmNcIixcbiAgICBcInJhaWQxX2FkZF9kaXNrXCIsXG4gICAgXCJyYWlkMTBfYWRkX2Rpc2tcIixcbiAgICBcInJhaWQ1X2FkZF9kaXNrXCIsXG4gICAgXCJyYWlkNV9zdG9yZV9za2lwX2NvcHlcIixcbiAgICBcImxpbmVhcl9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cnVjdHVyZXMgbG9jayBhY3F1aXNpdGlvbiBhbmQgcXVldWUgbGltaXRzIHByb3BhZ2F0aW9uIGluIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgbGF5ZXIgdG8gcHJldmVudCBkZWFkbG9ja3MgYmV0d2VlbiBxLVxcdTAwM2VsaW1pdHNfbG9jaywgcmVjb25maWdfbXV0ZXgsIGFuZCBtZGRldl9zdXNwZW5kLiBJdCBhbHRlcnMgZGlzayBhZGRpdGlvbi9yZW1vdmFsIGFuZCBzeXNmcy9pb2N0bCBoYW5kbGluZyBhY3Jvc3MgbXVsdGlwbGUgUkFJRCBwZXJzb25hbGl0aWVzIChyYWlkMSwgcmFpZDEwLCByYWlkNSwgbGluZWFyLCBkbS1yYWlkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGlzY292ZXIgcG90ZW50aWFsIGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGNvcnJ1cHRpb25zIGR1cmluZyBjb25jdXJyZW50IFJBSUQgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYzYzZiZjI2NmEyNGNmNTc1NGI3YmMwNDUwMTFlNzQzZDJlM2Q3N2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE4OjEzOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkLmMgYi9kcml2ZXJzL21kL2RtLXJhaWQuY1xuaW5kZXggOGY1YTVlMTM0MmE5NS4uMjFhMTkyMmJlZTRmYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZC5jXG4rKysgYi9kcml2ZXJzL21kL2RtLXJhaWQuY1xuQEAgLTM5MjMsNyArMzkyMyw3IEBAIHN0YXRpYyB2b2lkIGF0dGVtcHRfcmVzdG9yZV9vZl9mYXVsdHlfZGV2aWNlcyhzdHJ1Y3QgcmFpZF9zZXQgKnJzKVxuIFx0XHRcdGNsZWFyX2JpdChGYXVsdHksIFx1MDAyNnItXHUwMDNlZmxhZ3MpO1xuIFx0XHRcdGNsZWFyX2JpdChXcml0ZUVycm9yU2VlbiwgXHUwMDI2ci1cdTAwM2VmbGFncyk7XG4gXG4tXHRcdFx0aWYgKG1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByKSkge1xuK1x0XHRcdGlmIChtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhtZGRldiwgciwgTlVMTCkpIHtcbiBcdFx0XHRcdC8qIEZhaWxlZCB0byByZXZpdmUgdGhpcyBkZXZpY2UsIHRyeSBuZXh0ICovXG4gXHRcdFx0XHRyLVx1MDAzZXJhaWRfZGlzayA9IHItXHUwMDNlc2F2ZWRfcmFpZF9kaXNrID0gLTE7XG4gXHRcdFx0XHRyLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC1hdXRvZGV0ZWN0LmMgYi9kcml2ZXJzL21kL21kLWF1dG9kZXRlY3QuY1xuaW5kZXggNGI4MDE2NWFmZDIzMy4uOTI5NTEzMTA5NjU3ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jXG4rKysgYi9kcml2ZXJzL21kL21kLWF1dG9kZXRlY3QuY1xuQEAgLTIxMyw3ICsyMTMsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWRfc2V0dXBfZHJpdmUoc3RydWN0IG1kX3NldHVwX2FyZ3MgKmFyZ3MpXG4gXHRcdFx0XHQoMSBcdTAwM2NcdTAwM2MgTURfRElTS19BQ1RJVkUpIHwgKDEgXHUwMDNjXHUwMDNjIE1EX0RJU0tfU1lOQyk7XG4gXHRcdH1cbiBcbi1cdFx0bWRfYWRkX25ld19kaXNrKG1kZGV2LCBcdTAwMjZkaW5mbyk7XG4rXHRcdG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXHUwMDI2ZGluZm8sIE5VTEwpO1xuIFx0fVxuIFxuIFx0aWYgKCFlcnIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC1saW5lYXIuYyBiL2RyaXZlcnMvbWQvbWQtbGluZWFyLmNcbmluZGV4IDczYjM2N2I2MWI4NzMuLjFmNDRjMmQ3ZGI5M2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL21kLWxpbmVhci5jXG4rKysgYi9kcml2ZXJzL21kL21kLWxpbmVhci5jXG5AQCAtMTg2LDcgKzE4Niw4IEBAIHN0YXRpYyBpbnQgbGluZWFyX3J1bihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBsaW5lYXJfYWRkKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuK3N0YXRpYyBpbnQgbGluZWFyX2FkZChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcbitcdFx0ICAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdC8qIEFkZGluZyBhIGRyaXZlIHRvIGEgbGluZWFyIGFycmF5IGFsbG93cyB0aGUgYXJyYXkgdG8gZ3Jvdy5cbiBcdCAqIEl0IGlzIHBlcm1pdHRlZCBpZiB0aGUgbmV3IGRyaXZlIGhhcyBhIG1hdGNoaW5nIHN1cGVyYmxvY2tcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmNcbmluZGV4IDY4MGIzNGE2M2NiM2QuLmM0MDU0ZDA2ZDEwNzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL21kLmNcbisrKyBiL2RyaXZlcnMvbWQvbWQuY1xuQEAgLTk0LDggKzk0LDggQEAgc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJlc3luY193YWl0KTtcbiAgKi9cbiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1kX21pc2Nfd3E7XG4gXG4tc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldixcbi1cdFx0XHRcdCBzdHJ1Y3QgbWRfcmRldiAqdGhpcyk7XG4rc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnRoaXMsXG4rXHRcdFx0XHQgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTtcbiBzdGF0aWMgdm9pZCBtZGRldl9kZXRhY2goc3RydWN0IG1kZGV2ICptZGRldik7XG4gc3RhdGljIHZvaWQgZXhwb3J0X3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xuIHN0YXRpYyB2b2lkIG1kX3dha2V1cF90aHJlYWRfZGlyZWN0bHkoc3RydWN0IG1kX3RocmVhZCBfX3JjdSAqKnRocmVhZCk7XG5AQCAtMjk4MSw3ICsyOTgxLDcgQEAgdm9pZCBtZF91cGRhdGVfc2Ioc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZvcmNlX2NoYW5nZSlcbiB9XG4gRVhQT1JUX1NZTUJPTChtZF91cGRhdGVfc2IpO1xuIFxuLXN0YXRpYyBpbnQgYWRkX2JvdW5kX3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4rc3RhdGljIGludCBhZGRfYm91bmRfcmRldihzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSByZGV2LVx1MDAzZW1kZGV2O1xuIFx0aW50IGVyciA9IDA7XG5AQCAtMjk5NCw3ICsyOTk0LDcgQEAgc3RhdGljIGludCBhZGRfYm91bmRfcmRldihzdHJ1Y3QgbWRfcmRldiAqcmRldilcbiBcdFx0ICovXG4gXHRcdHN1cGVyX3R5cGVzW21kZGV2LVx1MDAzZW1ham9yX3ZlcnNpb25dLlxuIFx0XHRcdHZhbGlkYXRlX3N1cGVyKG1kZGV2LCBOVUxMLypmcmVzaGVzdCovLCByZGV2KTtcbi1cdFx0ZXJyID0gbWRkZXYtXHUwMDNlcGVycy1cdTAwM2Vob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYpO1xuK1x0XHRlcnIgPSBtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhtZGRldiwgcmRldiwgbGltKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdG1kX2tpY2tfcmRldl9mcm9tX2FycmF5KHJkZXYpO1xuIFx0XHRcdHJldHVybiBlcnI7XG5AQCAtMzAzMyw3ICszMDMzLDEzIEBAIHN0YXRpYyBpbnQgY21kX21hdGNoKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqc3RyKVxuIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5IHtcbiBcdHN0cnVjdCBhdHRyaWJ1dGUgYXR0cjtcbiBcdHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgbWRfcmRldiAqLCBjaGFyICopO1xuLVx0c3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7XG4rXHQvKlxuK1x0ICogQGxpbTogYSBxdWV1ZSBsaW1pdHMgdXBkYXRlIHRoZSBjYWxsZXIgb3ducywgb3IgTlVMTC4gIFN0b3JlcyB0aGF0XG4rXHQgKiBjYW4gYWRkIGEgbGVnIHRvIHRoZSBhcnJheSBtdXN0IHN0YWNrIGludG8gaXQgcmF0aGVyIHRoYW4gdGFrZVxuK1x0ICogcS1cdTAwM2VsaW1pdHNfbG9jayB0aGVtc2VsdmVzLCBzZWUgbWRfc3RhcnRfc3luYygpLlxuK1x0ICovXG4rXHRzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxuK1x0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIH07XG4gXG4gc3RhdGljIHNzaXplX3RcbkBAIC0zMDc5LDcgKzMwODUsOCBAQCBzdGF0ZV9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4rc3RhdGVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0LyogY2FuIHdyaXRlXG4gXHQgKiAgZmF1bHR5ICAtIHNpbXVsYXRlcyBhbiBlcnJvclxuQEAgLTMxMTAsNyArMzExNyw3IEBAIHN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHR9IGVsc2UgaWYgKGNtZF9tYXRjaChidWYsIFwicmVtb3ZlXCIpKSB7XG4gXHRcdGlmIChyZGV2LVx1MDAzZW1kZGV2LVx1MDAzZXBlcnMpIHtcbiBcdFx0XHRjbGVhcl9iaXQoQmxvY2tlZCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4tXHRcdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYpO1xuK1x0XHRcdHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LVx1MDAzZW1kZGV2LCByZGV2LCBsaW0pO1xuIFx0XHR9XG4gXHRcdGlmIChyZGV2LVx1MDAzZXJhaWRfZGlzayBcdTAwM2U9IDApXG4gXHRcdFx0ZXJyID0gLUVCVVNZO1xuQEAgLTMyMjksNyArMzIzNiw3IEBAIHN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHRcdFx0aWYgKCFtZGRldl9pc19jbHVzdGVyZWQocmRldi1cdTAwM2VtZGRldikgfHxcbiBcdFx0XHQgICAgKGVyciA9IG1kZGV2LVx1MDAzZWNsdXN0ZXJfb3BzLVx1MDAzZWdhdGhlcl9iaXRtYXBzKHJkZXYpKSA9PSAwKSB7XG4gXHRcdFx0XHRjbGVhcl9iaXQoRmF1bHR5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYpO1xuK1x0XHRcdFx0ZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZVxuIFx0XHRcdGVyciA9IC1FQlVTWTtcbkBAIC0zMjU3LDcgKzMyNjQsOCBAQCBlcnJvcnNfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1lcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbitlcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdCAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHVuc2lnbmVkIGludCBuO1xuIFx0aW50IHJ2O1xuQEAgLTMyODMsNyArMzI5MSw4IEBAIHNsb3Rfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1zbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4rc2xvdF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxuK1x0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdGludCBzbG90O1xuIFx0aW50IGVycjtcbkBAIC0zMzE0LDcgKzMzMjMsNyBAQCBzbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHRcdGlmIChyZGV2LVx1MDAzZW1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X3JlbW92ZV9kaXNrID09IE5VTEwpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGNsZWFyX2JpdChCbG9ja2VkLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYpO1xuK1x0XHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMocmRldi1cdTAwM2VtZGRldiwgcmRldiwgbGltKTtcbiBcdFx0aWYgKHJkZXYtXHUwMDNlcmFpZF9kaXNrIFx1MDAzZT0gMClcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgXHUwMDI2cmRldi1cdTAwM2VtZGRldi1cdTAwM2VyZWNvdmVyeSk7XG5AQCAtMzM0NCw3ICszMzUzLDggQEAgc2xvdF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIFx0XHRcdHJkZXYtXHUwMDNlc2F2ZWRfcmFpZF9kaXNrID0gLTE7XG4gXHRcdGNsZWFyX2JpdChJbl9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbiBcdFx0Y2xlYXJfYml0KEJpdG1hcF9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0ZXJyID0gcmRldi1cdTAwM2VtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhyZGV2LVx1MDAzZW1kZGV2LCByZGV2KTtcbitcdFx0ZXJyID0gcmRldi1cdTAwM2VtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhyZGV2LVx1MDAzZW1kZGV2LCByZGV2LFxuK1x0XHRcdFx0XHRcdCAgICAgbGltKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdHJkZXYtXHUwMDNlcmFpZF9kaXNrID0gLTE7XG4gXHRcdFx0cmV0dXJuIGVycjtcbkBAIC0zMzc3LDcgKzMzODcsOCBAQCBvZmZzZXRfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1vZmZzZXRfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbitvZmZzZXRfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdCAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQ7XG4gXHRpZiAoa3N0cnRvdWxsKGJ1ZiwgMTAsIFx1MDAyNm9mZnNldCkgXHUwMDNjIDApXG5AQCAtMzQwMyw3ICszNDE0LDggQEAgc3RhdGljIHNzaXplX3QgbmV3X29mZnNldF9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBuZXdfb2Zmc2V0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuLVx0XHRcdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuK1x0XHRcdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxuK1x0XHRcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdfb2Zmc2V0O1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IHJkZXYtXHUwMDNlbWRkZXY7XG5AQCAtMzUxMCw3ICszNTIyLDggQEAgc3RhdGljIGludCBzdHJpY3RfYmxvY2tzX3RvX3NlY3RvcnMoY29uc3QgY2hhciAqYnVmLCBzZWN0b3JfdCAqc2VjdG9ycylcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1yZGV2X3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbityZGV2X3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCBtZGRldiAqbXlfbWRkZXYgPSByZGV2LVx1MDAzZW1kZGV2O1xuIFx0c2VjdG9yX3Qgb2xkc2VjdG9ycyA9IHJkZXYtXHUwMDNlc2VjdG9ycztcbkBAIC0zNTcyLDcgKzM1ODUsOCBAQCBzdGF0aWMgc3NpemVfdCByZWNvdmVyeV9zdGFydF9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIFx0cmV0dXJuIHNwcmludGYocGFnZSwgXCIlbGx1XFxuXCIsIHJlY292ZXJ5X3N0YXJ0KTtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3QgcmVjb3Zlcnlfc3RhcnRfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbitzdGF0aWMgc3NpemVfdCByZWNvdmVyeV9zdGFydF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGxvbmcgcmVjb3Zlcnlfc3RhcnQ7XG4gXG5AQCAtMzYxMSw3ICszNjI1LDkgQEAgc3RhdGljIHNzaXplX3QgYmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHBhZ2UsIDApO1xuIH1cbi1zdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbitcbitzdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcbitcdFx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0aW50IHJ2ID0gYmFkYmxvY2tzX3N0b3JlKFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCBsZW4sIDApO1xuIFx0LyogTWF5YmUgdGhhdCBhY2sgd2FzIGFsbCB3ZSBuZWVkZWQgKi9cbkBAIC0zNjI2LDcgKzM2NDIsOSBAQCBzdGF0aWMgc3NpemVfdCB1YmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHBhZ2UsIDEpO1xuIH1cbi1zdGF0aWMgc3NpemVfdCB1YmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG4rXG4rc3RhdGljIHNzaXplX3QgdWJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxuK1x0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0cmV0dXJuIGJhZGJsb2Nrc19zdG9yZShcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcGFnZSwgbGVuLCAxKTtcbiB9XG5AQCAtMzY0MCw3ICszNjU4LDggQEAgcHBsX3NlY3Rvcl9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXBwbF9zZWN0b3Jfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbitwcGxfc2VjdG9yX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sXG4rXHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBsb25nIHNlY3RvcjtcbiBcbkBAIC0zNjc5LDcgKzM2OTgsOCBAQCBwcGxfc2l6ZV9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXBwbF9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4rcHBsX3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdCAgICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG4gXG5AQCAtMzc0MCw2ICszNzYwLDkgQEAgcmRldl9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuIFx0c3RydWN0IHJkZXZfc3lzZnNfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5LCBhdHRyKTtcbiBcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBtZF9yZGV2LCBrb2JqKTtcbiBcdHN0cnVjdCBrZXJuZnNfbm9kZSAqa24gPSBOVUxMO1xuK1x0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMO1xuK1x0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDtcbiBcdGJvb2wgc3VzcGVuZCA9IGZhbHNlO1xuIFx0c3NpemVfdCBydjtcbiBcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSBSRUFEX09OQ0UocmRldi1cdTAwM2VtZGRldik7XG5AQCAtMzc2MCwxNSArMzc4MywzNyBAQCByZGV2X2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4gXHRcdFx0c3VzcGVuZCA9IHRydWU7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogVGhlc2UgY2FuIGFkZCBhIGxlZyBiYWNrLCB3aGljaCBzdGFja3MgaXRzIGxpbWl0czsgdGhlIG90aGVyXG4rXHQgKiBzdGF0ZV9zdG9yZSgpIHZhbHVlcyBuZXZlciByZWFjaCAtXHUwMDNlaG90X2FkZF9kaXNrKCkuICBxLVx1MDAzZWxpbWl0c19sb2NrXG4rXHQgKiBuZXN0cyBvdXRzaWRlIHRoZSBsb2NrIGFuZCB0aGUgc3VzcGVuZCwgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cbitcdCAqL1xuK1x0aWYgKChlbnRyeS1cdTAwM2VzdG9yZSA9PSBzbG90X3N0b3JlIHx8XG4rXHQgICAgIChlbnRyeS1cdTAwM2VzdG9yZSA9PSBzdGF0ZV9zdG9yZSBcdTAwMjZcdTAwMjZcbitcdCAgICAgIChjbWRfbWF0Y2gocGFnZSwgXCJyZW1vdmVcIikgfHwgY21kX21hdGNoKHBhZ2UsIFwicmUtYWRkXCIpKSkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFtZGRldl9pc19kbShtZGRldikpIHtcbitcdFx0cSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4rXHRcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XG4rXHRcdGxpbXAgPSBcdTAwMjZsaW07XG4rXHR9XG4rXG4gXHRydiA9IHN1c3BlbmQgPyBtZGRldl9zdXNwZW5kX2FuZF9sb2NrKG1kZGV2KSA6IG1kZGV2X2xvY2sobWRkZXYpO1xuIFx0aWYgKCFydikge1xuIFx0XHRpZiAocmRldi1cdTAwM2VtZGRldiA9PSBOVUxMKVxuIFx0XHRcdHJ2ID0gLUVOT0RFVjtcbiBcdFx0ZWxzZVxuLVx0XHRcdHJ2ID0gZW50cnktXHUwMDNlc3RvcmUocmRldiwgcGFnZSwgbGVuZ3RoKTtcbitcdFx0XHRydiA9IGVudHJ5LVx1MDAzZXN0b3JlKHJkZXYsIHBhZ2UsIGxlbmd0aCwgbGltcCk7XG4rXHRcdC8qIGFwcGx5IHRoZSBsaW1pdHMgYmVmb3JlIHRoZSBhcnJheSB0YWtlcyBJL08gYWdhaW4gKi9cbitcdFx0aWYgKGxpbXApIHtcbitcdFx0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcbitcdFx0XHRsaW1wID0gTlVMTDtcbitcdFx0fVxuIFx0XHRzdXNwZW5kID8gbWRkZXZfdW5sb2NrX2FuZF9yZXN1bWUobWRkZXYpIDogbWRkZXZfdW5sb2NrKG1kZGV2KTtcbiBcdH1cbiBcbitcdGlmIChsaW1wKVxuK1x0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcbitcbiBcdGlmIChrbilcbiBcdFx0c3lzZnNfdW5icmVha19hY3RpdmVfcHJvdGVjdGlvbihrbik7XG4gXG5AQCAtNjI3NSwyMCArNjMyMCw4OSBAQCBpbnQgbWRkZXZfc3RhY2tfbmV3X3JkZXYoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3N0YWNrX25ld19yZGV2KTtcbiBcbisvKlxuKyAqIFN0YWNrIGEgbmV3IHJkZXYgaW50byBsaW1pdHMgdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIGxpbWl0c19sb2NrIGZvciBhbmRcbisgKiB3aWxsIGNvbW1pdCBpdHNlbGYuICBVc2VkIGZyb20gcGF0aHMgdGhhdCBtdXN0IHRha2UgbGltaXRzX2xvY2sgYmVmb3JlXG4rICogcXVpZXNjaW5nIHRoZSBhcnJheSwgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cbisgKi9cbitpbnQgbWRkZXZfc3RhY2tfcmRldl9pbnRvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuK3tcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgdG1wID0gKmxpbTtcbitcbitcdGlmIChtZGRldl9pc19kbShtZGRldikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHF1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShyZGV2LVx1MDAzZWJkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2VxdWV1ZSkgXHUwMDNlXG4rXHQgICAgcXVldWVfbG9naWNhbF9ibG9ja19zaXplKG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWUpKSB7XG4rXHRcdHByX2VycihcIiVzOiBpbmNvbXBhdGlibGUgbG9naWNhbF9ibG9ja19zaXplLCBjYW4gbm90IGFkZFxcblwiLFxuK1x0XHQgICAgICAgbWRuYW1lKG1kZGV2KSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cXVldWVfbGltaXRzX3N0YWNrX2JkZXYoXHUwMDI2dG1wLCByZGV2LVx1MDAzZWJkZXYsIHJkZXYtXHUwMDNlZGF0YV9vZmZzZXQsXG4rXHRcdFx0XHRtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZWRpc2tfbmFtZSk7XG4rXG4rXHRpZiAoIXF1ZXVlX2xpbWl0c19zdGFja19pbnRlZ3JpdHlfYmRldihcdTAwMjZ0bXAsIHJkZXYtXHUwMDNlYmRldikpIHtcbitcdFx0cHJfZXJyKFwiJXM6IGluY29tcGF0aWJsZSBpbnRlZ3JpdHkgcHJvZmlsZSBmb3IgJXBnXFxuXCIsXG4rXHRcdCAgICAgICBtZG5hbWUobWRkZXYpLCByZGV2LVx1MDAzZWJkZXYpO1xuK1x0XHRyZXR1cm4gLUVOWElPO1xuK1x0fVxuK1xuK1x0KmxpbSA9IHRtcDtcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtZGRldl9zdGFja19yZGV2X2ludG8pO1xuK1xuKy8qIGZvciBjYWxsZXJzIHRoYXQgbXVzdCBub3Qgd2FpdCBmb3IgcS1cdTAwM2VsaW1pdHNfbG9jaywgc2VlIG1kX3N0YXJ0X3N5bmMoKSAqL1xuK3N0YXRpYyBib29sIG1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKHN0cnVjdCBtZGRldiAqbWRkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuK3tcbitcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxO1xuK1xuK1x0aWYgKG1kZGV2X2lzX2RtKG1kZGV2KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4rXG4rXHRyZXR1cm4gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZV90cnlsb2NrKHEsIGxpbSk7XG4rfVxuK1xuIC8qIHVwZGF0ZSB0aGUgb3B0aW1hbCBJL08gc2l6ZSBhZnRlciBhIHJlc2hhcGUgKi9cbi12b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMpXG4rdm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzLFxuK1x0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuLVx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzIG93bjtcbiBcbiBcdGlmIChtZGRldl9pc19kbShtZGRldikpXG4gXHRcdHJldHVybjtcbiBcbitcdC8qXG4rXHQgKiBXaXRoIGFuIHVwZGF0ZSBvd25lZCBieSB0aGUgY2FsbGVyIGp1c3QgY2hhbmdlIGl0IGluIHBsYWNlOyBpdCBpc1xuK1x0ICogY29tbWl0dGVkLCBhbmQgdGhlIGFycmF5IHJlc3VtZWQsIGJ5IHdob2V2ZXIgc3RhcnRlZCBpdC4gIFRha2luZ1xuK1x0ICogcS1cdTAwM2VsaW1pdHNfbG9jayBoZXJlIHdvdWxkIG5lc3QgaXQgaW5zaWRlIHJlY29uZmlnX211dGV4IGFuZCB0aGVcbitcdCAqIHN1c3BlbmQsIHdoaWNoIGRlYWRsb2Nrcywgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cbitcdCAqL1xuK1x0aWYgKGxpbSkge1xuK1x0XHRsaW0tXHUwMDNlaW9fb3B0ID0gbGltLVx1MDAzZWlvX21pbiAqIG5yX3N0cmlwZXM7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBDYWxsZWQgZnJvbSB0aGUgc3luYyB0aHJlYWQsIHdoaWNoIG1kX3JlYXBfc3luY190aHJlYWQoKSB3YWl0cyBmb3JcbitcdCAqIHdpdGggcmVjb25maWdfbXV0ZXggaGVsZCwgc28gZG9uJ3Qgd2FpdCBmb3IgcS1cdTAwM2VsaW1pdHNfbG9jayBoZXJlLlxuK1x0ICogaW9fb3B0IGlzIGEgaGludCwgc2tpcHBpbmcgaXQgb24gYSBjb250ZW5kZWQgcGFzcyBpcyBmaW5lLlxuK1x0ICovXG4rXHRpZiAoIW1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKG1kZGV2LCBcdTAwMjZvd24pKVxuK1x0XHRyZXR1cm47XG4rXG4gXHQvKiBkb24ndCBib3RoZXIgdXBkYXRpbmcgaW9fb3B0IGlmIHdlIGNhbid0IHN1c3BlbmQgdGhlIGFycmF5ICovXG4tXHRpZiAobWRkZXZfc3VzcGVuZChtZGRldiwgZmFsc2UpIFx1MDAzYyAwKVxuK1x0aWYgKG1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKSBcdTAwM2MgMCkge1xuK1x0XHRxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlKTtcbiBcdFx0cmV0dXJuO1xuLVx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlKTtcbi1cdGxpbS5pb19vcHQgPSBsaW0uaW9fbWluICogbnJfc3RyaXBlcztcbi1cdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4rXHR9XG4rXHRvd24uaW9fb3B0ID0gb3duLmlvX21pbiAqIG5yX3N0cmlwZXM7XG4rXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZvd24pO1xuIFx0bWRkZXZfcmVzdW1lKG1kZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobWRkZXZfdXBkYXRlX2lvX29wdCk7XG5AQCAtNzQ4Niw3ICs3NjAwLDggQEAgc3RhdGljIGludCBnZXRfZGlza19pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHZvaWQgX191c2VyICogYXJnKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbylcbitpbnQgbWRfYWRkX25ld19kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgKmluZm8sXG4rXHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0c3RydWN0IG1kX3JkZXYgKnJkZXY7XG4gXHRkZXZfdCBkZXYgPSBNS0RFVihpbmZvLVx1MDAzZW1ham9yLGluZm8tXHUwMDNlbWlub3IpO1xuQEAgLTc2MzQsMTEgKzc3NDksMTEgQEAgaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKVxuIFx0XHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdFx0bWRkZXYtXHUwMDNlY2x1c3Rlcl9vcHMtXHUwMDNlYWRkX25ld19kaXNrX2NhbmNlbChtZGRldik7XG4gXHRcdFx0XHRlbHNlXG4tXHRcdFx0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYpO1xuK1x0XHRcdFx0XHRlcnIgPSBhZGRfYm91bmRfcmRldihyZGV2LCBsaW0pO1xuIFx0XHRcdH1cbiBcbiBcdFx0fSBlbHNlIGlmICghZXJyKVxuLVx0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYpO1xuK1x0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYsIGxpbSk7XG4gXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtNzY5MSw3ICs3ODA2LDggQEAgaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIGRldl90IGRldilcbitzdGF0aWMgaW50IGhvdF9yZW1vdmVfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBkZXZfdCBkZXYsXG4rXHRcdFx0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCBtZF9yZGV2ICpyZGV2O1xuIFxuQEAgLTc3MDYsNyArNzgyMiw3IEBAIHN0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIGRldl90IGRldilcbiBcdFx0Z290byBraWNrX3JkZXY7XG4gXG4gXHRjbGVhcl9iaXQoQmxvY2tlZCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4tXHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIHJkZXYpO1xuK1x0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCByZGV2LCBsaW0pO1xuIFxuIFx0aWYgKHJkZXYtXHUwMDNlcmFpZF9kaXNrIFx1MDAzZT0gMClcbiBcdFx0Z290byBidXN5O1xuQEAgLTgyOTEsNiArODQwNywyMiBAQCBzdGF0aWMgaW5saW5lIGludCBtZF9pb2N0bF92YWxpZCh1bnNpZ25lZCBpbnQgY21kKVxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIENvbW1hbmRzIHRoYXQgY2FuIHJlYWNoIC1cdTAwM2Vob3RfYWRkX2Rpc2soKS4gIEFERF9ORVdfRElTSyBvbmx5IGRvZXMgc28gZm9yIGFcbisgKiBqb3VybmFsIGRldmljZSBvciBhIHBlcnNvbmFsaXR5IHdpdGhvdXQgLVx1MDAzZWhvdF9yZW1vdmVfZGlzaywgYnV0IHRoYXQgZGVwZW5kc1xuKyAqIG9uIGRpc2sgaW5mbyBzdGlsbCBpbiB1c2VyIG1lbW9yeSBoZXJlLCBzbyBpdCBpcyBpbmNsdWRlZCBhcyBhIHdob2xlLlxuKyAqL1xuK3N0YXRpYyBib29sIG1kX2lvY3RsX21heV9hZGRfZGlzayh1bnNpZ25lZCBpbnQgY21kKVxuK3tcbitcdHN3aXRjaCAoY21kKSB7XG4rXHRjYXNlIEFERF9ORVdfRElTSzpcbitcdGNhc2UgSE9UX1JFTU9WRV9ESVNLOlxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbit9XG4rXG4gc3RhdGljIGJvb2wgbWRfaW9jdGxfbmVlZF9zdXNwZW5kKHVuc2lnbmVkIGludCBjbWQpXG4ge1xuIFx0c3dpdGNoIChjbWQpIHtcbkBAIC04MzQ2LDYgKzg0NzgsOSBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbiBcdHVuc2lnbmVkIGludCBub2lvX2ZsYWdzID0gMDtcbiBcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IE5VTEw7XG4rXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbXAgPSBOVUxMO1xuIFx0Ym9vbCBzdXNwZW5kO1xuIFxuIFx0ZXJyID0gbWRfaW9jdGxfdmFsaWQoY21kKTtcbkBAIC04Mzk2LDExICs4NTMxLDIwIEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0aWYgKCFtZF9pc19yZHdyKG1kZGV2KSlcbiBcdFx0Zmx1c2hfd29yayhcdTAwMjZtZGRldi1cdTAwM2VzeW5jX3dvcmspO1xuIFxuK1x0LyogcS1cdTAwM2VsaW1pdHNfbG9jayBuZXN0cyBvdXRzaWRlIGJvdGgsIHNlZSBtZF9zdGFydF9zeW5jKCkgKi9cbitcdGlmIChtZF9pb2N0bF9tYXlfYWRkX2Rpc2soY21kKSBcdTAwMjZcdTAwMjYgIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuK1x0XHRxID0gbWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZTtcbitcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbitcdFx0bGltcCA9IFx1MDAyNmxpbTtcbitcdH1cbitcbiBcdHN1c3BlbmQgPSBtZF9pb2N0bF9uZWVkX3N1c3BlbmQoY21kKTtcbiBcdGVyciA9IHN1c3BlbmQgPyBtZGRldl9zdXNwZW5kX2FuZF9sb2NrKG1kZGV2KSA6IG1kZGV2X2xvY2sobWRkZXYpO1xuIFx0aWYgKGVycikge1xuIFx0XHRwcl9kZWJ1ZyhcIm1kOiBpb2N0bCBsb2NrIGludGVycnVwdGVkLCByZWFzb24gJWQsIGNtZCAlZFxcblwiLFxuIFx0XHRcdCBlcnIsIGNtZCk7XG4rXHRcdGlmIChsaW1wKVxuK1x0XHRcdHF1ZXVlX2xpbWl0c19jYW5jZWxfdXBkYXRlKHEpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcdGlmIChzdXNwZW5kKVxuQEAgLTg0NDIsNyArODU4Niw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0XHRnb3RvIHVubG9jaztcbiBcbiBcdGNhc2UgSE9UX1JFTU9WRV9ESVNLOlxuLVx0XHRlcnIgPSBob3RfcmVtb3ZlX2Rpc2sobWRkZXYsIG5ld19kZWNvZGVfZGV2KGFyZykpO1xuK1x0XHRlcnIgPSBob3RfcmVtb3ZlX2Rpc2sobWRkZXYsIG5ld19kZWNvZGVfZGV2KGFyZyksIGxpbXApO1xuIFx0XHRnb3RvIHVubG9jaztcbiBcbiBcdGNhc2UgQUREX05FV19ESVNLOlxuQEAgLTg0NTgsNyArODYwMiw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0XHRcdFx0LyogTmVlZCB0byBjbGVhciByZWFkLW9ubHkgZm9yIHRoaXMgKi9cbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGVsc2Vcbi1cdFx0XHRcdGVyciA9IG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXHUwMDI2aW5mbyk7XG4rXHRcdFx0XHRlcnIgPSBtZF9hZGRfbmV3X2Rpc2sobWRkZXYsIFx1MDAyNmluZm8sIGxpbXApO1xuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuQEAgLTg0OTYsNyArODY0MCw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2aW5mbywgYXJncCwgc2l6ZW9mKGluZm8pKSlcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRlbHNlXG4tXHRcdFx0ZXJyID0gbWRfYWRkX25ld19kaXNrKG1kZGV2LCBcdTAwMjZpbmZvKTtcbitcdFx0XHRlcnIgPSBtZF9hZGRfbmV3X2Rpc2sobWRkZXYsIFx1MDAyNmluZm8sIGxpbXApO1xuIFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbiBcbkBAIC04NTI5LDYgKzg2NzMsOSBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbiBcdCAgICBlcnIgIT0gLUVJTlZBTClcbiBcdFx0bWRkZXYtXHUwMDNlaG9sZF9hY3RpdmUgPSAwO1xuIFxuK1x0aWYgKGxpbXApXG4rXHRcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApO1xuK1xuIFx0aWYgKHN1c3BlbmQpIHtcbiBcdFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZ3MpO1xuIFx0XHRtZGRldl91bmxvY2tfYW5kX3Jlc3VtZShtZGRldik7XG5AQCAtMTAxNjcsOCArMTAzMTQsOCBAQCBzdGF0aWMgaW50IHJlbW92ZV9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnRoaXMpXG4gXHRyZXR1cm4gcmVtb3ZlZDtcbiB9XG4gXG4tc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldixcbi1cdFx0XHRcdCBzdHJ1Y3QgbWRfcmRldiAqdGhpcylcbitzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqdGhpcyxcbitcdFx0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0c3RydWN0IG1kX3JkZXYgKnJkZXY7XG4gXHRpbnQgc3BhcmVzID0gMDtcbkBAIC0xMDE5MSw3ICsxMDMzOCw3IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghdGVzdF9iaXQoSm91cm5hbCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG4gXHRcdFx0cmRldi1cdTAwM2VyZWNvdmVyeV9vZmZzZXQgPSAwO1xuLVx0XHRpZiAobWRkZXYtXHUwMDNlcGVycy1cdTAwM2Vob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHtcbitcdFx0aWYgKG1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByZGV2LCBsaW0pID09IDApIHtcbiBcdFx0XHQvKiBmYWlsdXJlIGhlcmUgaXMgT0sgKi9cbiBcdFx0XHRzeXNmc19saW5rX3JkZXYobWRkZXYsIHJkZXYpO1xuIFx0XHRcdGlmICghdGVzdF9iaXQoSm91cm5hbCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG5AQCAtMTAyMDYsNyArMTAzNTMsOCBAQCBzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxuIFx0cmV0dXJuIHNwYXJlcztcbiB9XG4gXG4tc3RhdGljIGJvb2wgbWRfY2hvb3NlX3N5bmNfYWN0aW9uKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCAqc3BhcmVzKVxuK3N0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcyxcbitcdFx0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdC8qIENoZWNrIGlmIHJlc2hhcGUgaXMgaW4gcHJvZ3Jlc3MgZmlyc3QuICovXG4gXHRpZiAobWRkZXYtXHUwMDNlcmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IpIHtcbkBAIC0xMDIzNCw3ICsxMDM4Miw3IEBAIHN0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcylcbiBcdCAqIGFsc28gcmVtb3ZlZCBhbmQgcmUtYWRkZWQsIHRvIGFsbG93IHRoZSBwZXJzb25hbGl0eSB0byBmYWlsIHRoZVxuIFx0ICogcmUtYWRkLlxuIFx0ICovXG4tXHQqc3BhcmVzID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMKTtcbitcdCpzcGFyZXMgPSByZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIE5VTEwsIGxpbSk7XG4gXHRpZiAoKnNwYXJlcyB8fCB0ZXN0X2JpdChNRF9SRUNPVkVSWV9MQVpZX1JFQ09WRVIsIFx1MDAyNm1kZGV2LVx1MDAzZXJlY292ZXJ5KSkge1xuIFx0XHRjbGVhcl9iaXQoTURfUkVDT1ZFUllfU1lOQywgXHUwMDI2bWRkZXYtXHUwMDNlcmVjb3ZlcnkpO1xuIFx0XHRjbGVhcl9iaXQoTURfUkVDT1ZFUllfQ0hFQ0ssIFx1MDAyNm1kZGV2LVx1MDAzZXJlY292ZXJ5KTtcbkBAIC0xMDI1Niw2ICsxMDQwNCw5IEBAIHN0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcylcbiBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXG4ge1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IGNvbnRhaW5lcl9vZih3cywgc3RydWN0IG1kZGV2LCBzeW5jX3dvcmspO1xuK1x0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMO1xuK1x0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDtcbiBcdGludCBzcGFyZXMgPSAwO1xuIFx0Ym9vbCBzdXNwZW5kID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBpbnQgbm9pb19mbGFncyA9IDA7XG5AQCAtMTAyNjcsNiArMTA0MTgsMTcgQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxuIFx0ICovXG4gXHRpZiAoKG1kZGV2LVx1MDAzZXJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yIHx8ICFtZF9pc19yZHdyKG1kZGV2KSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbWRfc3BhcmVzX25lZWRfY2hhbmdlKG1kZGV2KSkge1xuK1x0XHQvKlxuK1x0XHQgKiBBZGRpbmcgYSBzcGFyZSBiZWxvdyBzdGFja3MgaXRzIGxpbWl0cywgd2hpY2ggbmVlZHNcbitcdFx0ICogcS1cdTAwM2VsaW1pdHNfbG9jay4gIFRha2UgaXQgYmVmb3JlIHN1c3BlbmRpbmc6IGl0cyBob2xkZXJcbitcdFx0ICogd2FpdHMgaW4gYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIGZvciBJL08gdGhhdFxuK1x0XHQgKiBtZGRldi1cdTAwM2VzdXNwZW5kZWQgaG9sZHMgYmFjaywgc28gdGhlIG90aGVyIG9yZGVyIGRlYWRsb2Nrcy5cbitcdFx0ICovXG4rXHRcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpKSB7XG4rXHRcdFx0cSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4rXHRcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbitcdFx0XHRsaW1wID0gXHUwMDI2bGltO1xuK1x0XHR9XG4gXHRcdHN1c3BlbmQgPSB0cnVlO1xuIFx0XHRtZGRldl9zdXNwZW5kKG1kZGV2LCBmYWxzZSk7XG4gXHRcdG5vaW9fZmxhZ3MgPSBtZW1hbGxvY19ub2lvX3NhdmUoKTtcbkBAIC0xMDI4MSw2ICsxMDQ0MywxMiBAQCBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXG4gXHRpZiAoIXN1c3BlbmQgXHUwMDI2XHUwMDI2IChtZGRldi1cdTAwM2VyZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvciB8fCAhbWRfaXNfcmR3cihtZGRldikpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG1kX3NwYXJlc19uZWVkX2NoYW5nZShtZGRldikpIHtcbiBcdFx0bWRkZXZfdW5sb2NrKG1kZGV2KTtcbitcdFx0Lyogc2VlIGFib3ZlOiBxLVx1MDAzZWxpbWl0c19sb2NrIG5lc3RzIG91dHNpZGUgYm90aCAqL1xuK1x0XHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuK1x0XHRcdHEgPSBtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlO1xuK1x0XHRcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XG4rXHRcdFx0bGltcCA9IFx1MDAyNmxpbTtcbitcdFx0fVxuIFx0XHRtZGRldl9zdXNwZW5kX2FuZF9sb2NrX25vaW50cihtZGRldik7XG4gXHRcdHN1c3BlbmQgPSB0cnVlO1xuIFx0XHRub2lvX2ZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG5AQCAtMTAyOTQsMTEgKzEwNDYyLDExIEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cylcbiBcdFx0ICogQXMgd2Ugb25seSBhZGQgZGV2aWNlcyB0aGF0IGFyZSBhbHJlYWR5IGluLXN5bmMsIHdlIGNhblxuIFx0XHQgKiBhY3RpdmF0ZSB0aGUgc3BhcmVzIGltbWVkaWF0ZWx5LlxuIFx0XHQgKi9cbi1cdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMKTtcbitcdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMLCBsaW1wKTtcbiBcdFx0Z290byBub3RfcnVubmluZztcbiBcdH1cbiBcbi1cdGlmICghbWRfY2hvb3NlX3N5bmNfYWN0aW9uKG1kZGV2LCBcdTAwMjZzcGFyZXMpKVxuK1x0aWYgKCFtZF9jaG9vc2Vfc3luY19hY3Rpb24obWRkZXYsIFx1MDAyNnNwYXJlcywgbGltcCkpXG4gXHRcdGdvdG8gbm90X3J1bm5pbmc7XG4gXG4gXHRpZiAoIW1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlc3luY19yZXF1ZXN0KVxuQEAgLTEwMzI5LDYgKzEwNDk3LDggQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxuIFx0ICogICAgIGh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MjAwXG4gXHQgKiBUaGVyZWZvcmUsIHVzZSBfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpLlxuIFx0ICovXG4rXHRpZiAobGltcClcbitcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltcCk7XG4gXHRpZiAoc3VzcGVuZCkge1xuIFx0XHRtZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFncyk7XG4gXHRcdF9fbWRkZXZfcmVzdW1lKG1kZGV2LCBmYWxzZSk7XG5AQCAtMTAzNTEsNiArMTA1MjEsOCBAQCBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXG4gXHQgKiAgICAgaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgyMDBcbiBcdCAqIFRoZXJlZm9yZSwgdXNlIF9fbWRkZXZfcmVzdW1lKG1kZGV2LCBmYWxzZSkuXG4gXHQgKi9cbitcdGlmIChsaW1wKVxuK1x0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcbiBcdGlmIChzdXNwZW5kKSB7XG4gXHRcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWdzKTtcbiBcdFx0X19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKTtcbkBAIC0xMDc5Myw2ICsxMDk2NSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG1kX2luaXQodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBjaGVja19zYl9jaGFuZ2VzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIHtcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFx0c3RydWN0IG1kcF9zdXBlcmJsb2NrXzEgKnNiID0gcGFnZV9hZGRyZXNzKHJkZXYtXHUwMDNlc2JfcGFnZSk7XG4gXHRzdHJ1Y3QgbWRfcmRldiAqcmRldjIsICp0bXA7XG4gXHRpbnQgcm9sZSwgcmV0O1xuQEAgLTEwODQ5LDcgKzExMDIyLDI0IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3NiX2NoYW5nZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4gXHRcdFx0XHRcdHJkZXYyLVx1MDAzZXNhdmVkX3JhaWRfZGlzayA9IC0xO1xuIFx0XHRcdFx0ZWxzZVxuIFx0XHRcdFx0XHRyZGV2Mi1cdTAwM2VzYXZlZF9yYWlkX2Rpc2sgPSByb2xlO1xuLVx0XHRcdFx0cmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCByZGV2Mik7XG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogcmVjb25maWdfbXV0ZXggaXMgaGVsZCwgc28gZG9uJ3Qgd2FpdCBmb3JcbitcdFx0XHRcdCAqIHEtXHUwMDNlbGltaXRzX2xvY2s7IE1EX1JFQ09WRVJZX05FRURFRCBiZWxvd1xuK1x0XHRcdFx0ICogbGVhdmVzIGEgc2tpcHBlZCBhZGQgdG8gbWRfc3RhcnRfc3luYygpLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRpZiAobWRkZXZfc3RhY2tfbGltaXRzX3RyeWxvY2sobWRkZXYsIFx1MDAyNmxpbSkpIHtcbitcdFx0XHRcdFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPVxuK1x0XHRcdFx0XHRcdG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4rXG4rXHRcdFx0XHRcdHJldCA9IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldixcbitcdFx0XHRcdFx0XHRcdFx0ICAgIHJkZXYyLCBcdTAwMjZsaW0pO1xuK1x0XHRcdFx0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBcdTAwMjZsaW0pO1xuK1x0XHRcdFx0fSBlbHNlIGlmIChtZGRldl9pc19kbShtZGRldikpIHtcbitcdFx0XHRcdFx0cmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgcmRldjIsIE5VTEwpO1xuK1x0XHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdFx0cmV0ID0gcmVtb3ZlX3NwYXJlcyhtZGRldiwgcmRldjIpO1xuK1x0XHRcdFx0fVxuIFx0XHRcdFx0cHJfaW5mbyhcIkFjdGl2YXRlZCBzcGFyZTogJXBnXFxuXCIsXG4gXHRcdFx0XHRcdHJkZXYyLVx1MDAzZWJkZXYpO1xuIFx0XHRcdFx0Lyogd2FrZXVwIG1kZGV2LVx1MDAzZXRocmVhZCBoZXJlLCBzbyBhcnJheSBjb3VsZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaFxuaW5kZXggYjZkMmU4OTI5YTBmOS4uY2VjYThjZmNkY2I5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQuaFxuKysrIGIvZHJpdmVycy9tZC9tZC5oXG5AQCAtNzY1LDcgKzc2NSw4IEBAIHN0cnVjdCBtZF9wZXJzb25hbGl0eVxuIFx0ICogaWYgYXBwcm9wcmlhdGUsIGFuZCBzaG91bGQgYWJvcnQgcmVjb3ZlcnkgaWYgbmVlZGVkXG4gXHQgKi9cbiBcdHZvaWQgKCplcnJvcl9oYW5kbGVyKShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7XG4tXHRpbnQgKCpob3RfYWRkX2Rpc2spIChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7XG4rXHRpbnQgKCpob3RfYWRkX2Rpc2spKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIFx0aW50ICgqaG90X3JlbW92ZV9kaXNrKSAoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xuIFx0aW50ICgqc3BhcmVfYWN0aXZlKSAoc3RydWN0IG1kZGV2ICptZGRldik7XG4gXHRzZWN0b3JfdCAoKnN5bmNfcmVxdWVzdCkoc3RydWN0IG1kZGV2ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLFxuQEAgLTEwNDEsMTMgKzEwNDIsMTcgQEAgc3RydWN0IG1kdV9kaXNrX2luZm9fcztcbiBleHRlcm4gaW50IG1kcF9tYWpvcjtcbiB2b2lkIG1kX2F1dG9zdGFydF9hcnJheXMoaW50IHBhcnQpO1xuIGludCBtZF9zZXRfYXJyYXlfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2FycmF5X2luZm9fcyAqaW5mbyk7XG4taW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKTtcbitpbnQgbWRfYWRkX25ld19kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgKmluZm8sXG4rXHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIGludCBkb19tZF9ydW4oc3RydWN0IG1kZGV2ICptZGRldik7XG4gI2RlZmluZSBNRERFVl9TVEFDS19JTlRFR1JJVFlcdCgxdSBcdTAwM2NcdTAwM2MgMClcbiBpbnQgbWRkZXZfc3RhY2tfcmRldl9saW1pdHMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBtZGRldl9zdGFja19uZXdfcmRldihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7XG4tdm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzKTtcbitpbnQgbWRkZXZfc3RhY2tfcmRldl9pbnRvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTtcbit2b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMsXG4rXHRcdFx0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtZF9mb3BzO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuY1xuaW5kZXggZjA2NDZmYjI0MzcxZi4uZGQzNDhiNTY5NWQwNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuY1xuKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jXG5AQCAtMTg5OCw3ICsxODk4LDggQEAgc3RhdGljIGJvb2wgcmFpZDFfcmVtb3ZlX2NvbmYoc3RydWN0IHIxY29uZiAqY29uZiwgaW50IGRpc2spXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGludCByYWlkMV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbitzdGF0aWMgaW50IHJhaWQxX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCByMWNvbmYgKmNvbmYgPSBtZGRldi1cdTAwM2Vwcml2YXRlO1xuIFx0aW50IGVyciA9IC1FRVhJU1Q7XG5AQCAtMTkyMyw3ICsxOTI0LDEwIEBAIHN0YXRpYyBpbnQgcmFpZDFfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4gXHRmb3IgKG1pcnJvciA9IGZpcnN0OyBtaXJyb3IgXHUwMDNjPSBsYXN0OyBtaXJyb3IrKykge1xuIFx0XHRwID0gY29uZi1cdTAwM2VtaXJyb3JzICsgbWlycm9yO1xuIFx0XHRpZiAoIXAtXHUwMDNlcmRldikge1xuLVx0XHRcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcbitcdFx0XHRpZiAobGltKVxuK1x0XHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfcmRldl9pbnRvKG1kZGV2LCByZGV2LCBsaW0pO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuY1xuaW5kZXggMTA5M2M3OThkOWRkZS4uNjQxNjE5MzI4YTZjNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmNcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcbkBAIC0yMDk1LDcgKzIwOTUsOCBAQCBzdGF0aWMgaW50IHJhaWQxMF9zcGFyZV9hY3RpdmUoc3RydWN0IG1kZGV2ICptZGRldilcbiBcdHJldHVybiBjb3VudDtcbiB9XG4gXG4tc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4rc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsXG4rXHRcdFx0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCByMTBjb25mICpjb25mID0gbWRkZXYtXHUwMDNlcHJpdmF0ZTtcbiBcdGludCBlcnIgPSAtRUVYSVNUO1xuQEAgLTIxMzAsNyArMjEzMSwxMCBAQCBzdGF0aWMgaW50IHJhaWQxMF9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRlcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7XG4rXHRcdGlmIChsaW0pXG4rXHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfcmRldl9pbnRvKG1kZGV2LCByZGV2LCBsaW0pO1xuK1x0XHRlbHNlXG4rXHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdHAtXHUwMDNlaGVhZF9wb3NpdGlvbiA9IDA7XG5AQCAtMjE0Nyw3ICsyMTUxLDEwIEBAIHN0YXRpYyBpbnQgcmFpZDEwX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIFx0XHRjbGVhcl9iaXQoSW5fc3luYywgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4gXHRcdHNldF9iaXQoUmVwbGFjZW1lbnQsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuIFx0XHRyZGV2LVx1MDAzZXJhaWRfZGlzayA9IHJlcGxfc2xvdDtcbi1cdFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xuK1x0XHRpZiAobGltKVxuK1x0XHRcdGVyciA9IG1kZGV2X3N0YWNrX3JkZXZfaW50byhtZGRldiwgcmRldiwgbGltKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRjb25mLVx1MDAzZWZ1bGxzeW5jID0gMTtcbkBAIC00NDg0LDcgKzQ0OTEsNyBAQCBzdGF0aWMgaW50IHJhaWQxMF9zdGFydF9yZXNoYXBlKHN0cnVjdCBtZGRldiAqbWRkZXYpXG4gXHRcdHJkZXZfZm9yX2VhY2gocmRldiwgbWRkZXYpXG4gXHRcdFx0aWYgKHJkZXYtXHUwMDNlcmFpZF9kaXNrIFx1MDAzYyAwIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAhdGVzdF9iaXQoRmF1bHR5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkge1xuLVx0XHRcdFx0aWYgKHJhaWQxMF9hZGRfZGlzayhtZGRldiwgcmRldikgPT0gMCkge1xuK1x0XHRcdFx0aWYgKHJhaWQxMF9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkge1xuIFx0XHRcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2sgXHUwMDNlPVxuIFx0XHRcdFx0XHQgICAgY29uZi1cdTAwM2VwcmV2LnJhaWRfZGlza3MpXG4gXHRcdFx0XHRcdFx0c2V0X2JpdChJbl9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbkBAIC00OTIxLDcgKzQ5MjgsNyBAQCBzdGF0aWMgdm9pZCBlbmRfcmVzaGFwZShzdHJ1Y3QgcjEwY29uZiAqY29uZilcbiBcdGNvbmYtXHUwMDNlcmVzaGFwZV9zYWZlID0gTWF4U2VjdG9yO1xuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNvbmYtXHUwMDNlZGV2aWNlX2xvY2spO1xuIFxuLVx0bWRkZXZfdXBkYXRlX2lvX29wdChjb25mLVx1MDAzZW1kZGV2LCByYWlkMTBfbnJfc3RyaXBlcyhjb25mKSk7XG4rXHRtZGRldl91cGRhdGVfaW9fb3B0KGNvbmYtXHUwMDNlbWRkZXYsIHJhaWQxMF9ucl9zdHJpcGVzKGNvbmYpLCBOVUxMKTtcbiBcdGNvbmYtXHUwMDNlZnVsbHN5bmMgPSAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmNcbmluZGV4IGI5MTU0NWNlMDkwZGUuLjIyNzU5YzYzMWM0ZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmNcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuY1xuQEAgLTcyODgsNiArNzI4OCw5IEBAIHN0YXRpYyBzc2l6ZV90XG4gcmFpZDVfc3RvcmVfc2tpcF9jb3B5KHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IHI1Y29uZiAqY29uZjtcbitcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gTlVMTDtcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuK1x0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7XG4gXHR1bnNpZ25lZCBsb25nIG5ldztcbiBcdGludCBlcnI7XG4gXG5AQCAtNzI5NywyMyArNzMwMCwzMyBAQCByYWlkNV9zdG9yZV9za2lwX2NvcHkoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRuZXcgPSAhIW5ldztcbiBcbitcdC8qIHEtXHUwMDNlbGltaXRzX2xvY2sgbmVzdHMgb3V0c2lkZSBib3RoLCBzZWUgbWRfc3RhcnRfc3luYygpICovXG4rXHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuK1x0XHRxID0gbWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZTtcbitcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbitcdFx0bGltcCA9IFx1MDAyNmxpbTtcbitcdH1cbitcbiBcdGVyciA9IG1kZGV2X3N1c3BlbmRfYW5kX2xvY2sobWRkZXYpO1xuLVx0aWYgKGVycilcbitcdGlmIChlcnIpIHtcbitcdFx0aWYgKGxpbXApXG4rXHRcdFx0cXVldWVfbGltaXRzX2NhbmNlbF91cGRhdGUocSk7XG4gXHRcdHJldHVybiBlcnI7XG4rXHR9XG4gXHRjb25mID0gbWRkZXYtXHUwMDNlcHJpdmF0ZTtcbiBcdGlmICghY29uZilcbiBcdFx0ZXJyID0gLUVOT0RFVjtcbiBcdGVsc2UgaWYgKG5ldyAhPSBjb25mLVx1MDAzZXNraXBfY29weSkge1xuLVx0XHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4tXHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbi1cbiBcdFx0Y29uZi1cdTAwM2Vza2lwX2NvcHkgPSBuZXc7XG4tXHRcdGlmIChuZXcpXG4tXHRcdFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1NUQUJMRV9XUklURVM7XG4tXHRcdGVsc2Vcbi1cdFx0XHRsaW0uZmVhdHVyZXMgXHUwMDI2PSB+QkxLX0ZFQVRfU1RBQkxFX1dSSVRFUztcbi1cdFx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgXHUwMDI2bGltKTtcbitcdFx0aWYgKGxpbXApIHtcbitcdFx0XHRpZiAobmV3KVxuK1x0XHRcdFx0bGltcC1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9TVEFCTEVfV1JJVEVTO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGxpbXAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+QkxLX0ZFQVRfU1RBQkxFX1dSSVRFUztcbitcdFx0fVxuIFx0fVxuK1x0aWYgKGxpbXApXG4rXHRcdGVyciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApID86IGVycjtcbiBcdG1kZGV2X3VubG9ja19hbmRfcmVzdW1lKG1kZGV2KTtcbiBcdHJldHVybiBlcnIgPzogbGVuO1xuIH1cbkBAIC04NDQxLDcgKzg0NTQsOCBAQCBzdGF0aWMgaW50IHJhaWQ1X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCByYWlkNV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbitzdGF0aWMgaW50IHJhaWQ1X2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCByNWNvbmYgKmNvbmYgPSBtZGRldi1cdTAwM2Vwcml2YXRlO1xuIFx0aW50IHJldCwgZXJyID0gLUVFWElTVDtcbkBAIC04NzI4LDcgKzg3NDIsNyBAQCBzdGF0aWMgaW50IHJhaWQ1X3N0YXJ0X3Jlc2hhcGUoc3RydWN0IG1kZGV2ICptZGRldilcbiBcdFx0cmRldl9mb3JfZWFjaChyZGV2LCBtZGRldilcbiBcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2sgXHUwMDNjIDAgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICF0ZXN0X2JpdChGYXVsdHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdFx0XHRpZiAocmFpZDVfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHtcbitcdFx0XHRcdGlmIChyYWlkNV9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkge1xuIFx0XHRcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2tcbiBcdFx0XHRcdFx0ICAgIFx1MDAzZT0gY29uZi1cdTAwM2VwcmV2aW91c19yYWlkX2Rpc2tzKVxuIFx0XHRcdFx0XHRcdHNldF9iaXQoSW5fc3luYywgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG5AQCAtODc5OSw3ICs4ODEzLDcgQEAgc3RhdGljIHZvaWQgZW5kX3Jlc2hhcGUoc3RydWN0IHI1Y29uZiAqY29uZilcbiBcdFx0d2FrZV91cChcdTAwMjZjb25mLVx1MDAzZXdhaXRfZm9yX3Jlc2hhcGUpO1xuIFxuIFx0XHRtZGRldl91cGRhdGVfaW9fb3B0KGNvbmYtXHUwMDNlbWRkZXYsXG4tXHRcdFx0Y29uZi1cdTAwM2VyYWlkX2Rpc2tzIC0gY29uZi1cdTAwM2VtYXhfZGVncmFkZWQpO1xuK1x0XHRcdGNvbmYtXHUwMDNlcmFpZF9kaXNrcyAtIGNvbmYtXHUwMDNlbWF4X2RlZ3JhZGVkLCBOVUxMKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDRmNzkwNWMzNDEyYjguLmI3NWU4NTI5MWUyOTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTEwMSw2ICsxMTAxLDMyIEBAIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4gXHRtdXRleF9sb2NrKFx1MDAyNnEtXHUwMDNlbGltaXRzX2xvY2spO1xuIFx0cmV0dXJuIHEtXHUwMDNlbGltaXRzO1xuIH1cbitcbisvKipcbisgKiBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlX3RyeWxvY2sgLSB0cnkgdG8gc3RhcnQgYW4gYXRvbWljIHVwZGF0ZSBvZiBxdWV1ZVxuKyAqXHRsaW1pdHNcbisgKiBAcTpcdFx0cXVldWUgdG8gdXBkYXRlXG4rICogQGxpbTpcdHJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBsaW1pdHMgb24gc3VjY2Vzc1xuKyAqXG4rICogTGlrZSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKCksIGJ1dCBmYWlscyBpbnN0ZWFkIG9mIHdhaXRpbmcgd2hlbiBhbm90aGVyXG4rICogdXBkYXRlIGlzIGluIGZsaWdodC4gIEZvciBjYWxsZXJzIHRoYXQgbXVzdCBub3QgYmxvY2sgb24gcS1cdTAwM2VsaW1pdHNfbG9ja1xuKyAqIGJlY2F1c2UgdGhleSBob2xkIHNvbWV0aGluZyBpdHMgY3VycmVudCBvd25lciBpcyB3YWl0aW5nIGZvci5cbisgKlxuKyAqIENvbnRleHQ6IHByb2Nlc3MgY29udGV4dC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbitxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlX3RyeWxvY2soc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4rXHRcdFx0XHQgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbitcdF9fY29uZF9hY3F1aXJlcyh0cnVlLCBcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKVxuK3tcbitcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0KmxpbSA9IHEtXHUwMDNlbGltaXRzO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIGludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4gXHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkgX19yZWxlYXNlcyhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKTtcbiBpbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoxMzoxNi42MTE2MTQ2OTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzQ1Mzg1NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUQgUkFJRCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiBpdCdzIGZ1enotd29ydGh5LCB3aGF0IGtpbmQgb2YgY29uZmlndXJhdGlvbiBpcyBuZWVkZWQsIGFuZCBpZiB3ZSBjYW4gaWRlbnRpZnkgc3BlY2lmaWMgc3ltYm9scyB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gSXQgbG9va3MgbGlrZSBpdCdzIGFsbCBhYm91dCByZXNvbHZpbmcgbG9jayBvcmRlcmluZyBpc3N1ZXMgYW5kIHBvdGVudGlhbCBkZWFkbG9ja3Mgd2l0aGluIHRoZSBNRCAoTXVsdGlwbGUgRGV2aWNlcy9zb2Z0d2FyZSBSQUlEKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBhcm91bmQgdGhvc2UgbG9ja3M6IGBxLVx1MDAzZWxpbWl0c19sb2NrYCwgYHJlY29uZmlnX211dGV4YCwgYW5kIGBtZGRldl9zdXNwZW5kKClgLiAgVGhlIGNvZGUgdG91Y2hlcyBhIGxvdCBvZiBmaWxlcyB3aXRoaW4gYGRyaXZlcnMvbWQvYCwgc28gaXQncyBhIHByZXR0eSBjZW50cmFsIGFyZWEuXG5cbkl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGFkZGluZyB0aGlzIG5ldyBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZV90cnlsb2NrYCBmdW5jdGlvbi4gVGhlIHBhdGNoIHRoZW4gc2VlbXMgdG8gYmUgcHJvcGFnYXRpbmcgY2hhbmdlcyB0aHJvdWdob3V0IHRoZSBNRCBzdWJzeXN0ZW0sIG1vZGlmeWluZyBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCB1cGRhdGluZyBsb2NrIGFjcXVpc2l0aW9uIHN0cmF0ZWdpZXMuIFNwZWNpZmljYWxseTpcblxuKiAgIEl0IHVwZGF0ZXMgY2FsbHMgcmVsYXRlZCB0byBhZGRpbmcgZGlza3MgKGBob3RfYWRkX2Rpc2tgLCBgbWRfYWRkX25ld19kaXNrYCkgYW5kIGFkanVzdGluZyBxdWV1ZSBsaW1pdHMgaW4gdGhlIGBkbS1yYWlkLmNgLCBgbWQtYXV0b2RldGVjdC5jYCwgYW5kIGBtZC1saW5lYXIuY2AgZmlsZXMuXG4qICAgVGhlIGBtZC5jYCBmaWxlIHNlZXMgdGhlIG1vc3QgY2hhbmdlcywgaW5jbHVkaW5nIGEgbmV3IGBxdWV1ZV9saW1pdHNgIHBhcmFtZXRlciBiZWluZyBhZGRlZCB0byB0aGUgcmRldiBzeXNmcyBlbnRyeSBgc3RvcmVgIG1ldGhvZC4gVGhpcyBhbHNvIGludm9sdmVzIGNoYW5nZXMgdG8gaG93IGxvY2tzIGFyZSBhY3F1aXJlZCBpbiBgcmRldl9hdHRyX3N0b3JlKClgLCBhZGRpbmcgbmV3IGZ1bmN0aW9ucyBsaWtlIGBtZGRldl9zdGFja19yZGV2X2ludG8oKWAgYW5kIGBtZGRldl9zdGFja19saW1pdHNfdHJ5bG9jaygpYCwgYW5kIHVwZGF0ZXMgdG8gYG1kZGV2X3VwZGF0ZV9pb19vcHQoKWAgYW5kIG90aGVyIGNvcmUgTUQgZnVuY3Rpb25zIChgbWRfYWRkX25ld19kaXNrKClgLCBgaG90X3JlbW92ZV9kaXNrKClgLCBgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKClgLCBldGMuKS5cbiogICBJdCdzIGFsc28gdXBkYXRpbmcgZnVuY3Rpb25zIGFjcm9zcyBzZXZlcmFsIFJBSUQgaW1wbGVtZW50YXRpb25zIChgcmFpZDEuY2AsIGByYWlkMTAuY2AsIGByYWlkNS5jYCkgdG8gaGFuZGxlIHRoaXMgYHF1ZXVlX2xpbWl0c2Agc3RydWN0LlxuXG5BbHJpZ2h0LCB0aGF0J3MgdGhlIGNvZGUuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgcmVhY2hhYmlsaXR5LiBNRCBSQUlELCBiZWluZyBhIGNvcmUgcGFydCBvZiBzdG9yYWdlIG1hbmFnZW1lbnQsIHNob3VsZCBiZSBwcmV0dHkgZWFzaWx5IHJlYWNoYWJsZSwgZXNwZWNpYWxseSBpbiBhIGZ1enppbmcgY29udGV4dC4gRnJvbSB3aGF0IEkga25vdywgaXQncyBhY2Nlc3NpYmxlIHRocm91Z2ggaW9jdGxzIG9uIGAvZGV2L21kKmAsIGFuZCBzeXNmcyBlbnRyaWVzIHVuZGVyIGAvc3lzL2Jsb2NrL21kWC9tZC8uLi5gLiBTeXprYWxsZXIgc2hvdWxkIGFscmVhZHkgaGF2ZSBnb29kIGNvdmVyYWdlIGZvciB0aGVzZSBpbnRlcmZhY2VzLiBJZiBzbywgdGhhdCBncmVhdGx5IGluY3JlYXNlcyB0aGUgbGlrZWxpaG9vZCBvZiBmaW5kaW5nIGJ1Z3MuXG5cbkxhc3RseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBNRCBSQUlEIGFuZCBpdHMgc3ViLWNvbXBvbmVudHMgYXJlIGVuYWJsZWQgdG8gdHJpZ2dlciB0aGVzZSB1cGRhdGVkIGNvZGUgcGF0aHMuIFRpbWUgdG8gZ3JlcCBmb3IgdGhlIHJlbGV2YW50IGBDT05GSUdfTUQqYCBhbmQgYENPTkZJR19CTEtfREVWX01EKmAgb3B0aW9ucyBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyB3aWxsIHRlbGwgbWUgd2hpY2ggY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHNldCBmb3IgYSBnb29kIGZ1enppbmcgcnVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjEzOjIyLjM1NzAwMjk3NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjczNTQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9NRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21kL0tjb25maWc9MTM9aWYgTURcXG5kcml2ZXJzL21kL0tjb25maWctMTQtXFxuZHJpdmVycy9tZC9LY29uZmlnOjE1OmNvbmZpZyBCTEtfREVWX01EXFxuZHJpdmVycy9tZC9LY29uZmlnLTE2LVxcdHRyaXN0YXRlIFxcXCJSQUlEIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjEzOjIyLjQwOTc0Mzk5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTUwNTk4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE1EIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgTUQgKE11bHRpcGxlIERldmljZSkgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGlzIGtlcm5lbCBidWlsZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGRyaXZlcnMvbWQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLCBuYXR1cmFsbHkuIEkgZmlndXJlIHRoZSBmaXJzdCA1MCBsaW5lcyBvciBzbyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGNvcmUgTUQgc2V0dGluZ3MuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IHZhcmlhYmxlcyBhbmQgYW55IGNyaXRpY2FsIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGFmZmVjdCBob3cgTUQgaXMgY29uZmlndXJlZCwgYW5kIHdoYXQgdGhlIGJhc2UtbGV2ZWwgY2hvaWNlcyBhcmUgZm9yIFJBSUQsIExWTSwgYW5kIGFueSBvdGhlciByZWxldmFudCBibG9jayBkZXZpY2UgbWFuYWdlbWVudCBjb21wb25lbnRzLiBJdCdzIGEgcXVpY2sgd2F5IHRvIGdldCBjb250ZXh0IGFuZCBzZWUgaG93IHRoaW5ncyBhcmUgc3RydWN0dXJlZCBiZWZvcmUgZGlnZ2luZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODEzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MTM6MjQuNDA0ODA2NzA0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBCbG9jayBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBNRFxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiTXVsdGlwbGUgZGV2aWNlcyBkcml2ZXIgc3VwcG9ydCAoUkFJRCBhbmQgTFZNKVxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgU3VwcG9ydCBtdWx0aXBsZSBwaHlzaWNhbCBzcGluZGxlcyB0aHJvdWdoIGEgc2luZ2xlIGxvZ2ljYWwgZGV2aWNlLlxcbiAgMTE6XFx0XFx0ICBSZXF1aXJlZCBmb3IgUkFJRCBhbmQgbG9naWNhbCB2b2x1bWUgbWFuYWdlbWVudC5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0aWYgTURcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIEJMS19ERVZfTURcXG4gIDE2OlxcdFxcdHRyaXN0YXRlIFxcXCJSQUlEIHN1cHBvcnRcXFwiXFxuICAxNzpcXHRcXHRzZWxlY3QgQkxPQ0tfSE9MREVSX0RFUFJFQ0FURUQgaWYgU1lTRlNcXG4gIDE4OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgMTk6XFx0XFx0IyBCTE9DS19MRUdBQ1lfQVVUT0xPQUQgcmVxdWlyZW1lbnQgc2hvdWxkIGJlIHJlbW92ZWRcXG4gIDIwOlxcdFxcdCMgYWZ0ZXIgcmVsZXZhbnQgbWRhZG0gZW5oYW5jZW1lbnRzIC0gdG8gbWFrZSBcXFwibmFtZXM9eWVzXFxcIlxcbiAgMjE6XFx0XFx0IyB0aGUgZGVmYXVsdCAtIGFyZSB3aWRlbHkgYXZhaWxhYmxlLlxcbiAgMjI6XFx0XFx0c2VsZWN0IEJMT0NLX0xFR0FDWV9BVVRPTE9BRFxcbiAgMjM6XFx0XFx0aGVscFxcbiAgMjQ6XFx0XFx0ICBUaGlzIGRyaXZlciBsZXRzIHlvdSBjb21iaW5lIHNldmVyYWwgaGFyZCBkaXNrIHBhcnRpdGlvbnMgaW50byBvbmVcXG4gIDI1OlxcdFxcdCAgbG9naWNhbCBibG9jayBkZXZpY2UuIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2ltcGx5IGFwcGVuZCBvbmVcXG4gIDI2OlxcdFxcdCAgcGFydGl0aW9uIHRvIGFub3RoZXIgb25lIG9yIHRvIGNvbWJpbmUgc2V2ZXJhbCByZWR1bmRhbnQgaGFyZCBkaXNrc1xcbiAgMjc6XFx0XFx0ICBpbnRvIGEgUkFJRDEvNC81IGRldmljZSBzbyBhcyB0byBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBoYXJkXFxuICAyODpcXHRcXHQgIGRpc2sgZmFpbHVyZXMuIFRoaXMgaXMgY2FsbGVkIFxcXCJTb2Z0d2FyZSBSQUlEXFxcIiBzaW5jZSB0aGUgY29tYmluaW5nIG9mXFxuICAyOTpcXHRcXHQgIHRoZSBwYXJ0aXRpb25zIGlzIGRvbmUgYnkgdGhlIGtlcm5lbC4gXFxcIkhhcmR3YXJlIFJBSURcXFwiIG1lYW5zIHRoYXQgdGhlXFxuICAzMDpcXHRcXHQgIGNvbWJpbmluZyBpcyBkb25lIGJ5IGEgZGVkaWNhdGVkIGNvbnRyb2xsZXI7IGlmIHlvdSBoYXZlIHN1Y2ggYVxcbiAgMzE6XFx0XFx0ICBjb250cm9sbGVyLCB5b3UgZG8gbm90IG5lZWQgdG8gc2F5IFkgaGVyZS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBNb3JlIGluZm9ybWF0aW9uIGFib3V0IFNvZnR3YXJlIFJBSUQgb24gTGludXggaXMgY29udGFpbmVkIGluIHRoZVxcbiAgMzQ6XFx0XFx0ICBTb2Z0d2FyZSBSQUlEIG1pbmktSE9XVE8sIGF2YWlsYWJsZSBmcm9tXFxuICAzNTpcXHRcXHQgIFxcdTAwM2NodHRwczovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG9cXHUwMDNlLiBUaGVyZSB5b3Ugd2lsbCBhbHNvIGxlYXJuXFxuICAzNjpcXHRcXHQgIHdoZXJlIHRvIGdldCB0aGUgc3VwcG9ydGluZyB1c2VyIHNwYWNlIHV0aWxpdGllcyByYWlkdG9vbHMuXFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM5OlxcdFxcbiAgNDA6XFx0Y29uZmlnIE1EX0JJVE1BUFxcbiAgNDE6XFx0XFx0Ym9vbCBcXFwiTUQgUkFJRCBiaXRtYXAgc3VwcG9ydFxcXCJcXG4gIDQyOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDM6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfREVWX01EXFxuICA0NDpcXHRcXHRoZWxwXFxuICA0NTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCBzdXBwb3J0IGZvciB0aGUgd3JpdGUgaW50ZW50IGJpdG1hcCB3aWxsIGJlXFxuICA0NjpcXHRcXHQgIGVuYWJsZWQuIFRoZSBiaXRtYXAgY2FuIGJlIHVzZWQgdG8gb3B0aW1pemUgcmVzeW5jIHNwZWVkIGFmdGVyIHBvd2VyXFxuICA0NzpcXHRcXHQgIGZhaWx1cmUgb3IgcmVhZGRpbmcgYSBkaXNrLCBsaW1pdGluZyBpdCB0byByZWNvcmRlZCBkaXJ0eSBzZWN0b3JzIGluXFxuICA0ODpcXHRcXHQgIGJpdG1hcC5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBUaGlzIGZlYXR1cmUgY2FuIGJlIGFkZGVkIHRvIGV4aXN0aW5nIE1EIGFycmF5IG9yIE1EIGFycmF5IGNhbiBiZVxcbiAgNTE6XFx0XFx0ICBjcmVhdGVkIHdpdGggYml0bWFwIHZpYSBtZGFkbSg4KS5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgNTQ6XFx0XFxuICA1NTpcXHRjb25maWcgTURfTExCSVRNQVBcXG4gIDU2OlxcdFxcdGJvb2wgXFxcIk1EIFJBSUQgbG9ja2xlc3MgYml0bWFwIHN1cHBvcnRcXFwiXFxuICA1NzpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfTURcXG4gIDU4OlxcdFxcdGhlbHBcXG4gIDU5OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHN1cHBvcnQgZm9yIHRoZSBsb2NrbGVzcyB3cml0ZSBpbnRlbnQgYml0bWFwIHdpbGxcXG4gIDYwOlxcdFxcdCAgYmUgZW5hYmxlZC5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0ICBOb3RlLCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBNRF9BVVRPREVURUNUXFxuICA2NzpcXHRcXHRib29sIFxcXCJBdXRvZGV0ZWN0IFJBSUQgYXJyYXlzIGR1cmluZyBrZXJuZWwgYm9vdFxcXCJcXG4gIDY4OlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVl9NRD15XFxuICA2OTpcXHRcXHRkZWZhdWx0IHlcXG4gIDcwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MTM6MjQuNDA0OTEyNjE0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA0ODA2MzY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFJBSUQgUGVyc29uYWxpdHkgQ29uZmlndXJhdGlvbnMgaW4gYGRyaXZlcnMvbWQvS2NvbmZpZ2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcyBvciBvdmVybG9va2VkIG1vZGlmaWNhdGlvbnMuIE15IHByaW1hcnkgZm9jdXMgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbWQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gUkFJRCBwZXJzb25hbGl0aWVzIHRoYXQgaGF2ZSBiZWVuIGFsdGVyZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBsaW5lYXIsIHJhaWQxLCByYWlkMTAsIGFuZCByYWlkNDU2L3JhaWQ1LiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBtb2RpZmljYXRpb25zIG1hZGUgYXJlIGNvbnNpc3RlbnQgYWNyb3NzIGFsbCBhZmZlY3RlZCBSQUlEIGxldmVscyBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMgaW4gaG93IHRoZXNlIHBlcnNvbmFsaXRpZXMgYXJlIGRlZmluZWQgb3IgZW5hYmxlZC4gSSdsbCBiZSBtZXRpY3Vsb3VzbHkgY2hlY2tpbmcgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0byBnZXQgYSBob2xpc3RpYyB2aWV3IG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZXMuIFRoaXMgdGhvcm91Z2ggYW5hbHlzaXMgc2hvdWxkIGhlbHAgbWUgaWRlbnRpZnkgYW5kIHJlY3RpZnkgYW55IHBvdGVudGlhbCBpc3N1ZXMgYmVmb3JlIHRoZXkgY2F1c2UgcHJvYmxlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTY2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoxMzoyNy40NTI5Nzg3NTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzAxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21kL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzE6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUga2VybmVsIHdpbGwgdHJ5IHRvIGF1dG9kZXRlY3QgcmFpZFxcbiAgNzI6XFx0XFx0ICBhcnJheXMgYXMgcGFydCBvZiBpdHMgYm9vdCBwcm9jZXNzLlxcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHQgIElmIHlvdSBkb24ndCB1c2UgcmFpZCBhbmQgc2F5IFksIHRoaXMgYXV0b2RldGVjdGlvbiBjYW4gY2F1c2VcXG4gIDc1OlxcdFxcdCAgYSBzZXZlcmFsLXNlY29uZCBkZWxheSBpbiB0aGUgYm9vdCB0aW1lIGR1ZSB0byB2YXJpb3VzXFxuICA3NjpcXHRcXHQgIHN5bmNocm9uaXNhdGlvbiBzdGVwcyB0aGF0IGFyZSBwYXJ0IG9mIHRoaXMgc3RlcC5cXG4gIDc3OlxcdFxcbiAgNzg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgNzk6XFx0XFxuICA4MDpcXHRjb25maWcgTURfQklUTUFQX0ZJTEVcXG4gIDgxOlxcdFxcdGJvb2wgXFxcIk1EIGJpdG1hcCBmaWxlIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbiAgODI6XFx0XFx0ZGVmYXVsdCB5XFxuICA4MzpcXHRcXHRkZXBlbmRzIG9uIE1EX0JJVE1BUFxcbiAgODQ6XFx0XFx0aGVscFxcbiAgODU6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgc3VwcG9ydCBmb3Igd3JpdGUgaW50ZW50IGJpdG1hcHMgaW4gZmlsZXMgb24gYW5cXG4gIDg2OlxcdFxcdCAgZXh0ZXJuYWwgZmlsZSBzeXN0ZW0gaXMgZW5hYmxlZC4gIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIGludGVybmFsXFxuICA4NzpcXHRcXHQgIGJpdG1hcHMgbmVhciB0aGUgTUQgc3VwZXJibG9jaywgYW5kIHZlcnkgcHJvYmxlbWF0aWMgY29kZSB0aGF0IGFidXNlc1xcbiAgODg6XFx0XFx0ICB2YXJpb3VzIGtlcm5lbCBBUElzIGFuZCBjYW4gb25seSB3b3JrIHdpdGggZmlsZXMgb24gYSBmaWxlIHN5c3RlbSBub3RcXG4gIDg5OlxcdFxcdCAgYWN0dWFsbHkgc2l0dGluZyBvbiB0aGUgTUQgZGV2aWNlLlxcbiAgOTA6XFx0XFxuICA5MTpcXHRjb25maWcgTURfTElORUFSXFxuICA5MjpcXHRcXHR0cmlzdGF0ZSBcXFwiTGluZWFyIChhcHBlbmQpIG1vZGVcXFwiXFxuICA5MzpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfTURcXG4gIDk0OlxcdFxcdGhlbHBcXG4gIDk1OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBtdWx0aXBsZSBkZXZpY2VzIGRyaXZlciB3aWxsIGJlIGFibGUgdG9cXG4gIDk2OlxcdFxcdCAgdXNlIHRoZSBzby1jYWxsZWQgbGluZWFyIG1vZGUsIGkuZS4gaXQgd2lsbCBjb21iaW5lIHRoZSBoYXJkIGRpc2tcXG4gIDk3OlxcdFxcdCAgcGFydGl0aW9ucyBieSBzaW1wbHkgYXBwZW5kaW5nIG9uZSB0byB0aGUgb3RoZXIuXFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDEwMDpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGxpbmVhci5cXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRjb25maWcgTURfUkFJRDBcXG4gMTA1OlxcdFxcdHRyaXN0YXRlIFxcXCJSQUlELTAgKHN0cmlwaW5nKSBtb2RlXFxcIlxcbiAxMDY6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfREVWX01EXFxuIDEwNzpcXHRcXHRoZWxwXFxuIDEwODpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgbXVsdGlwbGUgZGV2aWNlcyBkcml2ZXIgd2lsbCBiZSBhYmxlIHRvXFxuIDEwOTpcXHRcXHQgIHVzZSB0aGUgc28tY2FsbGVkIHJhaWQwIG1vZGUsIGkuZS4gaXQgd2lsbCBjb21iaW5lIHRoZSBoYXJkIGRpc2tcXG4gMTEwOlxcdFxcdCAgcGFydGl0aW9ucyBpbnRvIG9uZSBsb2dpY2FsIGRldmljZSBpbiBzdWNoIGEgZmFzaGlvbiBhcyB0byBmaWxsIHRoZW1cXG4gMTExOlxcdFxcdCAgdXAgZXZlbmx5LCBvbmUgY2h1bmsgaGVyZSBhbmQgb25lIGNodW5rIHRoZXJlLiBUaGlzIHdpbGwgaW5jcmVhc2VcXG4gMTEyOlxcdFxcdCAgdGhlIHRocm91Z2hwdXQgcmF0ZSBpZiB0aGUgcGFydGl0aW9ucyByZXNpZGUgb24gZGlzdGluY3QgZGlza3MuXFxuIDExMzpcXHRcXG4gMTE0OlxcdFxcdCAgSW5mb3JtYXRpb24gYWJvdXQgU29mdHdhcmUgUkFJRCBvbiBMaW51eCBpcyBjb250YWluZWQgaW4gdGhlXFxuIDExNTpcXHRcXHQgIFNvZnR3YXJlLVJBSUQgbWluaS1IT1dUTywgYXZhaWxhYmxlIGZyb21cXG4gMTE2OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1xcdTAwM2UuIFRoZXJlIHlvdSB3aWxsIGFsc29cXG4gMTE3OlxcdFxcdCAgbGVhcm4gd2hlcmUgdG8gZ2V0IHRoZSBzdXBwb3J0aW5nIHVzZXIgc3BhY2UgdXRpbGl0aWVzIHJhaWR0b29scy5cXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTIwOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgcmFpZDAuXFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMTIzOlxcdFxcbiAxMjQ6XFx0Y29uZmlnIE1EX1JBSUQxXFxuIDEyNTpcXHRcXHR0cmlzdGF0ZSBcXFwiUkFJRC0xIChtaXJyb3JpbmcpIG1vZGVcXFwiXFxuIDEyNjpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfTURcXG4gMTI3OlxcdFxcdGhlbHBcXG4gMTI4OlxcdFxcdCAgQSBSQUlELTEgc2V0IGNvbnNpc3RzIG9mIHNldmVyYWwgZGlzayBkcml2ZXMgd2hpY2ggYXJlIGV4YWN0IGNvcGllc1xcbiAxMjk6XFx0XFx0ICBvZiBlYWNoIG90aGVyLiAgSW4gdGhlIGV2ZW50IG9mIGEgbWlycm9yIGZhaWx1cmUsIHRoZSBSQUlEIGRyaXZlclxcbiAxMzA6XFx0XFx0ICB3aWxsIGNvbnRpbnVlIHRvIHVzZSB0aGUgb3BlcmF0aW9uYWwgbWlycm9ycyBpbiB0aGUgc2V0LCBwcm92aWRpbmdcXG4gMTMxOlxcdFxcdCAgYW4gZXJyb3IgZnJlZSBNRCAobXVsdGlwbGUgZGV2aWNlKSB0byB0aGUgaGlnaGVyIGxldmVscyBvZiB0aGVcXG4gMTMyOlxcdFxcdCAga2VybmVsLiAgSW4gYSBzZXQgd2l0aCBOIGRyaXZlcywgdGhlIGF2YWlsYWJsZSBzcGFjZSBpcyB0aGUgY2FwYWNpdHlcXG4gMTMzOlxcdFxcdCAgb2YgYSBzaW5nbGUgZHJpdmUsIGFuZCB0aGUgc2V0IHByb3RlY3RzIGFnYWluc3QgYSBmYWlsdXJlIG9mIChOIC0gMSlcXG4gMTM0OlxcdFxcdCAgZHJpdmVzLlxcbiAxMzU6XFx0XFxuIDEzNjpcXHRcXHQgIEluZm9ybWF0aW9uIGFib3V0IFNvZnR3YXJlIFJBSUQgb24gTGludXggaXMgY29udGFpbmVkIGluIHRoZVxcbiAxMzc6XFx0XFx0ICBTb2Z0d2FyZS1SQUlEIG1pbmktSE9XVE8sIGF2YWlsYWJsZSBmcm9tXFxuIDEzODpcXHRcXHQgIFxcdTAwM2NodHRwczovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG9cXHUwMDNlLiAgVGhlcmUgeW91IHdpbGwgYWxzb1xcbiAxMzk6XFx0XFx0ICBsZWFybiB3aGVyZSB0byBnZXQgdGhlIHN1cHBvcnRpbmcgdXNlciBzcGFjZSB1dGlsaXRpZXMgcmFpZHRvb2xzLlxcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHQgIElmIHlvdSB3YW50IHRvIHVzZSBzdWNoIGEgUkFJRC0xIHNldCwgc2F5IFkuICBUbyBjb21waWxlIHRoaXMgY29kZVxcbiAxNDI6XFx0XFx0ICBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByYWlkMS5cXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxNDU6XFx0XFxuIDE0NjpcXHRjb25maWcgTURfUkFJRDEwXFxuIDE0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiUkFJRC0xMCAobWlycm9yZWQgc3RyaXBpbmcpIG1vZGVcXFwiXFxuIDE0ODpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfTURcXG4gMTQ5OlxcdFxcdGhlbHBcXG4gMTUwOlxcdFxcdCAgUkFJRC0xMCBwcm92aWRlcyBhIGNvbWJpbmF0aW9uIG9mIHN0cmlwaW5nIChSQUlELTApIGFuZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoxMzoyNy40NTMwNzczMDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODkzODQzMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGlmIEknbSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkNvbnNpZGVyaW5nIFJBSUQgT3B0aW9ucyoqXG5cbkFscmlnaHQsIEkndmUgYmVlbiBmb2N1c2luZyBwcmltYXJpbHkgb24gdGhlIG1vcmUgY29tbW9uIFJBSUQgY29uZmlndXJhdGlvbnMsIGJ1dCBpdCdzIGNydWNpYWwgdG8gYmUgdGhvcm91Z2guIExldCdzIG5vdCBvdmVybG9vayBzb21lIG9mIHRoZSBsZXNzLXVzZWQgYnV0IHBvdGVudGlhbGx5IHJlbGV2YW50IG9wdGlvbnMuIFRpbWUgdG8gZXhwYW5kIG15IG1lbnRhbCBjaGVja2xpc3QuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZywgZXNwZWNpYWxseSBpbiBzcGVjaWZpYyB1c2UgY2FzZXMgd2hlcmUgdGhlc2UgYWx0ZXJuYXRpdmVzIG1pZ2h0IGJlIGlkZWFsLiBNeSBpbml0aWFsIGNvbnNpZGVyYXRpb25zIGNvdmVyZWQgdGhlIHdvcmtob3JzZXMsIGJ1dCBhIGRlZXBlciBkaXZlIGlzIG5lY2Vzc2FyeS4gU3BlY2lmaWNhbGx5LCBsZXQncyBhbHNvIGdpdmUgYSB0aG9yb3VnaCBvbmNlLW92ZXIgdG8gUkFJRCA0LCA1LCBhbmQgNiDigJMgcmV2aXNpdGluZyB0aGVpciBzdHJlbmd0aHMsIHdlYWtuZXNzZXMsIGFuZCBwb3RlbnRpYWwgYXBwbGljYWJpbGl0eS4gSSBzaG91bGQgYWxzbyByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgRE0tUkFJRCdzIGNhcGFiaWxpdGllcyBhbmQgaXRzIHBsYWNlIGluIHRoaXMgbGFuZHNjYXBlLiBBIGNvbXByZWhlbnNpdmUgdmlldyByZXF1aXJlcyB0aGlzIG1vcmUgZ3JhbnVsYXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTA2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoxMzoyOS4zNDY5MjM0MThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MSxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1MTpcXHRcXHQgIG1pcnJvcmluZyAoUkFJRC0xKSB3aXRoIGVhc2llciBjb25maWd1cmF0aW9uIGFuZCBtb3JlIGZsZXhpYmxlXFxuIDE1MjpcXHRcXHQgIGxheW91dC5cXG4gMTUzOlxcdFxcdCAgVW5saWtlIFJBSUQtMCwgYnV0IGxpa2UgUkFJRC0xLCBSQUlELTEwIHJlcXVpcmVzIGFsbCBkZXZpY2VzIHRvXFxuIDE1NDpcXHRcXHQgIGJlIHRoZSBzYW1lIHNpemUgKG9yIGF0IGxlYXN0LCBvbmx5IGFzIG11Y2ggYXMgdGhlIHNtYWxsZXN0IGRldmljZVxcbiAxNTU6XFx0XFx0ICB3aWxsIGJlIHVzZWQpLlxcbiAxNTY6XFx0XFx0ICBSQUlELTEwIHByb3ZpZGVzIGEgdmFyaWV0eSBvZiBsYXlvdXRzIHRoYXQgcHJvdmlkZSBkaWZmZXJlbnQgbGV2ZWxzXFxuIDE1NzpcXHRcXHQgIG9mIHJlZHVuZGFuY3kgYW5kIHBlcmZvcm1hbmNlLlxcbiAxNTg6XFx0XFxuIDE1OTpcXHRcXHQgIFJBSUQtMTAgcmVxdWlyZXMgbWRhZG0tMS43LjAgb3IgbGF0ZXIsIGF2YWlsYWJsZSBhdDpcXG4gMTYwOlxcdFxcbiAxNjE6XFx0XFx0ICBodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9yYWlkL21kYWRtL1xcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDE2NDpcXHRcXG4gMTY1OlxcdGNvbmZpZyBNRF9SQUlENDU2XFxuIDE2NjpcXHRcXHR0cmlzdGF0ZSBcXFwiUkFJRC00L1JBSUQtNS9SQUlELTYgbW9kZVxcXCJcXG4gMTY3OlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVl9NRFxcbiAxNjg6XFx0XFx0c2VsZWN0IFJBSUQ2X1BRXFxuIDE2OTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gMTcwOlxcdFxcdHNlbGVjdCBBU1lOQ19NRU1DUFlcXG4gMTcxOlxcdFxcdHNlbGVjdCBBU1lOQ19YT1JcXG4gMTcyOlxcdFxcdHNlbGVjdCBBU1lOQ19QUVxcbiAxNzM6XFx0XFx0c2VsZWN0IEFTWU5DX1JBSUQ2X1JFQ09WXFxuIDE3NDpcXHRcXHRoZWxwXFxuIDE3NTpcXHRcXHQgIEEgUkFJRC01IHNldCBvZiBOIGRyaXZlcyB3aXRoIGEgY2FwYWNpdHkgb2YgQyBNQiBwZXIgZHJpdmUgcHJvdmlkZXNcXG4gMTc2OlxcdFxcdCAgdGhlIGNhcGFjaXR5IG9mIEMgKiAoTiAtIDEpIE1CLCBhbmQgcHJvdGVjdHMgYWdhaW5zdCBhIGZhaWx1cmVcXG4gMTc3OlxcdFxcdCAgb2YgYSBzaW5nbGUgZHJpdmUuIEZvciBhIGdpdmVuIHNlY3RvciAocm93KSBudW1iZXIsIChOIC0gMSkgZHJpdmVzXFxuIDE3ODpcXHRcXHQgIGNvbnRhaW4gZGF0YSBzZWN0b3JzLCBhbmQgb25lIGRyaXZlIGNvbnRhaW5zIHRoZSBwYXJpdHkgcHJvdGVjdGlvbi5cXG4gMTc5OlxcdFxcdCAgRm9yIGEgUkFJRC00IHNldCwgdGhlIHBhcml0eSBibG9ja3MgYXJlIHByZXNlbnQgb24gYSBzaW5nbGUgZHJpdmUsXFxuIDE4MDpcXHRcXHQgIHdoaWxlIGEgUkFJRC01IHNldCBkaXN0cmlidXRlcyB0aGUgcGFyaXR5IGFjcm9zcyB0aGUgZHJpdmVzIGluIG9uZVxcbiAxODE6XFx0XFx0ICBvZiB0aGUgYXZhaWxhYmxlIHBhcml0eSBkaXN0cmlidXRpb24gbWV0aG9kcy5cXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0ICBBIFJBSUQtNiBzZXQgb2YgTiBkcml2ZXMgd2l0aCBhIGNhcGFjaXR5IG9mIEMgTUIgcGVyIGRyaXZlXFxuIDE4NDpcXHRcXHQgIHByb3ZpZGVzIHRoZSBjYXBhY2l0eSBvZiBDICogKE4gLSAyKSBNQiwgYW5kIHByb3RlY3RzXFxuIDE4NTpcXHRcXHQgIGFnYWluc3QgYSBmYWlsdXJlIG9mIGFueSB0d28gZHJpdmVzLiBGb3IgYSBnaXZlbiBzZWN0b3JcXG4gMTg2OlxcdFxcdCAgKHJvdykgbnVtYmVyLCAoTiAtIDIpIGRyaXZlcyBjb250YWluIGRhdGEgc2VjdG9ycywgYW5kIHR3b1xcbiAxODc6XFx0XFx0ICBkcml2ZXMgY29udGFpbnMgdHdvIGluZGVwZW5kZW50IHJlZHVuZGFuY3kgc3luZHJvbWVzLiAgTGlrZVxcbiAxODg6XFx0XFx0ICBSQUlELTUsIFJBSUQtNiBkaXN0cmlidXRlcyB0aGUgc3luZHJvbWVzIGFjcm9zcyB0aGUgZHJpdmVzXFxuIDE4OTpcXHRcXHQgIGluIG9uZSBvZiB0aGUgYXZhaWxhYmxlIHBhcml0eSBkaXN0cmlidXRpb24gbWV0aG9kcy5cXG4gMTkwOlxcdFxcbiAxOTE6XFx0XFx0ICBJbmZvcm1hdGlvbiBhYm91dCBTb2Z0d2FyZSBSQUlEIG9uIExpbnV4IGlzIGNvbnRhaW5lZCBpbiB0aGVcXG4gMTkyOlxcdFxcdCAgU29mdHdhcmUtUkFJRCBtaW5pLUhPV1RPLCBhdmFpbGFibGUgZnJvbVxcbiAxOTM6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXFx1MDAzZS4gVGhlcmUgeW91IHdpbGwgYWxzb1xcbiAxOTQ6XFx0XFx0ICBsZWFybiB3aGVyZSB0byBnZXQgdGhlIHN1cHBvcnRpbmcgdXNlciBzcGFjZSB1dGlsaXRpZXMgcmFpZHRvb2xzLlxcbiAxOTU6XFx0XFxuIDE5NjpcXHRcXHQgIElmIHlvdSB3YW50IHRvIHVzZSBzdWNoIGEgUkFJRC00L1JBSUQtNS9SQUlELTYgc2V0LCBzYXkgWS4gIFRvXFxuIDE5NzpcXHRcXHQgIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDE5ODpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHJhaWQ0NTYuXFxuIDE5OTpcXHRcXG4gMjAwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMjAxOlxcdFxcbiAyMDI6XFx0Y29uZmlnIE1EX0NMVVNURVJcXG4gMjAzOlxcdFxcdHRyaXN0YXRlIFxcXCJDbHVzdGVyIFN1cHBvcnQgZm9yIE1EXFxcIlxcbiAyMDQ6XFx0XFx0c2VsZWN0IE1EX0JJVE1BUFxcbiAyMDU6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfREVWX01EXFxuIDIwNjpcXHRcXHRkZXBlbmRzIG9uIERMTVxcbiAyMDc6XFx0XFx0ZGVmYXVsdCBuXFxuIDIwODpcXHRcXHRoZWxwXFxuIDIwOTpcXHRcXHRDbHVzdGVyaW5nIHN1cHBvcnQgZm9yIE1EIGRldmljZXMuIFRoaXMgZW5hYmxlcyBsb2NraW5nIGFuZFxcbiAyMTA6XFx0XFx0c3luY2hyb25pemF0aW9uIGFjcm9zcyBtdWx0aXBsZSBzeXN0ZW1zIG9uIHRoZSBjbHVzdGVyLCBzbyBhbGxcXG4gMjExOlxcdFxcdG5vZGVzIGluIHRoZSBjbHVzdGVyIGNhbiBhY2Nlc3MgdGhlIE1EIGRldmljZXMgc2ltdWx0YW5lb3VzbHkuXFxuIDIxMjpcXHRcXG4gMjEzOlxcdFxcdFRoaXMgYnJpbmdzIHRoZSByZWR1bmRhbmN5IChhbmQgdXB0aW1lKSBvZiBSQUlEIGxldmVscyBhY3Jvc3MgdGhlXFxuIDIxNDpcXHRcXHRub2RlcyBvZiB0aGUgY2x1c3Rlci4gQ3VycmVudGx5LCBpdCBjYW4gd29yayB3aXRoIHJhaWQxIGFuZCByYWlkMTBcXG4gMjE1OlxcdFxcdChsaW1pdGVkIHN1cHBvcnQpLlxcbiAyMTY6XFx0XFxuIDIxNzpcXHRcXHRJZiB1bnN1cmUsIHNheSBOLlxcbiAyMTg6XFx0XFxuIDIxOTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbWQvYmNhY2hlL0tjb25maWdcXFwiXFxuIDIyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MTM6MjkuMzQ3MDE2MjE4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyNDQ5MTQ0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydCBhbmQgdXNpbmcgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlOlxuXG4qKkNoZWNraW5nIERNLVJBSUQgaW4gYSBCcm9hZGVyIENvbnRleHQqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgaXNzdWUsIGFuZCBJJ3ZlIGFscmVhZHkgY29uc2lkZXJlZCBbbWVudGlvbiBwcmV2aW91cyBwb2ludHMgaWYgdGhlIG9yaWdpbmFsIGNvbnRleHQgaXMgYXZhaWxhYmxlXS4gTm93LCBJIG5lZWQgdG8gZXhwYW5kIG15IGZvY3VzIGEgYml0LiBMZXQncyBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBvdmVybG9va2VkIHNvbWV0aGluZyByZWxhdGVkIHRvIERNLVJBSUQuIEl0J3Mgb2Z0ZW4gdGhlIGVsZXBoYW50IGluIHRoZSByb29tIHRoYXQgZ2V0cyBmb3Jnb3R0ZW4gd2hlbiBkaWFnbm9zaW5nIGNvbXBsZXggc3RvcmFnZSBpc3N1ZXMuIFRoaW5ncyBnZXQgaGFpcnkgZmFzdCB3aGVuIHlvdSBoYXZlIExWTSwgTUQgYW5kIERNLVJBSUQgYWxsIHBsYXlpbmcgdG9nZXRoZXIuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgdHlwaWNhbCBmYWlsdXJlIG1vZGVzLCBnb3RjaGFzLCBhbmQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGNvbXBvbmVudHMgaW4gdGhhdCBzdGFjay4gU3BlY2lmaWNhbGx5LCBhcmUgdGhlIGtlcm5lbCBtb2R1bGVzIGxvYWRlZD8gSXMgdGhlIGRldmljZSBtYXBwZXIgbGF5ZXIgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIGFuZCBob3cgYWJvdXQgdGhlIFJBSUQgY29uZmlndXJhdGlvbiBpdHNlbGY/IEknbGwgcHJvYmFibHkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHNvbWUgb2YgdGhlIG1vcmUgYWR2YW5jZWQgZmVhdHVyZXMgbGlrZSBtdWx0aXBhdGhpbmcgYW5kIHNuYXBzaG90dGluZyBhcyBwb3RlbnRpYWwgY29tcGxpY2F0aW5nIGZhY3RvcnMuIEkgc3VzcGVjdCBETS1SQUlEIGhlcmUsIGJ1dCBpdHMgd29ydGggYSBxdWljayBjaGVjayB0byBydWxlIGl0IG91dCBiZWZvcmUgSSBnbyBkZWVwZXIgZG93biBhIHJhYmJpdCBob2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg5MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MTM6MzQuNTkxOTMzMDkxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTcwOTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRE1fUkFJRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21kL0tjb25maWc9NDIwPWNvbmZpZyBETV9MT0dfVVNFUlNQQUNFXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctNDMwLVxcbmRyaXZlcnMvbWQvS2NvbmZpZzo0MzE6Y29uZmlnIERNX1JBSURcXG5kcml2ZXJzL21kL0tjb25maWctNDMyLSAgICAgICB0cmlzdGF0ZSBcXFwiUkFJRCAxLzQvNS82LzEwIHRhcmdldFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MTM6MzQuNjQzNjQ4NDkxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2NDI1ODI3NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgTUQgTGF5ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcXVlc3Rpb24gb2Ygd2hldGhlciB0aGlzIHBhdGNoIGlzIFwiV29ydGhGdXp6aW5nXCIgaXMgYSByZXNvdW5kaW5nIFwieWVzLlwiIFRoZSBtb2RpZmljYXRpb25zIHRvdWNoIGNyaXRpY2FsIGFyZWFzIG9mIHRoZSBNRCAoTXVsdGlwbGUgRGV2aWNlKSBsYXllcjogbG9ja2luZyBoaWVyYXJjaGllcyBpbnZvbHZpbmcgbXV0ZXhlcyBhbmQgbG9ja3MgbGlrZSBgcS1cdTAwM2VsaW1pdHNfbG9ja2AgYW5kIGByZWNvbmZpZ19tdXRleGAsIHF1ZXVlIGxpbWl0cyBoYW5kbGluZywgYW5kIGRpc2sgYWRkaXRpb24vcmVtb3ZhbCwgYWxsIGFjcm9zcyBzZXZlcmFsIFJBSUQgcGVyc29uYWxpdGllcy4gU3BlY2lmaWNhbGx5LCBjaGFuZ2VzIGluIGlvY3RsIGhhbmRsaW5nLCBzeXNmcyBpbnRlcmFjdGlvbnMsIHN5bmMgdGhyZWFkIGV4ZWN1dGlvbiwgYW5kIGBob3RfYWRkX2Rpc2tgIGNhbGxiYWNrcyBpbmRpY2F0ZSBhIGhpZ2ggbGlrZWxpaG9vZCBvZiBpbnRyb2R1Y2luZyByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2Nrcywgb3Igb3RoZXIgY29uY3VycmVuY3ktcmVsYXRlZCBidWdzLiBHaXZlbiB0aGF0IHRoZXNlIGNvZGUgcGF0aHMgYXJlIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bHMgYW5kIHN5c2ZzLCBmdXp6aW5nIGlzIGFic29sdXRlbHkgY3J1Y2lhbCB0byB0ZXN0IHRoZSByb2J1c3RuZXNzIG9mIHRoZSBuZXcgbG9ja2luZyBvcmRlciBhbmQgcXVldWUgbGltaXQgaW1wbGVtZW50YXRpb25zLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBcIkZvY3VzU3ltYm9sc1wiIHRvIHRhcmdldCB3aXRoIHRoZSBmdXp6ZXIuIFdlIG5lZWQgdG8gc2VsZWN0IHRoZSBrZXkgZnVuY3Rpb25zIGFuZCBlbnRyeSBwb2ludHMgdGhhdCBlbmNhcHN1bGF0ZSB0aGUgY2hhbmdlZCBsb2dpYy5cblxuSGVyZSdzIG15IGxpc3QsIGJhc2VkIG9uIHRoZSBtb2RpZmllZCBhbmQgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnM6XG5cbiogICBJbiBgZHJpdmVycy9tZC9tZC5jYDogYG1kZGV2X3N0YWNrX3JkZXZfaW50b2AsIGBtZGRldl91cGRhdGVfaW9fb3B0YCwgYG1kX2FkZF9uZXdfZGlza2AsIGByZW1vdmVfYW5kX2FkZF9zcGFyZXNgLCBgaG90X3JlbW92ZV9kaXNrYCwgYHJkZXZfYXR0cl9zdG9yZWAsIGBtZF9pb2N0bGAsIGBtZF9zdGFydF9zeW5jYCwgYGNoZWNrX3NiX2NoYW5nZXNgLCBgYWRkX2JvdW5kX3JkZXZgLlxuKiAgIEluIGBkcml2ZXJzL21kL3JhaWQxLmNgOiBgcmFpZDFfYWRkX2Rpc2tgXG4qICAgSW4gYGRyaXZlcnMvbWQvcmFpZDEwLmNgOiBgcmFpZDEwX2FkZF9kaXNrYFxuKiAgIEluIGBkcml2ZXJzL21kL3JhaWQ1LmNgOiBgcmFpZDVfYWRkX2Rpc2tgLCBgcmFpZDVfc3RvcmVfc2tpcF9jb3B5YFxuKiAgIEluIGBkcml2ZXJzL21kL21kLWxpbmVhci5jYDogYGxpbmVhcl9hZGRgXG5cbkkgYWxzbyBjb25maXJtZWQgdGhhdCBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZV90cnlsb2NrYCBpcyBhIHN0YXRpYyBpbmxpbmUgaW4gYGluY2x1ZGUvbGludXgvYmxrZGV2LmhgLCBhcyBleHBlY3RlZC5cblxuRmluYWxseSwgd2UgbmVlZCB0byBlbnN1cmUgdGhlIGNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIHRvIHRyaWdnZXIgdGhlIGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIG11bHRpcGxlIFJBSUQgcGVyc29uYWxpdGllcyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LCBzbyB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSBhbGwgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgdGVzdGVkOlxuXG4qICAgYEJMS19ERVZfTURgXG4qICAgYE1EX1JBSUQxYFxuKiAgIGBNRF9SQUlEMTBgXG4qICAgYE1EX1JBSUQ0NTZgXG4qICAgYE1EX0xJTkVBUmBcbiogICBgRE1fUkFJRGBcblxuSSBhbSBhbHNvIGRvdWJsZS1jaGVja2luZyB0aGUgY29uZmlndXJhdGlvbiBjb3ZlcmFnZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGZpbGVzIHJlbGF0ZWQgdG8gbXVsdGlwbGUgUkFJRCBpbXBsZW1lbnRhdGlvbnMsIHNvIGVuYWJsaW5nIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaG91bGQgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIEluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSwgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYERNX1JBSURgICh3aGljaCBkZXBlbmRzIG9uIGBCTEtfREVWX0RNYCBhbmQgaW5kaXJlY3RseSBvbiBgTURfUkFJRDQ1NmApIGlzIHJlbGV2YW50IGJlY2F1c2Ugb2YgdGhlIGBkcml2ZXJzL21kL2RtLXJhaWQuY2AgY2hhbmdlLCBhbmQgdG8gYSBsZXNzZXIgZXh0ZW50LCBgTURfQVVUT0RFVEVDVGAgYXMgd2VsbC4gV2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIGZvY3VzaW5nIG9uIHRoZSBsaXN0ZWQgc3ltYm9scywgd2UgY2FuIHBlcmZvcm0gYSBjb21wcmVoZW5zaXZlIGZ1enppbmcgY2FtcGFpZ24gb24gdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyNjUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjEzOjQyLjI4NjIzNDI0NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwMjM3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERNX1JBSURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZC9LY29uZmlnPTQyMD1jb25maWcgRE1fTE9HX1VTRVJTUEFDRVxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTQzMC1cXG5kcml2ZXJzL21kL0tjb25maWc6NDMxOmNvbmZpZyBETV9SQUlEXFxuZHJpdmVycy9tZC9LY29uZmlnLTQzMi0gICAgICAgdHJpc3RhdGUgXFxcIlJBSUQgMS80LzUvNi8xMCB0YXJnZXRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjEzOjQyLjMzODI2NTI0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjk3MjA1NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIFJBSUQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgUkFJRCBjb25maWd1cmF0aW9uLiBUaGUgY29udGV4dCBzdWdnZXN0cyB0aGF0IHRoZSByZWxldmFudCBjb2RlIHdpbGwgYmUgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gTGV0J3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9tZC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIG1vZHVsZSBjb25maWd1cmF0aW9uIGZvciB0aGUgUkFJRCBkcml2ZXJzIHdpbGwgYmUuIEl0J3MgYSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50LiBTcGVjaWZpY2FsbHksIGxldCdzIHplcm8gaW4gb24gbGluZSA0MzEuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2x1ZSB0aGVyZSB0byB3aGF0IGlzIGJlaW5nIGNvbmZpZ3VyZWQgYW5kIHdoZXJlIHRoaW5ncyBhcmUgZGVmaW5lZC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB3aGF0ZXZlciBJJ20gbG9va2luZyBmb3Igd2lsbCBiZSByZWxhdGVkIHRvIHdoYXRldmVyIGlzIG9uIHRoYXQgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoxMzo0NC4wMzU0NzM2NTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjU6XFx0XFx0ICBUaGUgdXNlcnNwYWNlIGxvZ2dpbmcgbW9kdWxlIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvclxcbiA0MjY6XFx0XFx0ICByZWxheWluZyB0aGUgZG0tZGlydHktbG9nIEFQSSB0byB1c2Vyc3BhY2UuICBMb2cgZGVzaWduc1xcbiA0Mjc6XFx0XFx0ICB3aGljaCBhcmUgbW9yZSBzdWl0ZWQgdG8gdXNlcnNwYWNlIGltcGxlbWVudGF0aW9uIChlLmcuXFxuIDQyODpcXHRcXHQgIHNoYXJlZCBzdG9yYWdlIGxvZ3MpIG9yIGV4cGVyaW1lbnRhbCBsb2dzIGNhbiBiZSBpbXBsZW1lbnRlZFxcbiA0Mjk6XFx0XFx0ICBieSBsZXZlcmFnaW5nIHRoaXMgZnJhbWV3b3JrLlxcbiA0MzA6XFx0XFxuIDQzMTpcXHRjb25maWcgRE1fUkFJRFxcbiA0MzI6XFx0ICAgICAgIHRyaXN0YXRlIFxcXCJSQUlEIDEvNC81LzYvMTAgdGFyZ2V0XFxcIlxcbiA0MzM6XFx0ICAgICAgIGRlcGVuZHMgb24gQkxLX0RFVl9ETVxcbiA0MzQ6XFx0ICAgICAgIHNlbGVjdCBNRF9SQUlEMFxcbiA0MzU6XFx0ICAgICAgIHNlbGVjdCBNRF9SQUlEMVxcbiA0MzY6XFx0ICAgICAgIHNlbGVjdCBNRF9SQUlEMTBcXG4gNDM3OlxcdCAgICAgICBzZWxlY3QgTURfUkFJRDQ1NlxcbiA0Mzg6XFx0ICAgICAgIHNlbGVjdCBNRF9CSVRNQVBcXG4gNDM5OlxcdCAgICAgICBzZWxlY3QgQkxLX0RFVl9NRFxcbiA0NDA6XFx0XFx0aGVscFxcbiA0NDE6XFx0XFx0IEEgZG0gdGFyZ2V0IHRoYXQgc3VwcG9ydHMgUkFJRDEsIFJBSUQxMCwgUkFJRDQsIFJBSUQ1IGFuZCBSQUlENiBtYXBwaW5nc1xcbiA0NDI6XFx0XFxuIDQ0MzpcXHRcXHQgQSBSQUlELTUgc2V0IG9mIE4gZHJpdmVzIHdpdGggYSBjYXBhY2l0eSBvZiBDIE1CIHBlciBkcml2ZSBwcm92aWRlc1xcbiA0NDQ6XFx0XFx0IHRoZSBjYXBhY2l0eSBvZiBDICogKE4gLSAxKSBNQiwgYW5kIHByb3RlY3RzIGFnYWluc3QgYSBmYWlsdXJlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjEzOjQ0LjAzNTU3NjY0MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjcxNDQyNjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNRCBSQUlEIExheWVyIFJlZmFjdG9yaW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2VkIG9uIHRoZSBjb25maWdz4oCUYEJMS19ERVZfTURgLCBgTURfUkFJRDFgLCBgTURfUkFJRDEwYCwgYE1EX1JBSUQ0NTZgLCBgTURfTElORUFSYCwgYW5kIGBETV9SQUlEYOKAlGl0J3MgY2xlYXJseSBmb2N1c2VkIG9uIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgbGF5ZXIuIFRoZSBjb3JlIG9mIHRoaXMgcmVmYWN0b3Igc2VlbXMgdG8gYmUgYWJvdXQgaG93IHF1ZXVlIGxpbWl0cyBhcmUgdXBkYXRlZCBhbmQgdGhlIG9yZGVyIGluIHdoaWNoIGxvY2tzIGFyZSBhY3F1aXJlZCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYHEtXHUwMDNlbGltaXRzX2xvY2tgLCBgcmVjb25maWdfbXV0ZXhgLCBhbmQgZGV2aWNlIHN1c3BlbnNpb24uXG5cblRoZXkncmUgaW50cm9kdWNpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jaygpYCBhbmQgYG1kZGV2X3N0YWNrX3JkZXZfaW50bygpYC4gQW55dGltZSB5b3UgbWVzcyB3aXRoIGxvY2sgaGllcmFyY2hpZXMgaW4gdGhpcyBraW5kIG9mIGxvdy1sZXZlbCBjb2RlLCBteSBhbnRlbm5hIGdvIHVwLiBXZSdyZSB0YWxraW5nIGFib3V0IG9wZXJhdGlvbnMgZHVyaW5nIGhvdC1hZGQsIHNwYXJlIHJlbW92YWwvYWRkaXRpb24sIHJlc2hhcGVzLCBhbmQgdGhvc2UgYXJlIGFsbCBzZW5zaXRpdmUgcG9pbnRzLiBJdCdzIGFsc28gd29ydGggbm90aW5nIGhvdyBtYW55IGludGVyYWN0aW9ucyB0aGUga2VybmVsIGhhcyB3aXRoIHRob3NlLiBXZSBzaG91bGQgYmUgZXh0cmEgdmlnaWxhbnQsIGFuZCB0aGF0IG1lYW5zIHdlIHdpbGwgbmVlZCB0byBnaXZlIGl0IHNwZWNpYWwgYXR0ZW50aW9uIHRvIGF2b2lkIHN1YnRsZSBkZWFkbG9ja3MsIGxvY2tpbmcgaW5jb25zaXN0ZW5jaWVzLCBhbmQgcG90ZW50aWFsIHN0YXRlIHJlZ3Jlc3Npb25zLlxuXG5MZXQncyBkbyBhIHNhbml0eSBjaGVjayBvbiB0aGUgZm9jdXMgc3ltYm9scy4gTG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSBnb29kIGxpc3Q6IGBtZGRldl9zdGFja19yZGV2X2ludG9gLCBgbWRkZXZfdXBkYXRlX2lvX29wdGAsIGBtZF9hZGRfbmV3X2Rpc2tgLCBgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzYCwgYHJkZXZfYXR0cl9zdG9yZWAsIGBtZF9zdGFydF9zeW5jYCwgYHJhaWQxX2FkZF9kaXNrYCwgYHJhaWQxMF9hZGRfZGlza2AsIGByYWlkNV9hZGRfZGlza2AsIGByYWlkNV9zdG9yZV9za2lwX2NvcHlgLCBhbmQgYGxpbmVhcl9hZGRgLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBsaXN0LlxuXG5UaGV5IGFyZSBhbGwgc3BlY2lmaWMgdG8gTUQgUkFJRCwgYW5kIHRoYXQncyBleGFjdGx5IHdoYXQgd2Ugd2FudC4gVGhleSBhcmUgYWxzbyBwcmVzZW50IGluIHRoZSBtb2RpZmllZCBDIGZpbGVzIHdoaWNoIG1lYW5zIGl0IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgcmV2aWV3LlxuXG5JIG5lZWQgdG8gZmxhZyB0aGlzIGZvciBmdXp6aW5nIGFuZCBleHRlbnNpdmUgdGVzdGluZy4gTm93LCBJJ20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzcwNCwiT3V0cHV0VG9rZW5zIjoyODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoxMzo0OS43MDcwMjI1NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODI3MzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX01EXCIsXG4gICAgXCJNRF9SQUlEMVwiLFxuICAgIFwiTURfUkFJRDEwXCIsXG4gICAgXCJNRF9SQUlENDU2XCIsXG4gICAgXCJNRF9MSU5FQVJcIixcbiAgICBcIkRNX1JBSURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZGRldl9zdGFja19yZGV2X2ludG9cIixcbiAgICBcIm1kZGV2X3VwZGF0ZV9pb19vcHRcIixcbiAgICBcIm1kX2FkZF9uZXdfZGlza1wiLFxuICAgIFwicmVtb3ZlX2FuZF9hZGRfc3BhcmVzXCIsXG4gICAgXCJyZGV2X2F0dHJfc3RvcmVcIixcbiAgICBcIm1kX3N0YXJ0X3N5bmNcIixcbiAgICBcInJhaWQxX2FkZF9kaXNrXCIsXG4gICAgXCJyYWlkMTBfYWRkX2Rpc2tcIixcbiAgICBcInJhaWQ1X2FkZF9kaXNrXCIsXG4gICAgXCJyYWlkNV9zdG9yZV9za2lwX2NvcHlcIixcbiAgICBcImxpbmVhcl9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cnVjdHVyZXMgbG9jayBhY3F1aXNpdGlvbiBhbmQgcXVldWUgbGltaXRzIHByb3BhZ2F0aW9uIGluIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgbGF5ZXIgdG8gcHJldmVudCBkZWFkbG9ja3MgYmV0d2VlbiBxLVxcdTAwM2VsaW1pdHNfbG9jaywgcmVjb25maWdfbXV0ZXgsIGFuZCBtZGRldl9zdXNwZW5kLiBJdCBhbHRlcnMgZGlzayBhZGRpdGlvbi9yZW1vdmFsIGFuZCBzeXNmcy9pb2N0bCBoYW5kbGluZyBhY3Jvc3MgbXVsdGlwbGUgUkFJRCBwZXJzb25hbGl0aWVzIChyYWlkMSwgcmFpZDEwLCByYWlkNSwgbGluZWFyLCBkbS1yYWlkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGlzY292ZXIgcG90ZW50aWFsIGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGNvcnJ1cHRpb25zIGR1cmluZyBjb25jdXJyZW50IFJBSUQgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTURcIixcbiAgICBcIk1EX1JBSUQxXCIsXG4gICAgXCJNRF9SQUlEMTBcIixcbiAgICBcIk1EX1JBSUQ0NTZcIixcbiAgICBcIk1EX0xJTkVBUlwiLFxuICAgIFwiRE1fUkFJRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1kZGV2X3N0YWNrX3JkZXZfaW50b1wiLFxuICAgIFwibWRkZXZfdXBkYXRlX2lvX29wdFwiLFxuICAgIFwibWRfYWRkX25ld19kaXNrXCIsXG4gICAgXCJyZW1vdmVfYW5kX2FkZF9zcGFyZXNcIixcbiAgICBcInJkZXZfYXR0cl9zdG9yZVwiLFxuICAgIFwibWRfc3RhcnRfc3luY1wiLFxuICAgIFwicmFpZDFfYWRkX2Rpc2tcIixcbiAgICBcInJhaWQxMF9hZGRfZGlza1wiLFxuICAgIFwicmFpZDVfYWRkX2Rpc2tcIixcbiAgICBcInJhaWQ1X3N0b3JlX3NraXBfY29weVwiLFxuICAgIFwibGluZWFyX2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc3RydWN0dXJlcyBsb2NrIGFjcXVpc2l0aW9uIGFuZCBxdWV1ZSBsaW1pdHMgcHJvcGFnYXRpb24gaW4gdGhlIE1EIChzb2Z0d2FyZSBSQUlEKSBsYXllciB0byBwcmV2ZW50IGRlYWRsb2NrcyBiZXR3ZWVuIHEtXFx1MDAzZWxpbWl0c19sb2NrLCByZWNvbmZpZ19tdXRleCwgYW5kIG1kZGV2X3N1c3BlbmQuIEl0IGFsdGVycyBkaXNrIGFkZGl0aW9uL3JlbW92YWwgYW5kIHN5c2ZzL2lvY3RsIGhhbmRsaW5nIGFjcm9zcyBtdWx0aXBsZSBSQUlEIHBlcnNvbmFsaXRpZXMgKHJhaWQxLCByYWlkMTAsIHJhaWQ1LCBsaW5lYXIsIGRtLXJhaWQpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBkaXNjb3ZlciBwb3RlbnRpYWwgZGVhZGxvY2tzLCBsb2NraW5nIG9yZGVyIHZpb2xhdGlvbnMsIHJhY2UgY29uZGl0aW9ucywgb3Igc3RhdGUgY29ycnVwdGlvbnMgZHVyaW5nIGNvbmN1cnJlbnQgUkFJRCBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjEzOjQ5Ljc4Mjg1NzU1MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYwNzM0MDcxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjEzOjQ5Ljc4MzMwNjk2M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk2MDY4ODgxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgc3Vic3lzdGVtIGFuZCBibG9jayBsYXllciBoZWxwZXIgZnVuY3Rpb25zIHRvIHJlc3RydWN0dXJlIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIHVwZGF0ZWQgYWNyb3NzIG1kLWxpbmVhciwgcmFpZDEsIHJhaWQxMCwgYW5kIHJhaWQ1IGFycmF5cy4gU3BlY2lmaWNhbGx5LCBpdCBwYXNzZXMgYW4gZXhpc3Rpbmcgb3IgbmV3bHkgc3RhcnRlZCBgc3RydWN0IHF1ZXVlX2xpbWl0c2AgdGhyb3VnaCB2YXJpb3VzIGhvdC1hZGQvcmVtb3ZlL3VwZGF0ZSBjYWxsIHBhdGhzIHRvIGF2b2lkIGxvY2staW52ZXJzaW9uIGRlYWRsb2NrcyBiZXR3ZWVuIGBxLVxcdTAwM2VsaW1pdHNfbG9ja2AsIGFycmF5IHN1c3BlbnNpb24sIGFuZCBgcmVjb25maWdfbXV0ZXhgLlxcblxcbkFsbCBgc3RydWN0IHF1ZXVlX2xpbWl0c2AgaW5zdGFuY2VzIG9uIHRoZSBzdGFjayBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAodmlhIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClgLCB3aGljaCByZXR1cm5zIGBxLVxcdTAwM2VsaW1pdHNgIGJ5IHZhbHVlLCBvciBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZV90cnlsb2NrKClgIHdoaWNoIHBvcHVsYXRlcyBgKmxpbWApLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSByZWFkLCBwYXNzZWQgdG8gY29udHJvbCBmbG93LCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgZGVhZGxvY2tzLCBsb2NraW5nIG9yZGVyIHZpb2xhdGlvbnMsIG9yIHJlZmVyZW5jZS9zdGF0ZSBlcnJvcnMsIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIEtBU0FOL2tlcm5lbCBkZWJ1Z2dlcnMgcmF0aGVyIHRoYW4gS01TQU4uIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIHRoZXJlZm9yZSBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYzYzZiZjI2NmEyNGNmNTc1NGI3YmMwNDUwMTFlNzQzZDJlM2Q3N2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE4OjEzOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkLmMgYi9kcml2ZXJzL21kL2RtLXJhaWQuY1xuaW5kZXggOGY1YTVlMTM0MmE5NS4uMjFhMTkyMmJlZTRmYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZC5jXG4rKysgYi9kcml2ZXJzL21kL2RtLXJhaWQuY1xuQEAgLTM5MjMsNyArMzkyMyw3IEBAIHN0YXRpYyB2b2lkIGF0dGVtcHRfcmVzdG9yZV9vZl9mYXVsdHlfZGV2aWNlcyhzdHJ1Y3QgcmFpZF9zZXQgKnJzKVxuIFx0XHRcdGNsZWFyX2JpdChGYXVsdHksIFx1MDAyNnItXHUwMDNlZmxhZ3MpO1xuIFx0XHRcdGNsZWFyX2JpdChXcml0ZUVycm9yU2VlbiwgXHUwMDI2ci1cdTAwM2VmbGFncyk7XG4gXG4tXHRcdFx0aWYgKG1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByKSkge1xuK1x0XHRcdGlmIChtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhtZGRldiwgciwgTlVMTCkpIHtcbiBcdFx0XHRcdC8qIEZhaWxlZCB0byByZXZpdmUgdGhpcyBkZXZpY2UsIHRyeSBuZXh0ICovXG4gXHRcdFx0XHRyLVx1MDAzZXJhaWRfZGlzayA9IHItXHUwMDNlc2F2ZWRfcmFpZF9kaXNrID0gLTE7XG4gXHRcdFx0XHRyLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC1hdXRvZGV0ZWN0LmMgYi9kcml2ZXJzL21kL21kLWF1dG9kZXRlY3QuY1xuaW5kZXggNGI4MDE2NWFmZDIzMy4uOTI5NTEzMTA5NjU3ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jXG4rKysgYi9kcml2ZXJzL21kL21kLWF1dG9kZXRlY3QuY1xuQEAgLTIxMyw3ICsyMTMsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWRfc2V0dXBfZHJpdmUoc3RydWN0IG1kX3NldHVwX2FyZ3MgKmFyZ3MpXG4gXHRcdFx0XHQoMSBcdTAwM2NcdTAwM2MgTURfRElTS19BQ1RJVkUpIHwgKDEgXHUwMDNjXHUwMDNjIE1EX0RJU0tfU1lOQyk7XG4gXHRcdH1cbiBcbi1cdFx0bWRfYWRkX25ld19kaXNrKG1kZGV2LCBcdTAwMjZkaW5mbyk7XG4rXHRcdG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXHUwMDI2ZGluZm8sIE5VTEwpO1xuIFx0fVxuIFxuIFx0aWYgKCFlcnIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC1saW5lYXIuYyBiL2RyaXZlcnMvbWQvbWQtbGluZWFyLmNcbmluZGV4IDczYjM2N2I2MWI4NzMuLjFmNDRjMmQ3ZGI5M2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL21kLWxpbmVhci5jXG4rKysgYi9kcml2ZXJzL21kL21kLWxpbmVhci5jXG5AQCAtMTg2LDcgKzE4Niw4IEBAIHN0YXRpYyBpbnQgbGluZWFyX3J1bihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBsaW5lYXJfYWRkKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuK3N0YXRpYyBpbnQgbGluZWFyX2FkZChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcbitcdFx0ICAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdC8qIEFkZGluZyBhIGRyaXZlIHRvIGEgbGluZWFyIGFycmF5IGFsbG93cyB0aGUgYXJyYXkgdG8gZ3Jvdy5cbiBcdCAqIEl0IGlzIHBlcm1pdHRlZCBpZiB0aGUgbmV3IGRyaXZlIGhhcyBhIG1hdGNoaW5nIHN1cGVyYmxvY2tcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmNcbmluZGV4IDY4MGIzNGE2M2NiM2QuLmM0MDU0ZDA2ZDEwNzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL21kLmNcbisrKyBiL2RyaXZlcnMvbWQvbWQuY1xuQEAgLTk0LDggKzk0LDggQEAgc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJlc3luY193YWl0KTtcbiAgKi9cbiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1kX21pc2Nfd3E7XG4gXG4tc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldixcbi1cdFx0XHRcdCBzdHJ1Y3QgbWRfcmRldiAqdGhpcyk7XG4rc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnRoaXMsXG4rXHRcdFx0XHQgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTtcbiBzdGF0aWMgdm9pZCBtZGRldl9kZXRhY2goc3RydWN0IG1kZGV2ICptZGRldik7XG4gc3RhdGljIHZvaWQgZXhwb3J0X3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xuIHN0YXRpYyB2b2lkIG1kX3dha2V1cF90aHJlYWRfZGlyZWN0bHkoc3RydWN0IG1kX3RocmVhZCBfX3JjdSAqKnRocmVhZCk7XG5AQCAtMjk4MSw3ICsyOTgxLDcgQEAgdm9pZCBtZF91cGRhdGVfc2Ioc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZvcmNlX2NoYW5nZSlcbiB9XG4gRVhQT1JUX1NZTUJPTChtZF91cGRhdGVfc2IpO1xuIFxuLXN0YXRpYyBpbnQgYWRkX2JvdW5kX3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4rc3RhdGljIGludCBhZGRfYm91bmRfcmRldihzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSByZGV2LVx1MDAzZW1kZGV2O1xuIFx0aW50IGVyciA9IDA7XG5AQCAtMjk5NCw3ICsyOTk0LDcgQEAgc3RhdGljIGludCBhZGRfYm91bmRfcmRldihzdHJ1Y3QgbWRfcmRldiAqcmRldilcbiBcdFx0ICovXG4gXHRcdHN1cGVyX3R5cGVzW21kZGV2LVx1MDAzZW1ham9yX3ZlcnNpb25dLlxuIFx0XHRcdHZhbGlkYXRlX3N1cGVyKG1kZGV2LCBOVUxMLypmcmVzaGVzdCovLCByZGV2KTtcbi1cdFx0ZXJyID0gbWRkZXYtXHUwMDNlcGVycy1cdTAwM2Vob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYpO1xuK1x0XHRlcnIgPSBtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhtZGRldiwgcmRldiwgbGltKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdG1kX2tpY2tfcmRldl9mcm9tX2FycmF5KHJkZXYpO1xuIFx0XHRcdHJldHVybiBlcnI7XG5AQCAtMzAzMyw3ICszMDMzLDEzIEBAIHN0YXRpYyBpbnQgY21kX21hdGNoKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqc3RyKVxuIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5IHtcbiBcdHN0cnVjdCBhdHRyaWJ1dGUgYXR0cjtcbiBcdHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgbWRfcmRldiAqLCBjaGFyICopO1xuLVx0c3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7XG4rXHQvKlxuK1x0ICogQGxpbTogYSBxdWV1ZSBsaW1pdHMgdXBkYXRlIHRoZSBjYWxsZXIgb3ducywgb3IgTlVMTC4gIFN0b3JlcyB0aGF0XG4rXHQgKiBjYW4gYWRkIGEgbGVnIHRvIHRoZSBhcnJheSBtdXN0IHN0YWNrIGludG8gaXQgcmF0aGVyIHRoYW4gdGFrZVxuK1x0ICogcS1cdTAwM2VsaW1pdHNfbG9jayB0aGVtc2VsdmVzLCBzZWUgbWRfc3RhcnRfc3luYygpLlxuK1x0ICovXG4rXHRzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxuK1x0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIH07XG4gXG4gc3RhdGljIHNzaXplX3RcbkBAIC0zMDc5LDcgKzMwODUsOCBAQCBzdGF0ZV9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4rc3RhdGVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0LyogY2FuIHdyaXRlXG4gXHQgKiAgZmF1bHR5ICAtIHNpbXVsYXRlcyBhbiBlcnJvclxuQEAgLTMxMTAsNyArMzExNyw3IEBAIHN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHR9IGVsc2UgaWYgKGNtZF9tYXRjaChidWYsIFwicmVtb3ZlXCIpKSB7XG4gXHRcdGlmIChyZGV2LVx1MDAzZW1kZGV2LVx1MDAzZXBlcnMpIHtcbiBcdFx0XHRjbGVhcl9iaXQoQmxvY2tlZCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4tXHRcdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYpO1xuK1x0XHRcdHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LVx1MDAzZW1kZGV2LCByZGV2LCBsaW0pO1xuIFx0XHR9XG4gXHRcdGlmIChyZGV2LVx1MDAzZXJhaWRfZGlzayBcdTAwM2U9IDApXG4gXHRcdFx0ZXJyID0gLUVCVVNZO1xuQEAgLTMyMjksNyArMzIzNiw3IEBAIHN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHRcdFx0aWYgKCFtZGRldl9pc19jbHVzdGVyZWQocmRldi1cdTAwM2VtZGRldikgfHxcbiBcdFx0XHQgICAgKGVyciA9IG1kZGV2LVx1MDAzZWNsdXN0ZXJfb3BzLVx1MDAzZWdhdGhlcl9iaXRtYXBzKHJkZXYpKSA9PSAwKSB7XG4gXHRcdFx0XHRjbGVhcl9iaXQoRmF1bHR5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYpO1xuK1x0XHRcdFx0ZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZVxuIFx0XHRcdGVyciA9IC1FQlVTWTtcbkBAIC0zMjU3LDcgKzMyNjQsOCBAQCBlcnJvcnNfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1lcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbitlcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdCAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHVuc2lnbmVkIGludCBuO1xuIFx0aW50IHJ2O1xuQEAgLTMyODMsNyArMzI5MSw4IEBAIHNsb3Rfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1zbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4rc2xvdF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxuK1x0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdGludCBzbG90O1xuIFx0aW50IGVycjtcbkBAIC0zMzE0LDcgKzMzMjMsNyBAQCBzbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHRcdGlmIChyZGV2LVx1MDAzZW1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X3JlbW92ZV9kaXNrID09IE5VTEwpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGNsZWFyX2JpdChCbG9ja2VkLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYpO1xuK1x0XHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMocmRldi1cdTAwM2VtZGRldiwgcmRldiwgbGltKTtcbiBcdFx0aWYgKHJkZXYtXHUwMDNlcmFpZF9kaXNrIFx1MDAzZT0gMClcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgXHUwMDI2cmRldi1cdTAwM2VtZGRldi1cdTAwM2VyZWNvdmVyeSk7XG5AQCAtMzM0NCw3ICszMzUzLDggQEAgc2xvdF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIFx0XHRcdHJkZXYtXHUwMDNlc2F2ZWRfcmFpZF9kaXNrID0gLTE7XG4gXHRcdGNsZWFyX2JpdChJbl9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbiBcdFx0Y2xlYXJfYml0KEJpdG1hcF9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0ZXJyID0gcmRldi1cdTAwM2VtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhyZGV2LVx1MDAzZW1kZGV2LCByZGV2KTtcbitcdFx0ZXJyID0gcmRldi1cdTAwM2VtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhyZGV2LVx1MDAzZW1kZGV2LCByZGV2LFxuK1x0XHRcdFx0XHRcdCAgICAgbGltKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdHJkZXYtXHUwMDNlcmFpZF9kaXNrID0gLTE7XG4gXHRcdFx0cmV0dXJuIGVycjtcbkBAIC0zMzc3LDcgKzMzODcsOCBAQCBvZmZzZXRfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1vZmZzZXRfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbitvZmZzZXRfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdCAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQ7XG4gXHRpZiAoa3N0cnRvdWxsKGJ1ZiwgMTAsIFx1MDAyNm9mZnNldCkgXHUwMDNjIDApXG5AQCAtMzQwMyw3ICszNDE0LDggQEAgc3RhdGljIHNzaXplX3QgbmV3X29mZnNldF9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBuZXdfb2Zmc2V0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuLVx0XHRcdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuK1x0XHRcdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxuK1x0XHRcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdfb2Zmc2V0O1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IHJkZXYtXHUwMDNlbWRkZXY7XG5AQCAtMzUxMCw3ICszNTIyLDggQEAgc3RhdGljIGludCBzdHJpY3RfYmxvY2tzX3RvX3NlY3RvcnMoY29uc3QgY2hhciAqYnVmLCBzZWN0b3JfdCAqc2VjdG9ycylcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1yZGV2X3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbityZGV2X3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCBtZGRldiAqbXlfbWRkZXYgPSByZGV2LVx1MDAzZW1kZGV2O1xuIFx0c2VjdG9yX3Qgb2xkc2VjdG9ycyA9IHJkZXYtXHUwMDNlc2VjdG9ycztcbkBAIC0zNTcyLDcgKzM1ODUsOCBAQCBzdGF0aWMgc3NpemVfdCByZWNvdmVyeV9zdGFydF9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIFx0cmV0dXJuIHNwcmludGYocGFnZSwgXCIlbGx1XFxuXCIsIHJlY292ZXJ5X3N0YXJ0KTtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3QgcmVjb3Zlcnlfc3RhcnRfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbitzdGF0aWMgc3NpemVfdCByZWNvdmVyeV9zdGFydF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGxvbmcgcmVjb3Zlcnlfc3RhcnQ7XG4gXG5AQCAtMzYxMSw3ICszNjI1LDkgQEAgc3RhdGljIHNzaXplX3QgYmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHBhZ2UsIDApO1xuIH1cbi1zdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbitcbitzdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcbitcdFx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0aW50IHJ2ID0gYmFkYmxvY2tzX3N0b3JlKFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCBsZW4sIDApO1xuIFx0LyogTWF5YmUgdGhhdCBhY2sgd2FzIGFsbCB3ZSBuZWVkZWQgKi9cbkBAIC0zNjI2LDcgKzM2NDIsOSBAQCBzdGF0aWMgc3NpemVfdCB1YmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHBhZ2UsIDEpO1xuIH1cbi1zdGF0aWMgc3NpemVfdCB1YmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG4rXG4rc3RhdGljIHNzaXplX3QgdWJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxuK1x0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0cmV0dXJuIGJhZGJsb2Nrc19zdG9yZShcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcGFnZSwgbGVuLCAxKTtcbiB9XG5AQCAtMzY0MCw3ICszNjU4LDggQEAgcHBsX3NlY3Rvcl9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXBwbF9zZWN0b3Jfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbitwcGxfc2VjdG9yX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sXG4rXHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBsb25nIHNlY3RvcjtcbiBcbkBAIC0zNjc5LDcgKzM2OTgsOCBAQCBwcGxfc2l6ZV9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXBwbF9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4rcHBsX3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdCAgICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG4gXG5AQCAtMzc0MCw2ICszNzYwLDkgQEAgcmRldl9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuIFx0c3RydWN0IHJkZXZfc3lzZnNfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5LCBhdHRyKTtcbiBcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBtZF9yZGV2LCBrb2JqKTtcbiBcdHN0cnVjdCBrZXJuZnNfbm9kZSAqa24gPSBOVUxMO1xuK1x0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMO1xuK1x0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDtcbiBcdGJvb2wgc3VzcGVuZCA9IGZhbHNlO1xuIFx0c3NpemVfdCBydjtcbiBcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSBSRUFEX09OQ0UocmRldi1cdTAwM2VtZGRldik7XG5AQCAtMzc2MCwxNSArMzc4MywzNyBAQCByZGV2X2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4gXHRcdFx0c3VzcGVuZCA9IHRydWU7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogVGhlc2UgY2FuIGFkZCBhIGxlZyBiYWNrLCB3aGljaCBzdGFja3MgaXRzIGxpbWl0czsgdGhlIG90aGVyXG4rXHQgKiBzdGF0ZV9zdG9yZSgpIHZhbHVlcyBuZXZlciByZWFjaCAtXHUwMDNlaG90X2FkZF9kaXNrKCkuICBxLVx1MDAzZWxpbWl0c19sb2NrXG4rXHQgKiBuZXN0cyBvdXRzaWRlIHRoZSBsb2NrIGFuZCB0aGUgc3VzcGVuZCwgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cbitcdCAqL1xuK1x0aWYgKChlbnRyeS1cdTAwM2VzdG9yZSA9PSBzbG90X3N0b3JlIHx8XG4rXHQgICAgIChlbnRyeS1cdTAwM2VzdG9yZSA9PSBzdGF0ZV9zdG9yZSBcdTAwMjZcdTAwMjZcbitcdCAgICAgIChjbWRfbWF0Y2gocGFnZSwgXCJyZW1vdmVcIikgfHwgY21kX21hdGNoKHBhZ2UsIFwicmUtYWRkXCIpKSkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFtZGRldl9pc19kbShtZGRldikpIHtcbitcdFx0cSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4rXHRcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XG4rXHRcdGxpbXAgPSBcdTAwMjZsaW07XG4rXHR9XG4rXG4gXHRydiA9IHN1c3BlbmQgPyBtZGRldl9zdXNwZW5kX2FuZF9sb2NrKG1kZGV2KSA6IG1kZGV2X2xvY2sobWRkZXYpO1xuIFx0aWYgKCFydikge1xuIFx0XHRpZiAocmRldi1cdTAwM2VtZGRldiA9PSBOVUxMKVxuIFx0XHRcdHJ2ID0gLUVOT0RFVjtcbiBcdFx0ZWxzZVxuLVx0XHRcdHJ2ID0gZW50cnktXHUwMDNlc3RvcmUocmRldiwgcGFnZSwgbGVuZ3RoKTtcbitcdFx0XHRydiA9IGVudHJ5LVx1MDAzZXN0b3JlKHJkZXYsIHBhZ2UsIGxlbmd0aCwgbGltcCk7XG4rXHRcdC8qIGFwcGx5IHRoZSBsaW1pdHMgYmVmb3JlIHRoZSBhcnJheSB0YWtlcyBJL08gYWdhaW4gKi9cbitcdFx0aWYgKGxpbXApIHtcbitcdFx0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcbitcdFx0XHRsaW1wID0gTlVMTDtcbitcdFx0fVxuIFx0XHRzdXNwZW5kID8gbWRkZXZfdW5sb2NrX2FuZF9yZXN1bWUobWRkZXYpIDogbWRkZXZfdW5sb2NrKG1kZGV2KTtcbiBcdH1cbiBcbitcdGlmIChsaW1wKVxuK1x0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcbitcbiBcdGlmIChrbilcbiBcdFx0c3lzZnNfdW5icmVha19hY3RpdmVfcHJvdGVjdGlvbihrbik7XG4gXG5AQCAtNjI3NSwyMCArNjMyMCw4OSBAQCBpbnQgbWRkZXZfc3RhY2tfbmV3X3JkZXYoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3N0YWNrX25ld19yZGV2KTtcbiBcbisvKlxuKyAqIFN0YWNrIGEgbmV3IHJkZXYgaW50byBsaW1pdHMgdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIGxpbWl0c19sb2NrIGZvciBhbmRcbisgKiB3aWxsIGNvbW1pdCBpdHNlbGYuICBVc2VkIGZyb20gcGF0aHMgdGhhdCBtdXN0IHRha2UgbGltaXRzX2xvY2sgYmVmb3JlXG4rICogcXVpZXNjaW5nIHRoZSBhcnJheSwgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cbisgKi9cbitpbnQgbWRkZXZfc3RhY2tfcmRldl9pbnRvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuK3tcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgdG1wID0gKmxpbTtcbitcbitcdGlmIChtZGRldl9pc19kbShtZGRldikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHF1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShyZGV2LVx1MDAzZWJkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2VxdWV1ZSkgXHUwMDNlXG4rXHQgICAgcXVldWVfbG9naWNhbF9ibG9ja19zaXplKG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWUpKSB7XG4rXHRcdHByX2VycihcIiVzOiBpbmNvbXBhdGlibGUgbG9naWNhbF9ibG9ja19zaXplLCBjYW4gbm90IGFkZFxcblwiLFxuK1x0XHQgICAgICAgbWRuYW1lKG1kZGV2KSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cXVldWVfbGltaXRzX3N0YWNrX2JkZXYoXHUwMDI2dG1wLCByZGV2LVx1MDAzZWJkZXYsIHJkZXYtXHUwMDNlZGF0YV9vZmZzZXQsXG4rXHRcdFx0XHRtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZWRpc2tfbmFtZSk7XG4rXG4rXHRpZiAoIXF1ZXVlX2xpbWl0c19zdGFja19pbnRlZ3JpdHlfYmRldihcdTAwMjZ0bXAsIHJkZXYtXHUwMDNlYmRldikpIHtcbitcdFx0cHJfZXJyKFwiJXM6IGluY29tcGF0aWJsZSBpbnRlZ3JpdHkgcHJvZmlsZSBmb3IgJXBnXFxuXCIsXG4rXHRcdCAgICAgICBtZG5hbWUobWRkZXYpLCByZGV2LVx1MDAzZWJkZXYpO1xuK1x0XHRyZXR1cm4gLUVOWElPO1xuK1x0fVxuK1xuK1x0KmxpbSA9IHRtcDtcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtZGRldl9zdGFja19yZGV2X2ludG8pO1xuK1xuKy8qIGZvciBjYWxsZXJzIHRoYXQgbXVzdCBub3Qgd2FpdCBmb3IgcS1cdTAwM2VsaW1pdHNfbG9jaywgc2VlIG1kX3N0YXJ0X3N5bmMoKSAqL1xuK3N0YXRpYyBib29sIG1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKHN0cnVjdCBtZGRldiAqbWRkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuK3tcbitcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxO1xuK1xuK1x0aWYgKG1kZGV2X2lzX2RtKG1kZGV2KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4rXG4rXHRyZXR1cm4gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZV90cnlsb2NrKHEsIGxpbSk7XG4rfVxuK1xuIC8qIHVwZGF0ZSB0aGUgb3B0aW1hbCBJL08gc2l6ZSBhZnRlciBhIHJlc2hhcGUgKi9cbi12b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMpXG4rdm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzLFxuK1x0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuLVx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzIG93bjtcbiBcbiBcdGlmIChtZGRldl9pc19kbShtZGRldikpXG4gXHRcdHJldHVybjtcbiBcbitcdC8qXG4rXHQgKiBXaXRoIGFuIHVwZGF0ZSBvd25lZCBieSB0aGUgY2FsbGVyIGp1c3QgY2hhbmdlIGl0IGluIHBsYWNlOyBpdCBpc1xuK1x0ICogY29tbWl0dGVkLCBhbmQgdGhlIGFycmF5IHJlc3VtZWQsIGJ5IHdob2V2ZXIgc3RhcnRlZCBpdC4gIFRha2luZ1xuK1x0ICogcS1cdTAwM2VsaW1pdHNfbG9jayBoZXJlIHdvdWxkIG5lc3QgaXQgaW5zaWRlIHJlY29uZmlnX211dGV4IGFuZCB0aGVcbitcdCAqIHN1c3BlbmQsIHdoaWNoIGRlYWRsb2Nrcywgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cbitcdCAqL1xuK1x0aWYgKGxpbSkge1xuK1x0XHRsaW0tXHUwMDNlaW9fb3B0ID0gbGltLVx1MDAzZWlvX21pbiAqIG5yX3N0cmlwZXM7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBDYWxsZWQgZnJvbSB0aGUgc3luYyB0aHJlYWQsIHdoaWNoIG1kX3JlYXBfc3luY190aHJlYWQoKSB3YWl0cyBmb3JcbitcdCAqIHdpdGggcmVjb25maWdfbXV0ZXggaGVsZCwgc28gZG9uJ3Qgd2FpdCBmb3IgcS1cdTAwM2VsaW1pdHNfbG9jayBoZXJlLlxuK1x0ICogaW9fb3B0IGlzIGEgaGludCwgc2tpcHBpbmcgaXQgb24gYSBjb250ZW5kZWQgcGFzcyBpcyBmaW5lLlxuK1x0ICovXG4rXHRpZiAoIW1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKG1kZGV2LCBcdTAwMjZvd24pKVxuK1x0XHRyZXR1cm47XG4rXG4gXHQvKiBkb24ndCBib3RoZXIgdXBkYXRpbmcgaW9fb3B0IGlmIHdlIGNhbid0IHN1c3BlbmQgdGhlIGFycmF5ICovXG4tXHRpZiAobWRkZXZfc3VzcGVuZChtZGRldiwgZmFsc2UpIFx1MDAzYyAwKVxuK1x0aWYgKG1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKSBcdTAwM2MgMCkge1xuK1x0XHRxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlKTtcbiBcdFx0cmV0dXJuO1xuLVx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlKTtcbi1cdGxpbS5pb19vcHQgPSBsaW0uaW9fbWluICogbnJfc3RyaXBlcztcbi1cdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4rXHR9XG4rXHRvd24uaW9fb3B0ID0gb3duLmlvX21pbiAqIG5yX3N0cmlwZXM7XG4rXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZvd24pO1xuIFx0bWRkZXZfcmVzdW1lKG1kZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobWRkZXZfdXBkYXRlX2lvX29wdCk7XG5AQCAtNzQ4Niw3ICs3NjAwLDggQEAgc3RhdGljIGludCBnZXRfZGlza19pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHZvaWQgX191c2VyICogYXJnKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbylcbitpbnQgbWRfYWRkX25ld19kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgKmluZm8sXG4rXHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0c3RydWN0IG1kX3JkZXYgKnJkZXY7XG4gXHRkZXZfdCBkZXYgPSBNS0RFVihpbmZvLVx1MDAzZW1ham9yLGluZm8tXHUwMDNlbWlub3IpO1xuQEAgLTc2MzQsMTEgKzc3NDksMTEgQEAgaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKVxuIFx0XHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdFx0bWRkZXYtXHUwMDNlY2x1c3Rlcl9vcHMtXHUwMDNlYWRkX25ld19kaXNrX2NhbmNlbChtZGRldik7XG4gXHRcdFx0XHRlbHNlXG4tXHRcdFx0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYpO1xuK1x0XHRcdFx0XHRlcnIgPSBhZGRfYm91bmRfcmRldihyZGV2LCBsaW0pO1xuIFx0XHRcdH1cbiBcbiBcdFx0fSBlbHNlIGlmICghZXJyKVxuLVx0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYpO1xuK1x0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYsIGxpbSk7XG4gXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtNzY5MSw3ICs3ODA2LDggQEAgaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIGRldl90IGRldilcbitzdGF0aWMgaW50IGhvdF9yZW1vdmVfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBkZXZfdCBkZXYsXG4rXHRcdFx0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCBtZF9yZGV2ICpyZGV2O1xuIFxuQEAgLTc3MDYsNyArNzgyMiw3IEBAIHN0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIGRldl90IGRldilcbiBcdFx0Z290byBraWNrX3JkZXY7XG4gXG4gXHRjbGVhcl9iaXQoQmxvY2tlZCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4tXHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIHJkZXYpO1xuK1x0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCByZGV2LCBsaW0pO1xuIFxuIFx0aWYgKHJkZXYtXHUwMDNlcmFpZF9kaXNrIFx1MDAzZT0gMClcbiBcdFx0Z290byBidXN5O1xuQEAgLTgyOTEsNiArODQwNywyMiBAQCBzdGF0aWMgaW5saW5lIGludCBtZF9pb2N0bF92YWxpZCh1bnNpZ25lZCBpbnQgY21kKVxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIENvbW1hbmRzIHRoYXQgY2FuIHJlYWNoIC1cdTAwM2Vob3RfYWRkX2Rpc2soKS4gIEFERF9ORVdfRElTSyBvbmx5IGRvZXMgc28gZm9yIGFcbisgKiBqb3VybmFsIGRldmljZSBvciBhIHBlcnNvbmFsaXR5IHdpdGhvdXQgLVx1MDAzZWhvdF9yZW1vdmVfZGlzaywgYnV0IHRoYXQgZGVwZW5kc1xuKyAqIG9uIGRpc2sgaW5mbyBzdGlsbCBpbiB1c2VyIG1lbW9yeSBoZXJlLCBzbyBpdCBpcyBpbmNsdWRlZCBhcyBhIHdob2xlLlxuKyAqL1xuK3N0YXRpYyBib29sIG1kX2lvY3RsX21heV9hZGRfZGlzayh1bnNpZ25lZCBpbnQgY21kKVxuK3tcbitcdHN3aXRjaCAoY21kKSB7XG4rXHRjYXNlIEFERF9ORVdfRElTSzpcbitcdGNhc2UgSE9UX1JFTU9WRV9ESVNLOlxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbit9XG4rXG4gc3RhdGljIGJvb2wgbWRfaW9jdGxfbmVlZF9zdXNwZW5kKHVuc2lnbmVkIGludCBjbWQpXG4ge1xuIFx0c3dpdGNoIChjbWQpIHtcbkBAIC04MzQ2LDYgKzg0NzgsOSBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbiBcdHVuc2lnbmVkIGludCBub2lvX2ZsYWdzID0gMDtcbiBcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IE5VTEw7XG4rXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbXAgPSBOVUxMO1xuIFx0Ym9vbCBzdXNwZW5kO1xuIFxuIFx0ZXJyID0gbWRfaW9jdGxfdmFsaWQoY21kKTtcbkBAIC04Mzk2LDExICs4NTMxLDIwIEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0aWYgKCFtZF9pc19yZHdyKG1kZGV2KSlcbiBcdFx0Zmx1c2hfd29yayhcdTAwMjZtZGRldi1cdTAwM2VzeW5jX3dvcmspO1xuIFxuK1x0LyogcS1cdTAwM2VsaW1pdHNfbG9jayBuZXN0cyBvdXRzaWRlIGJvdGgsIHNlZSBtZF9zdGFydF9zeW5jKCkgKi9cbitcdGlmIChtZF9pb2N0bF9tYXlfYWRkX2Rpc2soY21kKSBcdTAwMjZcdTAwMjYgIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuK1x0XHRxID0gbWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZTtcbitcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbitcdFx0bGltcCA9IFx1MDAyNmxpbTtcbitcdH1cbitcbiBcdHN1c3BlbmQgPSBtZF9pb2N0bF9uZWVkX3N1c3BlbmQoY21kKTtcbiBcdGVyciA9IHN1c3BlbmQgPyBtZGRldl9zdXNwZW5kX2FuZF9sb2NrKG1kZGV2KSA6IG1kZGV2X2xvY2sobWRkZXYpO1xuIFx0aWYgKGVycikge1xuIFx0XHRwcl9kZWJ1ZyhcIm1kOiBpb2N0bCBsb2NrIGludGVycnVwdGVkLCByZWFzb24gJWQsIGNtZCAlZFxcblwiLFxuIFx0XHRcdCBlcnIsIGNtZCk7XG4rXHRcdGlmIChsaW1wKVxuK1x0XHRcdHF1ZXVlX2xpbWl0c19jYW5jZWxfdXBkYXRlKHEpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcdGlmIChzdXNwZW5kKVxuQEAgLTg0NDIsNyArODU4Niw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0XHRnb3RvIHVubG9jaztcbiBcbiBcdGNhc2UgSE9UX1JFTU9WRV9ESVNLOlxuLVx0XHRlcnIgPSBob3RfcmVtb3ZlX2Rpc2sobWRkZXYsIG5ld19kZWNvZGVfZGV2KGFyZykpO1xuK1x0XHRlcnIgPSBob3RfcmVtb3ZlX2Rpc2sobWRkZXYsIG5ld19kZWNvZGVfZGV2KGFyZyksIGxpbXApO1xuIFx0XHRnb3RvIHVubG9jaztcbiBcbiBcdGNhc2UgQUREX05FV19ESVNLOlxuQEAgLTg0NTgsNyArODYwMiw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0XHRcdFx0LyogTmVlZCB0byBjbGVhciByZWFkLW9ubHkgZm9yIHRoaXMgKi9cbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGVsc2Vcbi1cdFx0XHRcdGVyciA9IG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXHUwMDI2aW5mbyk7XG4rXHRcdFx0XHRlcnIgPSBtZF9hZGRfbmV3X2Rpc2sobWRkZXYsIFx1MDAyNmluZm8sIGxpbXApO1xuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuQEAgLTg0OTYsNyArODY0MCw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2aW5mbywgYXJncCwgc2l6ZW9mKGluZm8pKSlcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRlbHNlXG4tXHRcdFx0ZXJyID0gbWRfYWRkX25ld19kaXNrKG1kZGV2LCBcdTAwMjZpbmZvKTtcbitcdFx0XHRlcnIgPSBtZF9hZGRfbmV3X2Rpc2sobWRkZXYsIFx1MDAyNmluZm8sIGxpbXApO1xuIFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbiBcbkBAIC04NTI5LDYgKzg2NzMsOSBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbiBcdCAgICBlcnIgIT0gLUVJTlZBTClcbiBcdFx0bWRkZXYtXHUwMDNlaG9sZF9hY3RpdmUgPSAwO1xuIFxuK1x0aWYgKGxpbXApXG4rXHRcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApO1xuK1xuIFx0aWYgKHN1c3BlbmQpIHtcbiBcdFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZ3MpO1xuIFx0XHRtZGRldl91bmxvY2tfYW5kX3Jlc3VtZShtZGRldik7XG5AQCAtMTAxNjcsOCArMTAzMTQsOCBAQCBzdGF0aWMgaW50IHJlbW92ZV9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnRoaXMpXG4gXHRyZXR1cm4gcmVtb3ZlZDtcbiB9XG4gXG4tc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldixcbi1cdFx0XHRcdCBzdHJ1Y3QgbWRfcmRldiAqdGhpcylcbitzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqdGhpcyxcbitcdFx0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0c3RydWN0IG1kX3JkZXYgKnJkZXY7XG4gXHRpbnQgc3BhcmVzID0gMDtcbkBAIC0xMDE5MSw3ICsxMDMzOCw3IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghdGVzdF9iaXQoSm91cm5hbCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG4gXHRcdFx0cmRldi1cdTAwM2VyZWNvdmVyeV9vZmZzZXQgPSAwO1xuLVx0XHRpZiAobWRkZXYtXHUwMDNlcGVycy1cdTAwM2Vob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHtcbitcdFx0aWYgKG1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByZGV2LCBsaW0pID09IDApIHtcbiBcdFx0XHQvKiBmYWlsdXJlIGhlcmUgaXMgT0sgKi9cbiBcdFx0XHRzeXNmc19saW5rX3JkZXYobWRkZXYsIHJkZXYpO1xuIFx0XHRcdGlmICghdGVzdF9iaXQoSm91cm5hbCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG5AQCAtMTAyMDYsNyArMTAzNTMsOCBAQCBzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxuIFx0cmV0dXJuIHNwYXJlcztcbiB9XG4gXG4tc3RhdGljIGJvb2wgbWRfY2hvb3NlX3N5bmNfYWN0aW9uKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCAqc3BhcmVzKVxuK3N0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcyxcbitcdFx0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdC8qIENoZWNrIGlmIHJlc2hhcGUgaXMgaW4gcHJvZ3Jlc3MgZmlyc3QuICovXG4gXHRpZiAobWRkZXYtXHUwMDNlcmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IpIHtcbkBAIC0xMDIzNCw3ICsxMDM4Miw3IEBAIHN0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcylcbiBcdCAqIGFsc28gcmVtb3ZlZCBhbmQgcmUtYWRkZWQsIHRvIGFsbG93IHRoZSBwZXJzb25hbGl0eSB0byBmYWlsIHRoZVxuIFx0ICogcmUtYWRkLlxuIFx0ICovXG4tXHQqc3BhcmVzID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMKTtcbitcdCpzcGFyZXMgPSByZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIE5VTEwsIGxpbSk7XG4gXHRpZiAoKnNwYXJlcyB8fCB0ZXN0X2JpdChNRF9SRUNPVkVSWV9MQVpZX1JFQ09WRVIsIFx1MDAyNm1kZGV2LVx1MDAzZXJlY292ZXJ5KSkge1xuIFx0XHRjbGVhcl9iaXQoTURfUkVDT1ZFUllfU1lOQywgXHUwMDI2bWRkZXYtXHUwMDNlcmVjb3ZlcnkpO1xuIFx0XHRjbGVhcl9iaXQoTURfUkVDT1ZFUllfQ0hFQ0ssIFx1MDAyNm1kZGV2LVx1MDAzZXJlY292ZXJ5KTtcbkBAIC0xMDI1Niw2ICsxMDQwNCw5IEBAIHN0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcylcbiBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXG4ge1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IGNvbnRhaW5lcl9vZih3cywgc3RydWN0IG1kZGV2LCBzeW5jX3dvcmspO1xuK1x0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMO1xuK1x0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDtcbiBcdGludCBzcGFyZXMgPSAwO1xuIFx0Ym9vbCBzdXNwZW5kID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBpbnQgbm9pb19mbGFncyA9IDA7XG5AQCAtMTAyNjcsNiArMTA0MTgsMTcgQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxuIFx0ICovXG4gXHRpZiAoKG1kZGV2LVx1MDAzZXJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yIHx8ICFtZF9pc19yZHdyKG1kZGV2KSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbWRfc3BhcmVzX25lZWRfY2hhbmdlKG1kZGV2KSkge1xuK1x0XHQvKlxuK1x0XHQgKiBBZGRpbmcgYSBzcGFyZSBiZWxvdyBzdGFja3MgaXRzIGxpbWl0cywgd2hpY2ggbmVlZHNcbitcdFx0ICogcS1cdTAwM2VsaW1pdHNfbG9jay4gIFRha2UgaXQgYmVmb3JlIHN1c3BlbmRpbmc6IGl0cyBob2xkZXJcbitcdFx0ICogd2FpdHMgaW4gYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIGZvciBJL08gdGhhdFxuK1x0XHQgKiBtZGRldi1cdTAwM2VzdXNwZW5kZWQgaG9sZHMgYmFjaywgc28gdGhlIG90aGVyIG9yZGVyIGRlYWRsb2Nrcy5cbitcdFx0ICovXG4rXHRcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpKSB7XG4rXHRcdFx0cSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4rXHRcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbitcdFx0XHRsaW1wID0gXHUwMDI2bGltO1xuK1x0XHR9XG4gXHRcdHN1c3BlbmQgPSB0cnVlO1xuIFx0XHRtZGRldl9zdXNwZW5kKG1kZGV2LCBmYWxzZSk7XG4gXHRcdG5vaW9fZmxhZ3MgPSBtZW1hbGxvY19ub2lvX3NhdmUoKTtcbkBAIC0xMDI4MSw2ICsxMDQ0MywxMiBAQCBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXG4gXHRpZiAoIXN1c3BlbmQgXHUwMDI2XHUwMDI2IChtZGRldi1cdTAwM2VyZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvciB8fCAhbWRfaXNfcmR3cihtZGRldikpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG1kX3NwYXJlc19uZWVkX2NoYW5nZShtZGRldikpIHtcbiBcdFx0bWRkZXZfdW5sb2NrKG1kZGV2KTtcbitcdFx0Lyogc2VlIGFib3ZlOiBxLVx1MDAzZWxpbWl0c19sb2NrIG5lc3RzIG91dHNpZGUgYm90aCAqL1xuK1x0XHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuK1x0XHRcdHEgPSBtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlO1xuK1x0XHRcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XG4rXHRcdFx0bGltcCA9IFx1MDAyNmxpbTtcbitcdFx0fVxuIFx0XHRtZGRldl9zdXNwZW5kX2FuZF9sb2NrX25vaW50cihtZGRldik7XG4gXHRcdHN1c3BlbmQgPSB0cnVlO1xuIFx0XHRub2lvX2ZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG5AQCAtMTAyOTQsMTEgKzEwNDYyLDExIEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cylcbiBcdFx0ICogQXMgd2Ugb25seSBhZGQgZGV2aWNlcyB0aGF0IGFyZSBhbHJlYWR5IGluLXN5bmMsIHdlIGNhblxuIFx0XHQgKiBhY3RpdmF0ZSB0aGUgc3BhcmVzIGltbWVkaWF0ZWx5LlxuIFx0XHQgKi9cbi1cdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMKTtcbitcdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMLCBsaW1wKTtcbiBcdFx0Z290byBub3RfcnVubmluZztcbiBcdH1cbiBcbi1cdGlmICghbWRfY2hvb3NlX3N5bmNfYWN0aW9uKG1kZGV2LCBcdTAwMjZzcGFyZXMpKVxuK1x0aWYgKCFtZF9jaG9vc2Vfc3luY19hY3Rpb24obWRkZXYsIFx1MDAyNnNwYXJlcywgbGltcCkpXG4gXHRcdGdvdG8gbm90X3J1bm5pbmc7XG4gXG4gXHRpZiAoIW1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlc3luY19yZXF1ZXN0KVxuQEAgLTEwMzI5LDYgKzEwNDk3LDggQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxuIFx0ICogICAgIGh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MjAwXG4gXHQgKiBUaGVyZWZvcmUsIHVzZSBfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpLlxuIFx0ICovXG4rXHRpZiAobGltcClcbitcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltcCk7XG4gXHRpZiAoc3VzcGVuZCkge1xuIFx0XHRtZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFncyk7XG4gXHRcdF9fbWRkZXZfcmVzdW1lKG1kZGV2LCBmYWxzZSk7XG5AQCAtMTAzNTEsNiArMTA1MjEsOCBAQCBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXG4gXHQgKiAgICAgaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgyMDBcbiBcdCAqIFRoZXJlZm9yZSwgdXNlIF9fbWRkZXZfcmVzdW1lKG1kZGV2LCBmYWxzZSkuXG4gXHQgKi9cbitcdGlmIChsaW1wKVxuK1x0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcbiBcdGlmIChzdXNwZW5kKSB7XG4gXHRcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWdzKTtcbiBcdFx0X19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKTtcbkBAIC0xMDc5Myw2ICsxMDk2NSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG1kX2luaXQodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBjaGVja19zYl9jaGFuZ2VzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIHtcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFx0c3RydWN0IG1kcF9zdXBlcmJsb2NrXzEgKnNiID0gcGFnZV9hZGRyZXNzKHJkZXYtXHUwMDNlc2JfcGFnZSk7XG4gXHRzdHJ1Y3QgbWRfcmRldiAqcmRldjIsICp0bXA7XG4gXHRpbnQgcm9sZSwgcmV0O1xuQEAgLTEwODQ5LDcgKzExMDIyLDI0IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3NiX2NoYW5nZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4gXHRcdFx0XHRcdHJkZXYyLVx1MDAzZXNhdmVkX3JhaWRfZGlzayA9IC0xO1xuIFx0XHRcdFx0ZWxzZVxuIFx0XHRcdFx0XHRyZGV2Mi1cdTAwM2VzYXZlZF9yYWlkX2Rpc2sgPSByb2xlO1xuLVx0XHRcdFx0cmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCByZGV2Mik7XG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogcmVjb25maWdfbXV0ZXggaXMgaGVsZCwgc28gZG9uJ3Qgd2FpdCBmb3JcbitcdFx0XHRcdCAqIHEtXHUwMDNlbGltaXRzX2xvY2s7IE1EX1JFQ09WRVJZX05FRURFRCBiZWxvd1xuK1x0XHRcdFx0ICogbGVhdmVzIGEgc2tpcHBlZCBhZGQgdG8gbWRfc3RhcnRfc3luYygpLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRpZiAobWRkZXZfc3RhY2tfbGltaXRzX3RyeWxvY2sobWRkZXYsIFx1MDAyNmxpbSkpIHtcbitcdFx0XHRcdFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPVxuK1x0XHRcdFx0XHRcdG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4rXG4rXHRcdFx0XHRcdHJldCA9IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldixcbitcdFx0XHRcdFx0XHRcdFx0ICAgIHJkZXYyLCBcdTAwMjZsaW0pO1xuK1x0XHRcdFx0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBcdTAwMjZsaW0pO1xuK1x0XHRcdFx0fSBlbHNlIGlmIChtZGRldl9pc19kbShtZGRldikpIHtcbitcdFx0XHRcdFx0cmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgcmRldjIsIE5VTEwpO1xuK1x0XHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdFx0cmV0ID0gcmVtb3ZlX3NwYXJlcyhtZGRldiwgcmRldjIpO1xuK1x0XHRcdFx0fVxuIFx0XHRcdFx0cHJfaW5mbyhcIkFjdGl2YXRlZCBzcGFyZTogJXBnXFxuXCIsXG4gXHRcdFx0XHRcdHJkZXYyLVx1MDAzZWJkZXYpO1xuIFx0XHRcdFx0Lyogd2FrZXVwIG1kZGV2LVx1MDAzZXRocmVhZCBoZXJlLCBzbyBhcnJheSBjb3VsZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaFxuaW5kZXggYjZkMmU4OTI5YTBmOS4uY2VjYThjZmNkY2I5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQuaFxuKysrIGIvZHJpdmVycy9tZC9tZC5oXG5AQCAtNzY1LDcgKzc2NSw4IEBAIHN0cnVjdCBtZF9wZXJzb25hbGl0eVxuIFx0ICogaWYgYXBwcm9wcmlhdGUsIGFuZCBzaG91bGQgYWJvcnQgcmVjb3ZlcnkgaWYgbmVlZGVkXG4gXHQgKi9cbiBcdHZvaWQgKCplcnJvcl9oYW5kbGVyKShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7XG4tXHRpbnQgKCpob3RfYWRkX2Rpc2spIChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7XG4rXHRpbnQgKCpob3RfYWRkX2Rpc2spKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIFx0aW50ICgqaG90X3JlbW92ZV9kaXNrKSAoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xuIFx0aW50ICgqc3BhcmVfYWN0aXZlKSAoc3RydWN0IG1kZGV2ICptZGRldik7XG4gXHRzZWN0b3JfdCAoKnN5bmNfcmVxdWVzdCkoc3RydWN0IG1kZGV2ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLFxuQEAgLTEwNDEsMTMgKzEwNDIsMTcgQEAgc3RydWN0IG1kdV9kaXNrX2luZm9fcztcbiBleHRlcm4gaW50IG1kcF9tYWpvcjtcbiB2b2lkIG1kX2F1dG9zdGFydF9hcnJheXMoaW50IHBhcnQpO1xuIGludCBtZF9zZXRfYXJyYXlfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2FycmF5X2luZm9fcyAqaW5mbyk7XG4taW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKTtcbitpbnQgbWRfYWRkX25ld19kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgKmluZm8sXG4rXHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIGludCBkb19tZF9ydW4oc3RydWN0IG1kZGV2ICptZGRldik7XG4gI2RlZmluZSBNRERFVl9TVEFDS19JTlRFR1JJVFlcdCgxdSBcdTAwM2NcdTAwM2MgMClcbiBpbnQgbWRkZXZfc3RhY2tfcmRldl9saW1pdHMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBtZGRldl9zdGFja19uZXdfcmRldihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7XG4tdm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzKTtcbitpbnQgbWRkZXZfc3RhY2tfcmRldl9pbnRvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTtcbit2b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMsXG4rXHRcdFx0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtZF9mb3BzO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuY1xuaW5kZXggZjA2NDZmYjI0MzcxZi4uZGQzNDhiNTY5NWQwNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuY1xuKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jXG5AQCAtMTg5OCw3ICsxODk4LDggQEAgc3RhdGljIGJvb2wgcmFpZDFfcmVtb3ZlX2NvbmYoc3RydWN0IHIxY29uZiAqY29uZiwgaW50IGRpc2spXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGludCByYWlkMV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbitzdGF0aWMgaW50IHJhaWQxX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCByMWNvbmYgKmNvbmYgPSBtZGRldi1cdTAwM2Vwcml2YXRlO1xuIFx0aW50IGVyciA9IC1FRVhJU1Q7XG5AQCAtMTkyMyw3ICsxOTI0LDEwIEBAIHN0YXRpYyBpbnQgcmFpZDFfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4gXHRmb3IgKG1pcnJvciA9IGZpcnN0OyBtaXJyb3IgXHUwMDNjPSBsYXN0OyBtaXJyb3IrKykge1xuIFx0XHRwID0gY29uZi1cdTAwM2VtaXJyb3JzICsgbWlycm9yO1xuIFx0XHRpZiAoIXAtXHUwMDNlcmRldikge1xuLVx0XHRcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcbitcdFx0XHRpZiAobGltKVxuK1x0XHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfcmRldl9pbnRvKG1kZGV2LCByZGV2LCBsaW0pO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuY1xuaW5kZXggMTA5M2M3OThkOWRkZS4uNjQxNjE5MzI4YTZjNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmNcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcbkBAIC0yMDk1LDcgKzIwOTUsOCBAQCBzdGF0aWMgaW50IHJhaWQxMF9zcGFyZV9hY3RpdmUoc3RydWN0IG1kZGV2ICptZGRldilcbiBcdHJldHVybiBjb3VudDtcbiB9XG4gXG4tc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4rc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsXG4rXHRcdFx0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCByMTBjb25mICpjb25mID0gbWRkZXYtXHUwMDNlcHJpdmF0ZTtcbiBcdGludCBlcnIgPSAtRUVYSVNUO1xuQEAgLTIxMzAsNyArMjEzMSwxMCBAQCBzdGF0aWMgaW50IHJhaWQxMF9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRlcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7XG4rXHRcdGlmIChsaW0pXG4rXHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfcmRldl9pbnRvKG1kZGV2LCByZGV2LCBsaW0pO1xuK1x0XHRlbHNlXG4rXHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdHAtXHUwMDNlaGVhZF9wb3NpdGlvbiA9IDA7XG5AQCAtMjE0Nyw3ICsyMTUxLDEwIEBAIHN0YXRpYyBpbnQgcmFpZDEwX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIFx0XHRjbGVhcl9iaXQoSW5fc3luYywgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4gXHRcdHNldF9iaXQoUmVwbGFjZW1lbnQsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuIFx0XHRyZGV2LVx1MDAzZXJhaWRfZGlzayA9IHJlcGxfc2xvdDtcbi1cdFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xuK1x0XHRpZiAobGltKVxuK1x0XHRcdGVyciA9IG1kZGV2X3N0YWNrX3JkZXZfaW50byhtZGRldiwgcmRldiwgbGltKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRjb25mLVx1MDAzZWZ1bGxzeW5jID0gMTtcbkBAIC00NDg0LDcgKzQ0OTEsNyBAQCBzdGF0aWMgaW50IHJhaWQxMF9zdGFydF9yZXNoYXBlKHN0cnVjdCBtZGRldiAqbWRkZXYpXG4gXHRcdHJkZXZfZm9yX2VhY2gocmRldiwgbWRkZXYpXG4gXHRcdFx0aWYgKHJkZXYtXHUwMDNlcmFpZF9kaXNrIFx1MDAzYyAwIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAhdGVzdF9iaXQoRmF1bHR5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkge1xuLVx0XHRcdFx0aWYgKHJhaWQxMF9hZGRfZGlzayhtZGRldiwgcmRldikgPT0gMCkge1xuK1x0XHRcdFx0aWYgKHJhaWQxMF9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkge1xuIFx0XHRcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2sgXHUwMDNlPVxuIFx0XHRcdFx0XHQgICAgY29uZi1cdTAwM2VwcmV2LnJhaWRfZGlza3MpXG4gXHRcdFx0XHRcdFx0c2V0X2JpdChJbl9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbkBAIC00OTIxLDcgKzQ5MjgsNyBAQCBzdGF0aWMgdm9pZCBlbmRfcmVzaGFwZShzdHJ1Y3QgcjEwY29uZiAqY29uZilcbiBcdGNvbmYtXHUwMDNlcmVzaGFwZV9zYWZlID0gTWF4U2VjdG9yO1xuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNvbmYtXHUwMDNlZGV2aWNlX2xvY2spO1xuIFxuLVx0bWRkZXZfdXBkYXRlX2lvX29wdChjb25mLVx1MDAzZW1kZGV2LCByYWlkMTBfbnJfc3RyaXBlcyhjb25mKSk7XG4rXHRtZGRldl91cGRhdGVfaW9fb3B0KGNvbmYtXHUwMDNlbWRkZXYsIHJhaWQxMF9ucl9zdHJpcGVzKGNvbmYpLCBOVUxMKTtcbiBcdGNvbmYtXHUwMDNlZnVsbHN5bmMgPSAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmNcbmluZGV4IGI5MTU0NWNlMDkwZGUuLjIyNzU5YzYzMWM0ZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmNcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuY1xuQEAgLTcyODgsNiArNzI4OCw5IEBAIHN0YXRpYyBzc2l6ZV90XG4gcmFpZDVfc3RvcmVfc2tpcF9jb3B5KHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IHI1Y29uZiAqY29uZjtcbitcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gTlVMTDtcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuK1x0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7XG4gXHR1bnNpZ25lZCBsb25nIG5ldztcbiBcdGludCBlcnI7XG4gXG5AQCAtNzI5NywyMyArNzMwMCwzMyBAQCByYWlkNV9zdG9yZV9za2lwX2NvcHkoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRuZXcgPSAhIW5ldztcbiBcbitcdC8qIHEtXHUwMDNlbGltaXRzX2xvY2sgbmVzdHMgb3V0c2lkZSBib3RoLCBzZWUgbWRfc3RhcnRfc3luYygpICovXG4rXHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuK1x0XHRxID0gbWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZTtcbitcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbitcdFx0bGltcCA9IFx1MDAyNmxpbTtcbitcdH1cbitcbiBcdGVyciA9IG1kZGV2X3N1c3BlbmRfYW5kX2xvY2sobWRkZXYpO1xuLVx0aWYgKGVycilcbitcdGlmIChlcnIpIHtcbitcdFx0aWYgKGxpbXApXG4rXHRcdFx0cXVldWVfbGltaXRzX2NhbmNlbF91cGRhdGUocSk7XG4gXHRcdHJldHVybiBlcnI7XG4rXHR9XG4gXHRjb25mID0gbWRkZXYtXHUwMDNlcHJpdmF0ZTtcbiBcdGlmICghY29uZilcbiBcdFx0ZXJyID0gLUVOT0RFVjtcbiBcdGVsc2UgaWYgKG5ldyAhPSBjb25mLVx1MDAzZXNraXBfY29weSkge1xuLVx0XHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4tXHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbi1cbiBcdFx0Y29uZi1cdTAwM2Vza2lwX2NvcHkgPSBuZXc7XG4tXHRcdGlmIChuZXcpXG4tXHRcdFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1NUQUJMRV9XUklURVM7XG4tXHRcdGVsc2Vcbi1cdFx0XHRsaW0uZmVhdHVyZXMgXHUwMDI2PSB+QkxLX0ZFQVRfU1RBQkxFX1dSSVRFUztcbi1cdFx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgXHUwMDI2bGltKTtcbitcdFx0aWYgKGxpbXApIHtcbitcdFx0XHRpZiAobmV3KVxuK1x0XHRcdFx0bGltcC1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9TVEFCTEVfV1JJVEVTO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGxpbXAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+QkxLX0ZFQVRfU1RBQkxFX1dSSVRFUztcbitcdFx0fVxuIFx0fVxuK1x0aWYgKGxpbXApXG4rXHRcdGVyciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApID86IGVycjtcbiBcdG1kZGV2X3VubG9ja19hbmRfcmVzdW1lKG1kZGV2KTtcbiBcdHJldHVybiBlcnIgPzogbGVuO1xuIH1cbkBAIC04NDQxLDcgKzg0NTQsOCBAQCBzdGF0aWMgaW50IHJhaWQ1X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCByYWlkNV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbitzdGF0aWMgaW50IHJhaWQ1X2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCByNWNvbmYgKmNvbmYgPSBtZGRldi1cdTAwM2Vwcml2YXRlO1xuIFx0aW50IHJldCwgZXJyID0gLUVFWElTVDtcbkBAIC04NzI4LDcgKzg3NDIsNyBAQCBzdGF0aWMgaW50IHJhaWQ1X3N0YXJ0X3Jlc2hhcGUoc3RydWN0IG1kZGV2ICptZGRldilcbiBcdFx0cmRldl9mb3JfZWFjaChyZGV2LCBtZGRldilcbiBcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2sgXHUwMDNjIDAgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICF0ZXN0X2JpdChGYXVsdHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdFx0XHRpZiAocmFpZDVfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHtcbitcdFx0XHRcdGlmIChyYWlkNV9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkge1xuIFx0XHRcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2tcbiBcdFx0XHRcdFx0ICAgIFx1MDAzZT0gY29uZi1cdTAwM2VwcmV2aW91c19yYWlkX2Rpc2tzKVxuIFx0XHRcdFx0XHRcdHNldF9iaXQoSW5fc3luYywgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG5AQCAtODc5OSw3ICs4ODEzLDcgQEAgc3RhdGljIHZvaWQgZW5kX3Jlc2hhcGUoc3RydWN0IHI1Y29uZiAqY29uZilcbiBcdFx0d2FrZV91cChcdTAwMjZjb25mLVx1MDAzZXdhaXRfZm9yX3Jlc2hhcGUpO1xuIFxuIFx0XHRtZGRldl91cGRhdGVfaW9fb3B0KGNvbmYtXHUwMDNlbWRkZXYsXG4tXHRcdFx0Y29uZi1cdTAwM2VyYWlkX2Rpc2tzIC0gY29uZi1cdTAwM2VtYXhfZGVncmFkZWQpO1xuK1x0XHRcdGNvbmYtXHUwMDNlcmFpZF9kaXNrcyAtIGNvbmYtXHUwMDNlbWF4X2RlZ3JhZGVkLCBOVUxMKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDRmNzkwNWMzNDEyYjguLmI3NWU4NTI5MWUyOTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTEwMSw2ICsxMTAxLDMyIEBAIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4gXHRtdXRleF9sb2NrKFx1MDAyNnEtXHUwMDNlbGltaXRzX2xvY2spO1xuIFx0cmV0dXJuIHEtXHUwMDNlbGltaXRzO1xuIH1cbitcbisvKipcbisgKiBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlX3RyeWxvY2sgLSB0cnkgdG8gc3RhcnQgYW4gYXRvbWljIHVwZGF0ZSBvZiBxdWV1ZVxuKyAqXHRsaW1pdHNcbisgKiBAcTpcdFx0cXVldWUgdG8gdXBkYXRlXG4rICogQGxpbTpcdHJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBsaW1pdHMgb24gc3VjY2Vzc1xuKyAqXG4rICogTGlrZSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKCksIGJ1dCBmYWlscyBpbnN0ZWFkIG9mIHdhaXRpbmcgd2hlbiBhbm90aGVyXG4rICogdXBkYXRlIGlzIGluIGZsaWdodC4gIEZvciBjYWxsZXJzIHRoYXQgbXVzdCBub3QgYmxvY2sgb24gcS1cdTAwM2VsaW1pdHNfbG9ja1xuKyAqIGJlY2F1c2UgdGhleSBob2xkIHNvbWV0aGluZyBpdHMgY3VycmVudCBvd25lciBpcyB3YWl0aW5nIGZvci5cbisgKlxuKyAqIENvbnRleHQ6IHByb2Nlc3MgY29udGV4dC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbitxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlX3RyeWxvY2soc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4rXHRcdFx0XHQgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbitcdF9fY29uZF9hY3F1aXJlcyh0cnVlLCBcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKVxuK3tcbitcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0KmxpbSA9IHEtXHUwMDNlbGltaXRzO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIGludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4gXHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkgX19yZWxlYXNlcyhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKTtcbiBpbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoxMzo0OS43ODMzMDc4NDNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTYwNjg2OTk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBFdmFsdWF0aW9uOiBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgaXQgaW50cm9kdWNlcyBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCB3YXJyYW50aW5nIGEgS01TQU4gcnVuLiBJdCBzZWVtcyB0aGUgcGF0Y2ggaXMgcHJpbWFyaWx5IGZvY3VzZWQgb24gYWRkcmVzc2luZyBsb2NraW5nIG9yZGVyIGFuZCBkZWFkbG9jayBpc3N1ZXMgd2l0aGluIHRoZSBNRCBSQUlEIGNvZGUsIHBhcnRpY3VsYXJseSBhcm91bmQgYHEtXHUwMDNlbGltaXRzX2xvY2tgIHdoZW4gdXBkYXRpbmcgcXVldWUgbGltaXRzLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgY2hhbmdpbmcgaG93IGBzdHJ1Y3QgcXVldWVfbGltaXRzYCBpcyBoYW5kbGVkLiBJdCBhcHBlYXJzIHRoYXQgaW5zdGVhZCBvZiBkaXJlY3RseSBtYW5pcHVsYXRpbmcgYHEtXHUwMDNlbGltaXRzYCB3aXRoaW4gY3JpdGljYWwgc2VjdGlvbnMgd2hlcmUgZGVhZGxvY2tzIGFyZSBwb3NzaWJsZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NhbCBjb3B5IChgbGltYCkgb2YgYHEtXHUwMDNlbGltaXRzYCB2aWEgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAsIHdoaWNoIGVzc2VudGlhbGx5IGNvcGllcyB0aGUgY29udGVudHMuIFRoaXMgbG9jYWwgY29weSBpcyB0aGVuIHBhc3NlZCB0byBmdW5jdGlvbnMgbGlrZSBgaG90X2FkZF9kaXNrYCwgYHJlbW92ZV9hbmRfYWRkX3NwYXJlc2AsIGV0Yy4gQ3J1Y2lhbGx5LCB0aGUgdXBkYXRlcyBhcmUgdGhlbiBjb21taXR0ZWQgYmFjayB2aWEgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKClgLiBJZiBhIHRyeSBsb2NrIGZhaWxzLCB0aGUgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4uXG5cbkkndmUgbWV0aWN1bG91c2x5IHJldmlld2VkIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdmFyaWFibGUgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gSSBleGFtaW5lZCB0aGUgaW5zdGFuY2VzIHdoZXJlIGBzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtgIGFuZCBgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7YCBhcmUgdXNlZCBhY3Jvc3MgdGhlIHBhdGNoZWQgZnVuY3Rpb25zLiBJbiBlYWNoIGluc3RhbmNlIChgcmRldl9hdHRyX3N0b3JlYCwgYG1kX2lvY3RsYCwgYG1kX3N0YXJ0X3N5bmNgLCBgY2hlY2tfc2JfY2hhbmdlc2AsIGBtZGRldl91cGRhdGVfaW9fb3B0YCwgYHJhaWQ1X3N0b3JlX3NraXBfY29weWAgYW5kIGBtZGRldl9zdGFja19yZGV2X2ludG9gKSwgYGxpbWAgaXMgYWx3YXlzIGluaXRpYWxpemVkICpiZWZvcmUqIGl0J3MgcmVmZXJlbmNlZCwgcHJpbWFyaWx5IGJ5IGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClgLCB3aGljaCByZXR1cm5zIGBxLVx1MDAzZWxpbWl0c2AgYnkgdmFsdWUuICBFdmVuIHdoZW4gYSBwb2ludGVyIHRvIGBsaW1gIGlzIHBhc3NlZCwgaXQgaXMgaW5pdGlhbGl6ZWQuIEluIHRoZSBpbnN0YW5jZXMgd2hlcmUgdGhlIHRyeWxvY2sgaXMgdXNlZCwgaXQgZmFpbHMgYmVmb3JlIHVzYWdlLiBgbWRkZXZfc3RhY2tfcmRldl9pbnRvYCBjb3BpZXMgdGhlIHBhc3NlZC1pbiBgbGltYC4gVGhlIGNvcHkgaXMgdXNlZC5cblxuSSBzZWUgbm8gc2NlbmFyaW8gd2hlcmUgdW5pbml0aWFsaXplZCBkYXRhIGlzIGJlaW5nIHJlYWQgb3IgbGVha2VkLiBUaGUgcGF0Y2ggYXBwZWFycyB0byBiZSBhIGNhcmVmdWwgcmVmYWN0b3JpbmcsIGltcHJvdmluZyBsb2NraW5nIGFuZCB0aHVzIHJlbGlhYmlsaXR5LiBUaGUgY3JpdGljYWwgZGF0YSBmbG93IGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGxpbWAgc3RydWN0IGFyZSBzYWZlLCBhbmQgdGhlcmUgYXJlIG5vIGNvcGllcyB0byB1c2VyIHNwYWNlIHRoYXQgYXJlIG1vZGlmaWVkLlxuXG5Db25zaWRlcmluZyB0aGlzIGFuYWx5c2lzLCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCAqZG9lcyBub3QqIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoIHNwZWNpZmljIHR5cGVzIG9mIG1lbW9yeSBlcnJvcnMgdGhhdCBhcmUgbm90IGFkZHJlc3NlZCBpbiB0aGlzIHBhdGNoLiAgR2l2ZW4gdGhpcyBpcyBhIHJlZmFjdG9yLCBLQVNBTiwgTE9DS0RFUCBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgdGhlIHJpZ2h0IHRvb2xzIGhlcmUuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSdtIGNvbmZpZGVudCBpbiB0aGlzIGV2YWx1YXRpb24uIExldCdzIGZsYWcgdGhpcyBhcyBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU3NywiT3V0cHV0VG9rZW5zIjoyNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MTM6NTkuMzkwMTc5OTg4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUQgKHNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSBhbmQgYmxvY2sgbGF5ZXIgaGVscGVyIGZ1bmN0aW9ucyB0byByZXN0cnVjdHVyZSBob3cgcXVldWUgbGltaXRzIGFyZSB1cGRhdGVkIGFjcm9zcyBtZC1saW5lYXIsIHJhaWQxLCByYWlkMTAsIGFuZCByYWlkNSBhcnJheXMuIFNwZWNpZmljYWxseSwgaXQgcGFzc2VzIGFuIGV4aXN0aW5nIG9yIG5ld2x5IHN0YXJ0ZWQgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIHRocm91Z2ggdmFyaW91cyBob3QtYWRkL3JlbW92ZS91cGRhdGUgY2FsbCBwYXRocyB0byBhdm9pZCBsb2NrLWludmVyc2lvbiBkZWFkbG9ja3MgYmV0d2VlbiBgcS1cXHUwMDNlbGltaXRzX2xvY2tgLCBhcnJheSBzdXNwZW5zaW9uLCBhbmQgYHJlY29uZmlnX211dGV4YC5cXG5cXG5BbGwgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIGluc3RhbmNlcyBvbiB0aGUgc3RhY2sgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKHZpYSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCwgd2hpY2ggcmV0dXJucyBgcS1cXHUwMDNlbGltaXRzYCBieSB2YWx1ZSwgb3IgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jaygpYCB3aGljaCBwb3B1bGF0ZXMgYCpsaW1gKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgcmVhZCwgcGFzc2VkIHRvIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCBvciByZWZlcmVuY2Uvc3RhdGUgZXJyb3JzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWdnZXJzIHJhdGhlciB0aGFuIEtNU0FOLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyB0aGVyZWZvcmUgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUQgKHNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSBhbmQgYmxvY2sgbGF5ZXIgaGVscGVyIGZ1bmN0aW9ucyB0byByZXN0cnVjdHVyZSBob3cgcXVldWUgbGltaXRzIGFyZSB1cGRhdGVkIGFjcm9zcyBtZC1saW5lYXIsIHJhaWQxLCByYWlkMTAsIGFuZCByYWlkNSBhcnJheXMuIFNwZWNpZmljYWxseSwgaXQgcGFzc2VzIGFuIGV4aXN0aW5nIG9yIG5ld2x5IHN0YXJ0ZWQgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIHRocm91Z2ggdmFyaW91cyBob3QtYWRkL3JlbW92ZS91cGRhdGUgY2FsbCBwYXRocyB0byBhdm9pZCBsb2NrLWludmVyc2lvbiBkZWFkbG9ja3MgYmV0d2VlbiBgcS1cXHUwMDNlbGltaXRzX2xvY2tgLCBhcnJheSBzdXNwZW5zaW9uLCBhbmQgYHJlY29uZmlnX211dGV4YC5cXG5cXG5BbGwgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIGluc3RhbmNlcyBvbiB0aGUgc3RhY2sgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKHZpYSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCwgd2hpY2ggcmV0dXJucyBgcS1cXHUwMDNlbGltaXRzYCBieSB2YWx1ZSwgb3IgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jaygpYCB3aGljaCBwb3B1bGF0ZXMgYCpsaW1gKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgcmVhZCwgcGFzc2VkIHRvIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCBvciByZWZlcmVuY2Uvc3RhdGUgZXJyb3JzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWdnZXJzIHJhdGhlciB0aGFuIEtNU0FOLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyB0aGVyZWZvcmUgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5mkd9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 18:11:31 +0000 UTC FinishedAt: 2026-09-07 18:14:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_MD", "MD_RAID1", "MD_RAID10", "MD_RAID456", "MD_LINEAR", "DM_RAID" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_MD", "MD_RAID1", "MD_RAID10", "MD_RAID456", "MD_LINEAR", "DM_RAID" ], "series_id": "7d257b5c-4433-41a0-b63e-dadc753ea572" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "mddev_stack_rdev_into", "mddev_update_io_opt", "md_add_new_disk", "remove_and_add_spares", "rdev_attr_store", "md_start_sync", "raid1_add_disk", "raid10_add_disk", "raid5_add_disk", "raid5_store_skip_copy", "linear_add" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTUQmIzM0OywKICAgICYjMzQ7TURfUkFJRDEmIzM0OywKICAgICYjMzQ7TURfUkFJRDEwJiMzNDssCiAgICAmIzM0O01EX1JBSUQ0NTYmIzM0OywKICAgICYjMzQ7TURfTElORUFSJiMzNDssCiAgICAmIzM0O0RNX1JBSUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZGRldl9zdGFja19yZGV2X2ludG8mIzM0OywKICAgICYjMzQ7bWRkZXZfdXBkYXRlX2lvX29wdCYjMzQ7LAogICAgJiMzNDttZF9hZGRfbmV3X2Rpc2smIzM0OywKICAgICYjMzQ7cmVtb3ZlX2FuZF9hZGRfc3BhcmVzJiMzNDssCiAgICAmIzM0O3JkZXZfYXR0cl9zdG9yZSYjMzQ7LAogICAgJiMzNDttZF9zdGFydF9zeW5jJiMzNDssCiAgICAmIzM0O3JhaWQxX2FkZF9kaXNrJiMzNDssCiAgICAmIzM0O3JhaWQxMF9hZGRfZGlzayYjMzQ7LAogICAgJiMzNDtyYWlkNV9hZGRfZGlzayYjMzQ7LAogICAgJiMzNDtyYWlkNV9zdG9yZV9za2lwX2NvcHkmIzM0OywKICAgICYjMzQ7bGluZWFyX2FkZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgc3Vic3lzdGVtIGFuZCBibG9jayBsYXllciBoZWxwZXIgZnVuY3Rpb25zIHRvIHJlc3RydWN0dXJlIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIHVwZGF0ZWQgYWNyb3NzIG1kLWxpbmVhciwgcmFpZDEsIHJhaWQxMCwgYW5kIHJhaWQ1IGFycmF5cy4gU3BlY2lmaWNhbGx5LCBpdCBwYXNzZXMgYW4gZXhpc3Rpbmcgb3IgbmV3bHkgc3RhcnRlZCBgc3RydWN0IHF1ZXVlX2xpbWl0c2AgdGhyb3VnaCB2YXJpb3VzIGhvdC1hZGQvcmVtb3ZlL3VwZGF0ZSBjYWxsIHBhdGhzIHRvIGF2b2lkIGxvY2staW52ZXJzaW9uIGRlYWRsb2NrcyBiZXR3ZWVuIGBxLVx1MDAzZWxpbWl0c19sb2NrYCwgYXJyYXkgc3VzcGVuc2lvbiwgYW5kIGByZWNvbmZpZ19tdXRleGAuXG5cbkFsbCBgc3RydWN0IHF1ZXVlX2xpbWl0c2AgaW5zdGFuY2VzIG9uIHRoZSBzdGFjayBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAodmlhIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClgLCB3aGljaCByZXR1cm5zIGBxLVx1MDAzZWxpbWl0c2AgYnkgdmFsdWUsIG9yIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlX3RyeWxvY2soKWAgd2hpY2ggcG9wdWxhdGVzIGAqbGltYCkuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgYnl0ZXMgYXJlIHJlYWQsIHBhc3NlZCB0byBjb250cm9sIGZsb3csIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBkZWFkbG9ja3MsIGxvY2tpbmcgb3JkZXIgdmlvbGF0aW9ucywgb3IgcmVmZXJlbmNlL3N0YXRlIGVycm9ycywgd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4va2VybmVsIGRlYnVnZ2VycyByYXRoZXIgdGhhbiBLTVNBTi4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgdGhlcmVmb3JlIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RydWN0dXJlcyBsb2NrIGFjcXVpc2l0aW9uIGFuZCBxdWV1ZSBsaW1pdHMgcHJvcGFnYXRpb24gaW4gdGhlIE1EIChzb2Z0d2FyZSBSQUlEKSBsYXllciB0byBwcmV2ZW50IGRlYWRsb2NrcyBiZXR3ZWVuIHEtXHUwMDNlbGltaXRzX2xvY2ssIHJlY29uZmlnX211dGV4LCBhbmQgbWRkZXZfc3VzcGVuZC4gSXQgYWx0ZXJzIGRpc2sgYWRkaXRpb24vcmVtb3ZhbCBhbmQgc3lzZnMvaW9jdGwgaGFuZGxpbmcgYWNyb3NzIG11bHRpcGxlIFJBSUQgcGVyc29uYWxpdGllcyAocmFpZDEsIHJhaWQxMCwgcmFpZDUsIGxpbmVhciwgZG0tcmFpZCkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRpc2NvdmVyIHBvdGVudGlhbCBkZWFkbG9ja3MsIGxvY2tpbmcgb3JkZXIgdmlvbGF0aW9ucywgcmFjZSBjb25kaXRpb25zLCBvciBzdGF0ZSBjb3JydXB0aW9ucyBkdXJpbmcgY29uY3VycmVudCBSQUlEIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYzYzZiZjI2NmEyNGNmNTc1NGI3YmMwNDUwMTFlNzQzZDJlM2Q3N2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE4OjEzOjE1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcmFpZC5jIGIvZHJpdmVycy9tZC9kbS1yYWlkLmNcbmluZGV4IDhmNWE1ZTEzNDJhOTUuLjIxYTE5MjJiZWU0ZmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL2RtLXJhaWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9kbS1yYWlkLmNcbkBAIC0zOTIzLDcgJiM0MzszOTIzLDcgQEAgc3RhdGljIHZvaWQgYXR0ZW1wdF9yZXN0b3JlX29mX2ZhdWx0eV9kZXZpY2VzKHN0cnVjdCByYWlkX3NldCAqcnMpXG4gXHRcdFx0Y2xlYXJfYml0KEZhdWx0eSwgXHUwMDI2ci1cdTAwM2VmbGFncyk7XG4gXHRcdFx0Y2xlYXJfYml0KFdyaXRlRXJyb3JTZWVuLCBcdTAwMjZyLVx1MDAzZWZsYWdzKTtcbiBcbi1cdFx0XHRpZiAobWRkZXYtXHUwMDNlcGVycy1cdTAwM2Vob3RfYWRkX2Rpc2sobWRkZXYsIHIpKSB7XG4mIzQzO1x0XHRcdGlmIChtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhtZGRldiwgciwgTlVMTCkpIHtcbiBcdFx0XHRcdC8qIEZhaWxlZCB0byByZXZpdmUgdGhpcyBkZXZpY2UsIHRyeSBuZXh0ICovXG4gXHRcdFx0XHRyLVx1MDAzZXJhaWRfZGlzayA9IHItXHUwMDNlc2F2ZWRfcmFpZF9kaXNrID0gLTE7XG4gXHRcdFx0XHRyLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC1hdXRvZGV0ZWN0LmMgYi9kcml2ZXJzL21kL21kLWF1dG9kZXRlY3QuY1xuaW5kZXggNGI4MDE2NWFmZDIzMy4uOTI5NTEzMTA5NjU3ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLWF1dG9kZXRlY3QuY1xuQEAgLTIxMyw3ICYjNDM7MjEzLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1kX3NldHVwX2RyaXZlKHN0cnVjdCBtZF9zZXR1cF9hcmdzICphcmdzKVxuIFx0XHRcdFx0KDEgXHUwMDNjXHUwMDNjIE1EX0RJU0tfQUNUSVZFKSB8ICgxIFx1MDAzY1x1MDAzYyBNRF9ESVNLX1NZTkMpO1xuIFx0XHR9XG4gXG4tXHRcdG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXHUwMDI2ZGluZm8pO1xuJiM0MztcdFx0bWRfYWRkX25ld19kaXNrKG1kZGV2LCBcdTAwMjZkaW5mbywgTlVMTCk7XG4gXHR9XG4gXG4gXHRpZiAoIWVycilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLWxpbmVhci5jIGIvZHJpdmVycy9tZC9tZC1saW5lYXIuY1xuaW5kZXggNzNiMzY3YjYxYjg3My4uMWY0NGMyZDdkYjkzZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQtbGluZWFyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvbWQtbGluZWFyLmNcbkBAIC0xODYsNyAmIzQzOzE4Niw4IEBAIHN0YXRpYyBpbnQgbGluZWFyX3J1bihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBsaW5lYXJfYWRkKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuJiM0MztzdGF0aWMgaW50IGxpbmVhcl9hZGQoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0LyogQWRkaW5nIGEgZHJpdmUgdG8gYSBsaW5lYXIgYXJyYXkgYWxsb3dzIHRoZSBhcnJheSB0byBncm93LlxuIFx0ICogSXQgaXMgcGVybWl0dGVkIGlmIHRoZSBuZXcgZHJpdmUgaGFzIGEgbWF0Y2hpbmcgc3VwZXJibG9ja1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuY1xuaW5kZXggNjgwYjM0YTYzY2IzZC4uYzQwNTRkMDZkMTA3MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC5jXG5AQCAtOTQsOCAmIzQzOzk0LDggQEAgc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJlc3luY193YWl0KTtcbiAgKi9cbiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1kX21pc2Nfd3E7XG4gXG4tc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldixcbi1cdFx0XHRcdCBzdHJ1Y3QgbWRfcmRldiAqdGhpcyk7XG4mIzQzO3N0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICp0aGlzLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIHN0YXRpYyB2b2lkIG1kZGV2X2RldGFjaChzdHJ1Y3QgbWRkZXYgKm1kZGV2KTtcbiBzdGF0aWMgdm9pZCBleHBvcnRfcmRldihzdHJ1Y3QgbWRfcmRldiAqcmRldik7XG4gc3RhdGljIHZvaWQgbWRfd2FrZXVwX3RocmVhZF9kaXJlY3RseShzdHJ1Y3QgbWRfdGhyZWFkIF9fcmN1ICoqdGhyZWFkKTtcbkBAIC0yOTgxLDcgJiM0MzsyOTgxLDcgQEAgdm9pZCBtZF91cGRhdGVfc2Ioc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZvcmNlX2NoYW5nZSlcbiB9XG4gRVhQT1JUX1NZTUJPTChtZF91cGRhdGVfc2IpO1xuIFxuLXN0YXRpYyBpbnQgYWRkX2JvdW5kX3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4mIzQzO3N0YXRpYyBpbnQgYWRkX2JvdW5kX3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYsIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gcmRldi1cdTAwM2VtZGRldjtcbiBcdGludCBlcnIgPSAwO1xuQEAgLTI5OTQsNyAmIzQzOzI5OTQsNyBAQCBzdGF0aWMgaW50IGFkZF9ib3VuZF9yZGV2KHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIFx0XHQgKi9cbiBcdFx0c3VwZXJfdHlwZXNbbWRkZXYtXHUwMDNlbWFqb3JfdmVyc2lvbl0uXG4gXHRcdFx0dmFsaWRhdGVfc3VwZXIobWRkZXYsIE5VTEwvKmZyZXNoZXN0Ki8sIHJkZXYpO1xuLVx0XHRlcnIgPSBtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhtZGRldiwgcmRldik7XG4mIzQzO1x0XHRlcnIgPSBtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhtZGRldiwgcmRldiwgbGltKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdG1kX2tpY2tfcmRldl9mcm9tX2FycmF5KHJkZXYpO1xuIFx0XHRcdHJldHVybiBlcnI7XG5AQCAtMzAzMyw3ICYjNDM7MzAzMywxMyBAQCBzdGF0aWMgaW50IGNtZF9tYXRjaChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnN0cilcbiBzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeSB7XG4gXHRzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7XG4gXHRzc2l6ZV90ICgqc2hvdykoc3RydWN0IG1kX3JkZXYgKiwgY2hhciAqKTtcbi1cdHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IG1kX3JkZXYgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQGxpbTogYSBxdWV1ZSBsaW1pdHMgdXBkYXRlIHRoZSBjYWxsZXIgb3ducywgb3IgTlVMTC4gIFN0b3JlcyB0aGF0XG4mIzQzO1x0ICogY2FuIGFkZCBhIGxlZyB0byB0aGUgYXJyYXkgbXVzdCBzdGFjayBpbnRvIGl0IHJhdGhlciB0aGFuIHRha2VcbiYjNDM7XHQgKiBxLVx1MDAzZWxpbWl0c19sb2NrIHRoZW1zZWx2ZXMsIHNlZSBtZF9zdGFydF9zeW5jKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdFx0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XG4gfTtcbiBcbiBzdGF0aWMgc3NpemVfdFxuQEAgLTMwNzksNyAmIzQzOzMwODUsOCBAQCBzdGF0ZV9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3N0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sXG4mIzQzO1x0ICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHQvKiBjYW4gd3JpdGVcbiBcdCAqICBmYXVsdHkgIC0gc2ltdWxhdGVzIGFuIGVycm9yXG5AQCAtMzExMCw3ICYjNDM7MzExNyw3IEBAIHN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHR9IGVsc2UgaWYgKGNtZF9tYXRjaChidWYsIFwmIzM0O3JlbW92ZVwmIzM0OykpIHtcbiBcdFx0aWYgKHJkZXYtXHUwMDNlbWRkZXYtXHUwMDNlcGVycykge1xuIFx0XHRcdGNsZWFyX2JpdChCbG9ja2VkLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMocmRldi1cdTAwM2VtZGRldiwgcmRldik7XG4mIzQzO1x0XHRcdHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LVx1MDAzZW1kZGV2LCByZGV2LCBsaW0pO1xuIFx0XHR9XG4gXHRcdGlmIChyZGV2LVx1MDAzZXJhaWRfZGlzayBcdTAwM2U9IDApXG4gXHRcdFx0ZXJyID0gLUVCVVNZO1xuQEAgLTMyMjksNyAmIzQzOzMyMzYsNyBAQCBzdGF0ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIFx0XHRcdGlmICghbWRkZXZfaXNfY2x1c3RlcmVkKHJkZXYtXHUwMDNlbWRkZXYpIHx8XG4gXHRcdFx0ICAgIChlcnIgPSBtZGRldi1cdTAwM2VjbHVzdGVyX29wcy1cdTAwM2VnYXRoZXJfYml0bWFwcyhyZGV2KSkgPT0gMCkge1xuIFx0XHRcdFx0Y2xlYXJfYml0KEZhdWx0eSwgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4tXHRcdFx0XHRlcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBhZGRfYm91bmRfcmRldihyZGV2LCBsaW0pO1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlXG4gXHRcdFx0ZXJyID0gLUVCVVNZO1xuQEAgLTMyNTcsNyAmIzQzOzMyNjQsOCBAQCBlcnJvcnNfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1lcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7ZXJyb3JzX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sXG4mIzQzO1x0ICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0dW5zaWduZWQgaW50IG47XG4gXHRpbnQgcnY7XG5AQCAtMzI4Myw3ICYjNDM7MzI5MSw4IEBAIHNsb3Rfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1zbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3Nsb3Rfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbiYjNDM7XHQgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0aW50IHNsb3Q7XG4gXHRpbnQgZXJyO1xuQEAgLTMzMTQsNyAmIzQzOzMzMjMsNyBAQCBzbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHRcdGlmIChyZGV2LVx1MDAzZW1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X3JlbW92ZV9kaXNrID09IE5VTEwpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGNsZWFyX2JpdChCbG9ja2VkLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYpO1xuJiM0MztcdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYsIGxpbSk7XG4gXHRcdGlmIChyZGV2LVx1MDAzZXJhaWRfZGlzayBcdTAwM2U9IDApXG4gXHRcdFx0cmV0dXJuIC1FQlVTWTtcbiBcdFx0c2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsIFx1MDAyNnJkZXYtXHUwMDNlbWRkZXYtXHUwMDNlcmVjb3ZlcnkpO1xuQEAgLTMzNDQsNyAmIzQzOzMzNTMsOCBAQCBzbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHRcdFx0cmRldi1cdTAwM2VzYXZlZF9yYWlkX2Rpc2sgPSAtMTtcbiBcdFx0Y2xlYXJfYml0KEluX3N5bmMsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuIFx0XHRjbGVhcl9iaXQoQml0bWFwX3N5bmMsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuLVx0XHRlcnIgPSByZGV2LVx1MDAzZW1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X2FkZF9kaXNrKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYpO1xuJiM0MztcdFx0ZXJyID0gcmRldi1cdTAwM2VtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhyZGV2LVx1MDAzZW1kZGV2LCByZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGxpbSk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRyZGV2LVx1MDAzZXJhaWRfZGlzayA9IC0xO1xuIFx0XHRcdHJldHVybiBlcnI7XG5AQCAtMzM3Nyw3ICYjNDM7MzM4Nyw4IEBAIG9mZnNldF9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLW9mZnNldF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiM0MztvZmZzZXRfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbiYjNDM7XHQgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0O1xuIFx0aWYgKGtzdHJ0b3VsbChidWYsIDEwLCBcdTAwMjZvZmZzZXQpIFx1MDAzYyAwKVxuQEAgLTM0MDMsNyAmIzQzOzM0MTQsOCBAQCBzdGF0aWMgc3NpemVfdCBuZXdfb2Zmc2V0X3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IG5ld19vZmZzZXRfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsXG4tXHRcdFx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO1x0XHRcdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGxvbmcgbmV3X29mZnNldDtcbiBcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSByZGV2LVx1MDAzZW1kZGV2O1xuQEAgLTM1MTAsNyAmIzQzOzM1MjIsOCBAQCBzdGF0aWMgaW50IHN0cmljdF9ibG9ja3NfdG9fc2VjdG9ycyhjb25zdCBjaGFyICpidWYsIHNlY3Rvcl90ICpzZWN0b3JzKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXJkZXZfc2l6ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiM0MztyZGV2X3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHRzdHJ1Y3QgbWRkZXYgKm15X21kZGV2ID0gcmRldi1cdTAwM2VtZGRldjtcbiBcdHNlY3Rvcl90IG9sZHNlY3RvcnMgPSByZGV2LVx1MDAzZXNlY3RvcnM7XG5AQCAtMzU3Miw3ICYjNDM7MzU4NSw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXG4gXHRyZXR1cm4gc3ByaW50ZihwYWdlLCBcJiMzNDslbGx1XFxuXCYjMzQ7LCByZWNvdmVyeV9zdGFydCk7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3N0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGxvbmcgcmVjb3Zlcnlfc3RhcnQ7XG4gXG5AQCAtMzYxMSw3ICYjNDM7MzYyNSw5IEBAIHN0YXRpYyBzc2l6ZV90IGJiX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXG4ge1xuIFx0cmV0dXJuIGJhZGJsb2Nrc19zaG93KFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCAwKTtcbiB9XG4tc3RhdGljIHNzaXplX3QgYmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG4mIzQzO1xuJiM0MztzdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdGludCBydiA9IGJhZGJsb2Nrc19zdG9yZShcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcGFnZSwgbGVuLCAwKTtcbiBcdC8qIE1heWJlIHRoYXQgYWNrIHdhcyBhbGwgd2UgbmVlZGVkICovXG5AQCAtMzYyNiw3ICYjNDM7MzY0Miw5IEBAIHN0YXRpYyBzc2l6ZV90IHViYl9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIHtcbiBcdHJldHVybiBiYWRibG9ja3Nfc2hvdyhcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcGFnZSwgMSk7XG4gfVxuLXN0YXRpYyBzc2l6ZV90IHViYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHViYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdFx0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHRyZXR1cm4gYmFkYmxvY2tzX3N0b3JlKFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCBsZW4sIDEpO1xuIH1cbkBAIC0zNjQwLDcgJiM0MzszNjU4LDggQEAgcHBsX3NlY3Rvcl9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXBwbF9zZWN0b3Jfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7cHBsX3NlY3Rvcl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxuJiM0MztcdFx0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGxvbmcgc2VjdG9yO1xuIFxuQEAgLTM2NzksNyAmIzQzOzM2OTgsOCBAQCBwcGxfc2l6ZV9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXBwbF9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3BwbF9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sXG4mIzQzO1x0ICAgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbiBcbkBAIC0zNzQwLDYgJiM0MzszNzYwLDkgQEAgcmRldl9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuIFx0c3RydWN0IHJkZXZfc3lzZnNfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5LCBhdHRyKTtcbiBcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBtZF9yZGV2LCBrb2JqKTtcbiBcdHN0cnVjdCBrZXJuZnNfbm9kZSAqa24gPSBOVUxMO1xuJiM0MztcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiYjNDM7XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDtcbiBcdGJvb2wgc3VzcGVuZCA9IGZhbHNlO1xuIFx0c3NpemVfdCBydjtcbiBcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSBSRUFEX09OQ0UocmRldi1cdTAwM2VtZGRldik7XG5AQCAtMzc2MCwxNSAmIzQzOzM3ODMsMzcgQEAgcmRldl9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdHN1c3BlbmQgPSB0cnVlO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlc2UgY2FuIGFkZCBhIGxlZyBiYWNrLCB3aGljaCBzdGFja3MgaXRzIGxpbWl0czsgdGhlIG90aGVyXG4mIzQzO1x0ICogc3RhdGVfc3RvcmUoKSB2YWx1ZXMgbmV2ZXIgcmVhY2ggLVx1MDAzZWhvdF9hZGRfZGlzaygpLiAgcS1cdTAwM2VsaW1pdHNfbG9ja1xuJiM0MztcdCAqIG5lc3RzIG91dHNpZGUgdGhlIGxvY2sgYW5kIHRoZSBzdXNwZW5kLCBzZWUgbWRfc3RhcnRfc3luYygpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICgoZW50cnktXHUwMDNlc3RvcmUgPT0gc2xvdF9zdG9yZSB8fFxuJiM0MztcdCAgICAgKGVudHJ5LVx1MDAzZXN0b3JlID09IHN0YXRlX3N0b3JlIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgIChjbWRfbWF0Y2gocGFnZSwgXCYjMzQ7cmVtb3ZlXCYjMzQ7KSB8fCBjbWRfbWF0Y2gocGFnZSwgXCYjMzQ7cmUtYWRkXCYjMzQ7KSkpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuJiM0MztcdFx0cSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4mIzQzO1x0XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuJiM0MztcdFx0bGltcCA9IFx1MDAyNmxpbTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cnYgPSBzdXNwZW5kID8gbWRkZXZfc3VzcGVuZF9hbmRfbG9jayhtZGRldikgOiBtZGRldl9sb2NrKG1kZGV2KTtcbiBcdGlmICghcnYpIHtcbiBcdFx0aWYgKHJkZXYtXHUwMDNlbWRkZXYgPT0gTlVMTClcbiBcdFx0XHRydiA9IC1FTk9ERVY7XG4gXHRcdGVsc2Vcbi1cdFx0XHRydiA9IGVudHJ5LVx1MDAzZXN0b3JlKHJkZXYsIHBhZ2UsIGxlbmd0aCk7XG4mIzQzO1x0XHRcdHJ2ID0gZW50cnktXHUwMDNlc3RvcmUocmRldiwgcGFnZSwgbGVuZ3RoLCBsaW1wKTtcbiYjNDM7XHRcdC8qIGFwcGx5IHRoZSBsaW1pdHMgYmVmb3JlIHRoZSBhcnJheSB0YWtlcyBJL08gYWdhaW4gKi9cbiYjNDM7XHRcdGlmIChsaW1wKSB7XG4mIzQzO1x0XHRcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApO1xuJiM0MztcdFx0XHRsaW1wID0gTlVMTDtcbiYjNDM7XHRcdH1cbiBcdFx0c3VzcGVuZCA/IG1kZGV2X3VubG9ja19hbmRfcmVzdW1lKG1kZGV2KSA6IG1kZGV2X3VubG9jayhtZGRldik7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKGxpbXApXG4mIzQzO1x0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcbiYjNDM7XG4gXHRpZiAoa24pXG4gXHRcdHN5c2ZzX3VuYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa24pO1xuIFxuQEAgLTYyNzUsMjAgJiM0Mzs2MzIwLDg5IEBAIGludCBtZGRldl9zdGFja19uZXdfcmRldihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobWRkZXZfc3RhY2tfbmV3X3JkZXYpO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBTdGFjayBhIG5ldyByZGV2IGludG8gbGltaXRzIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyBsaW1pdHNfbG9jayBmb3IgYW5kXG4mIzQzOyAqIHdpbGwgY29tbWl0IGl0c2VsZi4gIFVzZWQgZnJvbSBwYXRocyB0aGF0IG11c3QgdGFrZSBsaW1pdHNfbG9jayBiZWZvcmVcbiYjNDM7ICogcXVpZXNjaW5nIHRoZSBhcnJheSwgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cbiYjNDM7ICovXG4mIzQzO2ludCBtZGRldl9zdGFja19yZGV2X2ludG8oc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHF1ZXVlX2xpbWl0cyB0bXAgPSAqbGltO1xuJiM0MztcbiYjNDM7XHRpZiAobWRkZXZfaXNfZG0obWRkZXYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChxdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocmRldi1cdTAwM2ViZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlcXVldWUpIFx1MDAzZVxuJiM0MztcdCAgICBxdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUobWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZSkpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDslczogaW5jb21wYXRpYmxlIGxvZ2ljYWxfYmxvY2tfc2l6ZSwgY2FuIG5vdCBhZGRcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgbWRuYW1lKG1kZGV2KSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHF1ZXVlX2xpbWl0c19zdGFja19iZGV2KFx1MDAyNnRtcCwgcmRldi1cdTAwM2ViZGV2LCByZGV2LVx1MDAzZWRhdGFfb2Zmc2V0LFxuJiM0MztcdFx0XHRcdG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlZGlza19uYW1lKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFxdWV1ZV9saW1pdHNfc3RhY2tfaW50ZWdyaXR5X2JkZXYoXHUwMDI2dG1wLCByZGV2LVx1MDAzZWJkZXYpKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7JXM6IGluY29tcGF0aWJsZSBpbnRlZ3JpdHkgcHJvZmlsZSBmb3IgJXBnXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIG1kbmFtZShtZGRldiksIHJkZXYtXHUwMDNlYmRldik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOWElPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KmxpbSA9IHRtcDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtZGRldl9zdGFja19yZGV2X2ludG8pO1xuJiM0MztcbiYjNDM7LyogZm9yIGNhbGxlcnMgdGhhdCBtdXN0IG5vdCB3YWl0IGZvciBxLVx1MDAzZWxpbWl0c19sb2NrLCBzZWUgbWRfc3RhcnRfc3luYygpICovXG4mIzQzO3N0YXRpYyBib29sIG1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKHN0cnVjdCBtZGRldiAqbWRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxO1xuJiM0MztcbiYjNDM7XHRpZiAobWRkZXZfaXNfZG0obWRkZXYpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRxID0gbWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayhxLCBsaW0pO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIHVwZGF0ZSB0aGUgb3B0aW1hbCBJL08gc2l6ZSBhZnRlciBhIHJlc2hhcGUgKi9cbi12b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMpXG4mIzQzO3ZvaWQgbWRkZXZfdXBkYXRlX2lvX29wdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB1bnNpZ25lZCBpbnQgbnJfc3RyaXBlcyxcbiYjNDM7XHRcdFx0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4tXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiYjNDM7XHRzdHJ1Y3QgcXVldWVfbGltaXRzIG93bjtcbiBcbiBcdGlmIChtZGRldl9pc19kbShtZGRldikpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdpdGggYW4gdXBkYXRlIG93bmVkIGJ5IHRoZSBjYWxsZXIganVzdCBjaGFuZ2UgaXQgaW4gcGxhY2U7IGl0IGlzXG4mIzQzO1x0ICogY29tbWl0dGVkLCBhbmQgdGhlIGFycmF5IHJlc3VtZWQsIGJ5IHdob2V2ZXIgc3RhcnRlZCBpdC4gIFRha2luZ1xuJiM0MztcdCAqIHEtXHUwMDNlbGltaXRzX2xvY2sgaGVyZSB3b3VsZCBuZXN0IGl0IGluc2lkZSByZWNvbmZpZ19tdXRleCBhbmQgdGhlXG4mIzQzO1x0ICogc3VzcGVuZCwgd2hpY2ggZGVhZGxvY2tzLCBzZWUgbWRfc3RhcnRfc3luYygpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChsaW0pIHtcbiYjNDM7XHRcdGxpbS1cdTAwM2Vpb19vcHQgPSBsaW0tXHUwMDNlaW9fbWluICogbnJfc3RyaXBlcztcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2FsbGVkIGZyb20gdGhlIHN5bmMgdGhyZWFkLCB3aGljaCBtZF9yZWFwX3N5bmNfdGhyZWFkKCkgd2FpdHMgZm9yXG4mIzQzO1x0ICogd2l0aCByZWNvbmZpZ19tdXRleCBoZWxkLCBzbyBkb24mIzM5O3Qgd2FpdCBmb3IgcS1cdTAwM2VsaW1pdHNfbG9jayBoZXJlLlxuJiM0MztcdCAqIGlvX29wdCBpcyBhIGhpbnQsIHNraXBwaW5nIGl0IG9uIGEgY29udGVuZGVkIHBhc3MgaXMgZmluZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKG1kZGV2LCBcdTAwMjZvd24pKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdC8qIGRvbiYjMzk7dCBib3RoZXIgdXBkYXRpbmcgaW9fb3B0IGlmIHdlIGNhbiYjMzk7dCBzdXNwZW5kIHRoZSBhcnJheSAqL1xuLVx0aWYgKG1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKSBcdTAwM2MgMClcbiYjNDM7XHRpZiAobWRkZXZfc3VzcGVuZChtZGRldiwgZmFsc2UpIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlKTtcbiBcdFx0cmV0dXJuO1xuLVx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlKTtcbi1cdGxpbS5pb19vcHQgPSBsaW0uaW9fbWluICogbnJfc3RyaXBlcztcbi1cdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4mIzQzO1x0fVxuJiM0MztcdG93bi5pb19vcHQgPSBvd24uaW9fbWluICogbnJfc3RyaXBlcztcbiYjNDM7XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZvd24pO1xuIFx0bWRkZXZfcmVzdW1lKG1kZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobWRkZXZfdXBkYXRlX2lvX29wdCk7XG5AQCAtNzQ4Niw3ICYjNDM7NzYwMCw4IEBAIHN0YXRpYyBpbnQgZ2V0X2Rpc2tfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB2b2lkIF9fdXNlciAqIGFyZylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgbWRfYWRkX25ld19kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgKmluZm8pXG4mIzQzO2ludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbyxcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0c3RydWN0IG1kX3JkZXYgKnJkZXY7XG4gXHRkZXZfdCBkZXYgPSBNS0RFVihpbmZvLVx1MDAzZW1ham9yLGluZm8tXHUwMDNlbWlub3IpO1xuQEAgLTc2MzQsMTEgJiM0Mzs3NzQ5LDExIEBAIGludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbylcbiBcdFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRcdG1kZGV2LVx1MDAzZWNsdXN0ZXJfb3BzLVx1MDAzZWFkZF9uZXdfZGlza19jYW5jZWwobWRkZXYpO1xuIFx0XHRcdFx0ZWxzZVxuLVx0XHRcdFx0XHRlcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTtcbiYjNDM7XHRcdFx0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYsIGxpbSk7XG4gXHRcdFx0fVxuIFxuIFx0XHR9IGVsc2UgaWYgKCFlcnIpXG4tXHRcdFx0ZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldik7XG4mIzQzO1x0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYsIGxpbSk7XG4gXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtNzY5MSw3ICYjNDM7NzgwNiw4IEBAIGludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGhvdF9yZW1vdmVfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBkZXZfdCBkZXYpXG4mIzQzO3N0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIGRldl90IGRldixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCBtZF9yZGV2ICpyZGV2O1xuIFxuQEAgLTc3MDYsNyAmIzQzOzc4MjIsNyBAQCBzdGF0aWMgaW50IGhvdF9yZW1vdmVfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBkZXZfdCBkZXYpXG4gXHRcdGdvdG8ga2lja19yZGV2O1xuIFxuIFx0Y2xlYXJfYml0KEJsb2NrZWQsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuLVx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCByZGV2KTtcbiYjNDM7XHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIHJkZXYsIGxpbSk7XG4gXG4gXHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2sgXHUwMDNlPSAwKVxuIFx0XHRnb3RvIGJ1c3k7XG5AQCAtODI5MSw2ICYjNDM7ODQwNywyMiBAQCBzdGF0aWMgaW5saW5lIGludCBtZF9pb2N0bF92YWxpZCh1bnNpZ25lZCBpbnQgY21kKVxuIFx0fVxuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQ29tbWFuZHMgdGhhdCBjYW4gcmVhY2ggLVx1MDAzZWhvdF9hZGRfZGlzaygpLiAgQUREX05FV19ESVNLIG9ubHkgZG9lcyBzbyBmb3IgYVxuJiM0MzsgKiBqb3VybmFsIGRldmljZSBvciBhIHBlcnNvbmFsaXR5IHdpdGhvdXQgLVx1MDAzZWhvdF9yZW1vdmVfZGlzaywgYnV0IHRoYXQgZGVwZW5kc1xuJiM0MzsgKiBvbiBkaXNrIGluZm8gc3RpbGwgaW4gdXNlciBtZW1vcnkgaGVyZSwgc28gaXQgaXMgaW5jbHVkZWQgYXMgYSB3aG9sZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIG1kX2lvY3RsX21heV9hZGRfZGlzayh1bnNpZ25lZCBpbnQgY21kKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChjbWQpIHtcbiYjNDM7XHRjYXNlIEFERF9ORVdfRElTSzpcbiYjNDM7XHRjYXNlIEhPVF9SRU1PVkVfRElTSzpcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIG1kX2lvY3RsX25lZWRfc3VzcGVuZCh1bnNpZ25lZCBpbnQgY21kKVxuIHtcbiBcdHN3aXRjaCAoY21kKSB7XG5AQCAtODM0Niw2ICYjNDM7ODQ3OCw5IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0dW5zaWduZWQgaW50IG5vaW9fZmxhZ3MgPSAwO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG4gXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4mIzQzO1x0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7XG4gXHRib29sIHN1c3BlbmQ7XG4gXG4gXHRlcnIgPSBtZF9pb2N0bF92YWxpZChjbWQpO1xuQEAgLTgzOTYsMTEgJiM0Mzs4NTMxLDIwIEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0aWYgKCFtZF9pc19yZHdyKG1kZGV2KSlcbiBcdFx0Zmx1c2hfd29yayhcdTAwMjZtZGRldi1cdTAwM2VzeW5jX3dvcmspO1xuIFxuJiM0MztcdC8qIHEtXHUwMDNlbGltaXRzX2xvY2sgbmVzdHMgb3V0c2lkZSBib3RoLCBzZWUgbWRfc3RhcnRfc3luYygpICovXG4mIzQzO1x0aWYgKG1kX2lvY3RsX21heV9hZGRfZGlzayhjbWQpIFx1MDAyNlx1MDAyNiAhbWRkZXZfaXNfZG0obWRkZXYpKSB7XG4mIzQzO1x0XHRxID0gbWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZTtcbiYjNDM7XHRcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XG4mIzQzO1x0XHRsaW1wID0gXHUwMDI2bGltO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRzdXNwZW5kID0gbWRfaW9jdGxfbmVlZF9zdXNwZW5kKGNtZCk7XG4gXHRlcnIgPSBzdXNwZW5kID8gbWRkZXZfc3VzcGVuZF9hbmRfbG9jayhtZGRldikgOiBtZGRldl9sb2NrKG1kZGV2KTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0cHJfZGVidWcoXCYjMzQ7bWQ6IGlvY3RsIGxvY2sgaW50ZXJydXB0ZWQsIHJlYXNvbiAlZCwgY21kICVkXFxuXCYjMzQ7LFxuIFx0XHRcdCBlcnIsIGNtZCk7XG4mIzQzO1x0XHRpZiAobGltcClcbiYjNDM7XHRcdFx0cXVldWVfbGltaXRzX2NhbmNlbF91cGRhdGUocSk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0aWYgKHN1c3BlbmQpXG5AQCAtODQ0Miw3ICYjNDM7ODU4Niw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0XHRnb3RvIHVubG9jaztcbiBcbiBcdGNhc2UgSE9UX1JFTU9WRV9ESVNLOlxuLVx0XHRlcnIgPSBob3RfcmVtb3ZlX2Rpc2sobWRkZXYsIG5ld19kZWNvZGVfZGV2KGFyZykpO1xuJiM0MztcdFx0ZXJyID0gaG90X3JlbW92ZV9kaXNrKG1kZGV2LCBuZXdfZGVjb2RlX2RldihhcmcpLCBsaW1wKTtcbiBcdFx0Z290byB1bmxvY2s7XG4gXG4gXHRjYXNlIEFERF9ORVdfRElTSzpcbkBAIC04NDU4LDcgJiM0Mzs4NjAyLDcgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4gXHRcdFx0XHQvKiBOZWVkIHRvIGNsZWFyIHJlYWQtb25seSBmb3IgdGhpcyAqL1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0ZWxzZVxuLVx0XHRcdFx0ZXJyID0gbWRfYWRkX25ld19kaXNrKG1kZGV2LCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBtZF9hZGRfbmV3X2Rpc2sobWRkZXYsIFx1MDAyNmluZm8sIGxpbXApO1xuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuQEAgLTg0OTYsNyAmIzQzOzg2NDAsNyBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmluZm8sIGFyZ3AsIHNpemVvZihpbmZvKSkpXG4gXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0ZWxzZVxuLVx0XHRcdGVyciA9IG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXHUwMDI2aW5mbyk7XG4mIzQzO1x0XHRcdGVyciA9IG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXHUwMDI2aW5mbywgbGltcCk7XG4gXHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuIFxuQEAgLTg1MjksNiAmIzQzOzg2NzMsOSBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbiBcdCAgICBlcnIgIT0gLUVJTlZBTClcbiBcdFx0bWRkZXYtXHUwMDNlaG9sZF9hY3RpdmUgPSAwO1xuIFxuJiM0MztcdGlmIChsaW1wKVxuJiM0MztcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltcCk7XG4mIzQzO1xuIFx0aWYgKHN1c3BlbmQpIHtcbiBcdFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZ3MpO1xuIFx0XHRtZGRldl91bmxvY2tfYW5kX3Jlc3VtZShtZGRldik7XG5AQCAtMTAxNjcsOCAmIzQzOzEwMzE0LDggQEAgc3RhdGljIGludCByZW1vdmVfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICp0aGlzKVxuIFx0cmV0dXJuIHJlbW92ZWQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsXG4tXHRcdFx0XHQgc3RydWN0IG1kX3JkZXYgKnRoaXMpXG4mIzQzO3N0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICp0aGlzLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0c3RydWN0IG1kX3JkZXYgKnJkZXY7XG4gXHRpbnQgc3BhcmVzID0gMDtcbkBAIC0xMDE5MSw3ICYjNDM7MTAzMzgsNyBAQCBzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIXRlc3RfYml0KEpvdXJuYWwsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKVxuIFx0XHRcdHJkZXYtXHUwMDNlcmVjb3Zlcnlfb2Zmc2V0ID0gMDtcbi1cdFx0aWYgKG1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7XG4mIzQzO1x0XHRpZiAobWRkZXYtXHUwMDNlcGVycy1cdTAwM2Vob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYsIGxpbSkgPT0gMCkge1xuIFx0XHRcdC8qIGZhaWx1cmUgaGVyZSBpcyBPSyAqL1xuIFx0XHRcdHN5c2ZzX2xpbmtfcmRldihtZGRldiwgcmRldik7XG4gXHRcdFx0aWYgKCF0ZXN0X2JpdChKb3VybmFsLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSlcbkBAIC0xMDIwNiw3ICYjNDM7MTAzNTMsOCBAQCBzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxuIFx0cmV0dXJuIHNwYXJlcztcbiB9XG4gXG4tc3RhdGljIGJvb2wgbWRfY2hvb3NlX3N5bmNfYWN0aW9uKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCAqc3BhcmVzKVxuJiM0MztzdGF0aWMgYm9vbCBtZF9jaG9vc2Vfc3luY19hY3Rpb24oc3RydWN0IG1kZGV2ICptZGRldiwgaW50ICpzcGFyZXMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0LyogQ2hlY2sgaWYgcmVzaGFwZSBpcyBpbiBwcm9ncmVzcyBmaXJzdC4gKi9cbiBcdGlmIChtZGRldi1cdTAwM2VyZXNoYXBlX3Bvc2l0aW9uICE9IE1heFNlY3Rvcikge1xuQEAgLTEwMjM0LDcgJiM0MzsxMDM4Miw3IEBAIHN0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcylcbiBcdCAqIGFsc28gcmVtb3ZlZCBhbmQgcmUtYWRkZWQsIHRvIGFsbG93IHRoZSBwZXJzb25hbGl0eSB0byBmYWlsIHRoZVxuIFx0ICogcmUtYWRkLlxuIFx0ICovXG4tXHQqc3BhcmVzID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMKTtcbiYjNDM7XHQqc3BhcmVzID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMLCBsaW0pO1xuIFx0aWYgKCpzcGFyZXMgfHwgdGVzdF9iaXQoTURfUkVDT1ZFUllfTEFaWV9SRUNPVkVSLCBcdTAwMjZtZGRldi1cdTAwM2VyZWNvdmVyeSkpIHtcbiBcdFx0Y2xlYXJfYml0KE1EX1JFQ09WRVJZX1NZTkMsIFx1MDAyNm1kZGV2LVx1MDAzZXJlY292ZXJ5KTtcbiBcdFx0Y2xlYXJfYml0KE1EX1JFQ09WRVJZX0NIRUNLLCBcdTAwMjZtZGRldi1cdTAwM2VyZWNvdmVyeSk7XG5AQCAtMTAyNTYsNiAmIzQzOzEwNDA0LDkgQEAgc3RhdGljIGJvb2wgbWRfY2hvb3NlX3N5bmNfYWN0aW9uKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCAqc3BhcmVzKVxuIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cylcbiB7XG4gXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gY29udGFpbmVyX29mKHdzLCBzdHJ1Y3QgbWRkZXYsIHN5bmNfd29yayk7XG4mIzQzO1x0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuJiM0MztcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbXAgPSBOVUxMO1xuIFx0aW50IHNwYXJlcyA9IDA7XG4gXHRib29sIHN1c3BlbmQgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGludCBub2lvX2ZsYWdzID0gMDtcbkBAIC0xMDI2Nyw2ICYjNDM7MTA0MTgsMTcgQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxuIFx0ICovXG4gXHRpZiAoKG1kZGV2LVx1MDAzZXJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yIHx8ICFtZF9pc19yZHdyKG1kZGV2KSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbWRfc3BhcmVzX25lZWRfY2hhbmdlKG1kZGV2KSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEFkZGluZyBhIHNwYXJlIGJlbG93IHN0YWNrcyBpdHMgbGltaXRzLCB3aGljaCBuZWVkc1xuJiM0MztcdFx0ICogcS1cdTAwM2VsaW1pdHNfbG9jay4gIFRha2UgaXQgYmVmb3JlIHN1c3BlbmRpbmc6IGl0cyBob2xkZXJcbiYjNDM7XHRcdCAqIHdhaXRzIGluIGJsa19tcV9mcmVlemVfcXVldWUoKSBmb3IgSS9PIHRoYXRcbiYjNDM7XHRcdCAqIG1kZGV2LVx1MDAzZXN1c3BlbmRlZCBob2xkcyBiYWNrLCBzbyB0aGUgb3RoZXIgb3JkZXIgZGVhZGxvY2tzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuJiM0MztcdFx0XHRxID0gbWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZTtcbiYjNDM7XHRcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbiYjNDM7XHRcdFx0bGltcCA9IFx1MDAyNmxpbTtcbiYjNDM7XHRcdH1cbiBcdFx0c3VzcGVuZCA9IHRydWU7XG4gXHRcdG1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKTtcbiBcdFx0bm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xuQEAgLTEwMjgxLDYgJiM0MzsxMDQ0MywxMiBAQCBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXG4gXHRpZiAoIXN1c3BlbmQgXHUwMDI2XHUwMDI2IChtZGRldi1cdTAwM2VyZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvciB8fCAhbWRfaXNfcmR3cihtZGRldikpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG1kX3NwYXJlc19uZWVkX2NoYW5nZShtZGRldikpIHtcbiBcdFx0bWRkZXZfdW5sb2NrKG1kZGV2KTtcbiYjNDM7XHRcdC8qIHNlZSBhYm92ZTogcS1cdTAwM2VsaW1pdHNfbG9jayBuZXN0cyBvdXRzaWRlIGJvdGggKi9cbiYjNDM7XHRcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpKSB7XG4mIzQzO1x0XHRcdHEgPSBtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlO1xuJiM0MztcdFx0XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuJiM0MztcdFx0XHRsaW1wID0gXHUwMDI2bGltO1xuJiM0MztcdFx0fVxuIFx0XHRtZGRldl9zdXNwZW5kX2FuZF9sb2NrX25vaW50cihtZGRldik7XG4gXHRcdHN1c3BlbmQgPSB0cnVlO1xuIFx0XHRub2lvX2ZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG5AQCAtMTAyOTQsMTEgJiM0MzsxMDQ2MiwxMSBAQCBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXG4gXHRcdCAqIEFzIHdlIG9ubHkgYWRkIGRldmljZXMgdGhhdCBhcmUgYWxyZWFkeSBpbi1zeW5jLCB3ZSBjYW5cbiBcdFx0ICogYWN0aXZhdGUgdGhlIHNwYXJlcyBpbW1lZGlhdGVseS5cbiBcdFx0ICovXG4tXHRcdHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldiwgTlVMTCk7XG4mIzQzO1x0XHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIE5VTEwsIGxpbXApO1xuIFx0XHRnb3RvIG5vdF9ydW5uaW5nO1xuIFx0fVxuIFxuLVx0aWYgKCFtZF9jaG9vc2Vfc3luY19hY3Rpb24obWRkZXYsIFx1MDAyNnNwYXJlcykpXG4mIzQzO1x0aWYgKCFtZF9jaG9vc2Vfc3luY19hY3Rpb24obWRkZXYsIFx1MDAyNnNwYXJlcywgbGltcCkpXG4gXHRcdGdvdG8gbm90X3J1bm5pbmc7XG4gXG4gXHRpZiAoIW1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlc3luY19yZXF1ZXN0KVxuQEAgLTEwMzI5LDYgJiM0MzsxMDQ5Nyw4IEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cylcbiBcdCAqICAgICBodHRwczovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODIwMFxuIFx0ICogVGhlcmVmb3JlLCB1c2UgX19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKS5cbiBcdCAqL1xuJiM0MztcdGlmIChsaW1wKVxuJiM0MztcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltcCk7XG4gXHRpZiAoc3VzcGVuZCkge1xuIFx0XHRtZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFncyk7XG4gXHRcdF9fbWRkZXZfcmVzdW1lKG1kZGV2LCBmYWxzZSk7XG5AQCAtMTAzNTEsNiAmIzQzOzEwNTIxLDggQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxuIFx0ICogICAgIGh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MjAwXG4gXHQgKiBUaGVyZWZvcmUsIHVzZSBfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpLlxuIFx0ICovXG4mIzQzO1x0aWYgKGxpbXApXG4mIzQzO1x0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcbiBcdGlmIChzdXNwZW5kKSB7XG4gXHRcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWdzKTtcbiBcdFx0X19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKTtcbkBAIC0xMDc5Myw2ICYjNDM7MTA5NjUsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBtZF9pbml0KHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgY2hlY2tfc2JfY2hhbmdlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbiB7XG4mIzQzO1x0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4gXHRzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfMSAqc2IgPSBwYWdlX2FkZHJlc3MocmRldi1cdTAwM2VzYl9wYWdlKTtcbiBcdHN0cnVjdCBtZF9yZGV2ICpyZGV2MiwgKnRtcDtcbiBcdGludCByb2xlLCByZXQ7XG5AQCAtMTA4NDksNyAmIzQzOzExMDIyLDI0IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3NiX2NoYW5nZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4gXHRcdFx0XHRcdHJkZXYyLVx1MDAzZXNhdmVkX3JhaWRfZGlzayA9IC0xO1xuIFx0XHRcdFx0ZWxzZVxuIFx0XHRcdFx0XHRyZGV2Mi1cdTAwM2VzYXZlZF9yYWlkX2Rpc2sgPSByb2xlO1xuLVx0XHRcdFx0cmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCByZGV2Mik7XG4mIzQzO1x0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHQgKiByZWNvbmZpZ19tdXRleCBpcyBoZWxkLCBzbyBkb24mIzM5O3Qgd2FpdCBmb3JcbiYjNDM7XHRcdFx0XHQgKiBxLVx1MDAzZWxpbWl0c19sb2NrOyBNRF9SRUNPVkVSWV9ORUVERUQgYmVsb3dcbiYjNDM7XHRcdFx0XHQgKiBsZWF2ZXMgYSBza2lwcGVkIGFkZCB0byBtZF9zdGFydF9zeW5jKCkuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0aWYgKG1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKG1kZGV2LCBcdTAwMjZsaW0pKSB7XG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9XG4mIzQzO1x0XHRcdFx0XHRcdG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4mIzQzO1xuJiM0MztcdFx0XHRcdFx0cmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgIHJkZXYyLCBcdTAwMjZsaW0pO1xuJiM0MztcdFx0XHRcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgXHUwMDI2bGltKTtcbiYjNDM7XHRcdFx0XHR9IGVsc2UgaWYgKG1kZGV2X2lzX2RtKG1kZGV2KSkge1xuJiM0MztcdFx0XHRcdFx0cmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgIHJkZXYyLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdFx0cmV0ID0gcmVtb3ZlX3NwYXJlcyhtZGRldiwgcmRldjIpO1xuJiM0MztcdFx0XHRcdH1cbiBcdFx0XHRcdHByX2luZm8oXCYjMzQ7QWN0aXZhdGVkIHNwYXJlOiAlcGdcXG5cJiMzNDssXG4gXHRcdFx0XHRcdHJkZXYyLVx1MDAzZWJkZXYpO1xuIFx0XHRcdFx0Lyogd2FrZXVwIG1kZGV2LVx1MDAzZXRocmVhZCBoZXJlLCBzbyBhcnJheSBjb3VsZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaFxuaW5kZXggYjZkMmU4OTI5YTBmOS4uY2VjYThjZmNkY2I5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC5oXG5AQCAtNzY1LDcgJiM0Mzs3NjUsOCBAQCBzdHJ1Y3QgbWRfcGVyc29uYWxpdHlcbiBcdCAqIGlmIGFwcHJvcHJpYXRlLCBhbmQgc2hvdWxkIGFib3J0IHJlY292ZXJ5IGlmIG5lZWRlZFxuIFx0ICovXG4gXHR2b2lkICgqZXJyb3JfaGFuZGxlcikoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xuLVx0aW50ICgqaG90X2FkZF9kaXNrKSAoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xuJiM0MztcdGludCAoKmhvdF9hZGRfZGlzaykoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIFx0aW50ICgqaG90X3JlbW92ZV9kaXNrKSAoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xuIFx0aW50ICgqc3BhcmVfYWN0aXZlKSAoc3RydWN0IG1kZGV2ICptZGRldik7XG4gXHRzZWN0b3JfdCAoKnN5bmNfcmVxdWVzdCkoc3RydWN0IG1kZGV2ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLFxuQEAgLTEwNDEsMTMgJiM0MzsxMDQyLDE3IEBAIHN0cnVjdCBtZHVfZGlza19pbmZvX3M7XG4gZXh0ZXJuIGludCBtZHBfbWFqb3I7XG4gdm9pZCBtZF9hdXRvc3RhcnRfYXJyYXlzKGludCBwYXJ0KTtcbiBpbnQgbWRfc2V0X2FycmF5X2luZm8oc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9hcnJheV9pbmZvX3MgKmluZm8pO1xuLWludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbyk7XG4mIzQzO2ludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbyxcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIGludCBkb19tZF9ydW4oc3RydWN0IG1kZGV2ICptZGRldik7XG4gI2RlZmluZSBNRERFVl9TVEFDS19JTlRFR1JJVFlcdCgxdSBcdTAwM2NcdTAwM2MgMClcbiBpbnQgbWRkZXZfc3RhY2tfcmRldl9saW1pdHMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBtZGRldl9zdGFja19uZXdfcmRldihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7XG4tdm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzKTtcbiYjNDM7aW50IG1kZGV2X3N0YWNrX3JkZXZfaW50byhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuJiM0Mzt2b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbWRfZm9wcztcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmNcbmluZGV4IGYwNjQ2ZmIyNDM3MWYuLmRkMzQ4YjU2OTVkMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL3JhaWQxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvcmFpZDEuY1xuQEAgLTE4OTgsNyAmIzQzOzE4OTgsOCBAQCBzdGF0aWMgYm9vbCByYWlkMV9yZW1vdmVfY29uZihzdHJ1Y3QgcjFjb25mICpjb25mLCBpbnQgZGlzaylcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJhaWQxX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuJiM0MztzdGF0aWMgaW50IHJhaWQxX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuJiM0MztcdFx0XHQgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHRzdHJ1Y3QgcjFjb25mICpjb25mID0gbWRkZXYtXHUwMDNlcHJpdmF0ZTtcbiBcdGludCBlcnIgPSAtRUVYSVNUO1xuQEAgLTE5MjMsNyAmIzQzOzE5MjQsMTAgQEAgc3RhdGljIGludCByYWlkMV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbiBcdGZvciAobWlycm9yID0gZmlyc3Q7IG1pcnJvciBcdTAwM2M9IGxhc3Q7IG1pcnJvciYjNDM7JiM0MzspIHtcbiBcdFx0cCA9IGNvbmYtXHUwMDNlbWlycm9ycyAmIzQzOyBtaXJyb3I7XG4gXHRcdGlmICghcC1cdTAwM2VyZGV2KSB7XG4tXHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xuJiM0MztcdFx0XHRpZiAobGltKVxuJiM0MztcdFx0XHRcdGVyciA9IG1kZGV2X3N0YWNrX3JkZXZfaW50byhtZGRldiwgcmRldiwgbGltKTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuY1xuaW5kZXggMTA5M2M3OThkOWRkZS4uNjQxNjE5MzI4YTZjNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcbkBAIC0yMDk1LDcgJiM0MzsyMDk1LDggQEAgc3RhdGljIGludCByYWlkMTBfc3BhcmVfYWN0aXZlKHN0cnVjdCBtZGRldiAqbWRkZXYpXG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcmFpZDEwX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuJiM0MztzdGF0aWMgaW50IHJhaWQxMF9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCByMTBjb25mICpjb25mID0gbWRkZXYtXHUwMDNlcHJpdmF0ZTtcbiBcdGludCBlcnIgPSAtRUVYSVNUO1xuQEAgLTIxMzAsNyAmIzQzOzIxMzEsMTAgQEAgc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xuJiM0MztcdFx0aWYgKGxpbSlcbiYjNDM7XHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfcmRldl9pbnRvKG1kZGV2LCByZGV2LCBsaW0pO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRlcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0cC1cdTAwM2VoZWFkX3Bvc2l0aW9uID0gMDtcbkBAIC0yMTQ3LDcgJiM0MzsyMTUxLDEwIEBAIHN0YXRpYyBpbnQgcmFpZDEwX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIFx0XHRjbGVhcl9iaXQoSW5fc3luYywgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4gXHRcdHNldF9iaXQoUmVwbGFjZW1lbnQsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuIFx0XHRyZGV2LVx1MDAzZXJhaWRfZGlzayA9IHJlcGxfc2xvdDtcbi1cdFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xuJiM0MztcdFx0aWYgKGxpbSlcbiYjNDM7XHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfcmRldl9pbnRvKG1kZGV2LCByZGV2LCBsaW0pO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRlcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0Y29uZi1cdTAwM2VmdWxsc3luYyA9IDE7XG5AQCAtNDQ4NCw3ICYjNDM7NDQ5MSw3IEBAIHN0YXRpYyBpbnQgcmFpZDEwX3N0YXJ0X3Jlc2hhcGUoc3RydWN0IG1kZGV2ICptZGRldilcbiBcdFx0cmRldl9mb3JfZWFjaChyZGV2LCBtZGRldilcbiBcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2sgXHUwMDNjIDAgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICF0ZXN0X2JpdChGYXVsdHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdFx0XHRpZiAocmFpZDEwX2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7XG4mIzQzO1x0XHRcdFx0aWYgKHJhaWQxMF9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkge1xuIFx0XHRcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2sgXHUwMDNlPVxuIFx0XHRcdFx0XHQgICAgY29uZi1cdTAwM2VwcmV2LnJhaWRfZGlza3MpXG4gXHRcdFx0XHRcdFx0c2V0X2JpdChJbl9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbkBAIC00OTIxLDcgJiM0Mzs0OTI4LDcgQEAgc3RhdGljIHZvaWQgZW5kX3Jlc2hhcGUoc3RydWN0IHIxMGNvbmYgKmNvbmYpXG4gXHRjb25mLVx1MDAzZXJlc2hhcGVfc2FmZSA9IE1heFNlY3RvcjtcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjb25mLVx1MDAzZWRldmljZV9sb2NrKTtcbiBcbi1cdG1kZGV2X3VwZGF0ZV9pb19vcHQoY29uZi1cdTAwM2VtZGRldiwgcmFpZDEwX25yX3N0cmlwZXMoY29uZikpO1xuJiM0MztcdG1kZGV2X3VwZGF0ZV9pb19vcHQoY29uZi1cdTAwM2VtZGRldiwgcmFpZDEwX25yX3N0cmlwZXMoY29uZiksIE5VTEwpO1xuIFx0Y29uZi1cdTAwM2VmdWxsc3luYyA9IDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuY1xuaW5kZXggYjkxNTQ1Y2UwOTBkZS4uMjI3NTljNjMxYzRkOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkNS5jXG5AQCAtNzI4OCw2ICYjNDM7NzI4OCw5IEBAIHN0YXRpYyBzc2l6ZV90XG4gcmFpZDVfc3RvcmVfc2tpcF9jb3B5KHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IHI1Y29uZiAqY29uZjtcbiYjNDM7XHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4mIzQzO1x0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7XG4gXHR1bnNpZ25lZCBsb25nIG5ldztcbiBcdGludCBlcnI7XG4gXG5AQCAtNzI5NywyMyAmIzQzOzczMDAsMzMgQEAgcmFpZDVfc3RvcmVfc2tpcF9jb3B5KHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0bmV3ID0gISFuZXc7XG4gXG4mIzQzO1x0LyogcS1cdTAwM2VsaW1pdHNfbG9jayBuZXN0cyBvdXRzaWRlIGJvdGgsIHNlZSBtZF9zdGFydF9zeW5jKCkgKi9cbiYjNDM7XHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuJiM0MztcdFx0cSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4mIzQzO1x0XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuJiM0MztcdFx0bGltcCA9IFx1MDAyNmxpbTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZXJyID0gbWRkZXZfc3VzcGVuZF9hbmRfbG9jayhtZGRldik7XG4tXHRpZiAoZXJyKVxuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGlmIChsaW1wKVxuJiM0MztcdFx0XHRxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShxKTtcbiBcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4gXHRjb25mID0gbWRkZXYtXHUwMDNlcHJpdmF0ZTtcbiBcdGlmICghY29uZilcbiBcdFx0ZXJyID0gLUVOT0RFVjtcbiBcdGVsc2UgaWYgKG5ldyAhPSBjb25mLVx1MDAzZXNraXBfY29weSkge1xuLVx0XHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4tXHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbi1cbiBcdFx0Y29uZi1cdTAwM2Vza2lwX2NvcHkgPSBuZXc7XG4tXHRcdGlmIChuZXcpXG4tXHRcdFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1NUQUJMRV9XUklURVM7XG4tXHRcdGVsc2Vcbi1cdFx0XHRsaW0uZmVhdHVyZXMgXHUwMDI2PSB+QkxLX0ZFQVRfU1RBQkxFX1dSSVRFUztcbi1cdFx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgXHUwMDI2bGltKTtcbiYjNDM7XHRcdGlmIChsaW1wKSB7XG4mIzQzO1x0XHRcdGlmIChuZXcpXG4mIzQzO1x0XHRcdFx0bGltcC1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9TVEFCTEVfV1JJVEVTO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0bGltcC1cdTAwM2VmZWF0dXJlcyBcdTAwMjY9IH5CTEtfRkVBVF9TVEFCTEVfV1JJVEVTO1xuJiM0MztcdFx0fVxuIFx0fVxuJiM0MztcdGlmIChsaW1wKVxuJiM0MztcdFx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltcCkgPzogZXJyO1xuIFx0bWRkZXZfdW5sb2NrX2FuZF9yZXN1bWUobWRkZXYpO1xuIFx0cmV0dXJuIGVyciA/OiBsZW47XG4gfVxuQEAgLTg0NDEsNyAmIzQzOzg0NTQsOCBAQCBzdGF0aWMgaW50IHJhaWQ1X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCByYWlkNV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbiYjNDM7c3RhdGljIGludCByYWlkNV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0c3RydWN0IHI1Y29uZiAqY29uZiA9IG1kZGV2LVx1MDAzZXByaXZhdGU7XG4gXHRpbnQgcmV0LCBlcnIgPSAtRUVYSVNUO1xuQEAgLTg3MjgsNyAmIzQzOzg3NDIsNyBAQCBzdGF0aWMgaW50IHJhaWQ1X3N0YXJ0X3Jlc2hhcGUoc3RydWN0IG1kZGV2ICptZGRldilcbiBcdFx0cmRldl9mb3JfZWFjaChyZGV2LCBtZGRldilcbiBcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2sgXHUwMDNjIDAgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICF0ZXN0X2JpdChGYXVsdHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdFx0XHRpZiAocmFpZDVfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHtcbiYjNDM7XHRcdFx0XHRpZiAocmFpZDVfYWRkX2Rpc2sobWRkZXYsIHJkZXYsIE5VTEwpID09IDApIHtcbiBcdFx0XHRcdFx0aWYgKHJkZXYtXHUwMDNlcmFpZF9kaXNrXG4gXHRcdFx0XHRcdCAgICBcdTAwM2U9IGNvbmYtXHUwMDNlcHJldmlvdXNfcmFpZF9kaXNrcylcbiBcdFx0XHRcdFx0XHRzZXRfYml0KEluX3N5bmMsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuQEAgLTg3OTksNyAmIzQzOzg4MTMsNyBAQCBzdGF0aWMgdm9pZCBlbmRfcmVzaGFwZShzdHJ1Y3QgcjVjb25mICpjb25mKVxuIFx0XHR3YWtlX3VwKFx1MDAyNmNvbmYtXHUwMDNld2FpdF9mb3JfcmVzaGFwZSk7XG4gXG4gXHRcdG1kZGV2X3VwZGF0ZV9pb19vcHQoY29uZi1cdTAwM2VtZGRldixcbi1cdFx0XHRjb25mLVx1MDAzZXJhaWRfZGlza3MgLSBjb25mLVx1MDAzZW1heF9kZWdyYWRlZCk7XG4mIzQzO1x0XHRcdGNvbmYtXHUwMDNlcmFpZF9kaXNrcyAtIGNvbmYtXHUwMDNlbWF4X2RlZ3JhZGVkLCBOVUxMKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDRmNzkwNWMzNDEyYjguLmI3NWU4NTI5MWUyOTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTEwMSw2ICYjNDM7MTEwMSwzMiBAQCBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKTtcbiBcdHJldHVybiBxLVx1MDAzZWxpbWl0cztcbiB9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZV90cnlsb2NrIC0gdHJ5IHRvIHN0YXJ0IGFuIGF0b21pYyB1cGRhdGUgb2YgcXVldWVcbiYjNDM7ICpcdGxpbWl0c1xuJiM0MzsgKiBAcTpcdFx0cXVldWUgdG8gdXBkYXRlXG4mIzQzOyAqIEBsaW06XHRyZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgbGltaXRzIG9uIHN1Y2Nlc3NcbiYjNDM7ICpcbiYjNDM7ICogTGlrZSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKCksIGJ1dCBmYWlscyBpbnN0ZWFkIG9mIHdhaXRpbmcgd2hlbiBhbm90aGVyXG4mIzQzOyAqIHVwZGF0ZSBpcyBpbiBmbGlnaHQuICBGb3IgY2FsbGVycyB0aGF0IG11c3Qgbm90IGJsb2NrIG9uIHEtXHUwMDNlbGltaXRzX2xvY2tcbiYjNDM7ICogYmVjYXVzZSB0aGV5IGhvbGQgc29tZXRoaW5nIGl0cyBjdXJyZW50IG93bmVyIGlzIHdhaXRpbmcgZm9yLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBwcm9jZXNzIGNvbnRleHQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2xcbiYjNDM7cXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZV90cnlsb2NrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuJiM0MztcdF9fY29uZF9hY3F1aXJlcyh0cnVlLCBcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNnEtXHUwMDNlbGltaXRzX2xvY2spKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQqbGltID0gcS1cdTAwM2VsaW1pdHM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4gXHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkgX19yZWxlYXNlcyhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKTtcbiBpbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9NRCYjMzQ7LAogICAgJiMzNDtNRF9SQUlEMSYjMzQ7LAogICAgJiMzNDtNRF9SQUlEMTAmIzM0OywKICAgICYjMzQ7TURfUkFJRDQ1NiYjMzQ7LAogICAgJiMzNDtNRF9MSU5FQVImIzM0OywKICAgICYjMzQ7RE1fUkFJRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21kZGV2X3N0YWNrX3JkZXZfaW50byYjMzQ7LAogICAgJiMzNDttZGRldl91cGRhdGVfaW9fb3B0JiMzNDssCiAgICAmIzM0O21kX2FkZF9uZXdfZGlzayYjMzQ7LAogICAgJiMzNDtyZW1vdmVfYW5kX2FkZF9zcGFyZXMmIzM0OywKICAgICYjMzQ7cmRldl9hdHRyX3N0b3JlJiMzNDssCiAgICAmIzM0O21kX3N0YXJ0X3N5bmMmIzM0OywKICAgICYjMzQ7cmFpZDFfYWRkX2Rpc2smIzM0OywKICAgICYjMzQ7cmFpZDEwX2FkZF9kaXNrJiMzNDssCiAgICAmIzM0O3JhaWQ1X2FkZF9kaXNrJiMzNDssCiAgICAmIzM0O3JhaWQ1X3N0b3JlX3NraXBfY29weSYjMzQ7LAogICAgJiMzNDtsaW5lYXJfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RydWN0dXJlcyBsb2NrIGFjcXVpc2l0aW9uIGFuZCBxdWV1ZSBsaW1pdHMgcHJvcGFnYXRpb24gaW4gdGhlIE1EIChzb2Z0d2FyZSBSQUlEKSBsYXllciB0byBwcmV2ZW50IGRlYWRsb2NrcyBiZXR3ZWVuIHEtXHUwMDNlbGltaXRzX2xvY2ssIHJlY29uZmlnX211dGV4LCBhbmQgbWRkZXZfc3VzcGVuZC4gSXQgYWx0ZXJzIGRpc2sgYWRkaXRpb24vcmVtb3ZhbCBhbmQgc3lzZnMvaW9jdGwgaGFuZGxpbmcgYWNyb3NzIG11bHRpcGxlIFJBSUQgcGVyc29uYWxpdGllcyAocmFpZDEsIHJhaWQxMCwgcmFpZDUsIGxpbmVhciwgZG0tcmFpZCkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRpc2NvdmVyIHBvdGVudGlhbCBkZWFkbG9ja3MsIGxvY2tpbmcgb3JkZXIgdmlvbGF0aW9ucywgcmFjZSBjb25kaXRpb25zLCBvciBzdGF0ZSBjb3JydXB0aW9ucyBkdXJpbmcgY29uY3VycmVudCBSQUlEIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYzYzZiZjI2NmEyNGNmNTc1NGI3YmMwNDUwMTFlNzQzZDJlM2Q3N2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE4OjEzOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkLmMgYi9kcml2ZXJzL21kL2RtLXJhaWQuYwppbmRleCA4ZjVhNWUxMzQyYTk1Li4yMWExOTIyYmVlNGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXJhaWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL2RtLXJhaWQuYwpAQCAtMzkyMyw3ICYjNDM7MzkyMyw3IEBAIHN0YXRpYyB2b2lkIGF0dGVtcHRfcmVzdG9yZV9vZl9mYXVsdHlfZGV2aWNlcyhzdHJ1Y3QgcmFpZF9zZXQgKnJzKQogCQkJY2xlYXJfYml0KEZhdWx0eSwgJmFtcDtyLSZndDtmbGFncyk7CiAJCQljbGVhcl9iaXQoV3JpdGVFcnJvclNlZW4sICZhbXA7ci0mZ3Q7ZmxhZ3MpOwogCi0JCQlpZiAobWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhtZGRldiwgcikpIHsKJiM0MzsJCQlpZiAobWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhtZGRldiwgciwgTlVMTCkpIHsKIAkJCQkvKiBGYWlsZWQgdG8gcmV2aXZlIHRoaXMgZGV2aWNlLCB0cnkgbmV4dCAqLwogCQkJCXItJmd0O3JhaWRfZGlzayA9IHItJmd0O3NhdmVkX3JhaWRfZGlzayA9IC0xOwogCQkJCXItJmd0O2ZsYWdzID0gZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLWF1dG9kZXRlY3QuYyBiL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jCmluZGV4IDRiODAxNjVhZmQyMzMuLjkyOTUxMzEwOTY1N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jCkBAIC0yMTMsNyAmIzQzOzIxMyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtZF9zZXR1cF9kcml2ZShzdHJ1Y3QgbWRfc2V0dXBfYXJncyAqYXJncykKIAkJCQkoMSAmbHQ7Jmx0OyBNRF9ESVNLX0FDVElWRSkgfCAoMSAmbHQ7Jmx0OyBNRF9ESVNLX1NZTkMpOwogCQl9CiAKLQkJbWRfYWRkX25ld19kaXNrKG1kZGV2LCAmYW1wO2RpbmZvKTsKJiM0MzsJCW1kX2FkZF9uZXdfZGlzayhtZGRldiwgJmFtcDtkaW5mbywgTlVMTCk7CiAJfQogCiAJaWYgKCFlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLWxpbmVhci5jIGIvZHJpdmVycy9tZC9tZC1saW5lYXIuYwppbmRleCA3M2IzNjdiNjFiODczLi4xZjQ0YzJkN2RiOTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLWxpbmVhci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvbWQtbGluZWFyLmMKQEAgLTE4Niw3ICYjNDM7MTg2LDggQEAgc3RhdGljIGludCBsaW5lYXJfcnVuKHN0cnVjdCBtZGRldiAqbWRkZXYpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBsaW5lYXJfYWRkKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KQomIzQzO3N0YXRpYyBpbnQgbGluZWFyX2FkZChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldiwKJiM0MzsJCSAgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAkvKiBBZGRpbmcgYSBkcml2ZSB0byBhIGxpbmVhciBhcnJheSBhbGxvd3MgdGhlIGFycmF5IHRvIGdyb3cuCiAJICogSXQgaXMgcGVybWl0dGVkIGlmIHRoZSBuZXcgZHJpdmUgaGFzIGEgbWF0Y2hpbmcgc3VwZXJibG9jawpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDY4MGIzNGE2M2NiM2QuLmM0MDU0ZDA2ZDEwNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmMKQEAgLTk0LDggJiM0Mzs5NCw4IEBAIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZXN5bmNfd2FpdCk7CiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWRfbWlzY193cTsKIAotc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwKLQkJCQkgc3RydWN0IG1kX3JkZXYgKnRoaXMpOwomIzQzO3N0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICp0aGlzLAomIzQzOwkJCQkgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTsKIHN0YXRpYyB2b2lkIG1kZGV2X2RldGFjaChzdHJ1Y3QgbWRkZXYgKm1kZGV2KTsKIHN0YXRpYyB2b2lkIGV4cG9ydF9yZGV2KHN0cnVjdCBtZF9yZGV2ICpyZGV2KTsKIHN0YXRpYyB2b2lkIG1kX3dha2V1cF90aHJlYWRfZGlyZWN0bHkoc3RydWN0IG1kX3RocmVhZCBfX3JjdSAqKnRocmVhZCk7CkBAIC0yOTgxLDcgJiM0MzsyOTgxLDcgQEAgdm9pZCBtZF91cGRhdGVfc2Ioc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZvcmNlX2NoYW5nZSkKIH0KIEVYUE9SVF9TWU1CT0wobWRfdXBkYXRlX3NiKTsKIAotc3RhdGljIGludCBhZGRfYm91bmRfcmRldihzdHJ1Y3QgbWRfcmRldiAqcmRldikKJiM0MztzdGF0aWMgaW50IGFkZF9ib3VuZF9yZGV2KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJc3RydWN0IG1kZGV2ICptZGRldiA9IHJkZXYtJmd0O21kZGV2OwogCWludCBlcnIgPSAwOwpAQCAtMjk5NCw3ICYjNDM7Mjk5NCw3IEBAIHN0YXRpYyBpbnQgYWRkX2JvdW5kX3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJCSAqLwogCQlzdXBlcl90eXBlc1ttZGRldi0mZ3Q7bWFqb3JfdmVyc2lvbl0uCiAJCQl2YWxpZGF0ZV9zdXBlcihtZGRldiwgTlVMTC8qZnJlc2hlc3QqLywgcmRldik7Ci0JCWVyciA9IG1kZGV2LSZndDtwZXJzLSZndDtob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYpOwomIzQzOwkJZXJyID0gbWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhtZGRldiwgcmRldiwgbGltKTsKIAkJaWYgKGVycikgewogCQkJbWRfa2lja19yZGV2X2Zyb21fYXJyYXkocmRldik7CiAJCQlyZXR1cm4gZXJyOwpAQCAtMzAzMyw3ICYjNDM7MzAzMywxMyBAQCBzdGF0aWMgaW50IGNtZF9tYXRjaChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnN0cikKIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5IHsKIAlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CiAJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBtZF9yZGV2ICosIGNoYXIgKik7Ci0Jc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiYjNDM7CS8qCiYjNDM7CSAqIEBsaW06IGEgcXVldWUgbGltaXRzIHVwZGF0ZSB0aGUgY2FsbGVyIG93bnMsIG9yIE5VTEwuICBTdG9yZXMgdGhhdAomIzQzOwkgKiBjYW4gYWRkIGEgbGVnIHRvIHRoZSBhcnJheSBtdXN0IHN0YWNrIGludG8gaXQgcmF0aGVyIHRoYW4gdGFrZQomIzQzOwkgKiBxLSZndDtsaW1pdHNfbG9jayB0aGVtc2VsdmVzLCBzZWUgbWRfc3RhcnRfc3luYygpLgomIzQzOwkgKi8KJiM0MzsJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbiwKJiM0MzsJCQkgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTsKIH07CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0zMDc5LDcgJiM0MzszMDg1LDggQEAgc3RhdGVfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIH0KIAogc3RhdGljIHNzaXplX3QKLXN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7c3RhdGVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKJiM0MzsJICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAkvKiBjYW4gd3JpdGUKIAkgKiAgZmF1bHR5ICAtIHNpbXVsYXRlcyBhbiBlcnJvcgpAQCAtMzExMCw3ICYjNDM7MzExNyw3IEBAIHN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiAJfSBlbHNlIGlmIChjbWRfbWF0Y2goYnVmLCAmIzM0O3JlbW92ZSYjMzQ7KSkgewogCQlpZiAocmRldi0mZ3Q7bWRkZXYtJmd0O3BlcnMpIHsKIAkJCWNsZWFyX2JpdChCbG9ja2VkLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKLQkJCXJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LSZndDttZGRldiwgcmRldik7CiYjNDM7CQkJcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtJmd0O21kZGV2LCByZGV2LCBsaW0pOwogCQl9CiAJCWlmIChyZGV2LSZndDtyYWlkX2Rpc2sgJmd0Oz0gMCkKIAkJCWVyciA9IC1FQlVTWTsKQEAgLTMyMjksNyAmIzQzOzMyMzYsNyBAQCBzdGF0ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogCQkJaWYgKCFtZGRldl9pc19jbHVzdGVyZWQocmRldi0mZ3Q7bWRkZXYpIHx8CiAJCQkgICAgKGVyciA9IG1kZGV2LSZndDtjbHVzdGVyX29wcy0mZ3Q7Z2F0aGVyX2JpdG1hcHMocmRldikpID09IDApIHsKIAkJCQljbGVhcl9iaXQoRmF1bHR5LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKLQkJCQllcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTsKJiM0MzsJCQkJZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTsKIAkJCX0KIAkJfSBlbHNlCiAJCQllcnIgPSAtRUJVU1k7CkBAIC0zMjU3LDcgJiM0MzszMjY0LDggQEAgZXJyb3JzX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpCiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1lcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0MztlcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKJiM0MzsJICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJdW5zaWduZWQgaW50IG47CiAJaW50IHJ2OwpAQCAtMzI4Myw3ICYjNDM7MzI5MSw4IEBAIHNsb3Rfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIH0KIAogc3RhdGljIHNzaXplX3QKLXNsb3Rfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0MztzbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCiYjNDM7CSAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAlpbnQgc2xvdDsKIAlpbnQgZXJyOwpAQCAtMzMxNCw3ICYjNDM7MzMyMyw3IEBAIHNsb3Rfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIAkJaWYgKHJkZXYtJmd0O21kZGV2LSZndDtwZXJzLSZndDtob3RfcmVtb3ZlX2Rpc2sgPT0gTlVMTCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQljbGVhcl9iaXQoQmxvY2tlZCwgJmFtcDtyZGV2LSZndDtmbGFncyk7Ci0JCXJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LSZndDttZGRldiwgcmRldik7CiYjNDM7CQlyZW1vdmVfYW5kX2FkZF9zcGFyZXMocmRldi0mZ3Q7bWRkZXYsIHJkZXYsIGxpbSk7CiAJCWlmIChyZGV2LSZndDtyYWlkX2Rpc2sgJmd0Oz0gMCkKIAkJCXJldHVybiAtRUJVU1k7CiAJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmYW1wO3JkZXYtJmd0O21kZGV2LSZndDtyZWNvdmVyeSk7CkBAIC0zMzQ0LDcgJiM0MzszMzUzLDggQEAgc2xvdF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogCQkJcmRldi0mZ3Q7c2F2ZWRfcmFpZF9kaXNrID0gLTE7CiAJCWNsZWFyX2JpdChJbl9zeW5jLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKIAkJY2xlYXJfYml0KEJpdG1hcF9zeW5jLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKLQkJZXJyID0gcmRldi0mZ3Q7bWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhyZGV2LSZndDttZGRldiwgcmRldik7CiYjNDM7CQllcnIgPSByZGV2LSZndDttZGRldi0mZ3Q7cGVycy0mZ3Q7aG90X2FkZF9kaXNrKHJkZXYtJmd0O21kZGV2LCByZGV2LAomIzQzOwkJCQkJCSAgICAgbGltKTsKIAkJaWYgKGVycikgewogCQkJcmRldi0mZ3Q7cmFpZF9kaXNrID0gLTE7CiAJCQlyZXR1cm4gZXJyOwpAQCAtMzM3Nyw3ICYjNDM7MzM4Nyw4IEBAIG9mZnNldF9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKQogfQogCiBzdGF0aWMgc3NpemVfdAotb2Zmc2V0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7b2Zmc2V0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCiYjNDM7CSAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQ7CiAJaWYgKGtzdHJ0b3VsbChidWYsIDEwLCAmYW1wO29mZnNldCkgJmx0OyAwKQpAQCAtMzQwMyw3ICYjNDM7MzQxNCw4IEBAIHN0YXRpYyBzc2l6ZV90IG5ld19vZmZzZXRfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIH0KIAogc3RhdGljIHNzaXplX3QgbmV3X29mZnNldF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwKLQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7CQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKJiM0MzsJCQkJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBuZXdfb2Zmc2V0OwogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSByZGV2LSZndDttZGRldjsKQEAgLTM1MTAsNyAmIzQzOzM1MjIsOCBAQCBzdGF0aWMgaW50IHN0cmljdF9ibG9ja3NfdG9fc2VjdG9ycyhjb25zdCBjaGFyICpidWYsIHNlY3Rvcl90ICpzZWN0b3JzKQogfQogCiBzdGF0aWMgc3NpemVfdAotcmRldl9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7cmRldl9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCiYjNDM7CQlzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJc3RydWN0IG1kZGV2ICpteV9tZGRldiA9IHJkZXYtJmd0O21kZGV2OwogCXNlY3Rvcl90IG9sZHNlY3RvcnMgPSByZGV2LSZndDtzZWN0b3JzOwpAQCAtMzU3Miw3ICYjNDM7MzU4NSw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpCiAJcmV0dXJuIHNwcmludGYocGFnZSwgJiMzNDslbGx1XG4mIzM0OywgcmVjb3Zlcnlfc3RhcnQpOwogfQogCi1zdGF0aWMgc3NpemVfdCByZWNvdmVyeV9zdGFydF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQomIzQzO3N0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCiYjNDM7CQkJCSAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHJlY292ZXJ5X3N0YXJ0OwogCkBAIC0zNjExLDcgJiM0MzszNjI1LDkgQEAgc3RhdGljIHNzaXplX3QgYmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIHsKIAlyZXR1cm4gYmFkYmxvY2tzX3Nob3coJmFtcDtyZGV2LSZndDtiYWRibG9ja3MsIHBhZ2UsIDApOwogfQotc3RhdGljIHNzaXplX3QgYmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pCiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgYmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4sCiYjNDM7CQkJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCWludCBydiA9IGJhZGJsb2Nrc19zdG9yZSgmYW1wO3JkZXYtJmd0O2JhZGJsb2NrcywgcGFnZSwgbGVuLCAwKTsKIAkvKiBNYXliZSB0aGF0IGFjayB3YXMgYWxsIHdlIG5lZWRlZCAqLwpAQCAtMzYyNiw3ICYjNDM7MzY0Miw5IEBAIHN0YXRpYyBzc2l6ZV90IHViYl9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKQogewogCXJldHVybiBiYWRibG9ja3Nfc2hvdygmYW1wO3JkZXYtJmd0O2JhZGJsb2NrcywgcGFnZSwgMSk7CiB9Ci1zdGF0aWMgc3NpemVfdCB1YmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pCiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgdWJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLAomIzQzOwkJCSBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJcmV0dXJuIGJhZGJsb2Nrc19zdG9yZSgmYW1wO3JkZXYtJmd0O2JhZGJsb2NrcywgcGFnZSwgbGVuLCAxKTsKIH0KQEAgLTM2NDAsNyAmIzQzOzM2NTgsOCBAQCBwcGxfc2VjdG9yX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpCiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1wcGxfc2VjdG9yX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7cHBsX3NlY3Rvcl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLAomIzQzOwkJIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgc2VjdG9yOwogCkBAIC0zNjc5LDcgJiM0MzszNjk4LDggQEAgcHBsX3NpemVfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIH0KIAogc3RhdGljIHNzaXplX3QKLXBwbF9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7cHBsX3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKJiM0MzsJICAgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIApAQCAtMzc0MCw2ICYjNDM7Mzc2MCw5IEBAIHJkZXZfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAlzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHJkZXZfc3lzZnNfZW50cnksIGF0dHIpOwogCXN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBtZF9yZGV2LCBrb2JqKTsKIAlzdHJ1Y3Qga2VybmZzX25vZGUgKmtuID0gTlVMTDsKJiM0MzsJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7CiAJYm9vbCBzdXNwZW5kID0gZmFsc2U7CiAJc3NpemVfdCBydjsKIAlzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gUkVBRF9PTkNFKHJkZXYtJmd0O21kZGV2KTsKQEAgLTM3NjAsMTUgJiM0MzszNzgzLDM3IEBAIHJkZXZfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAkJCXN1c3BlbmQgPSB0cnVlOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBUaGVzZSBjYW4gYWRkIGEgbGVnIGJhY2ssIHdoaWNoIHN0YWNrcyBpdHMgbGltaXRzOyB0aGUgb3RoZXIKJiM0MzsJICogc3RhdGVfc3RvcmUoKSB2YWx1ZXMgbmV2ZXIgcmVhY2ggLSZndDtob3RfYWRkX2Rpc2soKS4gIHEtJmd0O2xpbWl0c19sb2NrCiYjNDM7CSAqIG5lc3RzIG91dHNpZGUgdGhlIGxvY2sgYW5kIHRoZSBzdXNwZW5kLCBzZWUgbWRfc3RhcnRfc3luYygpLgomIzQzOwkgKi8KJiM0MzsJaWYgKChlbnRyeS0mZ3Q7c3RvcmUgPT0gc2xvdF9zdG9yZSB8fAomIzQzOwkgICAgIChlbnRyeS0mZ3Q7c3RvcmUgPT0gc3RhdGVfc3RvcmUgJmFtcDsmYW1wOwomIzQzOwkgICAgICAoY21kX21hdGNoKHBhZ2UsICYjMzQ7cmVtb3ZlJiMzNDspIHx8IGNtZF9tYXRjaChwYWdlLCAmIzM0O3JlLWFkZCYjMzQ7KSkpKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhbWRkZXZfaXNfZG0obWRkZXYpKSB7CiYjNDM7CQlxID0gbWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlOwomIzQzOwkJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTsKJiM0MzsJCWxpbXAgPSAmYW1wO2xpbTsKJiM0MzsJfQomIzQzOwogCXJ2ID0gc3VzcGVuZCA/IG1kZGV2X3N1c3BlbmRfYW5kX2xvY2sobWRkZXYpIDogbWRkZXZfbG9jayhtZGRldik7CiAJaWYgKCFydikgewogCQlpZiAocmRldi0mZ3Q7bWRkZXYgPT0gTlVMTCkKIAkJCXJ2ID0gLUVOT0RFVjsKIAkJZWxzZQotCQkJcnYgPSBlbnRyeS0mZ3Q7c3RvcmUocmRldiwgcGFnZSwgbGVuZ3RoKTsKJiM0MzsJCQlydiA9IGVudHJ5LSZndDtzdG9yZShyZGV2LCBwYWdlLCBsZW5ndGgsIGxpbXApOwomIzQzOwkJLyogYXBwbHkgdGhlIGxpbWl0cyBiZWZvcmUgdGhlIGFycmF5IHRha2VzIEkvTyBhZ2FpbiAqLwomIzQzOwkJaWYgKGxpbXApIHsKJiM0MzsJCQlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTsKJiM0MzsJCQlsaW1wID0gTlVMTDsKJiM0MzsJCX0KIAkJc3VzcGVuZCA/IG1kZGV2X3VubG9ja19hbmRfcmVzdW1lKG1kZGV2KSA6IG1kZGV2X3VubG9jayhtZGRldik7CiAJfQogCiYjNDM7CWlmIChsaW1wKQomIzQzOwkJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltcCk7CiYjNDM7CiAJaWYgKGtuKQogCQlzeXNmc191bmJyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtuKTsKIApAQCAtNjI3NSwyMCAmIzQzOzYzMjAsODkgQEAgaW50IG1kZGV2X3N0YWNrX25ld19yZGV2KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwobWRkZXZfc3RhY2tfbmV3X3JkZXYpOwogCiYjNDM7LyoKJiM0MzsgKiBTdGFjayBhIG5ldyByZGV2IGludG8gbGltaXRzIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyBsaW1pdHNfbG9jayBmb3IgYW5kCiYjNDM7ICogd2lsbCBjb21taXQgaXRzZWxmLiAgVXNlZCBmcm9tIHBhdGhzIHRoYXQgbXVzdCB0YWtlIGxpbWl0c19sb2NrIGJlZm9yZQomIzQzOyAqIHF1aWVzY2luZyB0aGUgYXJyYXksIHNlZSBtZF9zdGFydF9zeW5jKCkuCiYjNDM7ICovCiYjNDM7aW50IG1kZGV2X3N0YWNrX3JkZXZfaW50byhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldiwKJiM0MzsJCQkgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgdG1wID0gKmxpbTsKJiM0MzsKJiM0MzsJaWYgKG1kZGV2X2lzX2RtKG1kZGV2KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocXVldWVfbG9naWNhbF9ibG9ja19zaXplKHJkZXYtJmd0O2JkZXYtJmd0O2JkX2Rpc2stJmd0O3F1ZXVlKSAmZ3Q7CiYjNDM7CSAgICBxdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUobWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlKSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IGluY29tcGF0aWJsZSBsb2dpY2FsX2Jsb2NrX3NpemUsIGNhbiBub3QgYWRkXG4mIzM0OywKJiM0MzsJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXF1ZXVlX2xpbWl0c19zdGFja19iZGV2KCZhbXA7dG1wLCByZGV2LSZndDtiZGV2LCByZGV2LSZndDtkYXRhX29mZnNldCwKJiM0MzsJCQkJbWRkZXYtJmd0O2dlbmRpc2stJmd0O2Rpc2tfbmFtZSk7CiYjNDM7CiYjNDM7CWlmICghcXVldWVfbGltaXRzX3N0YWNrX2ludGVncml0eV9iZGV2KCZhbXA7dG1wLCByZGV2LSZndDtiZGV2KSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IGluY29tcGF0aWJsZSBpbnRlZ3JpdHkgcHJvZmlsZSBmb3IgJXBnXG4mIzM0OywKJiM0MzsJCSAgICAgICBtZG5hbWUobWRkZXYpLCByZGV2LSZndDtiZGV2KTsKJiM0MzsJCXJldHVybiAtRU5YSU87CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmxpbSA9IHRtcDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3N0YWNrX3JkZXZfaW50byk7CiYjNDM7CiYjNDM7LyogZm9yIGNhbGxlcnMgdGhhdCBtdXN0IG5vdCB3YWl0IGZvciBxLSZndDtsaW1pdHNfbG9jaywgc2VlIG1kX3N0YXJ0X3N5bmMoKSAqLwomIzQzO3N0YXRpYyBib29sIG1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKHN0cnVjdCBtZGRldiAqbWRkZXYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKJiM0MzsKJiM0MzsJaWYgKG1kZGV2X2lzX2RtKG1kZGV2KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcSA9IG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayhxLCBsaW0pOwomIzQzO30KJiM0MzsKIC8qIHVwZGF0ZSB0aGUgb3B0aW1hbCBJL08gc2l6ZSBhZnRlciBhIHJlc2hhcGUgKi8KLXZvaWQgbWRkZXZfdXBkYXRlX2lvX29wdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB1bnNpZ25lZCBpbnQgbnJfc3RyaXBlcykKJiM0Mzt2b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMsCiYjNDM7CQkJIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKLQlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyBvd247CiAKIAlpZiAobWRkZXZfaXNfZG0obWRkZXYpKQogCQlyZXR1cm47CiAKJiM0MzsJLyoKJiM0MzsJICogV2l0aCBhbiB1cGRhdGUgb3duZWQgYnkgdGhlIGNhbGxlciBqdXN0IGNoYW5nZSBpdCBpbiBwbGFjZTsgaXQgaXMKJiM0MzsJICogY29tbWl0dGVkLCBhbmQgdGhlIGFycmF5IHJlc3VtZWQsIGJ5IHdob2V2ZXIgc3RhcnRlZCBpdC4gIFRha2luZwomIzQzOwkgKiBxLSZndDtsaW1pdHNfbG9jayBoZXJlIHdvdWxkIG5lc3QgaXQgaW5zaWRlIHJlY29uZmlnX211dGV4IGFuZCB0aGUKJiM0MzsJICogc3VzcGVuZCwgd2hpY2ggZGVhZGxvY2tzLCBzZWUgbWRfc3RhcnRfc3luYygpLgomIzQzOwkgKi8KJiM0MzsJaWYgKGxpbSkgewomIzQzOwkJbGltLSZndDtpb19vcHQgPSBsaW0tJmd0O2lvX21pbiAqIG5yX3N0cmlwZXM7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ2FsbGVkIGZyb20gdGhlIHN5bmMgdGhyZWFkLCB3aGljaCBtZF9yZWFwX3N5bmNfdGhyZWFkKCkgd2FpdHMgZm9yCiYjNDM7CSAqIHdpdGggcmVjb25maWdfbXV0ZXggaGVsZCwgc28gZG9uJiMzOTt0IHdhaXQgZm9yIHEtJmd0O2xpbWl0c19sb2NrIGhlcmUuCiYjNDM7CSAqIGlvX29wdCBpcyBhIGhpbnQsIHNraXBwaW5nIGl0IG9uIGEgY29udGVuZGVkIHBhc3MgaXMgZmluZS4KJiM0MzsJICovCiYjNDM7CWlmICghbWRkZXZfc3RhY2tfbGltaXRzX3RyeWxvY2sobWRkZXYsICZhbXA7b3duKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKiBkb24mIzM5O3QgYm90aGVyIHVwZGF0aW5nIGlvX29wdCBpZiB3ZSBjYW4mIzM5O3Qgc3VzcGVuZCB0aGUgYXJyYXkgKi8KLQlpZiAobWRkZXZfc3VzcGVuZChtZGRldiwgZmFsc2UpICZsdDsgMCkKJiM0MzsJaWYgKG1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKSAmbHQ7IDApIHsKJiM0MzsJCXF1ZXVlX2xpbWl0c19jYW5jZWxfdXBkYXRlKG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZSk7CiAJCXJldHVybjsKLQlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZSk7Ci0JbGltLmlvX29wdCA9IGxpbS5pb19taW4gKiBucl9zdHJpcGVzOwotCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZSwgJmFtcDtsaW0pOwomIzQzOwl9CiYjNDM7CW93bi5pb19vcHQgPSBvd24uaW9fbWluICogbnJfc3RyaXBlczsKJiM0MzsJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlLCAmYW1wO293bik7CiAJbWRkZXZfcmVzdW1lKG1kZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3VwZGF0ZV9pb19vcHQpOwpAQCAtNzQ4Niw3ICYjNDM7NzYwMCw4IEBAIHN0YXRpYyBpbnQgZ2V0X2Rpc2tfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB2b2lkIF9fdXNlciAqIGFyZykKIAlyZXR1cm4gMDsKIH0KIAotaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKQomIzQzO2ludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbywKJiM0MzsJCSAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJc3RydWN0IG1kX3JkZXYgKnJkZXY7CiAJZGV2X3QgZGV2ID0gTUtERVYoaW5mby0mZ3Q7bWFqb3IsaW5mby0mZ3Q7bWlub3IpOwpAQCAtNzYzNCwxMSAmIzQzOzc3NDksMTEgQEAgaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKQogCQkJCWlmIChlcnIpCiAJCQkJCW1kZGV2LSZndDtjbHVzdGVyX29wcy0mZ3Q7YWRkX25ld19kaXNrX2NhbmNlbChtZGRldik7CiAJCQkJZWxzZQotCQkJCQllcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTsKJiM0MzsJCQkJCWVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYsIGxpbSk7CiAJCQl9CiAKIAkJfSBlbHNlIGlmICghZXJyKQotCQkJZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldik7CiYjNDM7CQkJZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTsKIAogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTc2OTEsNyAmIzQzOzc4MDYsOCBAQCBpbnQgbWRfYWRkX25ld19kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgKmluZm8pCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIGRldl90IGRldikKJiM0MztzdGF0aWMgaW50IGhvdF9yZW1vdmVfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBkZXZfdCBkZXYsCiYjNDM7CQkJICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXN0cnVjdCBtZF9yZGV2ICpyZGV2OwogCkBAIC03NzA2LDcgJiM0Mzs3ODIyLDcgQEAgc3RhdGljIGludCBob3RfcmVtb3ZlX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgZGV2X3QgZGV2KQogCQlnb3RvIGtpY2tfcmRldjsKIAogCWNsZWFyX2JpdChCbG9ja2VkLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKLQlyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIHJkZXYpOwomIzQzOwlyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIHJkZXYsIGxpbSk7CiAKIAlpZiAocmRldi0mZ3Q7cmFpZF9kaXNrICZndDs9IDApCiAJCWdvdG8gYnVzeTsKQEAgLTgyOTEsNiAmIzQzOzg0MDcsMjIgQEAgc3RhdGljIGlubGluZSBpbnQgbWRfaW9jdGxfdmFsaWQodW5zaWduZWQgaW50IGNtZCkKIAl9CiB9CiAKJiM0MzsvKgomIzQzOyAqIENvbW1hbmRzIHRoYXQgY2FuIHJlYWNoIC0mZ3Q7aG90X2FkZF9kaXNrKCkuICBBRERfTkVXX0RJU0sgb25seSBkb2VzIHNvIGZvciBhCiYjNDM7ICogam91cm5hbCBkZXZpY2Ugb3IgYSBwZXJzb25hbGl0eSB3aXRob3V0IC0mZ3Q7aG90X3JlbW92ZV9kaXNrLCBidXQgdGhhdCBkZXBlbmRzCiYjNDM7ICogb24gZGlzayBpbmZvIHN0aWxsIGluIHVzZXIgbWVtb3J5IGhlcmUsIHNvIGl0IGlzIGluY2x1ZGVkIGFzIGEgd2hvbGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgbWRfaW9jdGxfbWF5X2FkZF9kaXNrKHVuc2lnbmVkIGludCBjbWQpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGNtZCkgewomIzQzOwljYXNlIEFERF9ORVdfRElTSzoKJiM0MzsJY2FzZSBIT1RfUkVNT1ZFX0RJU0s6CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIG1kX2lvY3RsX25lZWRfc3VzcGVuZCh1bnNpZ25lZCBpbnQgY21kKQogewogCXN3aXRjaCAoY21kKSB7CkBAIC04MzQ2LDYgJiM0Mzs4NDc4LDkgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsCiAJdW5zaWduZWQgaW50IG5vaW9fZmxhZ3MgPSAwOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltOwomIzQzOwlzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDsKIAlib29sIHN1c3BlbmQ7CiAKIAllcnIgPSBtZF9pb2N0bF92YWxpZChjbWQpOwpAQCAtODM5NiwxMSAmIzQzOzg1MzEsMjAgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsCiAJaWYgKCFtZF9pc19yZHdyKG1kZGV2KSkKIAkJZmx1c2hfd29yaygmYW1wO21kZGV2LSZndDtzeW5jX3dvcmspOwogCiYjNDM7CS8qIHEtJmd0O2xpbWl0c19sb2NrIG5lc3RzIG91dHNpZGUgYm90aCwgc2VlIG1kX3N0YXJ0X3N5bmMoKSAqLwomIzQzOwlpZiAobWRfaW9jdGxfbWF5X2FkZF9kaXNrKGNtZCkgJmFtcDsmYW1wOyAhbWRkZXZfaXNfZG0obWRkZXYpKSB7CiYjNDM7CQlxID0gbWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlOwomIzQzOwkJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTsKJiM0MzsJCWxpbXAgPSAmYW1wO2xpbTsKJiM0MzsJfQomIzQzOwogCXN1c3BlbmQgPSBtZF9pb2N0bF9uZWVkX3N1c3BlbmQoY21kKTsKIAllcnIgPSBzdXNwZW5kID8gbWRkZXZfc3VzcGVuZF9hbmRfbG9jayhtZGRldikgOiBtZGRldl9sb2NrKG1kZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByX2RlYnVnKCYjMzQ7bWQ6IGlvY3RsIGxvY2sgaW50ZXJydXB0ZWQsIHJlYXNvbiAlZCwgY21kICVkXG4mIzM0OywKIAkJCSBlcnIsIGNtZCk7CiYjNDM7CQlpZiAobGltcCkKJiM0MzsJCQlxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShxKTsKIAkJZ290byBvdXQ7CiAJfQogCWlmIChzdXNwZW5kKQpAQCAtODQ0Miw3ICYjNDM7ODU4Niw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLAogCQlnb3RvIHVubG9jazsKIAogCWNhc2UgSE9UX1JFTU9WRV9ESVNLOgotCQllcnIgPSBob3RfcmVtb3ZlX2Rpc2sobWRkZXYsIG5ld19kZWNvZGVfZGV2KGFyZykpOwomIzQzOwkJZXJyID0gaG90X3JlbW92ZV9kaXNrKG1kZGV2LCBuZXdfZGVjb2RlX2RldihhcmcpLCBsaW1wKTsKIAkJZ290byB1bmxvY2s7CiAKIAljYXNlIEFERF9ORVdfRElTSzoKQEAgLTg0NTgsNyAmIzQzOzg2MDIsNyBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSwKIAkJCQkvKiBOZWVkIHRvIGNsZWFyIHJlYWQtb25seSBmb3IgdGhpcyAqLwogCQkJCWJyZWFrOwogCQkJZWxzZQotCQkJCWVyciA9IG1kX2FkZF9uZXdfZGlzayhtZGRldiwgJmFtcDtpbmZvKTsKJiM0MzsJCQkJZXJyID0gbWRfYWRkX25ld19kaXNrKG1kZGV2LCAmYW1wO2luZm8sIGxpbXApOwogCQkJZ290byB1bmxvY2s7CiAJCX0KIAkJYnJlYWs7CkBAIC04NDk2LDcgJiM0Mzs4NjQwLDcgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2luZm8sIGFyZ3AsIHNpemVvZihpbmZvKSkpCiAJCQllcnIgPSAtRUZBVUxUOwogCQllbHNlCi0JCQllcnIgPSBtZF9hZGRfbmV3X2Rpc2sobWRkZXYsICZhbXA7aW5mbyk7CiYjNDM7CQkJZXJyID0gbWRfYWRkX25ld19kaXNrKG1kZGV2LCAmYW1wO2luZm8sIGxpbXApOwogCQlnb3RvIHVubG9jazsKIAl9CiAKQEAgLTg1MjksNiAmIzQzOzg2NzMsOSBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSwKIAkgICAgZXJyICE9IC1FSU5WQUwpCiAJCW1kZGV2LSZndDtob2xkX2FjdGl2ZSA9IDA7CiAKJiM0MzsJaWYgKGxpbXApCiYjNDM7CQlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTsKJiM0MzsKIAlpZiAoc3VzcGVuZCkgewogCQltZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFncyk7CiAJCW1kZGV2X3VubG9ja19hbmRfcmVzdW1lKG1kZGV2KTsKQEAgLTEwMTY3LDggJiM0MzsxMDMxNCw4IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqdGhpcykKIAlyZXR1cm4gcmVtb3ZlZDsKIH0KIAotc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwKLQkJCQkgc3RydWN0IG1kX3JkZXYgKnRoaXMpCiYjNDM7c3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnRoaXMsCiYjNDM7CQkJCSBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJc3RydWN0IG1kX3JkZXYgKnJkZXY7CiAJaW50IHNwYXJlcyA9IDA7CkBAIC0xMDE5MSw3ICYjNDM7MTAzMzgsNyBAQCBzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LAogCQkJY29udGludWU7CiAJCWlmICghdGVzdF9iaXQoSm91cm5hbCwgJmFtcDtyZGV2LSZndDtmbGFncykpCiAJCQlyZGV2LSZndDtyZWNvdmVyeV9vZmZzZXQgPSAwOwotCQlpZiAobWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhtZGRldiwgcmRldikgPT0gMCkgewomIzQzOwkJaWYgKG1kZGV2LSZndDtwZXJzLSZndDtob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYsIGxpbSkgPT0gMCkgewogCQkJLyogZmFpbHVyZSBoZXJlIGlzIE9LICovCiAJCQlzeXNmc19saW5rX3JkZXYobWRkZXYsIHJkZXYpOwogCQkJaWYgKCF0ZXN0X2JpdChKb3VybmFsLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkKQEAgLTEwMjA2LDcgJiM0MzsxMDM1Myw4IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsCiAJcmV0dXJuIHNwYXJlczsKIH0KIAotc3RhdGljIGJvb2wgbWRfY2hvb3NlX3N5bmNfYWN0aW9uKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCAqc3BhcmVzKQomIzQzO3N0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcywKJiM0MzsJCQkJICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJLyogQ2hlY2sgaWYgcmVzaGFwZSBpcyBpbiBwcm9ncmVzcyBmaXJzdC4gKi8KIAlpZiAobWRkZXYtJmd0O3Jlc2hhcGVfcG9zaXRpb24gIT0gTWF4U2VjdG9yKSB7CkBAIC0xMDIzNCw3ICYjNDM7MTAzODIsNyBAQCBzdGF0aWMgYm9vbCBtZF9jaG9vc2Vfc3luY19hY3Rpb24oc3RydWN0IG1kZGV2ICptZGRldiwgaW50ICpzcGFyZXMpCiAJICogYWxzbyByZW1vdmVkIGFuZCByZS1hZGRlZCwgdG8gYWxsb3cgdGhlIHBlcnNvbmFsaXR5IHRvIGZhaWwgdGhlCiAJICogcmUtYWRkLgogCSAqLwotCSpzcGFyZXMgPSByZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIE5VTEwpOwomIzQzOwkqc3BhcmVzID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMLCBsaW0pOwogCWlmICgqc3BhcmVzIHx8IHRlc3RfYml0KE1EX1JFQ09WRVJZX0xBWllfUkVDT1ZFUiwgJmFtcDttZGRldi0mZ3Q7cmVjb3ZlcnkpKSB7CiAJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmYW1wO21kZGV2LSZndDtyZWNvdmVyeSk7CiAJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9DSEVDSywgJmFtcDttZGRldi0mZ3Q7cmVjb3ZlcnkpOwpAQCAtMTAyNTYsNiAmIzQzOzEwNDA0LDkgQEAgc3RhdGljIGJvb2wgbWRfY2hvb3NlX3N5bmNfYWN0aW9uKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCAqc3BhcmVzKQogc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQogewogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSBjb250YWluZXJfb2Yod3MsIHN0cnVjdCBtZGRldiwgc3luY193b3JrKTsKJiM0MzsJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7CiAJaW50IHNwYXJlcyA9IDA7CiAJYm9vbCBzdXNwZW5kID0gZmFsc2U7CiAJdW5zaWduZWQgaW50IG5vaW9fZmxhZ3MgPSAwOwpAQCAtMTAyNjcsNiAmIzQzOzEwNDE4LDE3IEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAkgKi8KIAlpZiAoKG1kZGV2LSZndDtyZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvciB8fCAhbWRfaXNfcmR3cihtZGRldikpICZhbXA7JmFtcDsKIAkgICAgbWRfc3BhcmVzX25lZWRfY2hhbmdlKG1kZGV2KSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEFkZGluZyBhIHNwYXJlIGJlbG93IHN0YWNrcyBpdHMgbGltaXRzLCB3aGljaCBuZWVkcwomIzQzOwkJICogcS0mZ3Q7bGltaXRzX2xvY2suICBUYWtlIGl0IGJlZm9yZSBzdXNwZW5kaW5nOiBpdHMgaG9sZGVyCiYjNDM7CQkgKiB3YWl0cyBpbiBibGtfbXFfZnJlZXplX3F1ZXVlKCkgZm9yIEkvTyB0aGF0CiYjNDM7CQkgKiBtZGRldi0mZ3Q7c3VzcGVuZGVkIGhvbGRzIGJhY2ssIHNvIHRoZSBvdGhlciBvcmRlciBkZWFkbG9ja3MuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghbWRkZXZfaXNfZG0obWRkZXYpKSB7CiYjNDM7CQkJcSA9IG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZTsKJiM0MzsJCQlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpOwomIzQzOwkJCWxpbXAgPSAmYW1wO2xpbTsKJiM0MzsJCX0KIAkJc3VzcGVuZCA9IHRydWU7CiAJCW1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKTsKIAkJbm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpOwpAQCAtMTAyODEsNiAmIzQzOzEwNDQzLDEyIEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAlpZiAoIXN1c3BlbmQgJmFtcDsmYW1wOyAobWRkZXYtJmd0O3Jlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yIHx8ICFtZF9pc19yZHdyKG1kZGV2KSkgJmFtcDsmYW1wOwogCSAgICBtZF9zcGFyZXNfbmVlZF9jaGFuZ2UobWRkZXYpKSB7CiAJCW1kZGV2X3VubG9jayhtZGRldik7CiYjNDM7CQkvKiBzZWUgYWJvdmU6IHEtJmd0O2xpbWl0c19sb2NrIG5lc3RzIG91dHNpZGUgYm90aCAqLwomIzQzOwkJaWYgKCFtZGRldl9pc19kbShtZGRldikpIHsKJiM0MzsJCQlxID0gbWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlOwomIzQzOwkJCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7CiYjNDM7CQkJbGltcCA9ICZhbXA7bGltOwomIzQzOwkJfQogCQltZGRldl9zdXNwZW5kX2FuZF9sb2NrX25vaW50cihtZGRldik7CiAJCXN1c3BlbmQgPSB0cnVlOwogCQlub2lvX2ZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7CkBAIC0xMDI5NCwxMSAmIzQzOzEwNDYyLDExIEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAkJICogQXMgd2Ugb25seSBhZGQgZGV2aWNlcyB0aGF0IGFyZSBhbHJlYWR5IGluLXN5bmMsIHdlIGNhbgogCQkgKiBhY3RpdmF0ZSB0aGUgc3BhcmVzIGltbWVkaWF0ZWx5LgogCQkgKi8KLQkJcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMKTsKJiM0MzsJCXJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldiwgTlVMTCwgbGltcCk7CiAJCWdvdG8gbm90X3J1bm5pbmc7CiAJfQogCi0JaWYgKCFtZF9jaG9vc2Vfc3luY19hY3Rpb24obWRkZXYsICZhbXA7c3BhcmVzKSkKJiM0MzsJaWYgKCFtZF9jaG9vc2Vfc3luY19hY3Rpb24obWRkZXYsICZhbXA7c3BhcmVzLCBsaW1wKSkKIAkJZ290byBub3RfcnVubmluZzsKIAogCWlmICghbWRkZXYtJmd0O3BlcnMtJmd0O3N5bmNfcmVxdWVzdCkKQEAgLTEwMzI5LDYgJiM0MzsxMDQ5Nyw4IEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAkgKiAgICAgaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgyMDAKIAkgKiBUaGVyZWZvcmUsIHVzZSBfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpLgogCSAqLwomIzQzOwlpZiAobGltcCkKJiM0MzsJCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApOwogCWlmIChzdXNwZW5kKSB7CiAJCW1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWdzKTsKIAkJX19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKTsKQEAgLTEwMzUxLDYgJiM0MzsxMDUyMSw4IEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAkgKiAgICAgaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgyMDAKIAkgKiBUaGVyZWZvcmUsIHVzZSBfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpLgogCSAqLwomIzQzOwlpZiAobGltcCkKJiM0MzsJCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApOwogCWlmIChzdXNwZW5kKSB7CiAJCW1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWdzKTsKIAkJX19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKTsKQEAgLTEwNzkzLDYgJiM0MzsxMDk2NSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG1kX2luaXQodm9pZCkKIAogc3RhdGljIHZvaWQgY2hlY2tfc2JfY2hhbmdlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldikKIHsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07CiAJc3RydWN0IG1kcF9zdXBlcmJsb2NrXzEgKnNiID0gcGFnZV9hZGRyZXNzKHJkZXYtJmd0O3NiX3BhZ2UpOwogCXN0cnVjdCBtZF9yZGV2ICpyZGV2MiwgKnRtcDsKIAlpbnQgcm9sZSwgcmV0OwpAQCAtMTA4NDksNyAmIzQzOzExMDIyLDI0IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3NiX2NoYW5nZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJCQkJCXJkZXYyLSZndDtzYXZlZF9yYWlkX2Rpc2sgPSAtMTsKIAkJCQllbHNlCiAJCQkJCXJkZXYyLSZndDtzYXZlZF9yYWlkX2Rpc2sgPSByb2xlOwotCQkJCXJldCA9IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldiwgcmRldjIpOwomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiByZWNvbmZpZ19tdXRleCBpcyBoZWxkLCBzbyBkb24mIzM5O3Qgd2FpdCBmb3IKJiM0MzsJCQkJICogcS0mZ3Q7bGltaXRzX2xvY2s7IE1EX1JFQ09WRVJZX05FRURFRCBiZWxvdwomIzQzOwkJCQkgKiBsZWF2ZXMgYSBza2lwcGVkIGFkZCB0byBtZF9zdGFydF9zeW5jKCkuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlpZiAobWRkZXZfc3RhY2tfbGltaXRzX3RyeWxvY2sobWRkZXYsICZhbXA7bGltKSkgewomIzQzOwkJCQkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPQomIzQzOwkJCQkJCW1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZTsKJiM0MzsKJiM0MzsJCQkJCXJldCA9IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldiwKJiM0MzsJCQkJCQkJCSAgICByZGV2MiwgJmFtcDtsaW0pOwomIzQzOwkJCQkJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgJmFtcDtsaW0pOwomIzQzOwkJCQl9IGVsc2UgaWYgKG1kZGV2X2lzX2RtKG1kZGV2KSkgewomIzQzOwkJCQkJcmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LAomIzQzOwkJCQkJCQkJICAgIHJkZXYyLCBOVUxMKTsKJiM0MzsJCQkJfSBlbHNlIHsKJiM0MzsJCQkJCXJldCA9IHJlbW92ZV9zcGFyZXMobWRkZXYsIHJkZXYyKTsKJiM0MzsJCQkJfQogCQkJCXByX2luZm8oJiMzNDtBY3RpdmF0ZWQgc3BhcmU6ICVwZ1xuJiMzNDssCiAJCQkJCXJkZXYyLSZndDtiZGV2KTsKIAkJCQkvKiB3YWtldXAgbWRkZXYtJmd0O3RocmVhZCBoZXJlLCBzbyBhcnJheSBjb3VsZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oCmluZGV4IGI2ZDJlODkyOWEwZjkuLmNlY2E4Y2ZjZGNiOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmgKQEAgLTc2NSw3ICYjNDM7NzY1LDggQEAgc3RydWN0IG1kX3BlcnNvbmFsaXR5CiAJICogaWYgYXBwcm9wcmlhdGUsIGFuZCBzaG91bGQgYWJvcnQgcmVjb3ZlcnkgaWYgbmVlZGVkCiAJICovCiAJdm9pZCAoKmVycm9yX2hhbmRsZXIpKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KTsKLQlpbnQgKCpob3RfYWRkX2Rpc2spIChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7CiYjNDM7CWludCAoKmhvdF9hZGRfZGlzaykoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsCiYjNDM7CQkJICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7CiAJaW50ICgqaG90X3JlbW92ZV9kaXNrKSAoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpOwogCWludCAoKnNwYXJlX2FjdGl2ZSkgKHN0cnVjdCBtZGRldiAqbWRkZXYpOwogCXNlY3Rvcl90ICgqc3luY19yZXF1ZXN0KShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JfbnIsCkBAIC0xMDQxLDEzICYjNDM7MTA0MiwxNyBAQCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zOwogZXh0ZXJuIGludCBtZHBfbWFqb3I7CiB2b2lkIG1kX2F1dG9zdGFydF9hcnJheXMoaW50IHBhcnQpOwogaW50IG1kX3NldF9hcnJheV9pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfYXJyYXlfaW5mb19zICppbmZvKTsKLWludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbyk7CiYjNDM7aW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvLAomIzQzOwkJICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7CiBpbnQgZG9fbWRfcnVuKHN0cnVjdCBtZGRldiAqbWRkZXYpOwogI2RlZmluZSBNRERFVl9TVEFDS19JTlRFR1JJVFkJKDF1ICZsdDsmbHQ7IDApCiBpbnQgbWRkZXZfc3RhY2tfcmRldl9saW1pdHMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLAogCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOwogaW50IG1kZGV2X3N0YWNrX25ld19yZGV2KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KTsKLXZvaWQgbWRkZXZfdXBkYXRlX2lvX29wdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB1bnNpZ25lZCBpbnQgbnJfc3RyaXBlcyk7CiYjNDM7aW50IG1kZGV2X3N0YWNrX3JkZXZfaW50byhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldiwKJiM0MzsJCQkgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7CiYjNDM7dm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzLAomIzQzOwkJCSBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pOwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG1kX2ZvcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBmMDY0NmZiMjQzNzFmLi5kZDM0OGI1Njk1ZDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC0xODk4LDcgJiM0MzsxODk4LDggQEAgc3RhdGljIGJvb2wgcmFpZDFfcmVtb3ZlX2NvbmYoc3RydWN0IHIxY29uZiAqY29uZiwgaW50IGRpc2spCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgcmFpZDFfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiYjNDM7c3RhdGljIGludCByYWlkMV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldiwKJiM0MzsJCQkgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAlzdHJ1Y3QgcjFjb25mICpjb25mID0gbWRkZXYtJmd0O3ByaXZhdGU7CiAJaW50IGVyciA9IC1FRVhJU1Q7CkBAIC0xOTIzLDcgJiM0MzsxOTI0LDEwIEBAIHN0YXRpYyBpbnQgcmFpZDFfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJZm9yIChtaXJyb3IgPSBmaXJzdDsgbWlycm9yICZsdDs9IGxhc3Q7IG1pcnJvciYjNDM7JiM0MzspIHsKIAkJcCA9IGNvbmYtJmd0O21pcnJvcnMgJiM0MzsgbWlycm9yOwogCQlpZiAoIXAtJmd0O3JkZXYpIHsKLQkJCWVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTsKJiM0MzsJCQlpZiAobGltKQomIzQzOwkJCQllcnIgPSBtZGRldl9zdGFja19yZGV2X2ludG8obWRkZXYsIHJkZXYsIGxpbSk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQllcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDEwOTNjNzk4ZDlkZGUuLjY0MTYxOTMyOGE2YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtMjA5NSw3ICYjNDM7MjA5NSw4IEBAIHN0YXRpYyBpbnQgcmFpZDEwX3NwYXJlX2FjdGl2ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiYjNDM7c3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsCiYjNDM7CQkJICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXN0cnVjdCByMTBjb25mICpjb25mID0gbWRkZXYtJmd0O3ByaXZhdGU7CiAJaW50IGVyciA9IC1FRVhJU1Q7CkBAIC0yMTMwLDcgJiM0MzsyMTMxLDEwIEBAIHN0YXRpYyBpbnQgcmFpZDEwX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KQogCQkJY29udGludWU7CiAJCX0KIAotCQllcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7CiYjNDM7CQlpZiAobGltKQomIzQzOwkJCWVyciA9IG1kZGV2X3N0YWNrX3JkZXZfaW50byhtZGRldiwgcmRldiwgbGltKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQllcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQlwLSZndDtoZWFkX3Bvc2l0aW9uID0gMDsKQEAgLTIxNDcsNyAmIzQzOzIxNTEsMTAgQEAgc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJCWNsZWFyX2JpdChJbl9zeW5jLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKIAkJc2V0X2JpdChSZXBsYWNlbWVudCwgJmFtcDtyZGV2LSZndDtmbGFncyk7CiAJCXJkZXYtJmd0O3JhaWRfZGlzayA9IHJlcGxfc2xvdDsKLQkJZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpOwomIzQzOwkJaWYgKGxpbSkKJiM0MzsJCQllcnIgPSBtZGRldl9zdGFja19yZGV2X2ludG8obWRkZXYsIHJkZXYsIGxpbSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAkJY29uZi0mZ3Q7ZnVsbHN5bmMgPSAxOwpAQCAtNDQ4NCw3ICYjNDM7NDQ5MSw3IEBAIHN0YXRpYyBpbnQgcmFpZDEwX3N0YXJ0X3Jlc2hhcGUoc3RydWN0IG1kZGV2ICptZGRldikKIAkJcmRldl9mb3JfZWFjaChyZGV2LCBtZGRldikKIAkJCWlmIChyZGV2LSZndDtyYWlkX2Rpc2sgJmx0OyAwICZhbXA7JmFtcDsKIAkJCSAgICAhdGVzdF9iaXQoRmF1bHR5LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkgewotCQkJCWlmIChyYWlkMTBfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHsKJiM0MzsJCQkJaWYgKHJhaWQxMF9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkgewogCQkJCQlpZiAocmRldi0mZ3Q7cmFpZF9kaXNrICZndDs9CiAJCQkJCSAgICBjb25mLSZndDtwcmV2LnJhaWRfZGlza3MpCiAJCQkJCQlzZXRfYml0KEluX3N5bmMsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpOwpAQCAtNDkyMSw3ICYjNDM7NDkyOCw3IEBAIHN0YXRpYyB2b2lkIGVuZF9yZXNoYXBlKHN0cnVjdCByMTBjb25mICpjb25mKQogCWNvbmYtJmd0O3Jlc2hhcGVfc2FmZSA9IE1heFNlY3RvcjsKIAlzcGluX3VubG9ja19pcnEoJmFtcDtjb25mLSZndDtkZXZpY2VfbG9jayk7CiAKLQltZGRldl91cGRhdGVfaW9fb3B0KGNvbmYtJmd0O21kZGV2LCByYWlkMTBfbnJfc3RyaXBlcyhjb25mKSk7CiYjNDM7CW1kZGV2X3VwZGF0ZV9pb19vcHQoY29uZi0mZ3Q7bWRkZXYsIHJhaWQxMF9ucl9zdHJpcGVzKGNvbmYpLCBOVUxMKTsKIAljb25mLSZndDtmdWxsc3luYyA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCBiOTE1NDVjZTA5MGRlLi4yMjc1OWM2MzFjNGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC03Mjg4LDYgJiM0Mzs3Mjg4LDkgQEAgc3RhdGljIHNzaXplX3QKIHJhaWQ1X3N0b3JlX3NraXBfY29weShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCByNWNvbmYgKmNvbmY7CiYjNDM7CXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gTlVMTDsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbXAgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgbmV3OwogCWludCBlcnI7CiAKQEAgLTcyOTcsMjMgJiM0Mzs3MzAwLDMzIEBAIHJhaWQ1X3N0b3JlX3NraXBfY29weShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAluZXcgPSAhIW5ldzsKIAomIzQzOwkvKiBxLSZndDtsaW1pdHNfbG9jayBuZXN0cyBvdXRzaWRlIGJvdGgsIHNlZSBtZF9zdGFydF9zeW5jKCkgKi8KJiM0MzsJaWYgKCFtZGRldl9pc19kbShtZGRldikpIHsKJiM0MzsJCXEgPSBtZGRldi0mZ3Q7Z2VuZGlzay0mZ3Q7cXVldWU7CiYjNDM7CQlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpOwomIzQzOwkJbGltcCA9ICZhbXA7bGltOwomIzQzOwl9CiYjNDM7CiAJZXJyID0gbWRkZXZfc3VzcGVuZF9hbmRfbG9jayhtZGRldik7Ci0JaWYgKGVycikKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaWYgKGxpbXApCiYjNDM7CQkJcXVldWVfbGltaXRzX2NhbmNlbF91cGRhdGUocSk7CiAJCXJldHVybiBlcnI7CiYjNDM7CX0KIAljb25mID0gbWRkZXYtJmd0O3ByaXZhdGU7CiAJaWYgKCFjb25mKQogCQllcnIgPSAtRU5PREVWOwogCWVsc2UgaWYgKG5ldyAhPSBjb25mLSZndDtza2lwX2NvcHkpIHsKLQkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBtZGRldi0mZ3Q7Z2VuZGlzay0mZ3Q7cXVldWU7Ci0JCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTsKLQogCQljb25mLSZndDtza2lwX2NvcHkgPSBuZXc7Ci0JCWlmIChuZXcpCi0JCQlsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfU1RBQkxFX1dSSVRFUzsKLQkJZWxzZQotCQkJbGltLmZlYXR1cmVzICZhbXA7PSB+QkxLX0ZFQVRfU1RBQkxFX1dSSVRFUzsKLQkJZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgJmFtcDtsaW0pOwomIzQzOwkJaWYgKGxpbXApIHsKJiM0MzsJCQlpZiAobmV3KQomIzQzOwkJCQlsaW1wLSZndDtmZWF0dXJlcyB8PSBCTEtfRkVBVF9TVEFCTEVfV1JJVEVTOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJbGltcC0mZ3Q7ZmVhdHVyZXMgJmFtcDs9IH5CTEtfRkVBVF9TVEFCTEVfV1JJVEVTOwomIzQzOwkJfQogCX0KJiM0MzsJaWYgKGxpbXApCiYjNDM7CQllcnIgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKSA/OiBlcnI7CiAJbWRkZXZfdW5sb2NrX2FuZF9yZXN1bWUobWRkZXYpOwogCXJldHVybiBlcnIgPzogbGVuOwogfQpAQCAtODQ0MSw3ICYjNDM7ODQ1NCw4IEBAIHN0YXRpYyBpbnQgcmFpZDVfcmVtb3ZlX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCByYWlkNV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldikKJiM0MztzdGF0aWMgaW50IHJhaWQ1X2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LAomIzQzOwkJCSAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXN0cnVjdCByNWNvbmYgKmNvbmYgPSBtZGRldi0mZ3Q7cHJpdmF0ZTsKIAlpbnQgcmV0LCBlcnIgPSAtRUVYSVNUOwpAQCAtODcyOCw3ICYjNDM7ODc0Miw3IEBAIHN0YXRpYyBpbnQgcmFpZDVfc3RhcnRfcmVzaGFwZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogCQlyZGV2X2Zvcl9lYWNoKHJkZXYsIG1kZGV2KQogCQkJaWYgKHJkZXYtJmd0O3JhaWRfZGlzayAmbHQ7IDAgJmFtcDsmYW1wOwogCQkJICAgICF0ZXN0X2JpdChGYXVsdHksICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpKSB7Ci0JCQkJaWYgKHJhaWQ1X2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7CiYjNDM7CQkJCWlmIChyYWlkNV9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkgewogCQkJCQlpZiAocmRldi0mZ3Q7cmFpZF9kaXNrCiAJCQkJCSAgICAmZ3Q7PSBjb25mLSZndDtwcmV2aW91c19yYWlkX2Rpc2tzKQogCQkJCQkJc2V0X2JpdChJbl9zeW5jLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKQEAgLTg3OTksNyAmIzQzOzg4MTMsNyBAQCBzdGF0aWMgdm9pZCBlbmRfcmVzaGFwZShzdHJ1Y3QgcjVjb25mICpjb25mKQogCQl3YWtlX3VwKCZhbXA7Y29uZi0mZ3Q7d2FpdF9mb3JfcmVzaGFwZSk7CiAKIAkJbWRkZXZfdXBkYXRlX2lvX29wdChjb25mLSZndDttZGRldiwKLQkJCWNvbmYtJmd0O3JhaWRfZGlza3MgLSBjb25mLSZndDttYXhfZGVncmFkZWQpOwomIzQzOwkJCWNvbmYtJmd0O3JhaWRfZGlza3MgLSBjb25mLSZndDttYXhfZGVncmFkZWQsIE5VTEwpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggNGY3OTA1YzM0MTJiOC4uYjc1ZTg1MjkxZTI5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0xMTAxLDYgJiM0MzsxMTAxLDMyIEBAIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiAJbXV0ZXhfbG9jaygmYW1wO3EtJmd0O2xpbWl0c19sb2NrKTsKIAlyZXR1cm4gcS0mZ3Q7bGltaXRzOwogfQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayAtIHRyeSB0byBzdGFydCBhbiBhdG9taWMgdXBkYXRlIG9mIHF1ZXVlCiYjNDM7ICoJbGltaXRzCiYjNDM7ICogQHE6CQlxdWV1ZSB0byB1cGRhdGUKJiM0MzsgKiBAbGltOglyZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgbGltaXRzIG9uIHN1Y2Nlc3MKJiM0MzsgKgomIzQzOyAqIExpa2UgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpLCBidXQgZmFpbHMgaW5zdGVhZCBvZiB3YWl0aW5nIHdoZW4gYW5vdGhlcgomIzQzOyAqIHVwZGF0ZSBpcyBpbiBmbGlnaHQuICBGb3IgY2FsbGVycyB0aGF0IG11c3Qgbm90IGJsb2NrIG9uIHEtJmd0O2xpbWl0c19sb2NrCiYjNDM7ICogYmVjYXVzZSB0aGV5IGhvbGQgc29tZXRoaW5nIGl0cyBjdXJyZW50IG93bmVyIGlzIHdhaXRpbmcgZm9yLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogcHJvY2VzcyBjb250ZXh0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3F1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKJiM0MzsJCQkJICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiYjNDM7CV9fY29uZF9hY3F1aXJlcyh0cnVlLCAmYW1wO3EtJmd0O2xpbWl0c19sb2NrKQomIzQzO3sKJiM0MzsJaWYgKCFtdXRleF90cnlsb2NrKCZhbXA7cS0mZ3Q7bGltaXRzX2xvY2spKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkqbGltID0gcS0mZ3Q7bGltaXRzOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBpbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCQlzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pIF9fcmVsZWFzZXMoJmFtcDtxLSZndDtsaW1pdHNfbG9jayk7CiBpbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzY1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUQgUkFJRCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGZ1enotd29ydGh5LCB3aGF0IGtpbmQgb2YgY29uZmlndXJhdGlvbiBpcyBuZWVkZWQsIGFuZCBpZiB3ZSBjYW4gaWRlbnRpZnkgc3BlY2lmaWMgc3ltYm9scyB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxsIGFib3V0IHJlc29sdmluZyBsb2NrIG9yZGVyaW5nIGlzc3VlcyBhbmQgcG90ZW50aWFsIGRlYWRsb2NrcyB3aXRoaW4gdGhlIE1EIChNdWx0aXBsZSBEZXZpY2VzL3NvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aG9zZSBsb2NrczogYHEtJmd0O2xpbWl0c19sb2NrYCwgYHJlY29uZmlnX211dGV4YCwgYW5kIGBtZGRldl9zdXNwZW5kKClgLiAgVGhlIGNvZGUgdG91Y2hlcyBhIGxvdCBvZiBmaWxlcyB3aXRoaW4gYGRyaXZlcnMvbWQvYCwgc28gaXQmIzM5O3MgYSBwcmV0dHkgY2VudHJhbCBhcmVhLgoKSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkaW5nIHRoaXMgbmV3IGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlX3RyeWxvY2tgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggdGhlbiBzZWVtcyB0byBiZSBwcm9wYWdhdGluZyBjaGFuZ2VzIHRocm91Z2hvdXQgdGhlIE1EIHN1YnN5c3RlbSwgbW9kaWZ5aW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgYW5kIHVwZGF0aW5nIGxvY2sgYWNxdWlzaXRpb24gc3RyYXRlZ2llcy4gU3BlY2lmaWNhbGx5OgoKKiAgIEl0IHVwZGF0ZXMgY2FsbHMgcmVsYXRlZCB0byBhZGRpbmcgZGlza3MgKGBob3RfYWRkX2Rpc2tgLCBgbWRfYWRkX25ld19kaXNrYCkgYW5kIGFkanVzdGluZyBxdWV1ZSBsaW1pdHMgaW4gdGhlIGBkbS1yYWlkLmNgLCBgbWQtYXV0b2RldGVjdC5jYCwgYW5kIGBtZC1saW5lYXIuY2AgZmlsZXMuCiogICBUaGUgYG1kLmNgIGZpbGUgc2VlcyB0aGUgbW9zdCBjaGFuZ2VzLCBpbmNsdWRpbmcgYSBuZXcgYHF1ZXVlX2xpbWl0c2AgcGFyYW1ldGVyIGJlaW5nIGFkZGVkIHRvIHRoZSByZGV2IHN5c2ZzIGVudHJ5IGBzdG9yZWAgbWV0aG9kLiBUaGlzIGFsc28gaW52b2x2ZXMgY2hhbmdlcyB0byBob3cgbG9ja3MgYXJlIGFjcXVpcmVkIGluIGByZGV2X2F0dHJfc3RvcmUoKWAsIGFkZGluZyBuZXcgZnVuY3Rpb25zIGxpa2UgYG1kZGV2X3N0YWNrX3JkZXZfaW50bygpYCBhbmQgYG1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKClgLCBhbmQgdXBkYXRlcyB0byBgbWRkZXZfdXBkYXRlX2lvX29wdCgpYCBhbmQgb3RoZXIgY29yZSBNRCBmdW5jdGlvbnMgKGBtZF9hZGRfbmV3X2Rpc2soKWAsIGBob3RfcmVtb3ZlX2Rpc2soKWAsIGByZW1vdmVfYW5kX2FkZF9zcGFyZXMoKWAsIGV0Yy4pLgoqICAgSXQmIzM5O3MgYWxzbyB1cGRhdGluZyBmdW5jdGlvbnMgYWNyb3NzIHNldmVyYWwgUkFJRCBpbXBsZW1lbnRhdGlvbnMgKGByYWlkMS5jYCwgYHJhaWQxMC5jYCwgYHJhaWQ1LmNgKSB0byBoYW5kbGUgdGhpcyBgcXVldWVfbGltaXRzYCBzdHJ1Y3QuCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBjb2RlLiBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIHJlYWNoYWJpbGl0eS4gTUQgUkFJRCwgYmVpbmcgYSBjb3JlIHBhcnQgb2Ygc3RvcmFnZSBtYW5hZ2VtZW50LCBzaG91bGQgYmUgcHJldHR5IGVhc2lseSByZWFjaGFibGUsIGVzcGVjaWFsbHkgaW4gYSBmdXp6aW5nIGNvbnRleHQuIEZyb20gd2hhdCBJIGtub3csIGl0JiMzOTtzIGFjY2Vzc2libGUgdGhyb3VnaCBpb2N0bHMgb24gYC9kZXYvbWQqYCwgYW5kIHN5c2ZzIGVudHJpZXMgdW5kZXIgYC9zeXMvYmxvY2svbWRYL21kLy4uLmAuIFN5emthbGxlciBzaG91bGQgYWxyZWFkeSBoYXZlIGdvb2QgY292ZXJhZ2UgZm9yIHRoZXNlIGludGVyZmFjZXMuIElmIHNvLCB0aGF0IGdyZWF0bHkgaW5jcmVhc2VzIHRoZSBsaWtlbGlob29kIG9mIGZpbmRpbmcgYnVncy4KCkxhc3RseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgTUQgUkFJRCBhbmQgaXRzIHN1Yi1jb21wb25lbnRzIGFyZSBlbmFibGVkIHRvIHRyaWdnZXIgdGhlc2UgdXBkYXRlZCBjb2RlIHBhdGhzLiBUaW1lIHRvIGdyZXAgZm9yIHRoZSByZWxldmFudCBgQ09ORklHX01EKmAgYW5kIGBDT05GSUdfQkxLX0RFVl9NRCpgIG9wdGlvbnMgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoaWNoIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBzZXQgZm9yIGEgZ29vZCBmdXp6aW5nIHJ1bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9NRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvS2NvbmZpZz0xMz1pZiBNRFxuZHJpdmVycy9tZC9LY29uZmlnLTE0LVxuZHJpdmVycy9tZC9LY29uZmlnOjE1OmNvbmZpZyBCTEtfREVWX01EXG5kcml2ZXJzL21kL0tjb25maWctMTYtXHR0cmlzdGF0ZSBcJiMzNDtSQUlEIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgxMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIE1EIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIE1EIChNdWx0aXBsZSBEZXZpY2UpIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhpcyBrZXJuZWwgYnVpbGQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBkcml2ZXJzL21kL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQsIG5hdHVyYWxseS4gSSBmaWd1cmUgdGhlIGZpcnN0IDUwIGxpbmVzIG9yIHNvIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgY29yZSBNRCBzZXR0aW5ncy4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IHZhcmlhYmxlcyBhbmQgYW55IGNyaXRpY2FsIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGFmZmVjdCBob3cgTUQgaXMgY29uZmlndXJlZCwgYW5kIHdoYXQgdGhlIGJhc2UtbGV2ZWwgY2hvaWNlcyBhcmUgZm9yIFJBSUQsIExWTSwgYW5kIGFueSBvdGhlciByZWxldmFudCBibG9jayBkZXZpY2UgbWFuYWdlbWVudCBjb21wb25lbnRzLiBJdCYjMzk7cyBhIHF1aWNrIHdheSB0byBnZXQgY29udGV4dCBhbmQgc2VlIGhvdyB0aGluZ3MgYXJlIHN0cnVjdHVyZWQgYmVmb3JlIGRpZ2dpbmcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgQmxvY2sgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTURcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7TXVsdGlwbGUgZGV2aWNlcyBkcml2ZXIgc3VwcG9ydCAoUkFJRCBhbmQgTFZNKVwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBTdXBwb3J0IG11bHRpcGxlIHBoeXNpY2FsIHNwaW5kbGVzIHRocm91Z2ggYSBzaW5nbGUgbG9naWNhbCBkZXZpY2UuXG4gIDExOlx0XHQgIFJlcXVpcmVkIGZvciBSQUlEIGFuZCBsb2dpY2FsIHZvbHVtZSBtYW5hZ2VtZW50LlxuICAxMjpcdFxuICAxMzpcdGlmIE1EXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIEJMS19ERVZfTURcbiAgMTY6XHRcdHRyaXN0YXRlIFwmIzM0O1JBSUQgc3VwcG9ydFwmIzM0O1xuICAxNzpcdFx0c2VsZWN0IEJMT0NLX0hPTERFUl9ERVBSRUNBVEVEIGlmIFNZU0ZTXG4gIDE4Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgMTk6XHRcdCMgQkxPQ0tfTEVHQUNZX0FVVE9MT0FEIHJlcXVpcmVtZW50IHNob3VsZCBiZSByZW1vdmVkXG4gIDIwOlx0XHQjIGFmdGVyIHJlbGV2YW50IG1kYWRtIGVuaGFuY2VtZW50cyAtIHRvIG1ha2UgXCYjMzQ7bmFtZXM9eWVzXCYjMzQ7XG4gIDIxOlx0XHQjIHRoZSBkZWZhdWx0IC0gYXJlIHdpZGVseSBhdmFpbGFibGUuXG4gIDIyOlx0XHRzZWxlY3QgQkxPQ0tfTEVHQUNZX0FVVE9MT0FEXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFRoaXMgZHJpdmVyIGxldHMgeW91IGNvbWJpbmUgc2V2ZXJhbCBoYXJkIGRpc2sgcGFydGl0aW9ucyBpbnRvIG9uZVxuICAyNTpcdFx0ICBsb2dpY2FsIGJsb2NrIGRldmljZS4gVGhpcyBjYW4gYmUgdXNlZCB0byBzaW1wbHkgYXBwZW5kIG9uZVxuICAyNjpcdFx0ICBwYXJ0aXRpb24gdG8gYW5vdGhlciBvbmUgb3IgdG8gY29tYmluZSBzZXZlcmFsIHJlZHVuZGFudCBoYXJkIGRpc2tzXG4gIDI3Olx0XHQgIGludG8gYSBSQUlEMS80LzUgZGV2aWNlIHNvIGFzIHRvIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGhhcmRcbiAgMjg6XHRcdCAgZGlzayBmYWlsdXJlcy4gVGhpcyBpcyBjYWxsZWQgXCYjMzQ7U29mdHdhcmUgUkFJRFwmIzM0OyBzaW5jZSB0aGUgY29tYmluaW5nIG9mXG4gIDI5Olx0XHQgIHRoZSBwYXJ0aXRpb25zIGlzIGRvbmUgYnkgdGhlIGtlcm5lbC4gXCYjMzQ7SGFyZHdhcmUgUkFJRFwmIzM0OyBtZWFucyB0aGF0IHRoZVxuICAzMDpcdFx0ICBjb21iaW5pbmcgaXMgZG9uZSBieSBhIGRlZGljYXRlZCBjb250cm9sbGVyOyBpZiB5b3UgaGF2ZSBzdWNoIGFcbiAgMzE6XHRcdCAgY29udHJvbGxlciwgeW91IGRvIG5vdCBuZWVkIHRvIHNheSBZIGhlcmUuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgU29mdHdhcmUgUkFJRCBvbiBMaW51eCBpcyBjb250YWluZWQgaW4gdGhlXG4gIDM0Olx0XHQgIFNvZnR3YXJlIFJBSUQgbWluaS1IT1dUTywgYXZhaWxhYmxlIGZyb21cbiAgMzU6XHRcdCAgXHUwMDNjaHR0cHM6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXHUwMDNlLiBUaGVyZSB5b3Ugd2lsbCBhbHNvIGxlYXJuXG4gIDM2Olx0XHQgIHdoZXJlIHRvIGdldCB0aGUgc3VwcG9ydGluZyB1c2VyIHNwYWNlIHV0aWxpdGllcyByYWlkdG9vbHMuXG4gIDM3Olx0XG4gIDM4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM5Olx0XG4gIDQwOlx0Y29uZmlnIE1EX0JJVE1BUFxuICA0MTpcdFx0Ym9vbCBcJiMzNDtNRCBSQUlEIGJpdG1hcCBzdXBwb3J0XCYjMzQ7XG4gIDQyOlx0XHRkZWZhdWx0IHlcbiAgNDM6XHRcdGRlcGVuZHMgb24gQkxLX0RFVl9NRFxuICA0NDpcdFx0aGVscFxuICA0NTpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgc3VwcG9ydCBmb3IgdGhlIHdyaXRlIGludGVudCBiaXRtYXAgd2lsbCBiZVxuICA0NjpcdFx0ICBlbmFibGVkLiBUaGUgYml0bWFwIGNhbiBiZSB1c2VkIHRvIG9wdGltaXplIHJlc3luYyBzcGVlZCBhZnRlciBwb3dlclxuICA0NzpcdFx0ICBmYWlsdXJlIG9yIHJlYWRkaW5nIGEgZGlzaywgbGltaXRpbmcgaXQgdG8gcmVjb3JkZWQgZGlydHkgc2VjdG9ycyBpblxuICA0ODpcdFx0ICBiaXRtYXAuXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIFRoaXMgZmVhdHVyZSBjYW4gYmUgYWRkZWQgdG8gZXhpc3RpbmcgTUQgYXJyYXkgb3IgTUQgYXJyYXkgY2FuIGJlXG4gIDUxOlx0XHQgIGNyZWF0ZWQgd2l0aCBiaXRtYXAgdmlhIG1kYWRtKDgpLlxuICA1MjpcdFxuICA1MzpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICA1NDpcdFxuICA1NTpcdGNvbmZpZyBNRF9MTEJJVE1BUFxuICA1NjpcdFx0Ym9vbCBcJiMzNDtNRCBSQUlEIGxvY2tsZXNzIGJpdG1hcCBzdXBwb3J0XCYjMzQ7XG4gIDU3Olx0XHRkZXBlbmRzIG9uIEJMS19ERVZfTURcbiAgNTg6XHRcdGhlbHBcbiAgNTk6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHN1cHBvcnQgZm9yIHRoZSBsb2NrbGVzcyB3cml0ZSBpbnRlbnQgYml0bWFwIHdpbGxcbiAgNjA6XHRcdCAgYmUgZW5hYmxlZC5cbiAgNjE6XHRcbiAgNjI6XHRcdCAgTm90ZSwgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZS5cbiAgNjM6XHRcbiAgNjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjU6XHRcbiAgNjY6XHRjb25maWcgTURfQVVUT0RFVEVDVFxuICA2NzpcdFx0Ym9vbCBcJiMzNDtBdXRvZGV0ZWN0IFJBSUQgYXJyYXlzIGR1cmluZyBrZXJuZWwgYm9vdFwmIzM0O1xuICA2ODpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX01EPXlcbiAgNjk6XHRcdGRlZmF1bHQgeVxuICA3MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTY2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFJBSUQgUGVyc29uYWxpdHkgQ29uZmlndXJhdGlvbnMgaW4gYGRyaXZlcnMvbWQvS2NvbmZpZ2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcyBvciBvdmVybG9va2VkIG1vZGlmaWNhdGlvbnMuIE15IHByaW1hcnkgZm9jdXMgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbWQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gUkFJRCBwZXJzb25hbGl0aWVzIHRoYXQgaGF2ZSBiZWVuIGFsdGVyZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBsaW5lYXIsIHJhaWQxLCByYWlkMTAsIGFuZCByYWlkNDU2L3JhaWQ1LiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBtb2RpZmljYXRpb25zIG1hZGUgYXJlIGNvbnNpc3RlbnQgYWNyb3NzIGFsbCBhZmZlY3RlZCBSQUlEIGxldmVscyBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMgaW4gaG93IHRoZXNlIHBlcnNvbmFsaXRpZXMgYXJlIGRlZmluZWQgb3IgZW5hYmxlZC4gSSYjMzk7bGwgYmUgbWV0aWN1bG91c2x5IGNoZWNraW5nIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBhbnkgY29uZGl0aW9uYWwgbG9naWMgdG8gZ2V0IGEgaG9saXN0aWMgdmlldyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2VzLiBUaGlzIHRob3JvdWdoIGFuYWx5c2lzIHNob3VsZCBoZWxwIG1lIGlkZW50aWZ5IGFuZCByZWN0aWZ5IGFueSBwb3RlbnRpYWwgaXNzdWVzIGJlZm9yZSB0aGV5IGNhdXNlIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3MTpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUga2VybmVsIHdpbGwgdHJ5IHRvIGF1dG9kZXRlY3QgcmFpZFxuICA3MjpcdFx0ICBhcnJheXMgYXMgcGFydCBvZiBpdHMgYm9vdCBwcm9jZXNzLlxuICA3MzpcdFxuICA3NDpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IHVzZSByYWlkIGFuZCBzYXkgWSwgdGhpcyBhdXRvZGV0ZWN0aW9uIGNhbiBjYXVzZVxuICA3NTpcdFx0ICBhIHNldmVyYWwtc2Vjb25kIGRlbGF5IGluIHRoZSBib290IHRpbWUgZHVlIHRvIHZhcmlvdXNcbiAgNzY6XHRcdCAgc3luY2hyb25pc2F0aW9uIHN0ZXBzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyBzdGVwLlxuICA3NzpcdFxuICA3ODpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICA3OTpcdFxuICA4MDpcdGNvbmZpZyBNRF9CSVRNQVBfRklMRVxuICA4MTpcdFx0Ym9vbCBcJiMzNDtNRCBiaXRtYXAgZmlsZSBzdXBwb3J0IChkZXByZWNhdGVkKVwmIzM0O1xuICA4MjpcdFx0ZGVmYXVsdCB5XG4gIDgzOlx0XHRkZXBlbmRzIG9uIE1EX0JJVE1BUFxuICA4NDpcdFx0aGVscFxuICA4NTpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgc3VwcG9ydCBmb3Igd3JpdGUgaW50ZW50IGJpdG1hcHMgaW4gZmlsZXMgb24gYW5cbiAgODY6XHRcdCAgZXh0ZXJuYWwgZmlsZSBzeXN0ZW0gaXMgZW5hYmxlZC4gIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIGludGVybmFsXG4gIDg3Olx0XHQgIGJpdG1hcHMgbmVhciB0aGUgTUQgc3VwZXJibG9jaywgYW5kIHZlcnkgcHJvYmxlbWF0aWMgY29kZSB0aGF0IGFidXNlc1xuICA4ODpcdFx0ICB2YXJpb3VzIGtlcm5lbCBBUElzIGFuZCBjYW4gb25seSB3b3JrIHdpdGggZmlsZXMgb24gYSBmaWxlIHN5c3RlbSBub3RcbiAgODk6XHRcdCAgYWN0dWFsbHkgc2l0dGluZyBvbiB0aGUgTUQgZGV2aWNlLlxuICA5MDpcdFxuICA5MTpcdGNvbmZpZyBNRF9MSU5FQVJcbiAgOTI6XHRcdHRyaXN0YXRlIFwmIzM0O0xpbmVhciAoYXBwZW5kKSBtb2RlXCYjMzQ7XG4gIDkzOlx0XHRkZXBlbmRzIG9uIEJMS19ERVZfTURcbiAgOTQ6XHRcdGhlbHBcbiAgOTU6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBtdWx0aXBsZSBkZXZpY2VzIGRyaXZlciB3aWxsIGJlIGFibGUgdG9cbiAgOTY6XHRcdCAgdXNlIHRoZSBzby1jYWxsZWQgbGluZWFyIG1vZGUsIGkuZS4gaXQgd2lsbCBjb21iaW5lIHRoZSBoYXJkIGRpc2tcbiAgOTc6XHRcdCAgcGFydGl0aW9ucyBieSBzaW1wbHkgYXBwZW5kaW5nIG9uZSB0byB0aGUgb3RoZXIuXG4gIDk4Olx0XG4gIDk5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDEwMDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBsaW5lYXIuXG4gMTAxOlx0XG4gMTAyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMTAzOlx0XG4gMTA0Olx0Y29uZmlnIE1EX1JBSUQwXG4gMTA1Olx0XHR0cmlzdGF0ZSBcJiMzNDtSQUlELTAgKHN0cmlwaW5nKSBtb2RlXCYjMzQ7XG4gMTA2Olx0XHRkZXBlbmRzIG9uIEJMS19ERVZfTURcbiAxMDc6XHRcdGhlbHBcbiAxMDg6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBtdWx0aXBsZSBkZXZpY2VzIGRyaXZlciB3aWxsIGJlIGFibGUgdG9cbiAxMDk6XHRcdCAgdXNlIHRoZSBzby1jYWxsZWQgcmFpZDAgbW9kZSwgaS5lLiBpdCB3aWxsIGNvbWJpbmUgdGhlIGhhcmQgZGlza1xuIDExMDpcdFx0ICBwYXJ0aXRpb25zIGludG8gb25lIGxvZ2ljYWwgZGV2aWNlIGluIHN1Y2ggYSBmYXNoaW9uIGFzIHRvIGZpbGwgdGhlbVxuIDExMTpcdFx0ICB1cCBldmVubHksIG9uZSBjaHVuayBoZXJlIGFuZCBvbmUgY2h1bmsgdGhlcmUuIFRoaXMgd2lsbCBpbmNyZWFzZVxuIDExMjpcdFx0ICB0aGUgdGhyb3VnaHB1dCByYXRlIGlmIHRoZSBwYXJ0aXRpb25zIHJlc2lkZSBvbiBkaXN0aW5jdCBkaXNrcy5cbiAxMTM6XHRcbiAxMTQ6XHRcdCAgSW5mb3JtYXRpb24gYWJvdXQgU29mdHdhcmUgUkFJRCBvbiBMaW51eCBpcyBjb250YWluZWQgaW4gdGhlXG4gMTE1Olx0XHQgIFNvZnR3YXJlLVJBSUQgbWluaS1IT1dUTywgYXZhaWxhYmxlIGZyb21cbiAxMTY6XHRcdCAgXHUwMDNjaHR0cHM6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXHUwMDNlLiBUaGVyZSB5b3Ugd2lsbCBhbHNvXG4gMTE3Olx0XHQgIGxlYXJuIHdoZXJlIHRvIGdldCB0aGUgc3VwcG9ydGluZyB1c2VyIHNwYWNlIHV0aWxpdGllcyByYWlkdG9vbHMuXG4gMTE4Olx0XG4gMTE5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDEyMDpcdFx0ICB3aWxsIGJlIGNhbGxlZCByYWlkMC5cbiAxMjE6XHRcbiAxMjI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxMjM6XHRcbiAxMjQ6XHRjb25maWcgTURfUkFJRDFcbiAxMjU6XHRcdHRyaXN0YXRlIFwmIzM0O1JBSUQtMSAobWlycm9yaW5nKSBtb2RlXCYjMzQ7XG4gMTI2Olx0XHRkZXBlbmRzIG9uIEJMS19ERVZfTURcbiAxMjc6XHRcdGhlbHBcbiAxMjg6XHRcdCAgQSBSQUlELTEgc2V0IGNvbnNpc3RzIG9mIHNldmVyYWwgZGlzayBkcml2ZXMgd2hpY2ggYXJlIGV4YWN0IGNvcGllc1xuIDEyOTpcdFx0ICBvZiBlYWNoIG90aGVyLiAgSW4gdGhlIGV2ZW50IG9mIGEgbWlycm9yIGZhaWx1cmUsIHRoZSBSQUlEIGRyaXZlclxuIDEzMDpcdFx0ICB3aWxsIGNvbnRpbnVlIHRvIHVzZSB0aGUgb3BlcmF0aW9uYWwgbWlycm9ycyBpbiB0aGUgc2V0LCBwcm92aWRpbmdcbiAxMzE6XHRcdCAgYW4gZXJyb3IgZnJlZSBNRCAobXVsdGlwbGUgZGV2aWNlKSB0byB0aGUgaGlnaGVyIGxldmVscyBvZiB0aGVcbiAxMzI6XHRcdCAga2VybmVsLiAgSW4gYSBzZXQgd2l0aCBOIGRyaXZlcywgdGhlIGF2YWlsYWJsZSBzcGFjZSBpcyB0aGUgY2FwYWNpdHlcbiAxMzM6XHRcdCAgb2YgYSBzaW5nbGUgZHJpdmUsIGFuZCB0aGUgc2V0IHByb3RlY3RzIGFnYWluc3QgYSBmYWlsdXJlIG9mIChOIC0gMSlcbiAxMzQ6XHRcdCAgZHJpdmVzLlxuIDEzNTpcdFxuIDEzNjpcdFx0ICBJbmZvcm1hdGlvbiBhYm91dCBTb2Z0d2FyZSBSQUlEIG9uIExpbnV4IGlzIGNvbnRhaW5lZCBpbiB0aGVcbiAxMzc6XHRcdCAgU29mdHdhcmUtUkFJRCBtaW5pLUhPV1RPLCBhdmFpbGFibGUgZnJvbVxuIDEzODpcdFx0ICBcdTAwM2NodHRwczovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG9cdTAwM2UuICBUaGVyZSB5b3Ugd2lsbCBhbHNvXG4gMTM5Olx0XHQgIGxlYXJuIHdoZXJlIHRvIGdldCB0aGUgc3VwcG9ydGluZyB1c2VyIHNwYWNlIHV0aWxpdGllcyByYWlkdG9vbHMuXG4gMTQwOlx0XG4gMTQxOlx0XHQgIElmIHlvdSB3YW50IHRvIHVzZSBzdWNoIGEgUkFJRC0xIHNldCwgc2F5IFkuICBUbyBjb21waWxlIHRoaXMgY29kZVxuIDE0MjpcdFx0ICBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByYWlkMS5cbiAxNDM6XHRcbiAxNDQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxNDU6XHRcbiAxNDY6XHRjb25maWcgTURfUkFJRDEwXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtSQUlELTEwIChtaXJyb3JlZCBzdHJpcGluZykgbW9kZVwmIzM0O1xuIDE0ODpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX01EXG4gMTQ5Olx0XHRoZWxwXG4gMTUwOlx0XHQgIFJBSUQtMTAgcHJvdmlkZXMgYSBjb21iaW5hdGlvbiBvZiBzdHJpcGluZyAoUkFJRC0wKSBhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTUwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkNvbnNpZGVyaW5nIFJBSUQgT3B0aW9ucyoqCgpBbHJpZ2h0LCBJJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIHByaW1hcmlseSBvbiB0aGUgbW9yZSBjb21tb24gUkFJRCBjb25maWd1cmF0aW9ucywgYnV0IGl0JiMzOTtzIGNydWNpYWwgdG8gYmUgdGhvcm91Z2guIExldCYjMzk7cyBub3Qgb3Zlcmxvb2sgc29tZSBvZiB0aGUgbGVzcy11c2VkIGJ1dCBwb3RlbnRpYWxseSByZWxldmFudCBvcHRpb25zLiBUaW1lIHRvIGV4cGFuZCBteSBtZW50YWwgY2hlY2tsaXN0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBlc3BlY2lhbGx5IGluIHNwZWNpZmljIHVzZSBjYXNlcyB3aGVyZSB0aGVzZSBhbHRlcm5hdGl2ZXMgbWlnaHQgYmUgaWRlYWwuIE15IGluaXRpYWwgY29uc2lkZXJhdGlvbnMgY292ZXJlZCB0aGUgd29ya2hvcnNlcywgYnV0IGEgZGVlcGVyIGRpdmUgaXMgbmVjZXNzYXJ5LiBTcGVjaWZpY2FsbHksIGxldCYjMzk7cyBhbHNvIGdpdmUgYSB0aG9yb3VnaCBvbmNlLW92ZXIgdG8gUkFJRCA0LCA1LCBhbmQgNiDigJMgcmV2aXNpdGluZyB0aGVpciBzdHJlbmd0aHMsIHdlYWtuZXNzZXMsIGFuZCBwb3RlbnRpYWwgYXBwbGljYWJpbGl0eS4gSSBzaG91bGQgYWxzbyByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgRE0tUkFJRCYjMzk7cyBjYXBhYmlsaXRpZXMgYW5kIGl0cyBwbGFjZSBpbiB0aGlzIGxhbmRzY2FwZS4gQSBjb21wcmVoZW5zaXZlIHZpZXcgcmVxdWlyZXMgdGhpcyBtb3JlIGdyYW51bGFyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUxOlx0XHQgIG1pcnJvcmluZyAoUkFJRC0xKSB3aXRoIGVhc2llciBjb25maWd1cmF0aW9uIGFuZCBtb3JlIGZsZXhpYmxlXG4gMTUyOlx0XHQgIGxheW91dC5cbiAxNTM6XHRcdCAgVW5saWtlIFJBSUQtMCwgYnV0IGxpa2UgUkFJRC0xLCBSQUlELTEwIHJlcXVpcmVzIGFsbCBkZXZpY2VzIHRvXG4gMTU0Olx0XHQgIGJlIHRoZSBzYW1lIHNpemUgKG9yIGF0IGxlYXN0LCBvbmx5IGFzIG11Y2ggYXMgdGhlIHNtYWxsZXN0IGRldmljZVxuIDE1NTpcdFx0ICB3aWxsIGJlIHVzZWQpLlxuIDE1NjpcdFx0ICBSQUlELTEwIHByb3ZpZGVzIGEgdmFyaWV0eSBvZiBsYXlvdXRzIHRoYXQgcHJvdmlkZSBkaWZmZXJlbnQgbGV2ZWxzXG4gMTU3Olx0XHQgIG9mIHJlZHVuZGFuY3kgYW5kIHBlcmZvcm1hbmNlLlxuIDE1ODpcdFxuIDE1OTpcdFx0ICBSQUlELTEwIHJlcXVpcmVzIG1kYWRtLTEuNy4wIG9yIGxhdGVyLCBhdmFpbGFibGUgYXQ6XG4gMTYwOlx0XG4gMTYxOlx0XHQgIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL3JhaWQvbWRhZG0vXG4gMTYyOlx0XG4gMTYzOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMTY0Olx0XG4gMTY1Olx0Y29uZmlnIE1EX1JBSUQ0NTZcbiAxNjY6XHRcdHRyaXN0YXRlIFwmIzM0O1JBSUQtNC9SQUlELTUvUkFJRC02IG1vZGVcJiMzNDtcbiAxNjc6XHRcdGRlcGVuZHMgb24gQkxLX0RFVl9NRFxuIDE2ODpcdFx0c2VsZWN0IFJBSUQ2X1BRXG4gMTY5Olx0XHRzZWxlY3QgQ1JDMzJcbiAxNzA6XHRcdHNlbGVjdCBBU1lOQ19NRU1DUFlcbiAxNzE6XHRcdHNlbGVjdCBBU1lOQ19YT1JcbiAxNzI6XHRcdHNlbGVjdCBBU1lOQ19QUVxuIDE3MzpcdFx0c2VsZWN0IEFTWU5DX1JBSUQ2X1JFQ09WXG4gMTc0Olx0XHRoZWxwXG4gMTc1Olx0XHQgIEEgUkFJRC01IHNldCBvZiBOIGRyaXZlcyB3aXRoIGEgY2FwYWNpdHkgb2YgQyBNQiBwZXIgZHJpdmUgcHJvdmlkZXNcbiAxNzY6XHRcdCAgdGhlIGNhcGFjaXR5IG9mIEMgKiAoTiAtIDEpIE1CLCBhbmQgcHJvdGVjdHMgYWdhaW5zdCBhIGZhaWx1cmVcbiAxNzc6XHRcdCAgb2YgYSBzaW5nbGUgZHJpdmUuIEZvciBhIGdpdmVuIHNlY3RvciAocm93KSBudW1iZXIsIChOIC0gMSkgZHJpdmVzXG4gMTc4Olx0XHQgIGNvbnRhaW4gZGF0YSBzZWN0b3JzLCBhbmQgb25lIGRyaXZlIGNvbnRhaW5zIHRoZSBwYXJpdHkgcHJvdGVjdGlvbi5cbiAxNzk6XHRcdCAgRm9yIGEgUkFJRC00IHNldCwgdGhlIHBhcml0eSBibG9ja3MgYXJlIHByZXNlbnQgb24gYSBzaW5nbGUgZHJpdmUsXG4gMTgwOlx0XHQgIHdoaWxlIGEgUkFJRC01IHNldCBkaXN0cmlidXRlcyB0aGUgcGFyaXR5IGFjcm9zcyB0aGUgZHJpdmVzIGluIG9uZVxuIDE4MTpcdFx0ICBvZiB0aGUgYXZhaWxhYmxlIHBhcml0eSBkaXN0cmlidXRpb24gbWV0aG9kcy5cbiAxODI6XHRcbiAxODM6XHRcdCAgQSBSQUlELTYgc2V0IG9mIE4gZHJpdmVzIHdpdGggYSBjYXBhY2l0eSBvZiBDIE1CIHBlciBkcml2ZVxuIDE4NDpcdFx0ICBwcm92aWRlcyB0aGUgY2FwYWNpdHkgb2YgQyAqIChOIC0gMikgTUIsIGFuZCBwcm90ZWN0c1xuIDE4NTpcdFx0ICBhZ2FpbnN0IGEgZmFpbHVyZSBvZiBhbnkgdHdvIGRyaXZlcy4gRm9yIGEgZ2l2ZW4gc2VjdG9yXG4gMTg2Olx0XHQgIChyb3cpIG51bWJlciwgKE4gLSAyKSBkcml2ZXMgY29udGFpbiBkYXRhIHNlY3RvcnMsIGFuZCB0d29cbiAxODc6XHRcdCAgZHJpdmVzIGNvbnRhaW5zIHR3byBpbmRlcGVuZGVudCByZWR1bmRhbmN5IHN5bmRyb21lcy4gIExpa2VcbiAxODg6XHRcdCAgUkFJRC01LCBSQUlELTYgZGlzdHJpYnV0ZXMgdGhlIHN5bmRyb21lcyBhY3Jvc3MgdGhlIGRyaXZlc1xuIDE4OTpcdFx0ICBpbiBvbmUgb2YgdGhlIGF2YWlsYWJsZSBwYXJpdHkgZGlzdHJpYnV0aW9uIG1ldGhvZHMuXG4gMTkwOlx0XG4gMTkxOlx0XHQgIEluZm9ybWF0aW9uIGFib3V0IFNvZnR3YXJlIFJBSUQgb24gTGludXggaXMgY29udGFpbmVkIGluIHRoZVxuIDE5MjpcdFx0ICBTb2Z0d2FyZS1SQUlEIG1pbmktSE9XVE8sIGF2YWlsYWJsZSBmcm9tXG4gMTkzOlx0XHQgIFx1MDAzY2h0dHBzOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1x1MDAzZS4gVGhlcmUgeW91IHdpbGwgYWxzb1xuIDE5NDpcdFx0ICBsZWFybiB3aGVyZSB0byBnZXQgdGhlIHN1cHBvcnRpbmcgdXNlciBzcGFjZSB1dGlsaXRpZXMgcmFpZHRvb2xzLlxuIDE5NTpcdFxuIDE5NjpcdFx0ICBJZiB5b3Ugd2FudCB0byB1c2Ugc3VjaCBhIFJBSUQtNC9SQUlELTUvUkFJRC02IHNldCwgc2F5IFkuICBUb1xuIDE5NzpcdFx0ICBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE5ODpcdFx0ICB3aWxsIGJlIGNhbGxlZCByYWlkNDU2LlxuIDE5OTpcdFxuIDIwMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDIwMTpcdFxuIDIwMjpcdGNvbmZpZyBNRF9DTFVTVEVSXG4gMjAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtDbHVzdGVyIFN1cHBvcnQgZm9yIE1EXCYjMzQ7XG4gMjA0Olx0XHRzZWxlY3QgTURfQklUTUFQXG4gMjA1Olx0XHRkZXBlbmRzIG9uIEJMS19ERVZfTURcbiAyMDY6XHRcdGRlcGVuZHMgb24gRExNXG4gMjA3Olx0XHRkZWZhdWx0IG5cbiAyMDg6XHRcdGhlbHBcbiAyMDk6XHRcdENsdXN0ZXJpbmcgc3VwcG9ydCBmb3IgTUQgZGV2aWNlcy4gVGhpcyBlbmFibGVzIGxvY2tpbmcgYW5kXG4gMjEwOlx0XHRzeW5jaHJvbml6YXRpb24gYWNyb3NzIG11bHRpcGxlIHN5c3RlbXMgb24gdGhlIGNsdXN0ZXIsIHNvIGFsbFxuIDIxMTpcdFx0bm9kZXMgaW4gdGhlIGNsdXN0ZXIgY2FuIGFjY2VzcyB0aGUgTUQgZGV2aWNlcyBzaW11bHRhbmVvdXNseS5cbiAyMTI6XHRcbiAyMTM6XHRcdFRoaXMgYnJpbmdzIHRoZSByZWR1bmRhbmN5IChhbmQgdXB0aW1lKSBvZiBSQUlEIGxldmVscyBhY3Jvc3MgdGhlXG4gMjE0Olx0XHRub2RlcyBvZiB0aGUgY2x1c3Rlci4gQ3VycmVudGx5LCBpdCBjYW4gd29yayB3aXRoIHJhaWQxIGFuZCByYWlkMTBcbiAyMTU6XHRcdChsaW1pdGVkIHN1cHBvcnQpLlxuIDIxNjpcdFxuIDIxNzpcdFx0SWYgdW5zdXJlLCBzYXkgTi5cbiAyMTg6XHRcbiAyMTk6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9tZC9iY2FjaGUvS2NvbmZpZ1wmIzM0O1xuIDIyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg5MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydCBhbmQgdXNpbmcgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlOgoKKipDaGVja2luZyBETS1SQUlEIGluIGEgQnJvYWRlciBDb250ZXh0KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgaXNzdWUsIGFuZCBJJiMzOTt2ZSBhbHJlYWR5IGNvbnNpZGVyZWQgW21lbnRpb24gcHJldmlvdXMgcG9pbnRzIGlmIHRoZSBvcmlnaW5hbCBjb250ZXh0IGlzIGF2YWlsYWJsZV0uIE5vdywgSSBuZWVkIHRvIGV4cGFuZCBteSBmb2N1cyBhIGJpdC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIHNvbWV0aGluZyByZWxhdGVkIHRvIERNLVJBSUQuIEl0JiMzOTtzIG9mdGVuIHRoZSBlbGVwaGFudCBpbiB0aGUgcm9vbSB0aGF0IGdldHMgZm9yZ290dGVuIHdoZW4gZGlhZ25vc2luZyBjb21wbGV4IHN0b3JhZ2UgaXNzdWVzLiBUaGluZ3MgZ2V0IGhhaXJ5IGZhc3Qgd2hlbiB5b3UgaGF2ZSBMVk0sIE1EIGFuZCBETS1SQUlEIGFsbCBwbGF5aW5nIHRvZ2V0aGVyLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHR5cGljYWwgZmFpbHVyZSBtb2RlcywgZ290Y2hhcywgYW5kIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBjb21wb25lbnRzIGluIHRoYXQgc3RhY2suIFNwZWNpZmljYWxseSwgYXJlIHRoZSBrZXJuZWwgbW9kdWxlcyBsb2FkZWQ/IElzIHRoZSBkZXZpY2UgbWFwcGVyIGxheWVyIGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBhbmQgaG93IGFib3V0IHRoZSBSQUlEIGNvbmZpZ3VyYXRpb24gaXRzZWxmPyBJJiMzOTtsbCBwcm9iYWJseSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgc29tZSBvZiB0aGUgbW9yZSBhZHZhbmNlZCBmZWF0dXJlcyBsaWtlIG11bHRpcGF0aGluZyBhbmQgc25hcHNob3R0aW5nIGFzIHBvdGVudGlhbCBjb21wbGljYXRpbmcgZmFjdG9ycy4gSSBzdXNwZWN0IERNLVJBSUQgaGVyZSwgYnV0IGl0cyB3b3J0aCBhIHF1aWNrIGNoZWNrIHRvIHJ1bGUgaXQgb3V0IGJlZm9yZSBJIGdvIGRlZXBlciBkb3duIGEgcmFiYml0IGhvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBETV9SQUlEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9LY29uZmlnPTQyMD1jb25maWcgRE1fTE9HX1VTRVJTUEFDRVxuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy00MzAtXG5kcml2ZXJzL21kL0tjb25maWc6NDMxOmNvbmZpZyBETV9SQUlEXG5kcml2ZXJzL21kL0tjb25maWctNDMyLSAgICAgICB0cmlzdGF0ZSBcJiMzNDtSQUlEIDEvNC81LzYvMTAgdGFyZ2V0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjY1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzIGluIHRoZSBNRCBMYXllcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgdGhpcyBwYXRjaCBpcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGlzIGEgcmVzb3VuZGluZyAmIzM0O3llcy4mIzM0OyBUaGUgbW9kaWZpY2F0aW9ucyB0b3VjaCBjcml0aWNhbCBhcmVhcyBvZiB0aGUgTUQgKE11bHRpcGxlIERldmljZSkgbGF5ZXI6IGxvY2tpbmcgaGllcmFyY2hpZXMgaW52b2x2aW5nIG11dGV4ZXMgYW5kIGxvY2tzIGxpa2UgYHEtJmd0O2xpbWl0c19sb2NrYCBhbmQgYHJlY29uZmlnX211dGV4YCwgcXVldWUgbGltaXRzIGhhbmRsaW5nLCBhbmQgZGlzayBhZGRpdGlvbi9yZW1vdmFsLCBhbGwgYWNyb3NzIHNldmVyYWwgUkFJRCBwZXJzb25hbGl0aWVzLiBTcGVjaWZpY2FsbHksIGNoYW5nZXMgaW4gaW9jdGwgaGFuZGxpbmcsIHN5c2ZzIGludGVyYWN0aW9ucywgc3luYyB0aHJlYWQgZXhlY3V0aW9uLCBhbmQgYGhvdF9hZGRfZGlza2AgY2FsbGJhY2tzIGluZGljYXRlIGEgaGlnaCBsaWtlbGlob29kIG9mIGludHJvZHVjaW5nIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciBvdGhlciBjb25jdXJyZW5jeS1yZWxhdGVkIGJ1Z3MuIEdpdmVuIHRoYXQgdGhlc2UgY29kZSBwYXRocyBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGlvY3RscyBhbmQgc3lzZnMsIGZ1enppbmcgaXMgYWJzb2x1dGVseSBjcnVjaWFsIHRvIHRlc3QgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIG5ldyBsb2NraW5nIG9yZGVyIGFuZCBxdWV1ZSBsaW1pdCBpbXBsZW1lbnRhdGlvbnMuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyB0byB0YXJnZXQgd2l0aCB0aGUgZnV6emVyLiBXZSBuZWVkIHRvIHNlbGVjdCB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgZW50cnkgcG9pbnRzIHRoYXQgZW5jYXBzdWxhdGUgdGhlIGNoYW5nZWQgbG9naWMuCgpIZXJlJiMzOTtzIG15IGxpc3QsIGJhc2VkIG9uIHRoZSBtb2RpZmllZCBhbmQgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnM6CgoqICAgSW4gYGRyaXZlcnMvbWQvbWQuY2A6IGBtZGRldl9zdGFja19yZGV2X2ludG9gLCBgbWRkZXZfdXBkYXRlX2lvX29wdGAsIGBtZF9hZGRfbmV3X2Rpc2tgLCBgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzYCwgYGhvdF9yZW1vdmVfZGlza2AsIGByZGV2X2F0dHJfc3RvcmVgLCBgbWRfaW9jdGxgLCBgbWRfc3RhcnRfc3luY2AsIGBjaGVja19zYl9jaGFuZ2VzYCwgYGFkZF9ib3VuZF9yZGV2YC4KKiAgIEluIGBkcml2ZXJzL21kL3JhaWQxLmNgOiBgcmFpZDFfYWRkX2Rpc2tgCiogICBJbiBgZHJpdmVycy9tZC9yYWlkMTAuY2A6IGByYWlkMTBfYWRkX2Rpc2tgCiogICBJbiBgZHJpdmVycy9tZC9yYWlkNS5jYDogYHJhaWQ1X2FkZF9kaXNrYCwgYHJhaWQ1X3N0b3JlX3NraXBfY29weWAKKiAgIEluIGBkcml2ZXJzL21kL21kLWxpbmVhci5jYDogYGxpbmVhcl9hZGRgCgpJIGFsc28gY29uZmlybWVkIHRoYXQgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9ja2AgaXMgYSBzdGF0aWMgaW5saW5lIGluIGBpbmNsdWRlL2xpbnV4L2Jsa2Rldi5oYCwgYXMgZXhwZWN0ZWQuCgpGaW5hbGx5LCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gdHJpZ2dlciB0aGUgZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgbXVsdGlwbGUgUkFJRCBwZXJzb25hbGl0aWVzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHksIHNvIHdlIG5lZWQgdG8gZW5hYmxlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIGFsbCByZWxldmFudCBjb2RlIHBhdGhzIGFyZSB0ZXN0ZWQ6CgoqICAgYEJMS19ERVZfTURgCiogICBgTURfUkFJRDFgCiogICBgTURfUkFJRDEwYAoqICAgYE1EX1JBSUQ0NTZgCiogICBgTURfTElORUFSYAoqICAgYERNX1JBSURgCgpJIGFtIGFsc28gZG91YmxlLWNoZWNraW5nIHRoZSBjb25maWd1cmF0aW9uIGNvdmVyYWdlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgZmlsZXMgcmVsYXRlZCB0byBtdWx0aXBsZSBSQUlEIGltcGxlbWVudGF0aW9ucywgc28gZW5hYmxpbmcgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIHNob3VsZCBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlLCBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYERNX1JBSURgICh3aGljaCBkZXBlbmRzIG9uIGBCTEtfREVWX0RNYCBhbmQgaW5kaXJlY3RseSBvbiBgTURfUkFJRDQ1NmApIGlzIHJlbGV2YW50IGJlY2F1c2Ugb2YgdGhlIGBkcml2ZXJzL21kL2RtLXJhaWQuY2AgY2hhbmdlLCBhbmQgdG8gYSBsZXNzZXIgZXh0ZW50LCBgTURfQVVUT0RFVEVDVGAgYXMgd2VsbC4gV2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIGZvY3VzaW5nIG9uIHRoZSBsaXN0ZWQgc3ltYm9scywgd2UgY2FuIHBlcmZvcm0gYSBjb21wcmVoZW5zaXZlIGZ1enppbmcgY2FtcGFpZ24gb24gdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERNX1JBSUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21kLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21kL0tjb25maWc9NDIwPWNvbmZpZyBETV9MT0dfVVNFUlNQQUNFXG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTQzMC1cbmRyaXZlcnMvbWQvS2NvbmZpZzo0MzE6Y29uZmlnIERNX1JBSURcbmRyaXZlcnMvbWQvS2NvbmZpZy00MzItICAgICAgIHRyaXN0YXRlIFwmIzM0O1JBSUQgMS80LzUvNi8xMCB0YXJnZXRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBSQUlEKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBSQUlEIGNvbmZpZ3VyYXRpb24uIFRoZSBjb250ZXh0IHN1Z2dlc3RzIHRoYXQgdGhlIHJlbGV2YW50IGNvZGUgd2lsbCBiZSBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9tZC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIG1vZHVsZSBjb25maWd1cmF0aW9uIGZvciB0aGUgUkFJRCBkcml2ZXJzIHdpbGwgYmUuIEl0JiMzOTtzIGEgbmF0dXJhbCBzdGFydGluZyBwb2ludC4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lIDQzMS4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2x1ZSB0aGVyZSB0byB3aGF0IGlzIGJlaW5nIGNvbmZpZ3VyZWQgYW5kIHdoZXJlIHRoaW5ncyBhcmUgZGVmaW5lZC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB3aGF0ZXZlciBJJiMzOTttIGxvb2tpbmcgZm9yIHdpbGwgYmUgcmVsYXRlZCB0byB3aGF0ZXZlciBpcyBvbiB0aGF0IGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MjU6XHRcdCAgVGhlIHVzZXJzcGFjZSBsb2dnaW5nIG1vZHVsZSBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3JcbiA0MjY6XHRcdCAgcmVsYXlpbmcgdGhlIGRtLWRpcnR5LWxvZyBBUEkgdG8gdXNlcnNwYWNlLiAgTG9nIGRlc2lnbnNcbiA0Mjc6XHRcdCAgd2hpY2ggYXJlIG1vcmUgc3VpdGVkIHRvIHVzZXJzcGFjZSBpbXBsZW1lbnRhdGlvbiAoZS5nLlxuIDQyODpcdFx0ICBzaGFyZWQgc3RvcmFnZSBsb2dzKSBvciBleHBlcmltZW50YWwgbG9ncyBjYW4gYmUgaW1wbGVtZW50ZWRcbiA0Mjk6XHRcdCAgYnkgbGV2ZXJhZ2luZyB0aGlzIGZyYW1ld29yay5cbiA0MzA6XHRcbiA0MzE6XHRjb25maWcgRE1fUkFJRFxuIDQzMjpcdCAgICAgICB0cmlzdGF0ZSBcJiMzNDtSQUlEIDEvNC81LzYvMTAgdGFyZ2V0XCYjMzQ7XG4gNDMzOlx0ICAgICAgIGRlcGVuZHMgb24gQkxLX0RFVl9ETVxuIDQzNDpcdCAgICAgICBzZWxlY3QgTURfUkFJRDBcbiA0MzU6XHQgICAgICAgc2VsZWN0IE1EX1JBSUQxXG4gNDM2Olx0ICAgICAgIHNlbGVjdCBNRF9SQUlEMTBcbiA0Mzc6XHQgICAgICAgc2VsZWN0IE1EX1JBSUQ0NTZcbiA0Mzg6XHQgICAgICAgc2VsZWN0IE1EX0JJVE1BUFxuIDQzOTpcdCAgICAgICBzZWxlY3QgQkxLX0RFVl9NRFxuIDQ0MDpcdFx0aGVscFxuIDQ0MTpcdFx0IEEgZG0gdGFyZ2V0IHRoYXQgc3VwcG9ydHMgUkFJRDEsIFJBSUQxMCwgUkFJRDQsIFJBSUQ1IGFuZCBSQUlENiBtYXBwaW5nc1xuIDQ0MjpcdFxuIDQ0MzpcdFx0IEEgUkFJRC01IHNldCBvZiBOIGRyaXZlcyB3aXRoIGEgY2FwYWNpdHkgb2YgQyBNQiBwZXIgZHJpdmUgcHJvdmlkZXNcbiA0NDQ6XHRcdCB0aGUgY2FwYWNpdHkgb2YgQyAqIChOIC0gMSkgTUIsIGFuZCBwcm90ZWN0cyBhZ2FpbnN0IGEgZmFpbHVyZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzcwNAoJCQkJCQkJb3V0cHV0OiAyODUKCQkJCQkJCXRob3VnaHRzOiAzODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1EIFJBSUQgTGF5ZXIgUmVmYWN0b3JpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBiYXNlZCBvbiB0aGUgY29uZmlnc+KAlGBCTEtfREVWX01EYCwgYE1EX1JBSUQxYCwgYE1EX1JBSUQxMGAsIGBNRF9SQUlENDU2YCwgYE1EX0xJTkVBUmAsIGFuZCBgRE1fUkFJRGDigJRpdCYjMzk7cyBjbGVhcmx5IGZvY3VzZWQgb24gdGhlIE1EIChzb2Z0d2FyZSBSQUlEKSBsYXllci4gVGhlIGNvcmUgb2YgdGhpcyByZWZhY3RvciBzZWVtcyB0byBiZSBhYm91dCBob3cgcXVldWUgbGltaXRzIGFyZSB1cGRhdGVkIGFuZCB0aGUgb3JkZXIgaW4gd2hpY2ggbG9ja3MgYXJlIGFjcXVpcmVkLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgcS0mZ3Q7bGltaXRzX2xvY2tgLCBgcmVjb25maWdfbXV0ZXhgLCBhbmQgZGV2aWNlIHN1c3BlbnNpb24uCgpUaGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZV90cnlsb2NrKClgIGFuZCBgbWRkZXZfc3RhY2tfcmRldl9pbnRvKClgLiBBbnl0aW1lIHlvdSBtZXNzIHdpdGggbG9jayBoaWVyYXJjaGllcyBpbiB0aGlzIGtpbmQgb2YgbG93LWxldmVsIGNvZGUsIG15IGFudGVubmEgZ28gdXAuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG9wZXJhdGlvbnMgZHVyaW5nIGhvdC1hZGQsIHNwYXJlIHJlbW92YWwvYWRkaXRpb24sIHJlc2hhcGVzLCBhbmQgdGhvc2UgYXJlIGFsbCBzZW5zaXRpdmUgcG9pbnRzLiBJdCYjMzk7cyBhbHNvIHdvcnRoIG5vdGluZyBob3cgbWFueSBpbnRlcmFjdGlvbnMgdGhlIGtlcm5lbCBoYXMgd2l0aCB0aG9zZS4gV2Ugc2hvdWxkIGJlIGV4dHJhIHZpZ2lsYW50LCBhbmQgdGhhdCBtZWFucyB3ZSB3aWxsIG5lZWQgdG8gZ2l2ZSBpdCBzcGVjaWFsIGF0dGVudGlvbiB0byBhdm9pZCBzdWJ0bGUgZGVhZGxvY2tzLCBsb2NraW5nIGluY29uc2lzdGVuY2llcywgYW5kIHBvdGVudGlhbCBzdGF0ZSByZWdyZXNzaW9ucy4KCkxldCYjMzk7cyBkbyBhIHNhbml0eSBjaGVjayBvbiB0aGUgZm9jdXMgc3ltYm9scy4gTG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IGEgZ29vZCBsaXN0OiBgbWRkZXZfc3RhY2tfcmRldl9pbnRvYCwgYG1kZGV2X3VwZGF0ZV9pb19vcHRgLCBgbWRfYWRkX25ld19kaXNrYCwgYHJlbW92ZV9hbmRfYWRkX3NwYXJlc2AsIGByZGV2X2F0dHJfc3RvcmVgLCBgbWRfc3RhcnRfc3luY2AsIGByYWlkMV9hZGRfZGlza2AsIGByYWlkMTBfYWRkX2Rpc2tgLCBgcmFpZDVfYWRkX2Rpc2tgLCBgcmFpZDVfc3RvcmVfc2tpcF9jb3B5YCwgYW5kIGBsaW5lYXJfYWRkYC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgbGlzdC4KClRoZXkgYXJlIGFsbCBzcGVjaWZpYyB0byBNRCBSQUlELCBhbmQgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgd2Ugd2FudC4gVGhleSBhcmUgYWxzbyBwcmVzZW50IGluIHRoZSBtb2RpZmllZCBDIGZpbGVzIHdoaWNoIG1lYW5zIGl0IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgcmV2aWV3LgoKSSBuZWVkIHRvIGZsYWcgdGhpcyBmb3IgZnV6emluZyBhbmQgZXh0ZW5zaXZlIHRlc3RpbmcuIE5vdywgSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX01EJiMzNDssCiAgICAmIzM0O01EX1JBSUQxJiMzNDssCiAgICAmIzM0O01EX1JBSUQxMCYjMzQ7LAogICAgJiMzNDtNRF9SQUlENDU2JiMzNDssCiAgICAmIzM0O01EX0xJTkVBUiYjMzQ7LAogICAgJiMzNDtETV9SQUlEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWRkZXZfc3RhY2tfcmRldl9pbnRvJiMzNDssCiAgICAmIzM0O21kZGV2X3VwZGF0ZV9pb19vcHQmIzM0OywKICAgICYjMzQ7bWRfYWRkX25ld19kaXNrJiMzNDssCiAgICAmIzM0O3JlbW92ZV9hbmRfYWRkX3NwYXJlcyYjMzQ7LAogICAgJiMzNDtyZGV2X2F0dHJfc3RvcmUmIzM0OywKICAgICYjMzQ7bWRfc3RhcnRfc3luYyYjMzQ7LAogICAgJiMzNDtyYWlkMV9hZGRfZGlzayYjMzQ7LAogICAgJiMzNDtyYWlkMTBfYWRkX2Rpc2smIzM0OywKICAgICYjMzQ7cmFpZDVfYWRkX2Rpc2smIzM0OywKICAgICYjMzQ7cmFpZDVfc3RvcmVfc2tpcF9jb3B5JiMzNDssCiAgICAmIzM0O2xpbmVhcl9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzdHJ1Y3R1cmVzIGxvY2sgYWNxdWlzaXRpb24gYW5kIHF1ZXVlIGxpbWl0cyBwcm9wYWdhdGlvbiBpbiB0aGUgTUQgKHNvZnR3YXJlIFJBSUQpIGxheWVyIHRvIHByZXZlbnQgZGVhZGxvY2tzIGJldHdlZW4gcS1cdTAwM2VsaW1pdHNfbG9jaywgcmVjb25maWdfbXV0ZXgsIGFuZCBtZGRldl9zdXNwZW5kLiBJdCBhbHRlcnMgZGlzayBhZGRpdGlvbi9yZW1vdmFsIGFuZCBzeXNmcy9pb2N0bCBoYW5kbGluZyBhY3Jvc3MgbXVsdGlwbGUgUkFJRCBwZXJzb25hbGl0aWVzIChyYWlkMSwgcmFpZDEwLCByYWlkNSwgbGluZWFyLCBkbS1yYWlkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGlzY292ZXIgcG90ZW50aWFsIGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGNvcnJ1cHRpb25zIGR1cmluZyBjb25jdXJyZW50IFJBSUQgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX01EJiMzNDssCiAgICAmIzM0O01EX1JBSUQxJiMzNDssCiAgICAmIzM0O01EX1JBSUQxMCYjMzQ7LAogICAgJiMzNDtNRF9SQUlENDU2JiMzNDssCiAgICAmIzM0O01EX0xJTkVBUiYjMzQ7LAogICAgJiMzNDtETV9SQUlEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWRkZXZfc3RhY2tfcmRldl9pbnRvJiMzNDssCiAgICAmIzM0O21kZGV2X3VwZGF0ZV9pb19vcHQmIzM0OywKICAgICYjMzQ7bWRfYWRkX25ld19kaXNrJiMzNDssCiAgICAmIzM0O3JlbW92ZV9hbmRfYWRkX3NwYXJlcyYjMzQ7LAogICAgJiMzNDtyZGV2X2F0dHJfc3RvcmUmIzM0OywKICAgICYjMzQ7bWRfc3RhcnRfc3luYyYjMzQ7LAogICAgJiMzNDtyYWlkMV9hZGRfZGlzayYjMzQ7LAogICAgJiMzNDtyYWlkMTBfYWRkX2Rpc2smIzM0OywKICAgICYjMzQ7cmFpZDVfYWRkX2Rpc2smIzM0OywKICAgICYjMzQ7cmFpZDVfc3RvcmVfc2tpcF9jb3B5JiMzNDssCiAgICAmIzM0O2xpbmVhcl9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzdHJ1Y3R1cmVzIGxvY2sgYWNxdWlzaXRpb24gYW5kIHF1ZXVlIGxpbWl0cyBwcm9wYWdhdGlvbiBpbiB0aGUgTUQgKHNvZnR3YXJlIFJBSUQpIGxheWVyIHRvIHByZXZlbnQgZGVhZGxvY2tzIGJldHdlZW4gcS1cdTAwM2VsaW1pdHNfbG9jaywgcmVjb25maWdfbXV0ZXgsIGFuZCBtZGRldl9zdXNwZW5kLiBJdCBhbHRlcnMgZGlzayBhZGRpdGlvbi9yZW1vdmFsIGFuZCBzeXNmcy9pb2N0bCBoYW5kbGluZyBhY3Jvc3MgbXVsdGlwbGUgUkFJRCBwZXJzb25hbGl0aWVzIChyYWlkMSwgcmFpZDEwLCByYWlkNSwgbGluZWFyLCBkbS1yYWlkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGlzY292ZXIgcG90ZW50aWFsIGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGNvcnJ1cHRpb25zIGR1cmluZyBjb25jdXJyZW50IFJBSUQgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE4OjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1EIChzb2Z0d2FyZSBSQUlEKSBzdWJzeXN0ZW0gYW5kIGJsb2NrIGxheWVyIGhlbHBlciBmdW5jdGlvbnMgdG8gcmVzdHJ1Y3R1cmUgaG93IHF1ZXVlIGxpbWl0cyBhcmUgdXBkYXRlZCBhY3Jvc3MgbWQtbGluZWFyLCByYWlkMSwgcmFpZDEwLCBhbmQgcmFpZDUgYXJyYXlzLiBTcGVjaWZpY2FsbHksIGl0IHBhc3NlcyBhbiBleGlzdGluZyBvciBuZXdseSBzdGFydGVkIGBzdHJ1Y3QgcXVldWVfbGltaXRzYCB0aHJvdWdoIHZhcmlvdXMgaG90LWFkZC9yZW1vdmUvdXBkYXRlIGNhbGwgcGF0aHMgdG8gYXZvaWQgbG9jay1pbnZlcnNpb24gZGVhZGxvY2tzIGJldHdlZW4gYHEtXHUwMDNlbGltaXRzX2xvY2tgLCBhcnJheSBzdXNwZW5zaW9uLCBhbmQgYHJlY29uZmlnX211dGV4YC5cblxuQWxsIGBzdHJ1Y3QgcXVldWVfbGltaXRzYCBpbnN0YW5jZXMgb24gdGhlIHN0YWNrIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlICh2aWEgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAsIHdoaWNoIHJldHVybnMgYHEtXHUwMDNlbGltaXRzYCBieSB2YWx1ZSwgb3IgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jaygpYCB3aGljaCBwb3B1bGF0ZXMgYCpsaW1gKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgcmVhZCwgcGFzc2VkIHRvIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCBvciByZWZlcmVuY2Uvc3RhdGUgZXJyb3JzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWdnZXJzIHJhdGhlciB0aGFuIEtNU0FOLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyB0aGVyZWZvcmUgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYzYzZiZjI2NmEyNGNmNTc1NGI3YmMwNDUwMTFlNzQzZDJlM2Q3N2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE4OjEzOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkLmMgYi9kcml2ZXJzL21kL2RtLXJhaWQuYwppbmRleCA4ZjVhNWUxMzQyYTk1Li4yMWExOTIyYmVlNGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXJhaWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL2RtLXJhaWQuYwpAQCAtMzkyMyw3ICYjNDM7MzkyMyw3IEBAIHN0YXRpYyB2b2lkIGF0dGVtcHRfcmVzdG9yZV9vZl9mYXVsdHlfZGV2aWNlcyhzdHJ1Y3QgcmFpZF9zZXQgKnJzKQogCQkJY2xlYXJfYml0KEZhdWx0eSwgJmFtcDtyLSZndDtmbGFncyk7CiAJCQljbGVhcl9iaXQoV3JpdGVFcnJvclNlZW4sICZhbXA7ci0mZ3Q7ZmxhZ3MpOwogCi0JCQlpZiAobWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhtZGRldiwgcikpIHsKJiM0MzsJCQlpZiAobWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhtZGRldiwgciwgTlVMTCkpIHsKIAkJCQkvKiBGYWlsZWQgdG8gcmV2aXZlIHRoaXMgZGV2aWNlLCB0cnkgbmV4dCAqLwogCQkJCXItJmd0O3JhaWRfZGlzayA9IHItJmd0O3NhdmVkX3JhaWRfZGlzayA9IC0xOwogCQkJCXItJmd0O2ZsYWdzID0gZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLWF1dG9kZXRlY3QuYyBiL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jCmluZGV4IDRiODAxNjVhZmQyMzMuLjkyOTUxMzEwOTY1N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jCkBAIC0yMTMsNyAmIzQzOzIxMyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtZF9zZXR1cF9kcml2ZShzdHJ1Y3QgbWRfc2V0dXBfYXJncyAqYXJncykKIAkJCQkoMSAmbHQ7Jmx0OyBNRF9ESVNLX0FDVElWRSkgfCAoMSAmbHQ7Jmx0OyBNRF9ESVNLX1NZTkMpOwogCQl9CiAKLQkJbWRfYWRkX25ld19kaXNrKG1kZGV2LCAmYW1wO2RpbmZvKTsKJiM0MzsJCW1kX2FkZF9uZXdfZGlzayhtZGRldiwgJmFtcDtkaW5mbywgTlVMTCk7CiAJfQogCiAJaWYgKCFlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLWxpbmVhci5jIGIvZHJpdmVycy9tZC9tZC1saW5lYXIuYwppbmRleCA3M2IzNjdiNjFiODczLi4xZjQ0YzJkN2RiOTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLWxpbmVhci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvbWQtbGluZWFyLmMKQEAgLTE4Niw3ICYjNDM7MTg2LDggQEAgc3RhdGljIGludCBsaW5lYXJfcnVuKHN0cnVjdCBtZGRldiAqbWRkZXYpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBsaW5lYXJfYWRkKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KQomIzQzO3N0YXRpYyBpbnQgbGluZWFyX2FkZChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldiwKJiM0MzsJCSAgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAkvKiBBZGRpbmcgYSBkcml2ZSB0byBhIGxpbmVhciBhcnJheSBhbGxvd3MgdGhlIGFycmF5IHRvIGdyb3cuCiAJICogSXQgaXMgcGVybWl0dGVkIGlmIHRoZSBuZXcgZHJpdmUgaGFzIGEgbWF0Y2hpbmcgc3VwZXJibG9jawpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDY4MGIzNGE2M2NiM2QuLmM0MDU0ZDA2ZDEwNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmMKQEAgLTk0LDggJiM0Mzs5NCw4IEBAIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZXN5bmNfd2FpdCk7CiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWRfbWlzY193cTsKIAotc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwKLQkJCQkgc3RydWN0IG1kX3JkZXYgKnRoaXMpOwomIzQzO3N0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICp0aGlzLAomIzQzOwkJCQkgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTsKIHN0YXRpYyB2b2lkIG1kZGV2X2RldGFjaChzdHJ1Y3QgbWRkZXYgKm1kZGV2KTsKIHN0YXRpYyB2b2lkIGV4cG9ydF9yZGV2KHN0cnVjdCBtZF9yZGV2ICpyZGV2KTsKIHN0YXRpYyB2b2lkIG1kX3dha2V1cF90aHJlYWRfZGlyZWN0bHkoc3RydWN0IG1kX3RocmVhZCBfX3JjdSAqKnRocmVhZCk7CkBAIC0yOTgxLDcgJiM0MzsyOTgxLDcgQEAgdm9pZCBtZF91cGRhdGVfc2Ioc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZvcmNlX2NoYW5nZSkKIH0KIEVYUE9SVF9TWU1CT0wobWRfdXBkYXRlX3NiKTsKIAotc3RhdGljIGludCBhZGRfYm91bmRfcmRldihzdHJ1Y3QgbWRfcmRldiAqcmRldikKJiM0MztzdGF0aWMgaW50IGFkZF9ib3VuZF9yZGV2KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJc3RydWN0IG1kZGV2ICptZGRldiA9IHJkZXYtJmd0O21kZGV2OwogCWludCBlcnIgPSAwOwpAQCAtMjk5NCw3ICYjNDM7Mjk5NCw3IEBAIHN0YXRpYyBpbnQgYWRkX2JvdW5kX3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJCSAqLwogCQlzdXBlcl90eXBlc1ttZGRldi0mZ3Q7bWFqb3JfdmVyc2lvbl0uCiAJCQl2YWxpZGF0ZV9zdXBlcihtZGRldiwgTlVMTC8qZnJlc2hlc3QqLywgcmRldik7Ci0JCWVyciA9IG1kZGV2LSZndDtwZXJzLSZndDtob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYpOwomIzQzOwkJZXJyID0gbWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhtZGRldiwgcmRldiwgbGltKTsKIAkJaWYgKGVycikgewogCQkJbWRfa2lja19yZGV2X2Zyb21fYXJyYXkocmRldik7CiAJCQlyZXR1cm4gZXJyOwpAQCAtMzAzMyw3ICYjNDM7MzAzMywxMyBAQCBzdGF0aWMgaW50IGNtZF9tYXRjaChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnN0cikKIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5IHsKIAlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CiAJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBtZF9yZGV2ICosIGNoYXIgKik7Ci0Jc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiYjNDM7CS8qCiYjNDM7CSAqIEBsaW06IGEgcXVldWUgbGltaXRzIHVwZGF0ZSB0aGUgY2FsbGVyIG93bnMsIG9yIE5VTEwuICBTdG9yZXMgdGhhdAomIzQzOwkgKiBjYW4gYWRkIGEgbGVnIHRvIHRoZSBhcnJheSBtdXN0IHN0YWNrIGludG8gaXQgcmF0aGVyIHRoYW4gdGFrZQomIzQzOwkgKiBxLSZndDtsaW1pdHNfbG9jayB0aGVtc2VsdmVzLCBzZWUgbWRfc3RhcnRfc3luYygpLgomIzQzOwkgKi8KJiM0MzsJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbiwKJiM0MzsJCQkgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTsKIH07CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0zMDc5LDcgJiM0MzszMDg1LDggQEAgc3RhdGVfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIH0KIAogc3RhdGljIHNzaXplX3QKLXN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7c3RhdGVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKJiM0MzsJICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAkvKiBjYW4gd3JpdGUKIAkgKiAgZmF1bHR5ICAtIHNpbXVsYXRlcyBhbiBlcnJvcgpAQCAtMzExMCw3ICYjNDM7MzExNyw3IEBAIHN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiAJfSBlbHNlIGlmIChjbWRfbWF0Y2goYnVmLCAmIzM0O3JlbW92ZSYjMzQ7KSkgewogCQlpZiAocmRldi0mZ3Q7bWRkZXYtJmd0O3BlcnMpIHsKIAkJCWNsZWFyX2JpdChCbG9ja2VkLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKLQkJCXJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LSZndDttZGRldiwgcmRldik7CiYjNDM7CQkJcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtJmd0O21kZGV2LCByZGV2LCBsaW0pOwogCQl9CiAJCWlmIChyZGV2LSZndDtyYWlkX2Rpc2sgJmd0Oz0gMCkKIAkJCWVyciA9IC1FQlVTWTsKQEAgLTMyMjksNyAmIzQzOzMyMzYsNyBAQCBzdGF0ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogCQkJaWYgKCFtZGRldl9pc19jbHVzdGVyZWQocmRldi0mZ3Q7bWRkZXYpIHx8CiAJCQkgICAgKGVyciA9IG1kZGV2LSZndDtjbHVzdGVyX29wcy0mZ3Q7Z2F0aGVyX2JpdG1hcHMocmRldikpID09IDApIHsKIAkJCQljbGVhcl9iaXQoRmF1bHR5LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKLQkJCQllcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTsKJiM0MzsJCQkJZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTsKIAkJCX0KIAkJfSBlbHNlCiAJCQllcnIgPSAtRUJVU1k7CkBAIC0zMjU3LDcgJiM0MzszMjY0LDggQEAgZXJyb3JzX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpCiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1lcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0MztlcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKJiM0MzsJICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJdW5zaWduZWQgaW50IG47CiAJaW50IHJ2OwpAQCAtMzI4Myw3ICYjNDM7MzI5MSw4IEBAIHNsb3Rfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIH0KIAogc3RhdGljIHNzaXplX3QKLXNsb3Rfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0MztzbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCiYjNDM7CSAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAlpbnQgc2xvdDsKIAlpbnQgZXJyOwpAQCAtMzMxNCw3ICYjNDM7MzMyMyw3IEBAIHNsb3Rfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIAkJaWYgKHJkZXYtJmd0O21kZGV2LSZndDtwZXJzLSZndDtob3RfcmVtb3ZlX2Rpc2sgPT0gTlVMTCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQljbGVhcl9iaXQoQmxvY2tlZCwgJmFtcDtyZGV2LSZndDtmbGFncyk7Ci0JCXJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LSZndDttZGRldiwgcmRldik7CiYjNDM7CQlyZW1vdmVfYW5kX2FkZF9zcGFyZXMocmRldi0mZ3Q7bWRkZXYsIHJkZXYsIGxpbSk7CiAJCWlmIChyZGV2LSZndDtyYWlkX2Rpc2sgJmd0Oz0gMCkKIAkJCXJldHVybiAtRUJVU1k7CiAJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmYW1wO3JkZXYtJmd0O21kZGV2LSZndDtyZWNvdmVyeSk7CkBAIC0zMzQ0LDcgJiM0MzszMzUzLDggQEAgc2xvdF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogCQkJcmRldi0mZ3Q7c2F2ZWRfcmFpZF9kaXNrID0gLTE7CiAJCWNsZWFyX2JpdChJbl9zeW5jLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKIAkJY2xlYXJfYml0KEJpdG1hcF9zeW5jLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKLQkJZXJyID0gcmRldi0mZ3Q7bWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhyZGV2LSZndDttZGRldiwgcmRldik7CiYjNDM7CQllcnIgPSByZGV2LSZndDttZGRldi0mZ3Q7cGVycy0mZ3Q7aG90X2FkZF9kaXNrKHJkZXYtJmd0O21kZGV2LCByZGV2LAomIzQzOwkJCQkJCSAgICAgbGltKTsKIAkJaWYgKGVycikgewogCQkJcmRldi0mZ3Q7cmFpZF9kaXNrID0gLTE7CiAJCQlyZXR1cm4gZXJyOwpAQCAtMzM3Nyw3ICYjNDM7MzM4Nyw4IEBAIG9mZnNldF9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKQogfQogCiBzdGF0aWMgc3NpemVfdAotb2Zmc2V0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7b2Zmc2V0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCiYjNDM7CSAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQ7CiAJaWYgKGtzdHJ0b3VsbChidWYsIDEwLCAmYW1wO29mZnNldCkgJmx0OyAwKQpAQCAtMzQwMyw3ICYjNDM7MzQxNCw4IEBAIHN0YXRpYyBzc2l6ZV90IG5ld19vZmZzZXRfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIH0KIAogc3RhdGljIHNzaXplX3QgbmV3X29mZnNldF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwKLQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7CQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKJiM0MzsJCQkJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBuZXdfb2Zmc2V0OwogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSByZGV2LSZndDttZGRldjsKQEAgLTM1MTAsNyAmIzQzOzM1MjIsOCBAQCBzdGF0aWMgaW50IHN0cmljdF9ibG9ja3NfdG9fc2VjdG9ycyhjb25zdCBjaGFyICpidWYsIHNlY3Rvcl90ICpzZWN0b3JzKQogfQogCiBzdGF0aWMgc3NpemVfdAotcmRldl9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7cmRldl9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCiYjNDM7CQlzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJc3RydWN0IG1kZGV2ICpteV9tZGRldiA9IHJkZXYtJmd0O21kZGV2OwogCXNlY3Rvcl90IG9sZHNlY3RvcnMgPSByZGV2LSZndDtzZWN0b3JzOwpAQCAtMzU3Miw3ICYjNDM7MzU4NSw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpCiAJcmV0dXJuIHNwcmludGYocGFnZSwgJiMzNDslbGx1XG4mIzM0OywgcmVjb3Zlcnlfc3RhcnQpOwogfQogCi1zdGF0aWMgc3NpemVfdCByZWNvdmVyeV9zdGFydF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQomIzQzO3N0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCiYjNDM7CQkJCSAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHJlY292ZXJ5X3N0YXJ0OwogCkBAIC0zNjExLDcgJiM0MzszNjI1LDkgQEAgc3RhdGljIHNzaXplX3QgYmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIHsKIAlyZXR1cm4gYmFkYmxvY2tzX3Nob3coJmFtcDtyZGV2LSZndDtiYWRibG9ja3MsIHBhZ2UsIDApOwogfQotc3RhdGljIHNzaXplX3QgYmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pCiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgYmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4sCiYjNDM7CQkJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCWludCBydiA9IGJhZGJsb2Nrc19zdG9yZSgmYW1wO3JkZXYtJmd0O2JhZGJsb2NrcywgcGFnZSwgbGVuLCAwKTsKIAkvKiBNYXliZSB0aGF0IGFjayB3YXMgYWxsIHdlIG5lZWRlZCAqLwpAQCAtMzYyNiw3ICYjNDM7MzY0Miw5IEBAIHN0YXRpYyBzc2l6ZV90IHViYl9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKQogewogCXJldHVybiBiYWRibG9ja3Nfc2hvdygmYW1wO3JkZXYtJmd0O2JhZGJsb2NrcywgcGFnZSwgMSk7CiB9Ci1zdGF0aWMgc3NpemVfdCB1YmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pCiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgdWJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLAomIzQzOwkJCSBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJcmV0dXJuIGJhZGJsb2Nrc19zdG9yZSgmYW1wO3JkZXYtJmd0O2JhZGJsb2NrcywgcGFnZSwgbGVuLCAxKTsKIH0KQEAgLTM2NDAsNyAmIzQzOzM2NTgsOCBAQCBwcGxfc2VjdG9yX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpCiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1wcGxfc2VjdG9yX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7cHBsX3NlY3Rvcl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLAomIzQzOwkJIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgc2VjdG9yOwogCkBAIC0zNjc5LDcgJiM0MzszNjk4LDggQEAgcHBsX3NpemVfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSkKIH0KIAogc3RhdGljIHNzaXplX3QKLXBwbF9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7cHBsX3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKJiM0MzsJICAgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIApAQCAtMzc0MCw2ICYjNDM7Mzc2MCw5IEBAIHJkZXZfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAlzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHJkZXZfc3lzZnNfZW50cnksIGF0dHIpOwogCXN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBtZF9yZGV2LCBrb2JqKTsKIAlzdHJ1Y3Qga2VybmZzX25vZGUgKmtuID0gTlVMTDsKJiM0MzsJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7CiAJYm9vbCBzdXNwZW5kID0gZmFsc2U7CiAJc3NpemVfdCBydjsKIAlzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gUkVBRF9PTkNFKHJkZXYtJmd0O21kZGV2KTsKQEAgLTM3NjAsMTUgJiM0MzszNzgzLDM3IEBAIHJkZXZfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAkJCXN1c3BlbmQgPSB0cnVlOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBUaGVzZSBjYW4gYWRkIGEgbGVnIGJhY2ssIHdoaWNoIHN0YWNrcyBpdHMgbGltaXRzOyB0aGUgb3RoZXIKJiM0MzsJICogc3RhdGVfc3RvcmUoKSB2YWx1ZXMgbmV2ZXIgcmVhY2ggLSZndDtob3RfYWRkX2Rpc2soKS4gIHEtJmd0O2xpbWl0c19sb2NrCiYjNDM7CSAqIG5lc3RzIG91dHNpZGUgdGhlIGxvY2sgYW5kIHRoZSBzdXNwZW5kLCBzZWUgbWRfc3RhcnRfc3luYygpLgomIzQzOwkgKi8KJiM0MzsJaWYgKChlbnRyeS0mZ3Q7c3RvcmUgPT0gc2xvdF9zdG9yZSB8fAomIzQzOwkgICAgIChlbnRyeS0mZ3Q7c3RvcmUgPT0gc3RhdGVfc3RvcmUgJmFtcDsmYW1wOwomIzQzOwkgICAgICAoY21kX21hdGNoKHBhZ2UsICYjMzQ7cmVtb3ZlJiMzNDspIHx8IGNtZF9tYXRjaChwYWdlLCAmIzM0O3JlLWFkZCYjMzQ7KSkpKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhbWRkZXZfaXNfZG0obWRkZXYpKSB7CiYjNDM7CQlxID0gbWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlOwomIzQzOwkJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTsKJiM0MzsJCWxpbXAgPSAmYW1wO2xpbTsKJiM0MzsJfQomIzQzOwogCXJ2ID0gc3VzcGVuZCA/IG1kZGV2X3N1c3BlbmRfYW5kX2xvY2sobWRkZXYpIDogbWRkZXZfbG9jayhtZGRldik7CiAJaWYgKCFydikgewogCQlpZiAocmRldi0mZ3Q7bWRkZXYgPT0gTlVMTCkKIAkJCXJ2ID0gLUVOT0RFVjsKIAkJZWxzZQotCQkJcnYgPSBlbnRyeS0mZ3Q7c3RvcmUocmRldiwgcGFnZSwgbGVuZ3RoKTsKJiM0MzsJCQlydiA9IGVudHJ5LSZndDtzdG9yZShyZGV2LCBwYWdlLCBsZW5ndGgsIGxpbXApOwomIzQzOwkJLyogYXBwbHkgdGhlIGxpbWl0cyBiZWZvcmUgdGhlIGFycmF5IHRha2VzIEkvTyBhZ2FpbiAqLwomIzQzOwkJaWYgKGxpbXApIHsKJiM0MzsJCQlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTsKJiM0MzsJCQlsaW1wID0gTlVMTDsKJiM0MzsJCX0KIAkJc3VzcGVuZCA/IG1kZGV2X3VubG9ja19hbmRfcmVzdW1lKG1kZGV2KSA6IG1kZGV2X3VubG9jayhtZGRldik7CiAJfQogCiYjNDM7CWlmIChsaW1wKQomIzQzOwkJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltcCk7CiYjNDM7CiAJaWYgKGtuKQogCQlzeXNmc191bmJyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtuKTsKIApAQCAtNjI3NSwyMCAmIzQzOzYzMjAsODkgQEAgaW50IG1kZGV2X3N0YWNrX25ld19yZGV2KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwobWRkZXZfc3RhY2tfbmV3X3JkZXYpOwogCiYjNDM7LyoKJiM0MzsgKiBTdGFjayBhIG5ldyByZGV2IGludG8gbGltaXRzIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyBsaW1pdHNfbG9jayBmb3IgYW5kCiYjNDM7ICogd2lsbCBjb21taXQgaXRzZWxmLiAgVXNlZCBmcm9tIHBhdGhzIHRoYXQgbXVzdCB0YWtlIGxpbWl0c19sb2NrIGJlZm9yZQomIzQzOyAqIHF1aWVzY2luZyB0aGUgYXJyYXksIHNlZSBtZF9zdGFydF9zeW5jKCkuCiYjNDM7ICovCiYjNDM7aW50IG1kZGV2X3N0YWNrX3JkZXZfaW50byhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldiwKJiM0MzsJCQkgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgdG1wID0gKmxpbTsKJiM0MzsKJiM0MzsJaWYgKG1kZGV2X2lzX2RtKG1kZGV2KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocXVldWVfbG9naWNhbF9ibG9ja19zaXplKHJkZXYtJmd0O2JkZXYtJmd0O2JkX2Rpc2stJmd0O3F1ZXVlKSAmZ3Q7CiYjNDM7CSAgICBxdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUobWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlKSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IGluY29tcGF0aWJsZSBsb2dpY2FsX2Jsb2NrX3NpemUsIGNhbiBub3QgYWRkXG4mIzM0OywKJiM0MzsJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXF1ZXVlX2xpbWl0c19zdGFja19iZGV2KCZhbXA7dG1wLCByZGV2LSZndDtiZGV2LCByZGV2LSZndDtkYXRhX29mZnNldCwKJiM0MzsJCQkJbWRkZXYtJmd0O2dlbmRpc2stJmd0O2Rpc2tfbmFtZSk7CiYjNDM7CiYjNDM7CWlmICghcXVldWVfbGltaXRzX3N0YWNrX2ludGVncml0eV9iZGV2KCZhbXA7dG1wLCByZGV2LSZndDtiZGV2KSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IGluY29tcGF0aWJsZSBpbnRlZ3JpdHkgcHJvZmlsZSBmb3IgJXBnXG4mIzM0OywKJiM0MzsJCSAgICAgICBtZG5hbWUobWRkZXYpLCByZGV2LSZndDtiZGV2KTsKJiM0MzsJCXJldHVybiAtRU5YSU87CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmxpbSA9IHRtcDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3N0YWNrX3JkZXZfaW50byk7CiYjNDM7CiYjNDM7LyogZm9yIGNhbGxlcnMgdGhhdCBtdXN0IG5vdCB3YWl0IGZvciBxLSZndDtsaW1pdHNfbG9jaywgc2VlIG1kX3N0YXJ0X3N5bmMoKSAqLwomIzQzO3N0YXRpYyBib29sIG1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKHN0cnVjdCBtZGRldiAqbWRkZXYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKJiM0MzsKJiM0MzsJaWYgKG1kZGV2X2lzX2RtKG1kZGV2KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcSA9IG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayhxLCBsaW0pOwomIzQzO30KJiM0MzsKIC8qIHVwZGF0ZSB0aGUgb3B0aW1hbCBJL08gc2l6ZSBhZnRlciBhIHJlc2hhcGUgKi8KLXZvaWQgbWRkZXZfdXBkYXRlX2lvX29wdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB1bnNpZ25lZCBpbnQgbnJfc3RyaXBlcykKJiM0Mzt2b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMsCiYjNDM7CQkJIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKLQlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyBvd247CiAKIAlpZiAobWRkZXZfaXNfZG0obWRkZXYpKQogCQlyZXR1cm47CiAKJiM0MzsJLyoKJiM0MzsJICogV2l0aCBhbiB1cGRhdGUgb3duZWQgYnkgdGhlIGNhbGxlciBqdXN0IGNoYW5nZSBpdCBpbiBwbGFjZTsgaXQgaXMKJiM0MzsJICogY29tbWl0dGVkLCBhbmQgdGhlIGFycmF5IHJlc3VtZWQsIGJ5IHdob2V2ZXIgc3RhcnRlZCBpdC4gIFRha2luZwomIzQzOwkgKiBxLSZndDtsaW1pdHNfbG9jayBoZXJlIHdvdWxkIG5lc3QgaXQgaW5zaWRlIHJlY29uZmlnX211dGV4IGFuZCB0aGUKJiM0MzsJICogc3VzcGVuZCwgd2hpY2ggZGVhZGxvY2tzLCBzZWUgbWRfc3RhcnRfc3luYygpLgomIzQzOwkgKi8KJiM0MzsJaWYgKGxpbSkgewomIzQzOwkJbGltLSZndDtpb19vcHQgPSBsaW0tJmd0O2lvX21pbiAqIG5yX3N0cmlwZXM7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ2FsbGVkIGZyb20gdGhlIHN5bmMgdGhyZWFkLCB3aGljaCBtZF9yZWFwX3N5bmNfdGhyZWFkKCkgd2FpdHMgZm9yCiYjNDM7CSAqIHdpdGggcmVjb25maWdfbXV0ZXggaGVsZCwgc28gZG9uJiMzOTt0IHdhaXQgZm9yIHEtJmd0O2xpbWl0c19sb2NrIGhlcmUuCiYjNDM7CSAqIGlvX29wdCBpcyBhIGhpbnQsIHNraXBwaW5nIGl0IG9uIGEgY29udGVuZGVkIHBhc3MgaXMgZmluZS4KJiM0MzsJICovCiYjNDM7CWlmICghbWRkZXZfc3RhY2tfbGltaXRzX3RyeWxvY2sobWRkZXYsICZhbXA7b3duKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKiBkb24mIzM5O3QgYm90aGVyIHVwZGF0aW5nIGlvX29wdCBpZiB3ZSBjYW4mIzM5O3Qgc3VzcGVuZCB0aGUgYXJyYXkgKi8KLQlpZiAobWRkZXZfc3VzcGVuZChtZGRldiwgZmFsc2UpICZsdDsgMCkKJiM0MzsJaWYgKG1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKSAmbHQ7IDApIHsKJiM0MzsJCXF1ZXVlX2xpbWl0c19jYW5jZWxfdXBkYXRlKG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZSk7CiAJCXJldHVybjsKLQlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZSk7Ci0JbGltLmlvX29wdCA9IGxpbS5pb19taW4gKiBucl9zdHJpcGVzOwotCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZSwgJmFtcDtsaW0pOwomIzQzOwl9CiYjNDM7CW93bi5pb19vcHQgPSBvd24uaW9fbWluICogbnJfc3RyaXBlczsKJiM0MzsJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlLCAmYW1wO293bik7CiAJbWRkZXZfcmVzdW1lKG1kZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3VwZGF0ZV9pb19vcHQpOwpAQCAtNzQ4Niw3ICYjNDM7NzYwMCw4IEBAIHN0YXRpYyBpbnQgZ2V0X2Rpc2tfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB2b2lkIF9fdXNlciAqIGFyZykKIAlyZXR1cm4gMDsKIH0KIAotaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKQomIzQzO2ludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbywKJiM0MzsJCSAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJc3RydWN0IG1kX3JkZXYgKnJkZXY7CiAJZGV2X3QgZGV2ID0gTUtERVYoaW5mby0mZ3Q7bWFqb3IsaW5mby0mZ3Q7bWlub3IpOwpAQCAtNzYzNCwxMSAmIzQzOzc3NDksMTEgQEAgaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKQogCQkJCWlmIChlcnIpCiAJCQkJCW1kZGV2LSZndDtjbHVzdGVyX29wcy0mZ3Q7YWRkX25ld19kaXNrX2NhbmNlbChtZGRldik7CiAJCQkJZWxzZQotCQkJCQllcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTsKJiM0MzsJCQkJCWVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYsIGxpbSk7CiAJCQl9CiAKIAkJfSBlbHNlIGlmICghZXJyKQotCQkJZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldik7CiYjNDM7CQkJZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTsKIAogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTc2OTEsNyAmIzQzOzc4MDYsOCBAQCBpbnQgbWRfYWRkX25ld19kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgKmluZm8pCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIGRldl90IGRldikKJiM0MztzdGF0aWMgaW50IGhvdF9yZW1vdmVfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBkZXZfdCBkZXYsCiYjNDM7CQkJICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXN0cnVjdCBtZF9yZGV2ICpyZGV2OwogCkBAIC03NzA2LDcgJiM0Mzs3ODIyLDcgQEAgc3RhdGljIGludCBob3RfcmVtb3ZlX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgZGV2X3QgZGV2KQogCQlnb3RvIGtpY2tfcmRldjsKIAogCWNsZWFyX2JpdChCbG9ja2VkLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKLQlyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIHJkZXYpOwomIzQzOwlyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIHJkZXYsIGxpbSk7CiAKIAlpZiAocmRldi0mZ3Q7cmFpZF9kaXNrICZndDs9IDApCiAJCWdvdG8gYnVzeTsKQEAgLTgyOTEsNiAmIzQzOzg0MDcsMjIgQEAgc3RhdGljIGlubGluZSBpbnQgbWRfaW9jdGxfdmFsaWQodW5zaWduZWQgaW50IGNtZCkKIAl9CiB9CiAKJiM0MzsvKgomIzQzOyAqIENvbW1hbmRzIHRoYXQgY2FuIHJlYWNoIC0mZ3Q7aG90X2FkZF9kaXNrKCkuICBBRERfTkVXX0RJU0sgb25seSBkb2VzIHNvIGZvciBhCiYjNDM7ICogam91cm5hbCBkZXZpY2Ugb3IgYSBwZXJzb25hbGl0eSB3aXRob3V0IC0mZ3Q7aG90X3JlbW92ZV9kaXNrLCBidXQgdGhhdCBkZXBlbmRzCiYjNDM7ICogb24gZGlzayBpbmZvIHN0aWxsIGluIHVzZXIgbWVtb3J5IGhlcmUsIHNvIGl0IGlzIGluY2x1ZGVkIGFzIGEgd2hvbGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgbWRfaW9jdGxfbWF5X2FkZF9kaXNrKHVuc2lnbmVkIGludCBjbWQpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGNtZCkgewomIzQzOwljYXNlIEFERF9ORVdfRElTSzoKJiM0MzsJY2FzZSBIT1RfUkVNT1ZFX0RJU0s6CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIG1kX2lvY3RsX25lZWRfc3VzcGVuZCh1bnNpZ25lZCBpbnQgY21kKQogewogCXN3aXRjaCAoY21kKSB7CkBAIC04MzQ2LDYgJiM0Mzs4NDc4LDkgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsCiAJdW5zaWduZWQgaW50IG5vaW9fZmxhZ3MgPSAwOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltOwomIzQzOwlzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDsKIAlib29sIHN1c3BlbmQ7CiAKIAllcnIgPSBtZF9pb2N0bF92YWxpZChjbWQpOwpAQCAtODM5NiwxMSAmIzQzOzg1MzEsMjAgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsCiAJaWYgKCFtZF9pc19yZHdyKG1kZGV2KSkKIAkJZmx1c2hfd29yaygmYW1wO21kZGV2LSZndDtzeW5jX3dvcmspOwogCiYjNDM7CS8qIHEtJmd0O2xpbWl0c19sb2NrIG5lc3RzIG91dHNpZGUgYm90aCwgc2VlIG1kX3N0YXJ0X3N5bmMoKSAqLwomIzQzOwlpZiAobWRfaW9jdGxfbWF5X2FkZF9kaXNrKGNtZCkgJmFtcDsmYW1wOyAhbWRkZXZfaXNfZG0obWRkZXYpKSB7CiYjNDM7CQlxID0gbWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlOwomIzQzOwkJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTsKJiM0MzsJCWxpbXAgPSAmYW1wO2xpbTsKJiM0MzsJfQomIzQzOwogCXN1c3BlbmQgPSBtZF9pb2N0bF9uZWVkX3N1c3BlbmQoY21kKTsKIAllcnIgPSBzdXNwZW5kID8gbWRkZXZfc3VzcGVuZF9hbmRfbG9jayhtZGRldikgOiBtZGRldl9sb2NrKG1kZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByX2RlYnVnKCYjMzQ7bWQ6IGlvY3RsIGxvY2sgaW50ZXJydXB0ZWQsIHJlYXNvbiAlZCwgY21kICVkXG4mIzM0OywKIAkJCSBlcnIsIGNtZCk7CiYjNDM7CQlpZiAobGltcCkKJiM0MzsJCQlxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShxKTsKIAkJZ290byBvdXQ7CiAJfQogCWlmIChzdXNwZW5kKQpAQCAtODQ0Miw3ICYjNDM7ODU4Niw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLAogCQlnb3RvIHVubG9jazsKIAogCWNhc2UgSE9UX1JFTU9WRV9ESVNLOgotCQllcnIgPSBob3RfcmVtb3ZlX2Rpc2sobWRkZXYsIG5ld19kZWNvZGVfZGV2KGFyZykpOwomIzQzOwkJZXJyID0gaG90X3JlbW92ZV9kaXNrKG1kZGV2LCBuZXdfZGVjb2RlX2RldihhcmcpLCBsaW1wKTsKIAkJZ290byB1bmxvY2s7CiAKIAljYXNlIEFERF9ORVdfRElTSzoKQEAgLTg0NTgsNyAmIzQzOzg2MDIsNyBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSwKIAkJCQkvKiBOZWVkIHRvIGNsZWFyIHJlYWQtb25seSBmb3IgdGhpcyAqLwogCQkJCWJyZWFrOwogCQkJZWxzZQotCQkJCWVyciA9IG1kX2FkZF9uZXdfZGlzayhtZGRldiwgJmFtcDtpbmZvKTsKJiM0MzsJCQkJZXJyID0gbWRfYWRkX25ld19kaXNrKG1kZGV2LCAmYW1wO2luZm8sIGxpbXApOwogCQkJZ290byB1bmxvY2s7CiAJCX0KIAkJYnJlYWs7CkBAIC04NDk2LDcgJiM0Mzs4NjQwLDcgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2luZm8sIGFyZ3AsIHNpemVvZihpbmZvKSkpCiAJCQllcnIgPSAtRUZBVUxUOwogCQllbHNlCi0JCQllcnIgPSBtZF9hZGRfbmV3X2Rpc2sobWRkZXYsICZhbXA7aW5mbyk7CiYjNDM7CQkJZXJyID0gbWRfYWRkX25ld19kaXNrKG1kZGV2LCAmYW1wO2luZm8sIGxpbXApOwogCQlnb3RvIHVubG9jazsKIAl9CiAKQEAgLTg1MjksNiAmIzQzOzg2NzMsOSBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSwKIAkgICAgZXJyICE9IC1FSU5WQUwpCiAJCW1kZGV2LSZndDtob2xkX2FjdGl2ZSA9IDA7CiAKJiM0MzsJaWYgKGxpbXApCiYjNDM7CQlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTsKJiM0MzsKIAlpZiAoc3VzcGVuZCkgewogCQltZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFncyk7CiAJCW1kZGV2X3VubG9ja19hbmRfcmVzdW1lKG1kZGV2KTsKQEAgLTEwMTY3LDggJiM0MzsxMDMxNCw4IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqdGhpcykKIAlyZXR1cm4gcmVtb3ZlZDsKIH0KIAotc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwKLQkJCQkgc3RydWN0IG1kX3JkZXYgKnRoaXMpCiYjNDM7c3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnRoaXMsCiYjNDM7CQkJCSBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJc3RydWN0IG1kX3JkZXYgKnJkZXY7CiAJaW50IHNwYXJlcyA9IDA7CkBAIC0xMDE5MSw3ICYjNDM7MTAzMzgsNyBAQCBzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LAogCQkJY29udGludWU7CiAJCWlmICghdGVzdF9iaXQoSm91cm5hbCwgJmFtcDtyZGV2LSZndDtmbGFncykpCiAJCQlyZGV2LSZndDtyZWNvdmVyeV9vZmZzZXQgPSAwOwotCQlpZiAobWRkZXYtJmd0O3BlcnMtJmd0O2hvdF9hZGRfZGlzayhtZGRldiwgcmRldikgPT0gMCkgewomIzQzOwkJaWYgKG1kZGV2LSZndDtwZXJzLSZndDtob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYsIGxpbSkgPT0gMCkgewogCQkJLyogZmFpbHVyZSBoZXJlIGlzIE9LICovCiAJCQlzeXNmc19saW5rX3JkZXYobWRkZXYsIHJkZXYpOwogCQkJaWYgKCF0ZXN0X2JpdChKb3VybmFsLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkKQEAgLTEwMjA2LDcgJiM0MzsxMDM1Myw4IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsCiAJcmV0dXJuIHNwYXJlczsKIH0KIAotc3RhdGljIGJvb2wgbWRfY2hvb3NlX3N5bmNfYWN0aW9uKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCAqc3BhcmVzKQomIzQzO3N0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcywKJiM0MzsJCQkJICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiB7CiAJLyogQ2hlY2sgaWYgcmVzaGFwZSBpcyBpbiBwcm9ncmVzcyBmaXJzdC4gKi8KIAlpZiAobWRkZXYtJmd0O3Jlc2hhcGVfcG9zaXRpb24gIT0gTWF4U2VjdG9yKSB7CkBAIC0xMDIzNCw3ICYjNDM7MTAzODIsNyBAQCBzdGF0aWMgYm9vbCBtZF9jaG9vc2Vfc3luY19hY3Rpb24oc3RydWN0IG1kZGV2ICptZGRldiwgaW50ICpzcGFyZXMpCiAJICogYWxzbyByZW1vdmVkIGFuZCByZS1hZGRlZCwgdG8gYWxsb3cgdGhlIHBlcnNvbmFsaXR5IHRvIGZhaWwgdGhlCiAJICogcmUtYWRkLgogCSAqLwotCSpzcGFyZXMgPSByZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIE5VTEwpOwomIzQzOwkqc3BhcmVzID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMLCBsaW0pOwogCWlmICgqc3BhcmVzIHx8IHRlc3RfYml0KE1EX1JFQ09WRVJZX0xBWllfUkVDT1ZFUiwgJmFtcDttZGRldi0mZ3Q7cmVjb3ZlcnkpKSB7CiAJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmYW1wO21kZGV2LSZndDtyZWNvdmVyeSk7CiAJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9DSEVDSywgJmFtcDttZGRldi0mZ3Q7cmVjb3ZlcnkpOwpAQCAtMTAyNTYsNiAmIzQzOzEwNDA0LDkgQEAgc3RhdGljIGJvb2wgbWRfY2hvb3NlX3N5bmNfYWN0aW9uKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCAqc3BhcmVzKQogc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQogewogCXN0cnVjdCBtZGRldiAqbWRkZXYgPSBjb250YWluZXJfb2Yod3MsIHN0cnVjdCBtZGRldiwgc3luY193b3JrKTsKJiM0MzsJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7CiAJaW50IHNwYXJlcyA9IDA7CiAJYm9vbCBzdXNwZW5kID0gZmFsc2U7CiAJdW5zaWduZWQgaW50IG5vaW9fZmxhZ3MgPSAwOwpAQCAtMTAyNjcsNiAmIzQzOzEwNDE4LDE3IEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAkgKi8KIAlpZiAoKG1kZGV2LSZndDtyZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvciB8fCAhbWRfaXNfcmR3cihtZGRldikpICZhbXA7JmFtcDsKIAkgICAgbWRfc3BhcmVzX25lZWRfY2hhbmdlKG1kZGV2KSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEFkZGluZyBhIHNwYXJlIGJlbG93IHN0YWNrcyBpdHMgbGltaXRzLCB3aGljaCBuZWVkcwomIzQzOwkJICogcS0mZ3Q7bGltaXRzX2xvY2suICBUYWtlIGl0IGJlZm9yZSBzdXNwZW5kaW5nOiBpdHMgaG9sZGVyCiYjNDM7CQkgKiB3YWl0cyBpbiBibGtfbXFfZnJlZXplX3F1ZXVlKCkgZm9yIEkvTyB0aGF0CiYjNDM7CQkgKiBtZGRldi0mZ3Q7c3VzcGVuZGVkIGhvbGRzIGJhY2ssIHNvIHRoZSBvdGhlciBvcmRlciBkZWFkbG9ja3MuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghbWRkZXZfaXNfZG0obWRkZXYpKSB7CiYjNDM7CQkJcSA9IG1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZTsKJiM0MzsJCQlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpOwomIzQzOwkJCWxpbXAgPSAmYW1wO2xpbTsKJiM0MzsJCX0KIAkJc3VzcGVuZCA9IHRydWU7CiAJCW1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKTsKIAkJbm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpOwpAQCAtMTAyODEsNiAmIzQzOzEwNDQzLDEyIEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAlpZiAoIXN1c3BlbmQgJmFtcDsmYW1wOyAobWRkZXYtJmd0O3Jlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yIHx8ICFtZF9pc19yZHdyKG1kZGV2KSkgJmFtcDsmYW1wOwogCSAgICBtZF9zcGFyZXNfbmVlZF9jaGFuZ2UobWRkZXYpKSB7CiAJCW1kZGV2X3VubG9jayhtZGRldik7CiYjNDM7CQkvKiBzZWUgYWJvdmU6IHEtJmd0O2xpbWl0c19sb2NrIG5lc3RzIG91dHNpZGUgYm90aCAqLwomIzQzOwkJaWYgKCFtZGRldl9pc19kbShtZGRldikpIHsKJiM0MzsJCQlxID0gbWRkZXYtJmd0O2dlbmRpc2stJmd0O3F1ZXVlOwomIzQzOwkJCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7CiYjNDM7CQkJbGltcCA9ICZhbXA7bGltOwomIzQzOwkJfQogCQltZGRldl9zdXNwZW5kX2FuZF9sb2NrX25vaW50cihtZGRldik7CiAJCXN1c3BlbmQgPSB0cnVlOwogCQlub2lvX2ZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7CkBAIC0xMDI5NCwxMSAmIzQzOzEwNDYyLDExIEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAkJICogQXMgd2Ugb25seSBhZGQgZGV2aWNlcyB0aGF0IGFyZSBhbHJlYWR5IGluLXN5bmMsIHdlIGNhbgogCQkgKiBhY3RpdmF0ZSB0aGUgc3BhcmVzIGltbWVkaWF0ZWx5LgogCQkgKi8KLQkJcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMKTsKJiM0MzsJCXJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldiwgTlVMTCwgbGltcCk7CiAJCWdvdG8gbm90X3J1bm5pbmc7CiAJfQogCi0JaWYgKCFtZF9jaG9vc2Vfc3luY19hY3Rpb24obWRkZXYsICZhbXA7c3BhcmVzKSkKJiM0MzsJaWYgKCFtZF9jaG9vc2Vfc3luY19hY3Rpb24obWRkZXYsICZhbXA7c3BhcmVzLCBsaW1wKSkKIAkJZ290byBub3RfcnVubmluZzsKIAogCWlmICghbWRkZXYtJmd0O3BlcnMtJmd0O3N5bmNfcmVxdWVzdCkKQEAgLTEwMzI5LDYgJiM0MzsxMDQ5Nyw4IEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAkgKiAgICAgaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgyMDAKIAkgKiBUaGVyZWZvcmUsIHVzZSBfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpLgogCSAqLwomIzQzOwlpZiAobGltcCkKJiM0MzsJCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApOwogCWlmIChzdXNwZW5kKSB7CiAJCW1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWdzKTsKIAkJX19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKTsKQEAgLTEwMzUxLDYgJiM0MzsxMDUyMSw4IEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIAkgKiAgICAgaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgyMDAKIAkgKiBUaGVyZWZvcmUsIHVzZSBfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpLgogCSAqLwomIzQzOwlpZiAobGltcCkKJiM0MzsJCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApOwogCWlmIChzdXNwZW5kKSB7CiAJCW1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWdzKTsKIAkJX19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKTsKQEAgLTEwNzkzLDYgJiM0MzsxMDk2NSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG1kX2luaXQodm9pZCkKIAogc3RhdGljIHZvaWQgY2hlY2tfc2JfY2hhbmdlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldikKIHsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07CiAJc3RydWN0IG1kcF9zdXBlcmJsb2NrXzEgKnNiID0gcGFnZV9hZGRyZXNzKHJkZXYtJmd0O3NiX3BhZ2UpOwogCXN0cnVjdCBtZF9yZGV2ICpyZGV2MiwgKnRtcDsKIAlpbnQgcm9sZSwgcmV0OwpAQCAtMTA4NDksNyAmIzQzOzExMDIyLDI0IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3NiX2NoYW5nZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJCQkJCXJkZXYyLSZndDtzYXZlZF9yYWlkX2Rpc2sgPSAtMTsKIAkJCQllbHNlCiAJCQkJCXJkZXYyLSZndDtzYXZlZF9yYWlkX2Rpc2sgPSByb2xlOwotCQkJCXJldCA9IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldiwgcmRldjIpOwomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiByZWNvbmZpZ19tdXRleCBpcyBoZWxkLCBzbyBkb24mIzM5O3Qgd2FpdCBmb3IKJiM0MzsJCQkJICogcS0mZ3Q7bGltaXRzX2xvY2s7IE1EX1JFQ09WRVJZX05FRURFRCBiZWxvdwomIzQzOwkJCQkgKiBsZWF2ZXMgYSBza2lwcGVkIGFkZCB0byBtZF9zdGFydF9zeW5jKCkuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlpZiAobWRkZXZfc3RhY2tfbGltaXRzX3RyeWxvY2sobWRkZXYsICZhbXA7bGltKSkgewomIzQzOwkJCQkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPQomIzQzOwkJCQkJCW1kZGV2LSZndDtnZW5kaXNrLSZndDtxdWV1ZTsKJiM0MzsKJiM0MzsJCQkJCXJldCA9IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldiwKJiM0MzsJCQkJCQkJCSAgICByZGV2MiwgJmFtcDtsaW0pOwomIzQzOwkJCQkJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgJmFtcDtsaW0pOwomIzQzOwkJCQl9IGVsc2UgaWYgKG1kZGV2X2lzX2RtKG1kZGV2KSkgewomIzQzOwkJCQkJcmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LAomIzQzOwkJCQkJCQkJICAgIHJkZXYyLCBOVUxMKTsKJiM0MzsJCQkJfSBlbHNlIHsKJiM0MzsJCQkJCXJldCA9IHJlbW92ZV9zcGFyZXMobWRkZXYsIHJkZXYyKTsKJiM0MzsJCQkJfQogCQkJCXByX2luZm8oJiMzNDtBY3RpdmF0ZWQgc3BhcmU6ICVwZ1xuJiMzNDssCiAJCQkJCXJkZXYyLSZndDtiZGV2KTsKIAkJCQkvKiB3YWtldXAgbWRkZXYtJmd0O3RocmVhZCBoZXJlLCBzbyBhcnJheSBjb3VsZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oCmluZGV4IGI2ZDJlODkyOWEwZjkuLmNlY2E4Y2ZjZGNiOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmgKQEAgLTc2NSw3ICYjNDM7NzY1LDggQEAgc3RydWN0IG1kX3BlcnNvbmFsaXR5CiAJICogaWYgYXBwcm9wcmlhdGUsIGFuZCBzaG91bGQgYWJvcnQgcmVjb3ZlcnkgaWYgbmVlZGVkCiAJICovCiAJdm9pZCAoKmVycm9yX2hhbmRsZXIpKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KTsKLQlpbnQgKCpob3RfYWRkX2Rpc2spIChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7CiYjNDM7CWludCAoKmhvdF9hZGRfZGlzaykoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsCiYjNDM7CQkJICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7CiAJaW50ICgqaG90X3JlbW92ZV9kaXNrKSAoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpOwogCWludCAoKnNwYXJlX2FjdGl2ZSkgKHN0cnVjdCBtZGRldiAqbWRkZXYpOwogCXNlY3Rvcl90ICgqc3luY19yZXF1ZXN0KShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JfbnIsCkBAIC0xMDQxLDEzICYjNDM7MTA0MiwxNyBAQCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zOwogZXh0ZXJuIGludCBtZHBfbWFqb3I7CiB2b2lkIG1kX2F1dG9zdGFydF9hcnJheXMoaW50IHBhcnQpOwogaW50IG1kX3NldF9hcnJheV9pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfYXJyYXlfaW5mb19zICppbmZvKTsKLWludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbyk7CiYjNDM7aW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvLAomIzQzOwkJICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7CiBpbnQgZG9fbWRfcnVuKHN0cnVjdCBtZGRldiAqbWRkZXYpOwogI2RlZmluZSBNRERFVl9TVEFDS19JTlRFR1JJVFkJKDF1ICZsdDsmbHQ7IDApCiBpbnQgbWRkZXZfc3RhY2tfcmRldl9saW1pdHMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLAogCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOwogaW50IG1kZGV2X3N0YWNrX25ld19yZGV2KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KTsKLXZvaWQgbWRkZXZfdXBkYXRlX2lvX29wdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB1bnNpZ25lZCBpbnQgbnJfc3RyaXBlcyk7CiYjNDM7aW50IG1kZGV2X3N0YWNrX3JkZXZfaW50byhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldiwKJiM0MzsJCQkgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7CiYjNDM7dm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzLAomIzQzOwkJCSBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pOwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG1kX2ZvcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBmMDY0NmZiMjQzNzFmLi5kZDM0OGI1Njk1ZDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC0xODk4LDcgJiM0MzsxODk4LDggQEAgc3RhdGljIGJvb2wgcmFpZDFfcmVtb3ZlX2NvbmYoc3RydWN0IHIxY29uZiAqY29uZiwgaW50IGRpc2spCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgcmFpZDFfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiYjNDM7c3RhdGljIGludCByYWlkMV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldiwKJiM0MzsJCQkgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKIAlzdHJ1Y3QgcjFjb25mICpjb25mID0gbWRkZXYtJmd0O3ByaXZhdGU7CiAJaW50IGVyciA9IC1FRVhJU1Q7CkBAIC0xOTIzLDcgJiM0MzsxOTI0LDEwIEBAIHN0YXRpYyBpbnQgcmFpZDFfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJZm9yIChtaXJyb3IgPSBmaXJzdDsgbWlycm9yICZsdDs9IGxhc3Q7IG1pcnJvciYjNDM7JiM0MzspIHsKIAkJcCA9IGNvbmYtJmd0O21pcnJvcnMgJiM0MzsgbWlycm9yOwogCQlpZiAoIXAtJmd0O3JkZXYpIHsKLQkJCWVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTsKJiM0MzsJCQlpZiAobGltKQomIzQzOwkJCQllcnIgPSBtZGRldl9zdGFja19yZGV2X2ludG8obWRkZXYsIHJkZXYsIGxpbSk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQllcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDEwOTNjNzk4ZDlkZGUuLjY0MTYxOTMyOGE2YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtMjA5NSw3ICYjNDM7MjA5NSw4IEBAIHN0YXRpYyBpbnQgcmFpZDEwX3NwYXJlX2FjdGl2ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiYjNDM7c3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsCiYjNDM7CQkJICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXN0cnVjdCByMTBjb25mICpjb25mID0gbWRkZXYtJmd0O3ByaXZhdGU7CiAJaW50IGVyciA9IC1FRVhJU1Q7CkBAIC0yMTMwLDcgJiM0MzsyMTMxLDEwIEBAIHN0YXRpYyBpbnQgcmFpZDEwX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KQogCQkJY29udGludWU7CiAJCX0KIAotCQllcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7CiYjNDM7CQlpZiAobGltKQomIzQzOwkJCWVyciA9IG1kZGV2X3N0YWNrX3JkZXZfaW50byhtZGRldiwgcmRldiwgbGltKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQllcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQlwLSZndDtoZWFkX3Bvc2l0aW9uID0gMDsKQEAgLTIxNDcsNyAmIzQzOzIxNTEsMTAgQEAgc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJCWNsZWFyX2JpdChJbl9zeW5jLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKIAkJc2V0X2JpdChSZXBsYWNlbWVudCwgJmFtcDtyZGV2LSZndDtmbGFncyk7CiAJCXJkZXYtJmd0O3JhaWRfZGlzayA9IHJlcGxfc2xvdDsKLQkJZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpOwomIzQzOwkJaWYgKGxpbSkKJiM0MzsJCQllcnIgPSBtZGRldl9zdGFja19yZGV2X2ludG8obWRkZXYsIHJkZXYsIGxpbSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAkJY29uZi0mZ3Q7ZnVsbHN5bmMgPSAxOwpAQCAtNDQ4NCw3ICYjNDM7NDQ5MSw3IEBAIHN0YXRpYyBpbnQgcmFpZDEwX3N0YXJ0X3Jlc2hhcGUoc3RydWN0IG1kZGV2ICptZGRldikKIAkJcmRldl9mb3JfZWFjaChyZGV2LCBtZGRldikKIAkJCWlmIChyZGV2LSZndDtyYWlkX2Rpc2sgJmx0OyAwICZhbXA7JmFtcDsKIAkJCSAgICAhdGVzdF9iaXQoRmF1bHR5LCAmYW1wO3JkZXYtJmd0O2ZsYWdzKSkgewotCQkJCWlmIChyYWlkMTBfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHsKJiM0MzsJCQkJaWYgKHJhaWQxMF9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkgewogCQkJCQlpZiAocmRldi0mZ3Q7cmFpZF9kaXNrICZndDs9CiAJCQkJCSAgICBjb25mLSZndDtwcmV2LnJhaWRfZGlza3MpCiAJCQkJCQlzZXRfYml0KEluX3N5bmMsICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpOwpAQCAtNDkyMSw3ICYjNDM7NDkyOCw3IEBAIHN0YXRpYyB2b2lkIGVuZF9yZXNoYXBlKHN0cnVjdCByMTBjb25mICpjb25mKQogCWNvbmYtJmd0O3Jlc2hhcGVfc2FmZSA9IE1heFNlY3RvcjsKIAlzcGluX3VubG9ja19pcnEoJmFtcDtjb25mLSZndDtkZXZpY2VfbG9jayk7CiAKLQltZGRldl91cGRhdGVfaW9fb3B0KGNvbmYtJmd0O21kZGV2LCByYWlkMTBfbnJfc3RyaXBlcyhjb25mKSk7CiYjNDM7CW1kZGV2X3VwZGF0ZV9pb19vcHQoY29uZi0mZ3Q7bWRkZXYsIHJhaWQxMF9ucl9zdHJpcGVzKGNvbmYpLCBOVUxMKTsKIAljb25mLSZndDtmdWxsc3luYyA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCBiOTE1NDVjZTA5MGRlLi4yMjc1OWM2MzFjNGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC03Mjg4LDYgJiM0Mzs3Mjg4LDkgQEAgc3RhdGljIHNzaXplX3QKIHJhaWQ1X3N0b3JlX3NraXBfY29weShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCByNWNvbmYgKmNvbmY7CiYjNDM7CXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gTlVMTDsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbXAgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgbmV3OwogCWludCBlcnI7CiAKQEAgLTcyOTcsMjMgJiM0Mzs3MzAwLDMzIEBAIHJhaWQ1X3N0b3JlX3NraXBfY29weShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAluZXcgPSAhIW5ldzsKIAomIzQzOwkvKiBxLSZndDtsaW1pdHNfbG9jayBuZXN0cyBvdXRzaWRlIGJvdGgsIHNlZSBtZF9zdGFydF9zeW5jKCkgKi8KJiM0MzsJaWYgKCFtZGRldl9pc19kbShtZGRldikpIHsKJiM0MzsJCXEgPSBtZGRldi0mZ3Q7Z2VuZGlzay0mZ3Q7cXVldWU7CiYjNDM7CQlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpOwomIzQzOwkJbGltcCA9ICZhbXA7bGltOwomIzQzOwl9CiYjNDM7CiAJZXJyID0gbWRkZXZfc3VzcGVuZF9hbmRfbG9jayhtZGRldik7Ci0JaWYgKGVycikKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaWYgKGxpbXApCiYjNDM7CQkJcXVldWVfbGltaXRzX2NhbmNlbF91cGRhdGUocSk7CiAJCXJldHVybiBlcnI7CiYjNDM7CX0KIAljb25mID0gbWRkZXYtJmd0O3ByaXZhdGU7CiAJaWYgKCFjb25mKQogCQllcnIgPSAtRU5PREVWOwogCWVsc2UgaWYgKG5ldyAhPSBjb25mLSZndDtza2lwX2NvcHkpIHsKLQkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBtZGRldi0mZ3Q7Z2VuZGlzay0mZ3Q7cXVldWU7Ci0JCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTsKLQogCQljb25mLSZndDtza2lwX2NvcHkgPSBuZXc7Ci0JCWlmIChuZXcpCi0JCQlsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfU1RBQkxFX1dSSVRFUzsKLQkJZWxzZQotCQkJbGltLmZlYXR1cmVzICZhbXA7PSB+QkxLX0ZFQVRfU1RBQkxFX1dSSVRFUzsKLQkJZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgJmFtcDtsaW0pOwomIzQzOwkJaWYgKGxpbXApIHsKJiM0MzsJCQlpZiAobmV3KQomIzQzOwkJCQlsaW1wLSZndDtmZWF0dXJlcyB8PSBCTEtfRkVBVF9TVEFCTEVfV1JJVEVTOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJbGltcC0mZ3Q7ZmVhdHVyZXMgJmFtcDs9IH5CTEtfRkVBVF9TVEFCTEVfV1JJVEVTOwomIzQzOwkJfQogCX0KJiM0MzsJaWYgKGxpbXApCiYjNDM7CQllcnIgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKSA/OiBlcnI7CiAJbWRkZXZfdW5sb2NrX2FuZF9yZXN1bWUobWRkZXYpOwogCXJldHVybiBlcnIgPzogbGVuOwogfQpAQCAtODQ0MSw3ICYjNDM7ODQ1NCw4IEBAIHN0YXRpYyBpbnQgcmFpZDVfcmVtb3ZlX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCByYWlkNV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldikKJiM0MztzdGF0aWMgaW50IHJhaWQ1X2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LAomIzQzOwkJCSAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQogewogCXN0cnVjdCByNWNvbmYgKmNvbmYgPSBtZGRldi0mZ3Q7cHJpdmF0ZTsKIAlpbnQgcmV0LCBlcnIgPSAtRUVYSVNUOwpAQCAtODcyOCw3ICYjNDM7ODc0Miw3IEBAIHN0YXRpYyBpbnQgcmFpZDVfc3RhcnRfcmVzaGFwZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogCQlyZGV2X2Zvcl9lYWNoKHJkZXYsIG1kZGV2KQogCQkJaWYgKHJkZXYtJmd0O3JhaWRfZGlzayAmbHQ7IDAgJmFtcDsmYW1wOwogCQkJICAgICF0ZXN0X2JpdChGYXVsdHksICZhbXA7cmRldi0mZ3Q7ZmxhZ3MpKSB7Ci0JCQkJaWYgKHJhaWQ1X2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7CiYjNDM7CQkJCWlmIChyYWlkNV9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkgewogCQkJCQlpZiAocmRldi0mZ3Q7cmFpZF9kaXNrCiAJCQkJCSAgICAmZ3Q7PSBjb25mLSZndDtwcmV2aW91c19yYWlkX2Rpc2tzKQogCQkJCQkJc2V0X2JpdChJbl9zeW5jLCAmYW1wO3JkZXYtJmd0O2ZsYWdzKTsKQEAgLTg3OTksNyAmIzQzOzg4MTMsNyBAQCBzdGF0aWMgdm9pZCBlbmRfcmVzaGFwZShzdHJ1Y3QgcjVjb25mICpjb25mKQogCQl3YWtlX3VwKCZhbXA7Y29uZi0mZ3Q7d2FpdF9mb3JfcmVzaGFwZSk7CiAKIAkJbWRkZXZfdXBkYXRlX2lvX29wdChjb25mLSZndDttZGRldiwKLQkJCWNvbmYtJmd0O3JhaWRfZGlza3MgLSBjb25mLSZndDttYXhfZGVncmFkZWQpOwomIzQzOwkJCWNvbmYtJmd0O3JhaWRfZGlza3MgLSBjb25mLSZndDttYXhfZGVncmFkZWQsIE5VTEwpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggNGY3OTA1YzM0MTJiOC4uYjc1ZTg1MjkxZTI5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0xMTAxLDYgJiM0MzsxMTAxLDMyIEBAIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiAJbXV0ZXhfbG9jaygmYW1wO3EtJmd0O2xpbWl0c19sb2NrKTsKIAlyZXR1cm4gcS0mZ3Q7bGltaXRzOwogfQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayAtIHRyeSB0byBzdGFydCBhbiBhdG9taWMgdXBkYXRlIG9mIHF1ZXVlCiYjNDM7ICoJbGltaXRzCiYjNDM7ICogQHE6CQlxdWV1ZSB0byB1cGRhdGUKJiM0MzsgKiBAbGltOglyZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgbGltaXRzIG9uIHN1Y2Nlc3MKJiM0MzsgKgomIzQzOyAqIExpa2UgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpLCBidXQgZmFpbHMgaW5zdGVhZCBvZiB3YWl0aW5nIHdoZW4gYW5vdGhlcgomIzQzOyAqIHVwZGF0ZSBpcyBpbiBmbGlnaHQuICBGb3IgY2FsbGVycyB0aGF0IG11c3Qgbm90IGJsb2NrIG9uIHEtJmd0O2xpbWl0c19sb2NrCiYjNDM7ICogYmVjYXVzZSB0aGV5IGhvbGQgc29tZXRoaW5nIGl0cyBjdXJyZW50IG93bmVyIGlzIHdhaXRpbmcgZm9yLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogcHJvY2VzcyBjb250ZXh0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3F1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKJiM0MzsJCQkJICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pCiYjNDM7CV9fY29uZF9hY3F1aXJlcyh0cnVlLCAmYW1wO3EtJmd0O2xpbWl0c19sb2NrKQomIzQzO3sKJiM0MzsJaWYgKCFtdXRleF90cnlsb2NrKCZhbXA7cS0mZ3Q7bGltaXRzX2xvY2spKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkqbGltID0gcS0mZ3Q7bGltaXRzOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBpbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCQlzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pIF9fcmVsZWFzZXMoJmFtcDtxLSZndDtsaW1pdHNfbG9jayk7CiBpbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU3NwoJCQkJCQkJb3V0cHV0OiAyNDkKCQkJCQkJCXRob3VnaHRzOiAyMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEV2YWx1YXRpb246IFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcywgd2FycmFudGluZyBhIEtNU0FOIHJ1bi4gSXQgc2VlbXMgdGhlIHBhdGNoIGlzIHByaW1hcmlseSBmb2N1c2VkIG9uIGFkZHJlc3NpbmcgbG9ja2luZyBvcmRlciBhbmQgZGVhZGxvY2sgaXNzdWVzIHdpdGhpbiB0aGUgTUQgUkFJRCBjb2RlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGBxLSZndDtsaW1pdHNfbG9ja2Agd2hlbiB1cGRhdGluZyBxdWV1ZSBsaW1pdHMuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgY2hhbmdpbmcgaG93IGBzdHJ1Y3QgcXVldWVfbGltaXRzYCBpcyBoYW5kbGVkLiBJdCBhcHBlYXJzIHRoYXQgaW5zdGVhZCBvZiBkaXJlY3RseSBtYW5pcHVsYXRpbmcgYHEtJmd0O2xpbWl0c2Agd2l0aGluIGNyaXRpY2FsIHNlY3Rpb25zIHdoZXJlIGRlYWRsb2NrcyBhcmUgcG9zc2libGUsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9jYWwgY29weSAoYGxpbWApIG9mIGBxLSZndDtsaW1pdHNgIHZpYSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCwgd2hpY2ggZXNzZW50aWFsbHkgY29waWVzIHRoZSBjb250ZW50cy4gVGhpcyBsb2NhbCBjb3B5IGlzIHRoZW4gcGFzc2VkIHRvIGZ1bmN0aW9ucyBsaWtlIGBob3RfYWRkX2Rpc2tgLCBgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzYCwgZXRjLiBDcnVjaWFsbHksIHRoZSB1cGRhdGVzIGFyZSB0aGVuIGNvbW1pdHRlZCBiYWNrIHZpYSBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoKWAuIElmIGEgdHJ5IGxvY2sgZmFpbHMsIHRoZSBmdW5jdGlvbnMgc2hvdWxkIHJldHVybi4KCkkmIzM5O3ZlIG1ldGljdWxvdXNseSByZXZpZXdlZCB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIEkgZXhhbWluZWQgdGhlIGluc3RhbmNlcyB3aGVyZSBgc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07YCBhbmQgYHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbXAgPSBOVUxMO2AgYXJlIHVzZWQgYWNyb3NzIHRoZSBwYXRjaGVkIGZ1bmN0aW9ucy4gSW4gZWFjaCBpbnN0YW5jZSAoYHJkZXZfYXR0cl9zdG9yZWAsIGBtZF9pb2N0bGAsIGBtZF9zdGFydF9zeW5jYCwgYGNoZWNrX3NiX2NoYW5nZXNgLCBgbWRkZXZfdXBkYXRlX2lvX29wdGAsIGByYWlkNV9zdG9yZV9za2lwX2NvcHlgIGFuZCBgbWRkZXZfc3RhY2tfcmRldl9pbnRvYCksIGBsaW1gIGlzIGFsd2F5cyBpbml0aWFsaXplZCAqYmVmb3JlKiBpdCYjMzk7cyByZWZlcmVuY2VkLCBwcmltYXJpbHkgYnkgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAsIHdoaWNoIHJldHVybnMgYHEtJmd0O2xpbWl0c2AgYnkgdmFsdWUuICBFdmVuIHdoZW4gYSBwb2ludGVyIHRvIGBsaW1gIGlzIHBhc3NlZCwgaXQgaXMgaW5pdGlhbGl6ZWQuIEluIHRoZSBpbnN0YW5jZXMgd2hlcmUgdGhlIHRyeWxvY2sgaXMgdXNlZCwgaXQgZmFpbHMgYmVmb3JlIHVzYWdlLiBgbWRkZXZfc3RhY2tfcmRldl9pbnRvYCBjb3BpZXMgdGhlIHBhc3NlZC1pbiBgbGltYC4gVGhlIGNvcHkgaXMgdXNlZC4KCkkgc2VlIG5vIHNjZW5hcmlvIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyBiZWluZyByZWFkIG9yIGxlYWtlZC4gVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgYSBjYXJlZnVsIHJlZmFjdG9yaW5nLCBpbXByb3ZpbmcgbG9ja2luZyBhbmQgdGh1cyByZWxpYWJpbGl0eS4gVGhlIGNyaXRpY2FsIGRhdGEgZmxvdyBhbmQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBsaW1gIHN0cnVjdCBhcmUgc2FmZSwgYW5kIHRoZXJlIGFyZSBubyBjb3BpZXMgdG8gdXNlciBzcGFjZSB0aGF0IGFyZSBtb2RpZmllZC4KCkNvbnNpZGVyaW5nIHRoaXMgYW5hbHlzaXMsIG15IGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2ggc3BlY2lmaWMgdHlwZXMgb2YgbWVtb3J5IGVycm9ycyB0aGF0IGFyZSBub3QgYWRkcmVzc2VkIGluIHRoaXMgcGF0Y2guICBHaXZlbiB0aGlzIGlzIGEgcmVmYWN0b3IsIEtBU0FOLCBMT0NLREVQIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSB0aGUgcmlnaHQgdG9vbHMgaGVyZS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGV2YWx1YXRpb24uIExldCYjMzk7cyBmbGFnIHRoaXMgYXMgc2FmZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1EIChzb2Z0d2FyZSBSQUlEKSBzdWJzeXN0ZW0gYW5kIGJsb2NrIGxheWVyIGhlbHBlciBmdW5jdGlvbnMgdG8gcmVzdHJ1Y3R1cmUgaG93IHF1ZXVlIGxpbWl0cyBhcmUgdXBkYXRlZCBhY3Jvc3MgbWQtbGluZWFyLCByYWlkMSwgcmFpZDEwLCBhbmQgcmFpZDUgYXJyYXlzLiBTcGVjaWZpY2FsbHksIGl0IHBhc3NlcyBhbiBleGlzdGluZyBvciBuZXdseSBzdGFydGVkIGBzdHJ1Y3QgcXVldWVfbGltaXRzYCB0aHJvdWdoIHZhcmlvdXMgaG90LWFkZC9yZW1vdmUvdXBkYXRlIGNhbGwgcGF0aHMgdG8gYXZvaWQgbG9jay1pbnZlcnNpb24gZGVhZGxvY2tzIGJldHdlZW4gYHEtXHUwMDNlbGltaXRzX2xvY2tgLCBhcnJheSBzdXNwZW5zaW9uLCBhbmQgYHJlY29uZmlnX211dGV4YC5cblxuQWxsIGBzdHJ1Y3QgcXVldWVfbGltaXRzYCBpbnN0YW5jZXMgb24gdGhlIHN0YWNrIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlICh2aWEgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAsIHdoaWNoIHJldHVybnMgYHEtXHUwMDNlbGltaXRzYCBieSB2YWx1ZSwgb3IgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jaygpYCB3aGljaCBwb3B1bGF0ZXMgYCpsaW1gKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgcmVhZCwgcGFzc2VkIHRvIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCBvciByZWZlcmVuY2Uvc3RhdGUgZXJyb3JzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWdnZXJzIHJhdGhlciB0aGFuIEtNU0FOLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyB0aGVyZWZvcmUgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgc3Vic3lzdGVtIGFuZCBibG9jayBsYXllciBoZWxwZXIgZnVuY3Rpb25zIHRvIHJlc3RydWN0dXJlIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIHVwZGF0ZWQgYWNyb3NzIG1kLWxpbmVhciwgcmFpZDEsIHJhaWQxMCwgYW5kIHJhaWQ1IGFycmF5cy4gU3BlY2lmaWNhbGx5LCBpdCBwYXNzZXMgYW4gZXhpc3Rpbmcgb3IgbmV3bHkgc3RhcnRlZCBgc3RydWN0IHF1ZXVlX2xpbWl0c2AgdGhyb3VnaCB2YXJpb3VzIGhvdC1hZGQvcmVtb3ZlL3VwZGF0ZSBjYWxsIHBhdGhzIHRvIGF2b2lkIGxvY2staW52ZXJzaW9uIGRlYWRsb2NrcyBiZXR3ZWVuIGBxLVx1MDAzZWxpbWl0c19sb2NrYCwgYXJyYXkgc3VzcGVuc2lvbiwgYW5kIGByZWNvbmZpZ19tdXRleGAuXG5cbkFsbCBgc3RydWN0IHF1ZXVlX2xpbWl0c2AgaW5zdGFuY2VzIG9uIHRoZSBzdGFjayBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAodmlhIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClgLCB3aGljaCByZXR1cm5zIGBxLVx1MDAzZWxpbWl0c2AgYnkgdmFsdWUsIG9yIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlX3RyeWxvY2soKWAgd2hpY2ggcG9wdWxhdGVzIGAqbGltYCkuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIHBhZGRpbmcgYnl0ZXMgYXJlIHJlYWQsIHBhc3NlZCB0byBjb250cm9sIGZsb3csIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBkZWFkbG9ja3MsIGxvY2tpbmcgb3JkZXIgdmlvbGF0aW9ucywgb3IgcmVmZXJlbmNlL3N0YXRlIGVycm9ycywgd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4va2VybmVsIGRlYnVnZ2VycyByYXRoZXIgdGhhbiBLTVNBTi4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgdGhlcmVmb3JlIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjEzOjE1Ljg1OTg3NzI2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1MzAzMzAzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9NRFwiLFxuICAgIFwiTURfUkFJRDFcIixcbiAgICBcIk1EX1JBSUQxMFwiLFxuICAgIFwiTURfUkFJRDQ1NlwiLFxuICAgIFwiTURfTElORUFSXCIsXG4gICAgXCJETV9SQUlEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWRkZXZfc3RhY2tfcmRldl9pbnRvXCIsXG4gICAgXCJtZGRldl91cGRhdGVfaW9fb3B0XCIsXG4gICAgXCJtZF9hZGRfbmV3X2Rpc2tcIixcbiAgICBcInJlbW92ZV9hbmRfYWRkX3NwYXJlc1wiLFxuICAgIFwicmRldl9hdHRyX3N0b3JlXCIsXG4gICAgXCJtZF9zdGFydF9zeW5jXCIsXG4gICAgXCJyYWlkMV9hZGRfZGlza1wiLFxuICAgIFwicmFpZDEwX2FkZF9kaXNrXCIsXG4gICAgXCJyYWlkNV9hZGRfZGlza1wiLFxuICAgIFwicmFpZDVfc3RvcmVfc2tpcF9jb3B5XCIsXG4gICAgXCJsaW5lYXJfYWRkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUQgKHNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSBhbmQgYmxvY2sgbGF5ZXIgaGVscGVyIGZ1bmN0aW9ucyB0byByZXN0cnVjdHVyZSBob3cgcXVldWUgbGltaXRzIGFyZSB1cGRhdGVkIGFjcm9zcyBtZC1saW5lYXIsIHJhaWQxLCByYWlkMTAsIGFuZCByYWlkNSBhcnJheXMuIFNwZWNpZmljYWxseSwgaXQgcGFzc2VzIGFuIGV4aXN0aW5nIG9yIG5ld2x5IHN0YXJ0ZWQgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIHRocm91Z2ggdmFyaW91cyBob3QtYWRkL3JlbW92ZS91cGRhdGUgY2FsbCBwYXRocyB0byBhdm9pZCBsb2NrLWludmVyc2lvbiBkZWFkbG9ja3MgYmV0d2VlbiBgcS1cXHUwMDNlbGltaXRzX2xvY2tgLCBhcnJheSBzdXNwZW5zaW9uLCBhbmQgYHJlY29uZmlnX211dGV4YC5cXG5cXG5BbGwgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIGluc3RhbmNlcyBvbiB0aGUgc3RhY2sgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKHZpYSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCwgd2hpY2ggcmV0dXJucyBgcS1cXHUwMDNlbGltaXRzYCBieSB2YWx1ZSwgb3IgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jaygpYCB3aGljaCBwb3B1bGF0ZXMgYCpsaW1gKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgcmVhZCwgcGFzc2VkIHRvIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCBvciByZWZlcmVuY2Uvc3RhdGUgZXJyb3JzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWdnZXJzIHJhdGhlciB0aGFuIEtNU0FOLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyB0aGVyZWZvcmUgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cnVjdHVyZXMgbG9jayBhY3F1aXNpdGlvbiBhbmQgcXVldWUgbGltaXRzIHByb3BhZ2F0aW9uIGluIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgbGF5ZXIgdG8gcHJldmVudCBkZWFkbG9ja3MgYmV0d2VlbiBxLVxcdTAwM2VsaW1pdHNfbG9jaywgcmVjb25maWdfbXV0ZXgsIGFuZCBtZGRldl9zdXNwZW5kLiBJdCBhbHRlcnMgZGlzayBhZGRpdGlvbi9yZW1vdmFsIGFuZCBzeXNmcy9pb2N0bCBoYW5kbGluZyBhY3Jvc3MgbXVsdGlwbGUgUkFJRCBwZXJzb25hbGl0aWVzIChyYWlkMSwgcmFpZDEwLCByYWlkNSwgbGluZWFyLCBkbS1yYWlkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGlzY292ZXIgcG90ZW50aWFsIGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGNvcnJ1cHRpb25zIGR1cmluZyBjb25jdXJyZW50IFJBSUQgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoxMzoxNS44NTk4ODI4NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUxMDE0NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjNjNmJmMjY2YTI0Y2Y1NzU0YjdiYzA0NTAxMWU3NDNkMmUzZDc3ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDE4OjEzOjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcmFpZC5jIGIvZHJpdmVycy9tZC9kbS1yYWlkLmNcXG5pbmRleCA4ZjVhNWUxMzQyYTk1Li4yMWExOTIyYmVlNGZiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZC5jXFxuKysrIGIvZHJpdmVycy9tZC9kbS1yYWlkLmNcXG5AQCAtMzkyMyw3ICszOTIzLDcgQEAgc3RhdGljIHZvaWQgYXR0ZW1wdF9yZXN0b3JlX29mX2ZhdWx0eV9kZXZpY2VzKHN0cnVjdCByYWlkX3NldCAqcnMpXFxuIFxcdFxcdFxcdGNsZWFyX2JpdChGYXVsdHksIFxcdTAwMjZyLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdFxcdGNsZWFyX2JpdChXcml0ZUVycm9yU2VlbiwgXFx1MDAyNnItXFx1MDAzZWZsYWdzKTtcXG4gXFxuLVxcdFxcdFxcdGlmIChtZGRldi1cXHUwMDNlcGVycy1cXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByKSkge1xcbitcXHRcXHRcXHRpZiAobWRkZXYtXFx1MDAzZXBlcnMtXFx1MDAzZWhvdF9hZGRfZGlzayhtZGRldiwgciwgTlVMTCkpIHtcXG4gXFx0XFx0XFx0XFx0LyogRmFpbGVkIHRvIHJldml2ZSB0aGlzIGRldmljZSwgdHJ5IG5leHQgKi9cXG4gXFx0XFx0XFx0XFx0ci1cXHUwMDNlcmFpZF9kaXNrID0gci1cXHUwMDNlc2F2ZWRfcmFpZF9kaXNrID0gLTE7XFxuIFxcdFxcdFxcdFxcdHItXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jIGIvZHJpdmVycy9tZC9tZC1hdXRvZGV0ZWN0LmNcXG5pbmRleCA0YjgwMTY1YWZkMjMzLi45Mjk1MTMxMDk2NTdmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jXFxuKysrIGIvZHJpdmVycy9tZC9tZC1hdXRvZGV0ZWN0LmNcXG5AQCAtMjEzLDcgKzIxMyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtZF9zZXR1cF9kcml2ZShzdHJ1Y3QgbWRfc2V0dXBfYXJncyAqYXJncylcXG4gXFx0XFx0XFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgTURfRElTS19BQ1RJVkUpIHwgKDEgXFx1MDAzY1xcdTAwM2MgTURfRElTS19TWU5DKTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0bWRfYWRkX25ld19kaXNrKG1kZGV2LCBcXHUwMDI2ZGluZm8pO1xcbitcXHRcXHRtZF9hZGRfbmV3X2Rpc2sobWRkZXYsIFxcdTAwMjZkaW5mbywgTlVMTCk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghZXJyKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLWxpbmVhci5jIGIvZHJpdmVycy9tZC9tZC1saW5lYXIuY1xcbmluZGV4IDczYjM2N2I2MWI4NzMuLjFmNDRjMmQ3ZGI5M2QgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9tZC1saW5lYXIuY1xcbisrKyBiL2RyaXZlcnMvbWQvbWQtbGluZWFyLmNcXG5AQCAtMTg2LDcgKzE4Niw4IEBAIHN0YXRpYyBpbnQgbGluZWFyX3J1bihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGxpbmVhcl9hZGQoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuK3N0YXRpYyBpbnQgbGluZWFyX2FkZChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcXG4rXFx0XFx0ICAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdC8qIEFkZGluZyBhIGRyaXZlIHRvIGEgbGluZWFyIGFycmF5IGFsbG93cyB0aGUgYXJyYXkgdG8gZ3Jvdy5cXG4gXFx0ICogSXQgaXMgcGVybWl0dGVkIGlmIHRoZSBuZXcgZHJpdmUgaGFzIGEgbWF0Y2hpbmcgc3VwZXJibG9ja1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmNcXG5pbmRleCA2ODBiMzRhNjNjYjNkLi5jNDA1NGQwNmQxMDcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvbWQuY1xcbisrKyBiL2RyaXZlcnMvbWQvbWQuY1xcbkBAIC05NCw4ICs5NCw4IEBAIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZXN5bmNfd2FpdCk7XFxuICAqL1xcbiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1kX21pc2Nfd3E7XFxuIFxcbi1zdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxcbi1cXHRcXHRcXHRcXHQgc3RydWN0IG1kX3JkZXYgKnRoaXMpO1xcbitzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqdGhpcyxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XFxuIHN0YXRpYyB2b2lkIG1kZGV2X2RldGFjaChzdHJ1Y3QgbWRkZXYgKm1kZGV2KTtcXG4gc3RhdGljIHZvaWQgZXhwb3J0X3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xcbiBzdGF0aWMgdm9pZCBtZF93YWtldXBfdGhyZWFkX2RpcmVjdGx5KHN0cnVjdCBtZF90aHJlYWQgX19yY3UgKip0aHJlYWQpO1xcbkBAIC0yOTgxLDcgKzI5ODEsNyBAQCB2b2lkIG1kX3VwZGF0ZV9zYihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgZm9yY2VfY2hhbmdlKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wobWRfdXBkYXRlX3NiKTtcXG4gXFxuLXN0YXRpYyBpbnQgYWRkX2JvdW5kX3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuK3N0YXRpYyBpbnQgYWRkX2JvdW5kX3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYsIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gcmRldi1cXHUwMDNlbWRkZXY7XFxuIFxcdGludCBlcnIgPSAwO1xcbkBAIC0yOTk0LDcgKzI5OTQsNyBAQCBzdGF0aWMgaW50IGFkZF9ib3VuZF9yZGV2KHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0c3VwZXJfdHlwZXNbbWRkZXYtXFx1MDAzZW1ham9yX3ZlcnNpb25dLlxcbiBcXHRcXHRcXHR2YWxpZGF0ZV9zdXBlcihtZGRldiwgTlVMTC8qZnJlc2hlc3QqLywgcmRldik7XFxuLVxcdFxcdGVyciA9IG1kZGV2LVxcdTAwM2VwZXJzLVxcdTAwM2Vob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYpO1xcbitcXHRcXHRlcnIgPSBtZGRldi1cXHUwMDNlcGVycy1cXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByZGV2LCBsaW0pO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdG1kX2tpY2tfcmRldl9mcm9tX2FycmF5KHJkZXYpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC0zMDMzLDcgKzMwMzMsMTMgQEAgc3RhdGljIGludCBjbWRfbWF0Y2goY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICpzdHIpXFxuIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5IHtcXG4gXFx0c3RydWN0IGF0dHJpYnV0ZSBhdHRyO1xcbiBcXHRzc2l6ZV90ICgqc2hvdykoc3RydWN0IG1kX3JkZXYgKiwgY2hhciAqKTtcXG4tXFx0c3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7XFxuK1xcdC8qXFxuK1xcdCAqIEBsaW06IGEgcXVldWUgbGltaXRzIHVwZGF0ZSB0aGUgY2FsbGVyIG93bnMsIG9yIE5VTEwuICBTdG9yZXMgdGhhdFxcbitcXHQgKiBjYW4gYWRkIGEgbGVnIHRvIHRoZSBhcnJheSBtdXN0IHN0YWNrIGludG8gaXQgcmF0aGVyIHRoYW4gdGFrZVxcbitcXHQgKiBxLVxcdTAwM2VsaW1pdHNfbG9jayB0aGVtc2VsdmVzLCBzZWUgbWRfc3RhcnRfc3luYygpLlxcbitcXHQgKi9cXG4rXFx0c3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcXG4rXFx0XFx0XFx0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XFxuIH07XFxuIFxcbiBzdGF0aWMgc3NpemVfdFxcbkBAIC0zMDc5LDcgKzMwODUsOCBAQCBzdGF0ZV9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdFxcbi1zdGF0ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbitzdGF0ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxcbitcXHQgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdC8qIGNhbiB3cml0ZVxcbiBcXHQgKiAgZmF1bHR5ICAtIHNpbXVsYXRlcyBhbiBlcnJvclxcbkBAIC0zMTEwLDcgKzMxMTcsNyBAQCBzdGF0ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbiBcXHR9IGVsc2UgaWYgKGNtZF9tYXRjaChidWYsIFxcXCJyZW1vdmVcXFwiKSkge1xcbiBcXHRcXHRpZiAocmRldi1cXHUwMDNlbWRkZXYtXFx1MDAzZXBlcnMpIHtcXG4gXFx0XFx0XFx0Y2xlYXJfYml0KEJsb2NrZWQsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdFxcdHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LVxcdTAwM2VtZGRldiwgcmRldik7XFxuK1xcdFxcdFxcdHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LVxcdTAwM2VtZGRldiwgcmRldiwgbGltKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAocmRldi1cXHUwMDNlcmFpZF9kaXNrIFxcdTAwM2U9IDApXFxuIFxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG5AQCAtMzIyOSw3ICszMjM2LDcgQEAgc3RhdGVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4gXFx0XFx0XFx0aWYgKCFtZGRldl9pc19jbHVzdGVyZWQocmRldi1cXHUwMDNlbWRkZXYpIHx8XFxuIFxcdFxcdFxcdCAgICAoZXJyID0gbWRkZXYtXFx1MDAzZWNsdXN0ZXJfb3BzLVxcdTAwM2VnYXRoZXJfYml0bWFwcyhyZGV2KSkgPT0gMCkge1xcbiBcXHRcXHRcXHRcXHRjbGVhcl9iaXQoRmF1bHR5LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHRcXHRcXHRlcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9IGVsc2VcXG4gXFx0XFx0XFx0ZXJyID0gLUVCVVNZO1xcbkBAIC0zMjU3LDcgKzMyNjQsOCBAQCBlcnJvcnNfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3RcXG4tZXJyb3JzX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuK2Vycm9yc19zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxcbitcXHQgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgbjtcXG4gXFx0aW50IHJ2O1xcbkBAIC0zMjgzLDcgKzMyOTEsOCBAQCBzbG90X3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90XFxuLXNsb3Rfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4rc2xvdF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxcbitcXHQgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuIHtcXG4gXFx0aW50IHNsb3Q7XFxuIFxcdGludCBlcnI7XFxuQEAgLTMzMTQsNyArMzMyMyw3IEBAIHNsb3Rfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4gXFx0XFx0aWYgKHJkZXYtXFx1MDAzZW1kZGV2LVxcdTAwM2VwZXJzLVxcdTAwM2Vob3RfcmVtb3ZlX2Rpc2sgPT0gTlVMTClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdGNsZWFyX2JpdChCbG9ja2VkLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMocmRldi1cXHUwMDNlbWRkZXYsIHJkZXYpO1xcbitcXHRcXHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMocmRldi1cXHUwMDNlbWRkZXYsIHJkZXYsIGxpbSk7XFxuIFxcdFxcdGlmIChyZGV2LVxcdTAwM2VyYWlkX2Rpc2sgXFx1MDAzZT0gMClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFx0XFx0c2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsIFxcdTAwMjZyZGV2LVxcdTAwM2VtZGRldi1cXHUwMDNlcmVjb3ZlcnkpO1xcbkBAIC0zMzQ0LDcgKzMzNTMsOCBAQCBzbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuIFxcdFxcdFxcdHJkZXYtXFx1MDAzZXNhdmVkX3JhaWRfZGlzayA9IC0xO1xcbiBcXHRcXHRjbGVhcl9iaXQoSW5fc3luYywgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0Y2xlYXJfYml0KEJpdG1hcF9zeW5jLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHRlcnIgPSByZGV2LVxcdTAwM2VtZGRldi1cXHUwMDNlcGVycy1cXHUwMDNlaG90X2FkZF9kaXNrKHJkZXYtXFx1MDAzZW1kZGV2LCByZGV2KTtcXG4rXFx0XFx0ZXJyID0gcmRldi1cXHUwMDNlbWRkZXYtXFx1MDAzZXBlcnMtXFx1MDAzZWhvdF9hZGRfZGlzayhyZGV2LVxcdTAwM2VtZGRldiwgcmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBsaW0pO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdHJkZXYtXFx1MDAzZXJhaWRfZGlzayA9IC0xO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC0zMzc3LDcgKzMzODcsOCBAQCBvZmZzZXRfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3RcXG4tb2Zmc2V0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuK29mZnNldF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxcbitcXHQgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0O1xcbiBcXHRpZiAoa3N0cnRvdWxsKGJ1ZiwgMTAsIFxcdTAwMjZvZmZzZXQpIFxcdTAwM2MgMClcXG5AQCAtMzQwMyw3ICszNDE0LDggQEAgc3RhdGljIHNzaXplX3QgbmV3X29mZnNldF9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCBuZXdfb2Zmc2V0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxcbi1cXHRcXHRcXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuK1xcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdfb2Zmc2V0O1xcbiBcXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gcmRldi1cXHUwMDNlbWRkZXY7XFxuQEAgLTM1MTAsNyArMzUyMiw4IEBAIHN0YXRpYyBpbnQgc3RyaWN0X2Jsb2Nrc190b19zZWN0b3JzKGNvbnN0IGNoYXIgKmJ1Ziwgc2VjdG9yX3QgKnNlY3RvcnMpXFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90XFxuLXJkZXZfc2l6ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbityZGV2X3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcXG4rXFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdHN0cnVjdCBtZGRldiAqbXlfbWRkZXYgPSByZGV2LVxcdTAwM2VtZGRldjtcXG4gXFx0c2VjdG9yX3Qgb2xkc2VjdG9ycyA9IHJkZXYtXFx1MDAzZXNlY3RvcnM7XFxuQEAgLTM1NzIsNyArMzU4NSw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXFxuIFxcdHJldHVybiBzcHJpbnRmKHBhZ2UsIFxcXCIlbGx1XFxcXG5cXFwiLCByZWNvdmVyeV9zdGFydCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuK3N0YXRpYyBzc2l6ZV90IHJlY292ZXJ5X3N0YXJ0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBsb25nIHJlY292ZXJ5X3N0YXJ0O1xcbiBcXG5AQCAtMzYxMSw3ICszNjI1LDkgQEAgc3RhdGljIHNzaXplX3QgYmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcXG4ge1xcbiBcXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgcGFnZSwgMCk7XFxuIH1cXG4tc3RhdGljIHNzaXplX3QgYmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXFxuK1xcbitzdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcXG4rXFx0XFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdGludCBydiA9IGJhZGJsb2Nrc19zdG9yZShcXHUwMDI2cmRldi1cXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCBsZW4sIDApO1xcbiBcXHQvKiBNYXliZSB0aGF0IGFjayB3YXMgYWxsIHdlIG5lZWRlZCAqL1xcbkBAIC0zNjI2LDcgKzM2NDIsOSBAQCBzdGF0aWMgc3NpemVfdCB1YmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcXG4ge1xcbiBcXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgcGFnZSwgMSk7XFxuIH1cXG4tc3RhdGljIHNzaXplX3QgdWJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKVxcbitcXG4rc3RhdGljIHNzaXplX3QgdWJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxcbitcXHRcXHRcXHQgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdHJldHVybiBiYWRibG9ja3Nfc3RvcmUoXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgcGFnZSwgbGVuLCAxKTtcXG4gfVxcbkBAIC0zNjQwLDcgKzM2NTgsOCBAQCBwcGxfc2VjdG9yX3Nob3coc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNoYXIgKnBhZ2UpXFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90XFxuLXBwbF9zZWN0b3Jfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4rcHBsX3NlY3Rvcl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxcbitcXHRcXHQgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbG9uZyBzZWN0b3I7XFxuIFxcbkBAIC0zNjc5LDcgKzM2OTgsOCBAQCBwcGxfc2l6ZV9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdFxcbi1wcGxfc2l6ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbitwcGxfc2l6ZV9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxcbitcXHQgICAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBzaXplO1xcbiBcXG5AQCAtMzc0MCw2ICszNzYwLDkgQEAgcmRldl9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxcbiBcXHRzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHJkZXZfc3lzZnNfZW50cnksIGF0dHIpO1xcbiBcXHRzdHJ1Y3QgbWRfcmRldiAqcmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgbWRfcmRldiwga29iaik7XFxuIFxcdHN0cnVjdCBrZXJuZnNfbm9kZSAqa24gPSBOVUxMO1xcbitcXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7XFxuK1xcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbitcXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDtcXG4gXFx0Ym9vbCBzdXNwZW5kID0gZmFsc2U7XFxuIFxcdHNzaXplX3QgcnY7XFxuIFxcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSBSRUFEX09OQ0UocmRldi1cXHUwMDNlbWRkZXYpO1xcbkBAIC0zNzYwLDE1ICszNzgzLDM3IEBAIHJkZXZfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcXG4gXFx0XFx0XFx0c3VzcGVuZCA9IHRydWU7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFRoZXNlIGNhbiBhZGQgYSBsZWcgYmFjaywgd2hpY2ggc3RhY2tzIGl0cyBsaW1pdHM7IHRoZSBvdGhlclxcbitcXHQgKiBzdGF0ZV9zdG9yZSgpIHZhbHVlcyBuZXZlciByZWFjaCAtXFx1MDAzZWhvdF9hZGRfZGlzaygpLiAgcS1cXHUwMDNlbGltaXRzX2xvY2tcXG4rXFx0ICogbmVzdHMgb3V0c2lkZSB0aGUgbG9jayBhbmQgdGhlIHN1c3BlbmQsIHNlZSBtZF9zdGFydF9zeW5jKCkuXFxuK1xcdCAqL1xcbitcXHRpZiAoKGVudHJ5LVxcdTAwM2VzdG9yZSA9PSBzbG90X3N0b3JlIHx8XFxuK1xcdCAgICAgKGVudHJ5LVxcdTAwM2VzdG9yZSA9PSBzdGF0ZV9zdG9yZSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAoY21kX21hdGNoKHBhZ2UsIFxcXCJyZW1vdmVcXFwiKSB8fCBjbWRfbWF0Y2gocGFnZSwgXFxcInJlLWFkZFxcXCIpKSkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhbWRkZXZfaXNfZG0obWRkZXYpKSB7XFxuK1xcdFxcdHEgPSBtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlcXVldWU7XFxuK1xcdFxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XFxuK1xcdFxcdGxpbXAgPSBcXHUwMDI2bGltO1xcbitcXHR9XFxuK1xcbiBcXHRydiA9IHN1c3BlbmQgPyBtZGRldl9zdXNwZW5kX2FuZF9sb2NrKG1kZGV2KSA6IG1kZGV2X2xvY2sobWRkZXYpO1xcbiBcXHRpZiAoIXJ2KSB7XFxuIFxcdFxcdGlmIChyZGV2LVxcdTAwM2VtZGRldiA9PSBOVUxMKVxcbiBcXHRcXHRcXHRydiA9IC1FTk9ERVY7XFxuIFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0cnYgPSBlbnRyeS1cXHUwMDNlc3RvcmUocmRldiwgcGFnZSwgbGVuZ3RoKTtcXG4rXFx0XFx0XFx0cnYgPSBlbnRyeS1cXHUwMDNlc3RvcmUocmRldiwgcGFnZSwgbGVuZ3RoLCBsaW1wKTtcXG4rXFx0XFx0LyogYXBwbHkgdGhlIGxpbWl0cyBiZWZvcmUgdGhlIGFycmF5IHRha2VzIEkvTyBhZ2FpbiAqL1xcbitcXHRcXHRpZiAobGltcCkge1xcbitcXHRcXHRcXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcXG4rXFx0XFx0XFx0bGltcCA9IE5VTEw7XFxuK1xcdFxcdH1cXG4gXFx0XFx0c3VzcGVuZCA/IG1kZGV2X3VubG9ja19hbmRfcmVzdW1lKG1kZGV2KSA6IG1kZGV2X3VubG9jayhtZGRldik7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChsaW1wKVxcbitcXHRcXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcXG4rXFxuIFxcdGlmIChrbilcXG4gXFx0XFx0c3lzZnNfdW5icmVha19hY3RpdmVfcHJvdGVjdGlvbihrbik7XFxuIFxcbkBAIC02Mjc1LDIwICs2MzIwLDg5IEBAIGludCBtZGRldl9zdGFja19uZXdfcmRldihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChtZGRldl9zdGFja19uZXdfcmRldik7XFxuIFxcbisvKlxcbisgKiBTdGFjayBhIG5ldyByZGV2IGludG8gbGltaXRzIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyBsaW1pdHNfbG9jayBmb3IgYW5kXFxuKyAqIHdpbGwgY29tbWl0IGl0c2VsZi4gIFVzZWQgZnJvbSBwYXRocyB0aGF0IG11c3QgdGFrZSBsaW1pdHNfbG9jayBiZWZvcmVcXG4rICogcXVpZXNjaW5nIHRoZSBhcnJheSwgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cXG4rICovXFxuK2ludCBtZGRldl9zdGFja19yZGV2X2ludG8oc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbit7XFxuK1xcdHN0cnVjdCBxdWV1ZV9saW1pdHMgdG1wID0gKmxpbTtcXG4rXFxuK1xcdGlmIChtZGRldl9pc19kbShtZGRldikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHF1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShyZGV2LVxcdTAwM2ViZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2VxdWV1ZSkgXFx1MDAzZVxcbitcXHQgICAgcXVldWVfbG9naWNhbF9ibG9ja19zaXplKG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZSkpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCIlczogaW5jb21wYXRpYmxlIGxvZ2ljYWxfYmxvY2tfc2l6ZSwgY2FuIG5vdCBhZGRcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBtZG5hbWUobWRkZXYpKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHF1ZXVlX2xpbWl0c19zdGFja19iZGV2KFxcdTAwMjZ0bXAsIHJkZXYtXFx1MDAzZWJkZXYsIHJkZXYtXFx1MDAzZWRhdGFfb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlZGlza19uYW1lKTtcXG4rXFxuK1xcdGlmICghcXVldWVfbGltaXRzX3N0YWNrX2ludGVncml0eV9iZGV2KFxcdTAwMjZ0bXAsIHJkZXYtXFx1MDAzZWJkZXYpKSB7XFxuK1xcdFxcdHByX2VycihcXFwiJXM6IGluY29tcGF0aWJsZSBpbnRlZ3JpdHkgcHJvZmlsZSBmb3IgJXBnXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgbWRuYW1lKG1kZGV2KSwgcmRldi1cXHUwMDNlYmRldik7XFxuK1xcdFxcdHJldHVybiAtRU5YSU87XFxuK1xcdH1cXG4rXFxuK1xcdCpsaW0gPSB0bXA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3N0YWNrX3JkZXZfaW50byk7XFxuK1xcbisvKiBmb3IgY2FsbGVycyB0aGF0IG11c3Qgbm90IHdhaXQgZm9yIHEtXFx1MDAzZWxpbWl0c19sb2NrLCBzZWUgbWRfc3RhcnRfc3luYygpICovXFxuK3N0YXRpYyBib29sIG1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKHN0cnVjdCBtZGRldiAqbWRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuK3tcXG4rXFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnE7XFxuK1xcbitcXHRpZiAobWRkZXZfaXNfZG0obWRkZXYpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRxID0gbWRkZXYtXFx1MDAzZWdlbmRpc2stXFx1MDAzZXF1ZXVlO1xcbitcXG4rXFx0cmV0dXJuIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayhxLCBsaW0pO1xcbit9XFxuK1xcbiAvKiB1cGRhdGUgdGhlIG9wdGltYWwgSS9PIHNpemUgYWZ0ZXIgYSByZXNoYXBlICovXFxuLXZvaWQgbWRkZXZfdXBkYXRlX2lvX29wdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB1bnNpZ25lZCBpbnQgbnJfc3RyaXBlcylcXG4rdm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzLFxcbitcXHRcXHRcXHQgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuLVxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbitcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIG93bjtcXG4gXFxuIFxcdGlmIChtZGRldl9pc19kbShtZGRldikpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFdpdGggYW4gdXBkYXRlIG93bmVkIGJ5IHRoZSBjYWxsZXIganVzdCBjaGFuZ2UgaXQgaW4gcGxhY2U7IGl0IGlzXFxuK1xcdCAqIGNvbW1pdHRlZCwgYW5kIHRoZSBhcnJheSByZXN1bWVkLCBieSB3aG9ldmVyIHN0YXJ0ZWQgaXQuICBUYWtpbmdcXG4rXFx0ICogcS1cXHUwMDNlbGltaXRzX2xvY2sgaGVyZSB3b3VsZCBuZXN0IGl0IGluc2lkZSByZWNvbmZpZ19tdXRleCBhbmQgdGhlXFxuK1xcdCAqIHN1c3BlbmQsIHdoaWNoIGRlYWRsb2Nrcywgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cXG4rXFx0ICovXFxuK1xcdGlmIChsaW0pIHtcXG4rXFx0XFx0bGltLVxcdTAwM2Vpb19vcHQgPSBsaW0tXFx1MDAzZWlvX21pbiAqIG5yX3N0cmlwZXM7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQ2FsbGVkIGZyb20gdGhlIHN5bmMgdGhyZWFkLCB3aGljaCBtZF9yZWFwX3N5bmNfdGhyZWFkKCkgd2FpdHMgZm9yXFxuK1xcdCAqIHdpdGggcmVjb25maWdfbXV0ZXggaGVsZCwgc28gZG9uJ3Qgd2FpdCBmb3IgcS1cXHUwMDNlbGltaXRzX2xvY2sgaGVyZS5cXG4rXFx0ICogaW9fb3B0IGlzIGEgaGludCwgc2tpcHBpbmcgaXQgb24gYSBjb250ZW5kZWQgcGFzcyBpcyBmaW5lLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFtZGRldl9zdGFja19saW1pdHNfdHJ5bG9jayhtZGRldiwgXFx1MDAyNm93bikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdC8qIGRvbid0IGJvdGhlciB1cGRhdGluZyBpb19vcHQgaWYgd2UgY2FuJ3Qgc3VzcGVuZCB0aGUgYXJyYXkgKi9cXG4tXFx0aWYgKG1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKSBcXHUwMDNjIDApXFxuK1xcdGlmIChtZGRldl9zdXNwZW5kKG1kZGV2LCBmYWxzZSkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHF1ZXVlX2xpbWl0c19jYW5jZWxfdXBkYXRlKG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZSk7XFxuIFxcdFxcdHJldHVybjtcXG4tXFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlcXVldWUpO1xcbi1cXHRsaW0uaW9fb3B0ID0gbGltLmlvX21pbiAqIG5yX3N0cmlwZXM7XFxuLVxcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuK1xcdH1cXG4rXFx0b3duLmlvX29wdCA9IG93bi5pb19taW4gKiBucl9zdHJpcGVzO1xcbitcXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlcXVldWUsIFxcdTAwMjZvd24pO1xcbiBcXHRtZGRldl9yZXN1bWUobWRkZXYpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3VwZGF0ZV9pb19vcHQpO1xcbkBAIC03NDg2LDcgKzc2MDAsOCBAQCBzdGF0aWMgaW50IGdldF9kaXNrX2luZm8oc3RydWN0IG1kZGV2ICptZGRldiwgdm9pZCBfX3VzZXIgKiBhcmcpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgbWRfYWRkX25ld19kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgKmluZm8pXFxuK2ludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbyxcXG4rXFx0XFx0ICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbWRfcmRldiAqcmRldjtcXG4gXFx0ZGV2X3QgZGV2ID0gTUtERVYoaW5mby1cXHUwMDNlbWFqb3IsaW5mby1cXHUwMDNlbWlub3IpO1xcbkBAIC03NjM0LDExICs3NzQ5LDExIEBAIGludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbylcXG4gXFx0XFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0XFx0bWRkZXYtXFx1MDAzZWNsdXN0ZXJfb3BzLVxcdTAwM2VhZGRfbmV3X2Rpc2tfY2FuY2VsKG1kZGV2KTtcXG4gXFx0XFx0XFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRcXHRcXHRlcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTtcXG4rXFx0XFx0XFx0XFx0XFx0ZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0fSBlbHNlIGlmICghZXJyKVxcbi1cXHRcXHRcXHRlcnIgPSBhZGRfYm91bmRfcmRldihyZGV2KTtcXG4rXFx0XFx0XFx0ZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTtcXG4gXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG5AQCAtNzY5MSw3ICs3ODA2LDggQEAgaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBob3RfcmVtb3ZlX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgZGV2X3QgZGV2KVxcbitzdGF0aWMgaW50IGhvdF9yZW1vdmVfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBkZXZfdCBkZXYsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbWRfcmRldiAqcmRldjtcXG4gXFxuQEAgLTc3MDYsNyArNzgyMiw3IEBAIHN0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIGRldl90IGRldilcXG4gXFx0XFx0Z290byBraWNrX3JkZXY7XFxuIFxcbiBcXHRjbGVhcl9iaXQoQmxvY2tlZCwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKTtcXG4tXFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCByZGV2KTtcXG4rXFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCByZGV2LCBsaW0pO1xcbiBcXG4gXFx0aWYgKHJkZXYtXFx1MDAzZXJhaWRfZGlzayBcXHUwMDNlPSAwKVxcbiBcXHRcXHRnb3RvIGJ1c3k7XFxuQEAgLTgyOTEsNiArODQwNywyMiBAQCBzdGF0aWMgaW5saW5lIGludCBtZF9pb2N0bF92YWxpZCh1bnNpZ25lZCBpbnQgY21kKVxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qXFxuKyAqIENvbW1hbmRzIHRoYXQgY2FuIHJlYWNoIC1cXHUwMDNlaG90X2FkZF9kaXNrKCkuICBBRERfTkVXX0RJU0sgb25seSBkb2VzIHNvIGZvciBhXFxuKyAqIGpvdXJuYWwgZGV2aWNlIG9yIGEgcGVyc29uYWxpdHkgd2l0aG91dCAtXFx1MDAzZWhvdF9yZW1vdmVfZGlzaywgYnV0IHRoYXQgZGVwZW5kc1xcbisgKiBvbiBkaXNrIGluZm8gc3RpbGwgaW4gdXNlciBtZW1vcnkgaGVyZSwgc28gaXQgaXMgaW5jbHVkZWQgYXMgYSB3aG9sZS5cXG4rICovXFxuK3N0YXRpYyBib29sIG1kX2lvY3RsX21heV9hZGRfZGlzayh1bnNpZ25lZCBpbnQgY21kKVxcbit7XFxuK1xcdHN3aXRjaCAoY21kKSB7XFxuK1xcdGNhc2UgQUREX05FV19ESVNLOlxcbitcXHRjYXNlIEhPVF9SRU1PVkVfRElTSzpcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBtZF9pb2N0bF9uZWVkX3N1c3BlbmQodW5zaWduZWQgaW50IGNtZClcXG4ge1xcbiBcXHRzd2l0Y2ggKGNtZCkge1xcbkBAIC04MzQ2LDYgKzg0NzgsOSBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG4gXFx0dW5zaWduZWQgaW50IG5vaW9fZmxhZ3MgPSAwO1xcbiBcXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcXG4gXFx0c3RydWN0IG1kZGV2ICptZGRldiA9IE5VTEw7XFxuK1xcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gTlVMTDtcXG4rXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XFxuK1xcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbXAgPSBOVUxMO1xcbiBcXHRib29sIHN1c3BlbmQ7XFxuIFxcbiBcXHRlcnIgPSBtZF9pb2N0bF92YWxpZChjbWQpO1xcbkBAIC04Mzk2LDExICs4NTMxLDIwIEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbiBcXHRpZiAoIW1kX2lzX3Jkd3IobWRkZXYpKVxcbiBcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZtZGRldi1cXHUwMDNlc3luY193b3JrKTtcXG4gXFxuK1xcdC8qIHEtXFx1MDAzZWxpbWl0c19sb2NrIG5lc3RzIG91dHNpZGUgYm90aCwgc2VlIG1kX3N0YXJ0X3N5bmMoKSAqL1xcbitcXHRpZiAobWRfaW9jdGxfbWF5X2FkZF9kaXNrKGNtZCkgXFx1MDAyNlxcdTAwMjYgIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xcbitcXHRcXHRxID0gbWRkZXYtXFx1MDAzZWdlbmRpc2stXFx1MDAzZXF1ZXVlO1xcbitcXHRcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xcbitcXHRcXHRsaW1wID0gXFx1MDAyNmxpbTtcXG4rXFx0fVxcbitcXG4gXFx0c3VzcGVuZCA9IG1kX2lvY3RsX25lZWRfc3VzcGVuZChjbWQpO1xcbiBcXHRlcnIgPSBzdXNwZW5kID8gbWRkZXZfc3VzcGVuZF9hbmRfbG9jayhtZGRldikgOiBtZGRldl9sb2NrKG1kZGV2KTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRwcl9kZWJ1ZyhcXFwibWQ6IGlvY3RsIGxvY2sgaW50ZXJydXB0ZWQsIHJlYXNvbiAlZCwgY21kICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgZXJyLCBjbWQpO1xcbitcXHRcXHRpZiAobGltcClcXG4rXFx0XFx0XFx0cXVldWVfbGltaXRzX2NhbmNlbF91cGRhdGUocSk7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcdGlmIChzdXNwZW5kKVxcbkBAIC04NDQyLDcgKzg1ODYsNyBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcbiBcXHRjYXNlIEhPVF9SRU1PVkVfRElTSzpcXG4tXFx0XFx0ZXJyID0gaG90X3JlbW92ZV9kaXNrKG1kZGV2LCBuZXdfZGVjb2RlX2RldihhcmcpKTtcXG4rXFx0XFx0ZXJyID0gaG90X3JlbW92ZV9kaXNrKG1kZGV2LCBuZXdfZGVjb2RlX2RldihhcmcpLCBsaW1wKTtcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcbiBcXHRjYXNlIEFERF9ORVdfRElTSzpcXG5AQCAtODQ1OCw3ICs4NjAyLDcgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuIFxcdFxcdFxcdFxcdC8qIE5lZWQgdG8gY2xlYXIgcmVhZC1vbmx5IGZvciB0aGlzICovXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdGVyciA9IG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXFx1MDAyNmluZm8pO1xcbitcXHRcXHRcXHRcXHRlcnIgPSBtZF9hZGRfbmV3X2Rpc2sobWRkZXYsIFxcdTAwMjZpbmZvLCBsaW1wKTtcXG4gXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTg0OTYsNyArODY0MCw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbiBcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmluZm8sIGFyZ3AsIHNpemVvZihpbmZvKSkpXFxuIFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuIFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0ZXJyID0gbWRfYWRkX25ld19kaXNrKG1kZGV2LCBcXHUwMDI2aW5mbyk7XFxuK1xcdFxcdFxcdGVyciA9IG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXFx1MDAyNmluZm8sIGxpbXApO1xcbiBcXHRcXHRnb3RvIHVubG9jaztcXG4gXFx0fVxcbiBcXG5AQCAtODUyOSw2ICs4NjczLDkgQEAgc3RhdGljIGludCBtZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuIFxcdCAgICBlcnIgIT0gLUVJTlZBTClcXG4gXFx0XFx0bWRkZXYtXFx1MDAzZWhvbGRfYWN0aXZlID0gMDtcXG4gXFxuK1xcdGlmIChsaW1wKVxcbitcXHRcXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcXG4rXFxuIFxcdGlmIChzdXNwZW5kKSB7XFxuIFxcdFxcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWdzKTtcXG4gXFx0XFx0bWRkZXZfdW5sb2NrX2FuZF9yZXN1bWUobWRkZXYpO1xcbkBAIC0xMDE2Nyw4ICsxMDMxNCw4IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqdGhpcylcXG4gXFx0cmV0dXJuIHJlbW92ZWQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsXFxuLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbWRfcmRldiAqdGhpcylcXG4rc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnRoaXMsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuIHtcXG4gXFx0c3RydWN0IG1kX3JkZXYgKnJkZXY7XFxuIFxcdGludCBzcGFyZXMgPSAwO1xcbkBAIC0xMDE5MSw3ICsxMDMzOCw3IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoIXRlc3RfYml0KEpvdXJuYWwsIFxcdTAwMjZyZGV2LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdFxcdHJkZXYtXFx1MDAzZXJlY292ZXJ5X29mZnNldCA9IDA7XFxuLVxcdFxcdGlmIChtZGRldi1cXHUwMDNlcGVycy1cXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7XFxuK1xcdFxcdGlmIChtZGRldi1cXHUwMDNlcGVycy1cXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByZGV2LCBsaW0pID09IDApIHtcXG4gXFx0XFx0XFx0LyogZmFpbHVyZSBoZXJlIGlzIE9LICovXFxuIFxcdFxcdFxcdHN5c2ZzX2xpbmtfcmRldihtZGRldiwgcmRldik7XFxuIFxcdFxcdFxcdGlmICghdGVzdF9iaXQoSm91cm5hbCwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSlcXG5AQCAtMTAyMDYsNyArMTAzNTMsOCBAQCBzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxcbiBcXHRyZXR1cm4gc3BhcmVzO1xcbiB9XFxuIFxcbi1zdGF0aWMgYm9vbCBtZF9jaG9vc2Vfc3luY19hY3Rpb24oc3RydWN0IG1kZGV2ICptZGRldiwgaW50ICpzcGFyZXMpXFxuK3N0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcyxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuIHtcXG4gXFx0LyogQ2hlY2sgaWYgcmVzaGFwZSBpcyBpbiBwcm9ncmVzcyBmaXJzdC4gKi9cXG4gXFx0aWYgKG1kZGV2LVxcdTAwM2VyZXNoYXBlX3Bvc2l0aW9uICE9IE1heFNlY3Rvcikge1xcbkBAIC0xMDIzNCw3ICsxMDM4Miw3IEBAIHN0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcylcXG4gXFx0ICogYWxzbyByZW1vdmVkIGFuZCByZS1hZGRlZCwgdG8gYWxsb3cgdGhlIHBlcnNvbmFsaXR5IHRvIGZhaWwgdGhlXFxuIFxcdCAqIHJlLWFkZC5cXG4gXFx0ICovXFxuLVxcdCpzcGFyZXMgPSByZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIE5VTEwpO1xcbitcXHQqc3BhcmVzID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMLCBsaW0pO1xcbiBcXHRpZiAoKnNwYXJlcyB8fCB0ZXN0X2JpdChNRF9SRUNPVkVSWV9MQVpZX1JFQ09WRVIsIFxcdTAwMjZtZGRldi1cXHUwMDNlcmVjb3ZlcnkpKSB7XFxuIFxcdFxcdGNsZWFyX2JpdChNRF9SRUNPVkVSWV9TWU5DLCBcXHUwMDI2bWRkZXYtXFx1MDAzZXJlY292ZXJ5KTtcXG4gXFx0XFx0Y2xlYXJfYml0KE1EX1JFQ09WRVJZX0NIRUNLLCBcXHUwMDI2bWRkZXYtXFx1MDAzZXJlY292ZXJ5KTtcXG5AQCAtMTAyNTYsNiArMTA0MDQsOSBAQCBzdGF0aWMgYm9vbCBtZF9jaG9vc2Vfc3luY19hY3Rpb24oc3RydWN0IG1kZGV2ICptZGRldiwgaW50ICpzcGFyZXMpXFxuIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWRkZXYgKm1kZGV2ID0gY29udGFpbmVyX29mKHdzLCBzdHJ1Y3QgbWRkZXYsIHN5bmNfd29yayk7XFxuK1xcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gTlVMTDtcXG4rXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XFxuK1xcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbXAgPSBOVUxMO1xcbiBcXHRpbnQgc3BhcmVzID0gMDtcXG4gXFx0Ym9vbCBzdXNwZW5kID0gZmFsc2U7XFxuIFxcdHVuc2lnbmVkIGludCBub2lvX2ZsYWdzID0gMDtcXG5AQCAtMTAyNjcsNiArMTA0MTgsMTcgQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxcbiBcXHQgKi9cXG4gXFx0aWYgKChtZGRldi1cXHUwMDNlcmVzaGFwZV9wb3NpdGlvbiA9PSBNYXhTZWN0b3IgfHwgIW1kX2lzX3Jkd3IobWRkZXYpKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbWRfc3BhcmVzX25lZWRfY2hhbmdlKG1kZGV2KSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBZGRpbmcgYSBzcGFyZSBiZWxvdyBzdGFja3MgaXRzIGxpbWl0cywgd2hpY2ggbmVlZHNcXG4rXFx0XFx0ICogcS1cXHUwMDNlbGltaXRzX2xvY2suICBUYWtlIGl0IGJlZm9yZSBzdXNwZW5kaW5nOiBpdHMgaG9sZGVyXFxuK1xcdFxcdCAqIHdhaXRzIGluIGJsa19tcV9mcmVlemVfcXVldWUoKSBmb3IgSS9PIHRoYXRcXG4rXFx0XFx0ICogbWRkZXYtXFx1MDAzZXN1c3BlbmRlZCBob2xkcyBiYWNrLCBzbyB0aGUgb3RoZXIgb3JkZXIgZGVhZGxvY2tzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFtZGRldl9pc19kbShtZGRldikpIHtcXG4rXFx0XFx0XFx0cSA9IG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZTtcXG4rXFx0XFx0XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG4rXFx0XFx0XFx0bGltcCA9IFxcdTAwMjZsaW07XFxuK1xcdFxcdH1cXG4gXFx0XFx0c3VzcGVuZCA9IHRydWU7XFxuIFxcdFxcdG1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKTtcXG4gXFx0XFx0bm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xcbkBAIC0xMDI4MSw2ICsxMDQ0MywxMiBAQCBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXFxuIFxcdGlmICghc3VzcGVuZCBcXHUwMDI2XFx1MDAyNiAobWRkZXYtXFx1MDAzZXJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yIHx8ICFtZF9pc19yZHdyKG1kZGV2KSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIG1kX3NwYXJlc19uZWVkX2NoYW5nZShtZGRldikpIHtcXG4gXFx0XFx0bWRkZXZfdW5sb2NrKG1kZGV2KTtcXG4rXFx0XFx0Lyogc2VlIGFib3ZlOiBxLVxcdTAwM2VsaW1pdHNfbG9jayBuZXN0cyBvdXRzaWRlIGJvdGggKi9cXG4rXFx0XFx0aWYgKCFtZGRldl9pc19kbShtZGRldikpIHtcXG4rXFx0XFx0XFx0cSA9IG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZTtcXG4rXFx0XFx0XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG4rXFx0XFx0XFx0bGltcCA9IFxcdTAwMjZsaW07XFxuK1xcdFxcdH1cXG4gXFx0XFx0bWRkZXZfc3VzcGVuZF9hbmRfbG9ja19ub2ludHIobWRkZXYpO1xcbiBcXHRcXHRzdXNwZW5kID0gdHJ1ZTtcXG4gXFx0XFx0bm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xcbkBAIC0xMDI5NCwxMSArMTA0NjIsMTEgQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxcbiBcXHRcXHQgKiBBcyB3ZSBvbmx5IGFkZCBkZXZpY2VzIHRoYXQgYXJlIGFscmVhZHkgaW4tc3luYywgd2UgY2FuXFxuIFxcdFxcdCAqIGFjdGl2YXRlIHRoZSBzcGFyZXMgaW1tZWRpYXRlbHkuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIE5VTEwpO1xcbitcXHRcXHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIE5VTEwsIGxpbXApO1xcbiBcXHRcXHRnb3RvIG5vdF9ydW5uaW5nO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIW1kX2Nob29zZV9zeW5jX2FjdGlvbihtZGRldiwgXFx1MDAyNnNwYXJlcykpXFxuK1xcdGlmICghbWRfY2hvb3NlX3N5bmNfYWN0aW9uKG1kZGV2LCBcXHUwMDI2c3BhcmVzLCBsaW1wKSlcXG4gXFx0XFx0Z290byBub3RfcnVubmluZztcXG4gXFxuIFxcdGlmICghbWRkZXYtXFx1MDAzZXBlcnMtXFx1MDAzZXN5bmNfcmVxdWVzdClcXG5AQCAtMTAzMjksNiArMTA0OTcsOCBAQCBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXFxuIFxcdCAqICAgICBodHRwczovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODIwMFxcbiBcXHQgKiBUaGVyZWZvcmUsIHVzZSBfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpLlxcbiBcXHQgKi9cXG4rXFx0aWYgKGxpbXApXFxuK1xcdFxcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApO1xcbiBcXHRpZiAoc3VzcGVuZCkge1xcbiBcXHRcXHRtZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFncyk7XFxuIFxcdFxcdF9fbWRkZXZfcmVzdW1lKG1kZGV2LCBmYWxzZSk7XFxuQEAgLTEwMzUxLDYgKzEwNTIxLDggQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxcbiBcXHQgKiAgICAgaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgyMDBcXG4gXFx0ICogVGhlcmVmb3JlLCB1c2UgX19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKS5cXG4gXFx0ICovXFxuK1xcdGlmIChsaW1wKVxcbitcXHRcXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcXG4gXFx0aWYgKHN1c3BlbmQpIHtcXG4gXFx0XFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZ3MpO1xcbiBcXHRcXHRfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpO1xcbkBAIC0xMDc5Myw2ICsxMDk2NSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG1kX2luaXQodm9pZClcXG4gXFxuIHN0YXRpYyB2b2lkIGNoZWNrX3NiX2NoYW5nZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuIHtcXG4rXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XFxuIFxcdHN0cnVjdCBtZHBfc3VwZXJibG9ja18xICpzYiA9IHBhZ2VfYWRkcmVzcyhyZGV2LVxcdTAwM2VzYl9wYWdlKTtcXG4gXFx0c3RydWN0IG1kX3JkZXYgKnJkZXYyLCAqdG1wO1xcbiBcXHRpbnQgcm9sZSwgcmV0O1xcbkBAIC0xMDg0OSw3ICsxMTAyMiwyNCBAQCBzdGF0aWMgdm9pZCBjaGVja19zYl9jaGFuZ2VzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbiBcXHRcXHRcXHRcXHRcXHRyZGV2Mi1cXHUwMDNlc2F2ZWRfcmFpZF9kaXNrID0gLTE7XFxuIFxcdFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0XFx0cmRldjItXFx1MDAzZXNhdmVkX3JhaWRfZGlzayA9IHJvbGU7XFxuLVxcdFxcdFxcdFxcdHJldCA9IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldiwgcmRldjIpO1xcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiByZWNvbmZpZ19tdXRleCBpcyBoZWxkLCBzbyBkb24ndCB3YWl0IGZvclxcbitcXHRcXHRcXHRcXHQgKiBxLVxcdTAwM2VsaW1pdHNfbG9jazsgTURfUkVDT1ZFUllfTkVFREVEIGJlbG93XFxuK1xcdFxcdFxcdFxcdCAqIGxlYXZlcyBhIHNraXBwZWQgYWRkIHRvIG1kX3N0YXJ0X3N5bmMoKS5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdGlmIChtZGRldl9zdGFja19saW1pdHNfdHJ5bG9jayhtZGRldiwgXFx1MDAyNmxpbSkpIHtcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPVxcbitcXHRcXHRcXHRcXHRcXHRcXHRtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlcXVldWU7XFxuK1xcbitcXHRcXHRcXHRcXHRcXHRyZXQgPSByZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICByZGV2MiwgXFx1MDAyNmxpbSk7XFxuK1xcdFxcdFxcdFxcdFxcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIFxcdTAwMjZsaW0pO1xcbitcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKG1kZGV2X2lzX2RtKG1kZGV2KSkge1xcbitcXHRcXHRcXHRcXHRcXHRyZXQgPSByZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICByZGV2MiwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdFxcdHJldCA9IHJlbW92ZV9zcGFyZXMobWRkZXYsIHJkZXYyKTtcXG4rXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRcXHRwcl9pbmZvKFxcXCJBY3RpdmF0ZWQgc3BhcmU6ICVwZ1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0cmRldjItXFx1MDAzZWJkZXYpO1xcbiBcXHRcXHRcXHRcXHQvKiB3YWtldXAgbWRkZXYtXFx1MDAzZXRocmVhZCBoZXJlLCBzbyBhcnJheSBjb3VsZFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmggYi9kcml2ZXJzL21kL21kLmhcXG5pbmRleCBiNmQyZTg5MjlhMGY5Li5jZWNhOGNmY2RjYjllIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvbWQuaFxcbisrKyBiL2RyaXZlcnMvbWQvbWQuaFxcbkBAIC03NjUsNyArNzY1LDggQEAgc3RydWN0IG1kX3BlcnNvbmFsaXR5XFxuIFxcdCAqIGlmIGFwcHJvcHJpYXRlLCBhbmQgc2hvdWxkIGFib3J0IHJlY292ZXJ5IGlmIG5lZWRlZFxcbiBcXHQgKi9cXG4gXFx0dm9pZCAoKmVycm9yX2hhbmRsZXIpKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KTtcXG4tXFx0aW50ICgqaG90X2FkZF9kaXNrKSAoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xcbitcXHRpbnQgKCpob3RfYWRkX2Rpc2spKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTtcXG4gXFx0aW50ICgqaG90X3JlbW92ZV9kaXNrKSAoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xcbiBcXHRpbnQgKCpzcGFyZV9hY3RpdmUpIChzdHJ1Y3QgbWRkZXYgKm1kZGV2KTtcXG4gXFx0c2VjdG9yX3QgKCpzeW5jX3JlcXVlc3QpKHN0cnVjdCBtZGRldiAqbWRkZXYsIHNlY3Rvcl90IHNlY3Rvcl9ucixcXG5AQCAtMTA0MSwxMyArMTA0MiwxNyBAQCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zO1xcbiBleHRlcm4gaW50IG1kcF9tYWpvcjtcXG4gdm9pZCBtZF9hdXRvc3RhcnRfYXJyYXlzKGludCBwYXJ0KTtcXG4gaW50IG1kX3NldF9hcnJheV9pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfYXJyYXlfaW5mb19zICppbmZvKTtcXG4taW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKTtcXG4raW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvLFxcbitcXHRcXHQgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTtcXG4gaW50IGRvX21kX3J1bihzdHJ1Y3QgbWRkZXYgKm1kZGV2KTtcXG4gI2RlZmluZSBNRERFVl9TVEFDS19JTlRFR1JJVFlcXHQoMXUgXFx1MDAzY1xcdTAwM2MgMClcXG4gaW50IG1kZGV2X3N0YWNrX3JkZXZfbGltaXRzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcXG4gXFx0XFx0dW5zaWduZWQgaW50IGZsYWdzKTtcXG4gaW50IG1kZGV2X3N0YWNrX25ld19yZGV2KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KTtcXG4tdm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzKTtcXG4raW50IG1kZGV2X3N0YWNrX3JkZXZfaW50byhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xcbit2b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtZF9mb3BzO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jXFxuaW5kZXggZjA2NDZmYjI0MzcxZi4uZGQzNDhiNTY5NWQwNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL21kL3JhaWQxLmNcXG4rKysgYi9kcml2ZXJzL21kL3JhaWQxLmNcXG5AQCAtMTg5OCw3ICsxODk4LDggQEAgc3RhdGljIGJvb2wgcmFpZDFfcmVtb3ZlX2NvbmYoc3RydWN0IHIxY29uZiAqY29uZiwgaW50IGRpc2spXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHJhaWQxX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbitzdGF0aWMgaW50IHJhaWQxX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxcbitcXHRcXHRcXHQgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcjFjb25mICpjb25mID0gbWRkZXYtXFx1MDAzZXByaXZhdGU7XFxuIFxcdGludCBlcnIgPSAtRUVYSVNUO1xcbkBAIC0xOTIzLDcgKzE5MjQsMTAgQEAgc3RhdGljIGludCByYWlkMV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcXG4gXFx0Zm9yIChtaXJyb3IgPSBmaXJzdDsgbWlycm9yIFxcdTAwM2M9IGxhc3Q7IG1pcnJvcisrKSB7XFxuIFxcdFxcdHAgPSBjb25mLVxcdTAwM2VtaXJyb3JzICsgbWlycm9yO1xcbiBcXHRcXHRpZiAoIXAtXFx1MDAzZXJkZXYpIHtcXG4tXFx0XFx0XFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xcbitcXHRcXHRcXHRpZiAobGltKVxcbitcXHRcXHRcXHRcXHRlcnIgPSBtZGRldl9zdGFja19yZGV2X2ludG8obWRkZXYsIHJkZXYsIGxpbSk7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcXG5pbmRleCAxMDkzYzc5OGQ5ZGRlLi42NDE2MTkzMjhhNmM0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmNcXG4rKysgYi9kcml2ZXJzL21kL3JhaWQxMC5jXFxuQEAgLTIwOTUsNyArMjA5NSw4IEBAIHN0YXRpYyBpbnQgcmFpZDEwX3NwYXJlX2FjdGl2ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbiBcXHRyZXR1cm4gY291bnQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcmFpZDEwX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbitzdGF0aWMgaW50IHJhaWQxMF9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbiB7XFxuIFxcdHN0cnVjdCByMTBjb25mICpjb25mID0gbWRkZXYtXFx1MDAzZXByaXZhdGU7XFxuIFxcdGludCBlcnIgPSAtRUVYSVNUO1xcbkBAIC0yMTMwLDcgKzIxMzEsMTAgQEAgc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRlcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7XFxuK1xcdFxcdGlmIChsaW0pXFxuK1xcdFxcdFxcdGVyciA9IG1kZGV2X3N0YWNrX3JkZXZfaW50byhtZGRldiwgcmRldiwgbGltKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRlcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdHAtXFx1MDAzZWhlYWRfcG9zaXRpb24gPSAwO1xcbkBAIC0yMTQ3LDcgKzIxNTEsMTAgQEAgc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuIFxcdFxcdGNsZWFyX2JpdChJbl9zeW5jLCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHRzZXRfYml0KFJlcGxhY2VtZW50LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHRyZGV2LVxcdTAwM2VyYWlkX2Rpc2sgPSByZXBsX3Nsb3Q7XFxuLVxcdFxcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcXG4rXFx0XFx0aWYgKGxpbSlcXG4rXFx0XFx0XFx0ZXJyID0gbWRkZXZfc3RhY2tfcmRldl9pbnRvKG1kZGV2LCByZGV2LCBsaW0pO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0Y29uZi1cXHUwMDNlZnVsbHN5bmMgPSAxO1xcbkBAIC00NDg0LDcgKzQ0OTEsNyBAQCBzdGF0aWMgaW50IHJhaWQxMF9zdGFydF9yZXNoYXBlKHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuIFxcdFxcdHJkZXZfZm9yX2VhY2gocmRldiwgbWRkZXYpXFxuIFxcdFxcdFxcdGlmIChyZGV2LVxcdTAwM2VyYWlkX2Rpc2sgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICAhdGVzdF9iaXQoRmF1bHR5LCBcXHUwMDI2cmRldi1cXHUwMDNlZmxhZ3MpKSB7XFxuLVxcdFxcdFxcdFxcdGlmIChyYWlkMTBfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHtcXG4rXFx0XFx0XFx0XFx0aWYgKHJhaWQxMF9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkge1xcbiBcXHRcXHRcXHRcXHRcXHRpZiAocmRldi1cXHUwMDNlcmFpZF9kaXNrIFxcdTAwM2U9XFxuIFxcdFxcdFxcdFxcdFxcdCAgICBjb25mLVxcdTAwM2VwcmV2LnJhaWRfZGlza3MpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHNldF9iaXQoSW5fc3luYywgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKTtcXG5AQCAtNDkyMSw3ICs0OTI4LDcgQEAgc3RhdGljIHZvaWQgZW5kX3Jlc2hhcGUoc3RydWN0IHIxMGNvbmYgKmNvbmYpXFxuIFxcdGNvbmYtXFx1MDAzZXJlc2hhcGVfc2FmZSA9IE1heFNlY3RvcjtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZjb25mLVxcdTAwM2VkZXZpY2VfbG9jayk7XFxuIFxcbi1cXHRtZGRldl91cGRhdGVfaW9fb3B0KGNvbmYtXFx1MDAzZW1kZGV2LCByYWlkMTBfbnJfc3RyaXBlcyhjb25mKSk7XFxuK1xcdG1kZGV2X3VwZGF0ZV9pb19vcHQoY29uZi1cXHUwMDNlbWRkZXYsIHJhaWQxMF9ucl9zdHJpcGVzKGNvbmYpLCBOVUxMKTtcXG4gXFx0Y29uZi1cXHUwMDNlZnVsbHN5bmMgPSAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmNcXG5pbmRleCBiOTE1NDVjZTA5MGRlLi4yMjc1OWM2MzFjNGQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuY1xcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuY1xcbkBAIC03Mjg4LDYgKzcyODgsOSBAQCBzdGF0aWMgc3NpemVfdFxcbiByYWlkNV9zdG9yZV9za2lwX2NvcHkoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgcjVjb25mICpjb25mO1xcbitcXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7XFxuK1xcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbitcXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXc7XFxuIFxcdGludCBlcnI7XFxuIFxcbkBAIC03Mjk3LDIzICs3MzAwLDMzIEBAIHJhaWQ1X3N0b3JlX3NraXBfY29weShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0bmV3ID0gISFuZXc7XFxuIFxcbitcXHQvKiBxLVxcdTAwM2VsaW1pdHNfbG9jayBuZXN0cyBvdXRzaWRlIGJvdGgsIHNlZSBtZF9zdGFydF9zeW5jKCkgKi9cXG4rXFx0aWYgKCFtZGRldl9pc19kbShtZGRldikpIHtcXG4rXFx0XFx0cSA9IG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZTtcXG4rXFx0XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG4rXFx0XFx0bGltcCA9IFxcdTAwMjZsaW07XFxuK1xcdH1cXG4rXFxuIFxcdGVyciA9IG1kZGV2X3N1c3BlbmRfYW5kX2xvY2sobWRkZXYpO1xcbi1cXHRpZiAoZXJyKVxcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGlmIChsaW1wKVxcbitcXHRcXHRcXHRxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShxKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbiBcXHRjb25mID0gbWRkZXYtXFx1MDAzZXByaXZhdGU7XFxuIFxcdGlmICghY29uZilcXG4gXFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4gXFx0ZWxzZSBpZiAobmV3ICE9IGNvbmYtXFx1MDAzZXNraXBfY29weSkge1xcbi1cXHRcXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZTtcXG4tXFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xcbi1cXG4gXFx0XFx0Y29uZi1cXHUwMDNlc2tpcF9jb3B5ID0gbmV3O1xcbi1cXHRcXHRpZiAobmV3KVxcbi1cXHRcXHRcXHRsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfU1RBQkxFX1dSSVRFUztcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRsaW0uZmVhdHVyZXMgXFx1MDAyNj0gfkJMS19GRUFUX1NUQUJMRV9XUklURVM7XFxuLVxcdFxcdGVyciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIFxcdTAwMjZsaW0pO1xcbitcXHRcXHRpZiAobGltcCkge1xcbitcXHRcXHRcXHRpZiAobmV3KVxcbitcXHRcXHRcXHRcXHRsaW1wLVxcdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9TVEFCTEVfV1JJVEVTO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdGxpbXAtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjY9IH5CTEtfRkVBVF9TVEFCTEVfV1JJVEVTO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4rXFx0aWYgKGxpbXApXFxuK1xcdFxcdGVyciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApID86IGVycjtcXG4gXFx0bWRkZXZfdW5sb2NrX2FuZF9yZXN1bWUobWRkZXYpO1xcbiBcXHRyZXR1cm4gZXJyID86IGxlbjtcXG4gfVxcbkBAIC04NDQxLDcgKzg0NTQsOCBAQCBzdGF0aWMgaW50IHJhaWQ1X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHJhaWQ1X2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbitzdGF0aWMgaW50IHJhaWQ1X2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxcbitcXHRcXHRcXHQgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcjVjb25mICpjb25mID0gbWRkZXYtXFx1MDAzZXByaXZhdGU7XFxuIFxcdGludCByZXQsIGVyciA9IC1FRVhJU1Q7XFxuQEAgLTg3MjgsNyArODc0Miw3IEBAIHN0YXRpYyBpbnQgcmFpZDVfc3RhcnRfcmVzaGFwZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbiBcXHRcXHRyZGV2X2Zvcl9lYWNoKHJkZXYsIG1kZGV2KVxcbiBcXHRcXHRcXHRpZiAocmRldi1cXHUwMDNlcmFpZF9kaXNrIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgIXRlc3RfYml0KEZhdWx0eSwgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKSkge1xcbi1cXHRcXHRcXHRcXHRpZiAocmFpZDVfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHtcXG4rXFx0XFx0XFx0XFx0aWYgKHJhaWQ1X2FkZF9kaXNrKG1kZGV2LCByZGV2LCBOVUxMKSA9PSAwKSB7XFxuIFxcdFxcdFxcdFxcdFxcdGlmIChyZGV2LVxcdTAwM2VyYWlkX2Rpc2tcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwM2U9IGNvbmYtXFx1MDAzZXByZXZpb3VzX3JhaWRfZGlza3MpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHNldF9iaXQoSW5fc3luYywgXFx1MDAyNnJkZXYtXFx1MDAzZWZsYWdzKTtcXG5AQCAtODc5OSw3ICs4ODEzLDcgQEAgc3RhdGljIHZvaWQgZW5kX3Jlc2hhcGUoc3RydWN0IHI1Y29uZiAqY29uZilcXG4gXFx0XFx0d2FrZV91cChcXHUwMDI2Y29uZi1cXHUwMDNld2FpdF9mb3JfcmVzaGFwZSk7XFxuIFxcbiBcXHRcXHRtZGRldl91cGRhdGVfaW9fb3B0KGNvbmYtXFx1MDAzZW1kZGV2LFxcbi1cXHRcXHRcXHRjb25mLVxcdTAwM2VyYWlkX2Rpc2tzIC0gY29uZi1cXHUwMDNlbWF4X2RlZ3JhZGVkKTtcXG4rXFx0XFx0XFx0Y29uZi1cXHUwMDNlcmFpZF9kaXNrcyAtIGNvbmYtXFx1MDAzZW1heF9kZWdyYWRlZCwgTlVMTCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG5pbmRleCA0Zjc5MDVjMzQxMmI4Li5iNzVlODUyOTFlMjkwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuQEAgLTExMDEsNiArMTEwMSwzMiBAQCBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZxLVxcdTAwM2VsaW1pdHNfbG9jayk7XFxuIFxcdHJldHVybiBxLVxcdTAwM2VsaW1pdHM7XFxuIH1cXG4rXFxuKy8qKlxcbisgKiBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlX3RyeWxvY2sgLSB0cnkgdG8gc3RhcnQgYW4gYXRvbWljIHVwZGF0ZSBvZiBxdWV1ZVxcbisgKlxcdGxpbWl0c1xcbisgKiBAcTpcXHRcXHRxdWV1ZSB0byB1cGRhdGVcXG4rICogQGxpbTpcXHRyZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgbGltaXRzIG9uIHN1Y2Nlc3NcXG4rICpcXG4rICogTGlrZSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKCksIGJ1dCBmYWlscyBpbnN0ZWFkIG9mIHdhaXRpbmcgd2hlbiBhbm90aGVyXFxuKyAqIHVwZGF0ZSBpcyBpbiBmbGlnaHQuICBGb3IgY2FsbGVycyB0aGF0IG11c3Qgbm90IGJsb2NrIG9uIHEtXFx1MDAzZWxpbWl0c19sb2NrXFxuKyAqIGJlY2F1c2UgdGhleSBob2xkIHNvbWV0aGluZyBpdHMgY3VycmVudCBvd25lciBpcyB3YWl0aW5nIGZvci5cXG4rICpcXG4rICogQ29udGV4dDogcHJvY2VzcyBjb250ZXh0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sXFxuK3F1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuK1xcdF9fY29uZF9hY3F1aXJlcyh0cnVlLCBcXHUwMDI2cS1cXHUwMDNlbGltaXRzX2xvY2spXFxuK3tcXG4rXFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZxLVxcdTAwM2VsaW1pdHNfbG9jaykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdCpsaW0gPSBxLVxcdTAwM2VsaW1pdHM7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gaW50IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4gXFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKSBfX3JlbGVhc2VzKFxcdTAwMjZxLVxcdTAwM2VsaW1pdHNfbG9jayk7XFxuIGludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MTM6MTYuNjExNjEzMjk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMzE3MTI0MDE4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX01EXCIsXG4gICAgXCJNRF9SQUlEMVwiLFxuICAgIFwiTURfUkFJRDEwXCIsXG4gICAgXCJNRF9SQUlENDU2XCIsXG4gICAgXCJNRF9MSU5FQVJcIixcbiAgICBcIkRNX1JBSURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZGRldl9zdGFja19yZGV2X2ludG9cIixcbiAgICBcIm1kZGV2X3VwZGF0ZV9pb19vcHRcIixcbiAgICBcIm1kX2FkZF9uZXdfZGlza1wiLFxuICAgIFwicmVtb3ZlX2FuZF9hZGRfc3BhcmVzXCIsXG4gICAgXCJyZGV2X2F0dHJfc3RvcmVcIixcbiAgICBcIm1kX3N0YXJ0X3N5bmNcIixcbiAgICBcInJhaWQxX2FkZF9kaXNrXCIsXG4gICAgXCJyYWlkMTBfYWRkX2Rpc2tcIixcbiAgICBcInJhaWQ1X2FkZF9kaXNrXCIsXG4gICAgXCJyYWlkNV9zdG9yZV9za2lwX2NvcHlcIixcbiAgICBcImxpbmVhcl9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cnVjdHVyZXMgbG9jayBhY3F1aXNpdGlvbiBhbmQgcXVldWUgbGltaXRzIHByb3BhZ2F0aW9uIGluIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgbGF5ZXIgdG8gcHJldmVudCBkZWFkbG9ja3MgYmV0d2VlbiBxLVxcdTAwM2VsaW1pdHNfbG9jaywgcmVjb25maWdfbXV0ZXgsIGFuZCBtZGRldl9zdXNwZW5kLiBJdCBhbHRlcnMgZGlzayBhZGRpdGlvbi9yZW1vdmFsIGFuZCBzeXNmcy9pb2N0bCBoYW5kbGluZyBhY3Jvc3MgbXVsdGlwbGUgUkFJRCBwZXJzb25hbGl0aWVzIChyYWlkMSwgcmFpZDEwLCByYWlkNSwgbGluZWFyLCBkbS1yYWlkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGlzY292ZXIgcG90ZW50aWFsIGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGNvcnJ1cHRpb25zIGR1cmluZyBjb25jdXJyZW50IFJBSUQgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYzYzZiZjI2NmEyNGNmNTc1NGI3YmMwNDUwMTFlNzQzZDJlM2Q3N2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE4OjEzOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkLmMgYi9kcml2ZXJzL21kL2RtLXJhaWQuY1xuaW5kZXggOGY1YTVlMTM0MmE5NS4uMjFhMTkyMmJlZTRmYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZC5jXG4rKysgYi9kcml2ZXJzL21kL2RtLXJhaWQuY1xuQEAgLTM5MjMsNyArMzkyMyw3IEBAIHN0YXRpYyB2b2lkIGF0dGVtcHRfcmVzdG9yZV9vZl9mYXVsdHlfZGV2aWNlcyhzdHJ1Y3QgcmFpZF9zZXQgKnJzKVxuIFx0XHRcdGNsZWFyX2JpdChGYXVsdHksIFx1MDAyNnItXHUwMDNlZmxhZ3MpO1xuIFx0XHRcdGNsZWFyX2JpdChXcml0ZUVycm9yU2VlbiwgXHUwMDI2ci1cdTAwM2VmbGFncyk7XG4gXG4tXHRcdFx0aWYgKG1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByKSkge1xuK1x0XHRcdGlmIChtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhtZGRldiwgciwgTlVMTCkpIHtcbiBcdFx0XHRcdC8qIEZhaWxlZCB0byByZXZpdmUgdGhpcyBkZXZpY2UsIHRyeSBuZXh0ICovXG4gXHRcdFx0XHRyLVx1MDAzZXJhaWRfZGlzayA9IHItXHUwMDNlc2F2ZWRfcmFpZF9kaXNrID0gLTE7XG4gXHRcdFx0XHRyLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC1hdXRvZGV0ZWN0LmMgYi9kcml2ZXJzL21kL21kLWF1dG9kZXRlY3QuY1xuaW5kZXggNGI4MDE2NWFmZDIzMy4uOTI5NTEzMTA5NjU3ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jXG4rKysgYi9kcml2ZXJzL21kL21kLWF1dG9kZXRlY3QuY1xuQEAgLTIxMyw3ICsyMTMsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWRfc2V0dXBfZHJpdmUoc3RydWN0IG1kX3NldHVwX2FyZ3MgKmFyZ3MpXG4gXHRcdFx0XHQoMSBcdTAwM2NcdTAwM2MgTURfRElTS19BQ1RJVkUpIHwgKDEgXHUwMDNjXHUwMDNjIE1EX0RJU0tfU1lOQyk7XG4gXHRcdH1cbiBcbi1cdFx0bWRfYWRkX25ld19kaXNrKG1kZGV2LCBcdTAwMjZkaW5mbyk7XG4rXHRcdG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXHUwMDI2ZGluZm8sIE5VTEwpO1xuIFx0fVxuIFxuIFx0aWYgKCFlcnIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC1saW5lYXIuYyBiL2RyaXZlcnMvbWQvbWQtbGluZWFyLmNcbmluZGV4IDczYjM2N2I2MWI4NzMuLjFmNDRjMmQ3ZGI5M2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL21kLWxpbmVhci5jXG4rKysgYi9kcml2ZXJzL21kL21kLWxpbmVhci5jXG5AQCAtMTg2LDcgKzE4Niw4IEBAIHN0YXRpYyBpbnQgbGluZWFyX3J1bihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBsaW5lYXJfYWRkKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuK3N0YXRpYyBpbnQgbGluZWFyX2FkZChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcbitcdFx0ICAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdC8qIEFkZGluZyBhIGRyaXZlIHRvIGEgbGluZWFyIGFycmF5IGFsbG93cyB0aGUgYXJyYXkgdG8gZ3Jvdy5cbiBcdCAqIEl0IGlzIHBlcm1pdHRlZCBpZiB0aGUgbmV3IGRyaXZlIGhhcyBhIG1hdGNoaW5nIHN1cGVyYmxvY2tcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmNcbmluZGV4IDY4MGIzNGE2M2NiM2QuLmM0MDU0ZDA2ZDEwNzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL21kLmNcbisrKyBiL2RyaXZlcnMvbWQvbWQuY1xuQEAgLTk0LDggKzk0LDggQEAgc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJlc3luY193YWl0KTtcbiAgKi9cbiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1kX21pc2Nfd3E7XG4gXG4tc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldixcbi1cdFx0XHRcdCBzdHJ1Y3QgbWRfcmRldiAqdGhpcyk7XG4rc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnRoaXMsXG4rXHRcdFx0XHQgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTtcbiBzdGF0aWMgdm9pZCBtZGRldl9kZXRhY2goc3RydWN0IG1kZGV2ICptZGRldik7XG4gc3RhdGljIHZvaWQgZXhwb3J0X3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xuIHN0YXRpYyB2b2lkIG1kX3dha2V1cF90aHJlYWRfZGlyZWN0bHkoc3RydWN0IG1kX3RocmVhZCBfX3JjdSAqKnRocmVhZCk7XG5AQCAtMjk4MSw3ICsyOTgxLDcgQEAgdm9pZCBtZF91cGRhdGVfc2Ioc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZvcmNlX2NoYW5nZSlcbiB9XG4gRVhQT1JUX1NZTUJPTChtZF91cGRhdGVfc2IpO1xuIFxuLXN0YXRpYyBpbnQgYWRkX2JvdW5kX3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4rc3RhdGljIGludCBhZGRfYm91bmRfcmRldihzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSByZGV2LVx1MDAzZW1kZGV2O1xuIFx0aW50IGVyciA9IDA7XG5AQCAtMjk5NCw3ICsyOTk0LDcgQEAgc3RhdGljIGludCBhZGRfYm91bmRfcmRldihzdHJ1Y3QgbWRfcmRldiAqcmRldilcbiBcdFx0ICovXG4gXHRcdHN1cGVyX3R5cGVzW21kZGV2LVx1MDAzZW1ham9yX3ZlcnNpb25dLlxuIFx0XHRcdHZhbGlkYXRlX3N1cGVyKG1kZGV2LCBOVUxMLypmcmVzaGVzdCovLCByZGV2KTtcbi1cdFx0ZXJyID0gbWRkZXYtXHUwMDNlcGVycy1cdTAwM2Vob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYpO1xuK1x0XHRlcnIgPSBtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhtZGRldiwgcmRldiwgbGltKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdG1kX2tpY2tfcmRldl9mcm9tX2FycmF5KHJkZXYpO1xuIFx0XHRcdHJldHVybiBlcnI7XG5AQCAtMzAzMyw3ICszMDMzLDEzIEBAIHN0YXRpYyBpbnQgY21kX21hdGNoKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqc3RyKVxuIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5IHtcbiBcdHN0cnVjdCBhdHRyaWJ1dGUgYXR0cjtcbiBcdHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgbWRfcmRldiAqLCBjaGFyICopO1xuLVx0c3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7XG4rXHQvKlxuK1x0ICogQGxpbTogYSBxdWV1ZSBsaW1pdHMgdXBkYXRlIHRoZSBjYWxsZXIgb3ducywgb3IgTlVMTC4gIFN0b3JlcyB0aGF0XG4rXHQgKiBjYW4gYWRkIGEgbGVnIHRvIHRoZSBhcnJheSBtdXN0IHN0YWNrIGludG8gaXQgcmF0aGVyIHRoYW4gdGFrZVxuK1x0ICogcS1cdTAwM2VsaW1pdHNfbG9jayB0aGVtc2VsdmVzLCBzZWUgbWRfc3RhcnRfc3luYygpLlxuK1x0ICovXG4rXHRzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxuK1x0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIH07XG4gXG4gc3RhdGljIHNzaXplX3RcbkBAIC0zMDc5LDcgKzMwODUsOCBAQCBzdGF0ZV9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4rc3RhdGVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0LyogY2FuIHdyaXRlXG4gXHQgKiAgZmF1bHR5ICAtIHNpbXVsYXRlcyBhbiBlcnJvclxuQEAgLTMxMTAsNyArMzExNyw3IEBAIHN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHR9IGVsc2UgaWYgKGNtZF9tYXRjaChidWYsIFwicmVtb3ZlXCIpKSB7XG4gXHRcdGlmIChyZGV2LVx1MDAzZW1kZGV2LVx1MDAzZXBlcnMpIHtcbiBcdFx0XHRjbGVhcl9iaXQoQmxvY2tlZCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4tXHRcdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYpO1xuK1x0XHRcdHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LVx1MDAzZW1kZGV2LCByZGV2LCBsaW0pO1xuIFx0XHR9XG4gXHRcdGlmIChyZGV2LVx1MDAzZXJhaWRfZGlzayBcdTAwM2U9IDApXG4gXHRcdFx0ZXJyID0gLUVCVVNZO1xuQEAgLTMyMjksNyArMzIzNiw3IEBAIHN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHRcdFx0aWYgKCFtZGRldl9pc19jbHVzdGVyZWQocmRldi1cdTAwM2VtZGRldikgfHxcbiBcdFx0XHQgICAgKGVyciA9IG1kZGV2LVx1MDAzZWNsdXN0ZXJfb3BzLVx1MDAzZWdhdGhlcl9iaXRtYXBzKHJkZXYpKSA9PSAwKSB7XG4gXHRcdFx0XHRjbGVhcl9iaXQoRmF1bHR5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYpO1xuK1x0XHRcdFx0ZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZVxuIFx0XHRcdGVyciA9IC1FQlVTWTtcbkBAIC0zMjU3LDcgKzMyNjQsOCBAQCBlcnJvcnNfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1lcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbitlcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdCAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHVuc2lnbmVkIGludCBuO1xuIFx0aW50IHJ2O1xuQEAgLTMyODMsNyArMzI5MSw4IEBAIHNsb3Rfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1zbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4rc2xvdF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxuK1x0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdGludCBzbG90O1xuIFx0aW50IGVycjtcbkBAIC0zMzE0LDcgKzMzMjMsNyBAQCBzbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHRcdGlmIChyZGV2LVx1MDAzZW1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X3JlbW92ZV9kaXNrID09IE5VTEwpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGNsZWFyX2JpdChCbG9ja2VkLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYpO1xuK1x0XHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMocmRldi1cdTAwM2VtZGRldiwgcmRldiwgbGltKTtcbiBcdFx0aWYgKHJkZXYtXHUwMDNlcmFpZF9kaXNrIFx1MDAzZT0gMClcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgXHUwMDI2cmRldi1cdTAwM2VtZGRldi1cdTAwM2VyZWNvdmVyeSk7XG5AQCAtMzM0NCw3ICszMzUzLDggQEAgc2xvdF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIFx0XHRcdHJkZXYtXHUwMDNlc2F2ZWRfcmFpZF9kaXNrID0gLTE7XG4gXHRcdGNsZWFyX2JpdChJbl9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbiBcdFx0Y2xlYXJfYml0KEJpdG1hcF9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0ZXJyID0gcmRldi1cdTAwM2VtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhyZGV2LVx1MDAzZW1kZGV2LCByZGV2KTtcbitcdFx0ZXJyID0gcmRldi1cdTAwM2VtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhyZGV2LVx1MDAzZW1kZGV2LCByZGV2LFxuK1x0XHRcdFx0XHRcdCAgICAgbGltKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdHJkZXYtXHUwMDNlcmFpZF9kaXNrID0gLTE7XG4gXHRcdFx0cmV0dXJuIGVycjtcbkBAIC0zMzc3LDcgKzMzODcsOCBAQCBvZmZzZXRfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1vZmZzZXRfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbitvZmZzZXRfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdCAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQ7XG4gXHRpZiAoa3N0cnRvdWxsKGJ1ZiwgMTAsIFx1MDAyNm9mZnNldCkgXHUwMDNjIDApXG5AQCAtMzQwMyw3ICszNDE0LDggQEAgc3RhdGljIHNzaXplX3QgbmV3X29mZnNldF9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBuZXdfb2Zmc2V0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuLVx0XHRcdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuK1x0XHRcdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxuK1x0XHRcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdfb2Zmc2V0O1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IHJkZXYtXHUwMDNlbWRkZXY7XG5AQCAtMzUxMCw3ICszNTIyLDggQEAgc3RhdGljIGludCBzdHJpY3RfYmxvY2tzX3RvX3NlY3RvcnMoY29uc3QgY2hhciAqYnVmLCBzZWN0b3JfdCAqc2VjdG9ycylcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1yZGV2X3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbityZGV2X3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCBtZGRldiAqbXlfbWRkZXYgPSByZGV2LVx1MDAzZW1kZGV2O1xuIFx0c2VjdG9yX3Qgb2xkc2VjdG9ycyA9IHJkZXYtXHUwMDNlc2VjdG9ycztcbkBAIC0zNTcyLDcgKzM1ODUsOCBAQCBzdGF0aWMgc3NpemVfdCByZWNvdmVyeV9zdGFydF9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIFx0cmV0dXJuIHNwcmludGYocGFnZSwgXCIlbGx1XFxuXCIsIHJlY292ZXJ5X3N0YXJ0KTtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3QgcmVjb3Zlcnlfc3RhcnRfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbitzdGF0aWMgc3NpemVfdCByZWNvdmVyeV9zdGFydF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGxvbmcgcmVjb3Zlcnlfc3RhcnQ7XG4gXG5AQCAtMzYxMSw3ICszNjI1LDkgQEAgc3RhdGljIHNzaXplX3QgYmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHBhZ2UsIDApO1xuIH1cbi1zdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbitcbitzdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcbitcdFx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0aW50IHJ2ID0gYmFkYmxvY2tzX3N0b3JlKFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCBsZW4sIDApO1xuIFx0LyogTWF5YmUgdGhhdCBhY2sgd2FzIGFsbCB3ZSBuZWVkZWQgKi9cbkBAIC0zNjI2LDcgKzM2NDIsOSBAQCBzdGF0aWMgc3NpemVfdCB1YmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHBhZ2UsIDEpO1xuIH1cbi1zdGF0aWMgc3NpemVfdCB1YmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG4rXG4rc3RhdGljIHNzaXplX3QgdWJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxuK1x0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0cmV0dXJuIGJhZGJsb2Nrc19zdG9yZShcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcGFnZSwgbGVuLCAxKTtcbiB9XG5AQCAtMzY0MCw3ICszNjU4LDggQEAgcHBsX3NlY3Rvcl9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXBwbF9zZWN0b3Jfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbitwcGxfc2VjdG9yX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sXG4rXHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBsb25nIHNlY3RvcjtcbiBcbkBAIC0zNjc5LDcgKzM2OTgsOCBAQCBwcGxfc2l6ZV9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXBwbF9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4rcHBsX3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdCAgICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG4gXG5AQCAtMzc0MCw2ICszNzYwLDkgQEAgcmRldl9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuIFx0c3RydWN0IHJkZXZfc3lzZnNfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5LCBhdHRyKTtcbiBcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBtZF9yZGV2LCBrb2JqKTtcbiBcdHN0cnVjdCBrZXJuZnNfbm9kZSAqa24gPSBOVUxMO1xuK1x0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMO1xuK1x0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDtcbiBcdGJvb2wgc3VzcGVuZCA9IGZhbHNlO1xuIFx0c3NpemVfdCBydjtcbiBcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSBSRUFEX09OQ0UocmRldi1cdTAwM2VtZGRldik7XG5AQCAtMzc2MCwxNSArMzc4MywzNyBAQCByZGV2X2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4gXHRcdFx0c3VzcGVuZCA9IHRydWU7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogVGhlc2UgY2FuIGFkZCBhIGxlZyBiYWNrLCB3aGljaCBzdGFja3MgaXRzIGxpbWl0czsgdGhlIG90aGVyXG4rXHQgKiBzdGF0ZV9zdG9yZSgpIHZhbHVlcyBuZXZlciByZWFjaCAtXHUwMDNlaG90X2FkZF9kaXNrKCkuICBxLVx1MDAzZWxpbWl0c19sb2NrXG4rXHQgKiBuZXN0cyBvdXRzaWRlIHRoZSBsb2NrIGFuZCB0aGUgc3VzcGVuZCwgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cbitcdCAqL1xuK1x0aWYgKChlbnRyeS1cdTAwM2VzdG9yZSA9PSBzbG90X3N0b3JlIHx8XG4rXHQgICAgIChlbnRyeS1cdTAwM2VzdG9yZSA9PSBzdGF0ZV9zdG9yZSBcdTAwMjZcdTAwMjZcbitcdCAgICAgIChjbWRfbWF0Y2gocGFnZSwgXCJyZW1vdmVcIikgfHwgY21kX21hdGNoKHBhZ2UsIFwicmUtYWRkXCIpKSkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFtZGRldl9pc19kbShtZGRldikpIHtcbitcdFx0cSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4rXHRcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XG4rXHRcdGxpbXAgPSBcdTAwMjZsaW07XG4rXHR9XG4rXG4gXHRydiA9IHN1c3BlbmQgPyBtZGRldl9zdXNwZW5kX2FuZF9sb2NrKG1kZGV2KSA6IG1kZGV2X2xvY2sobWRkZXYpO1xuIFx0aWYgKCFydikge1xuIFx0XHRpZiAocmRldi1cdTAwM2VtZGRldiA9PSBOVUxMKVxuIFx0XHRcdHJ2ID0gLUVOT0RFVjtcbiBcdFx0ZWxzZVxuLVx0XHRcdHJ2ID0gZW50cnktXHUwMDNlc3RvcmUocmRldiwgcGFnZSwgbGVuZ3RoKTtcbitcdFx0XHRydiA9IGVudHJ5LVx1MDAzZXN0b3JlKHJkZXYsIHBhZ2UsIGxlbmd0aCwgbGltcCk7XG4rXHRcdC8qIGFwcGx5IHRoZSBsaW1pdHMgYmVmb3JlIHRoZSBhcnJheSB0YWtlcyBJL08gYWdhaW4gKi9cbitcdFx0aWYgKGxpbXApIHtcbitcdFx0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcbitcdFx0XHRsaW1wID0gTlVMTDtcbitcdFx0fVxuIFx0XHRzdXNwZW5kID8gbWRkZXZfdW5sb2NrX2FuZF9yZXN1bWUobWRkZXYpIDogbWRkZXZfdW5sb2NrKG1kZGV2KTtcbiBcdH1cbiBcbitcdGlmIChsaW1wKVxuK1x0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcbitcbiBcdGlmIChrbilcbiBcdFx0c3lzZnNfdW5icmVha19hY3RpdmVfcHJvdGVjdGlvbihrbik7XG4gXG5AQCAtNjI3NSwyMCArNjMyMCw4OSBAQCBpbnQgbWRkZXZfc3RhY2tfbmV3X3JkZXYoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3N0YWNrX25ld19yZGV2KTtcbiBcbisvKlxuKyAqIFN0YWNrIGEgbmV3IHJkZXYgaW50byBsaW1pdHMgdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIGxpbWl0c19sb2NrIGZvciBhbmRcbisgKiB3aWxsIGNvbW1pdCBpdHNlbGYuICBVc2VkIGZyb20gcGF0aHMgdGhhdCBtdXN0IHRha2UgbGltaXRzX2xvY2sgYmVmb3JlXG4rICogcXVpZXNjaW5nIHRoZSBhcnJheSwgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cbisgKi9cbitpbnQgbWRkZXZfc3RhY2tfcmRldl9pbnRvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuK3tcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgdG1wID0gKmxpbTtcbitcbitcdGlmIChtZGRldl9pc19kbShtZGRldikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHF1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShyZGV2LVx1MDAzZWJkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2VxdWV1ZSkgXHUwMDNlXG4rXHQgICAgcXVldWVfbG9naWNhbF9ibG9ja19zaXplKG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWUpKSB7XG4rXHRcdHByX2VycihcIiVzOiBpbmNvbXBhdGlibGUgbG9naWNhbF9ibG9ja19zaXplLCBjYW4gbm90IGFkZFxcblwiLFxuK1x0XHQgICAgICAgbWRuYW1lKG1kZGV2KSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cXVldWVfbGltaXRzX3N0YWNrX2JkZXYoXHUwMDI2dG1wLCByZGV2LVx1MDAzZWJkZXYsIHJkZXYtXHUwMDNlZGF0YV9vZmZzZXQsXG4rXHRcdFx0XHRtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZWRpc2tfbmFtZSk7XG4rXG4rXHRpZiAoIXF1ZXVlX2xpbWl0c19zdGFja19pbnRlZ3JpdHlfYmRldihcdTAwMjZ0bXAsIHJkZXYtXHUwMDNlYmRldikpIHtcbitcdFx0cHJfZXJyKFwiJXM6IGluY29tcGF0aWJsZSBpbnRlZ3JpdHkgcHJvZmlsZSBmb3IgJXBnXFxuXCIsXG4rXHRcdCAgICAgICBtZG5hbWUobWRkZXYpLCByZGV2LVx1MDAzZWJkZXYpO1xuK1x0XHRyZXR1cm4gLUVOWElPO1xuK1x0fVxuK1xuK1x0KmxpbSA9IHRtcDtcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtZGRldl9zdGFja19yZGV2X2ludG8pO1xuK1xuKy8qIGZvciBjYWxsZXJzIHRoYXQgbXVzdCBub3Qgd2FpdCBmb3IgcS1cdTAwM2VsaW1pdHNfbG9jaywgc2VlIG1kX3N0YXJ0X3N5bmMoKSAqL1xuK3N0YXRpYyBib29sIG1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKHN0cnVjdCBtZGRldiAqbWRkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuK3tcbitcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxO1xuK1xuK1x0aWYgKG1kZGV2X2lzX2RtKG1kZGV2KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4rXG4rXHRyZXR1cm4gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZV90cnlsb2NrKHEsIGxpbSk7XG4rfVxuK1xuIC8qIHVwZGF0ZSB0aGUgb3B0aW1hbCBJL08gc2l6ZSBhZnRlciBhIHJlc2hhcGUgKi9cbi12b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMpXG4rdm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzLFxuK1x0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuLVx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzIG93bjtcbiBcbiBcdGlmIChtZGRldl9pc19kbShtZGRldikpXG4gXHRcdHJldHVybjtcbiBcbitcdC8qXG4rXHQgKiBXaXRoIGFuIHVwZGF0ZSBvd25lZCBieSB0aGUgY2FsbGVyIGp1c3QgY2hhbmdlIGl0IGluIHBsYWNlOyBpdCBpc1xuK1x0ICogY29tbWl0dGVkLCBhbmQgdGhlIGFycmF5IHJlc3VtZWQsIGJ5IHdob2V2ZXIgc3RhcnRlZCBpdC4gIFRha2luZ1xuK1x0ICogcS1cdTAwM2VsaW1pdHNfbG9jayBoZXJlIHdvdWxkIG5lc3QgaXQgaW5zaWRlIHJlY29uZmlnX211dGV4IGFuZCB0aGVcbitcdCAqIHN1c3BlbmQsIHdoaWNoIGRlYWRsb2Nrcywgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cbitcdCAqL1xuK1x0aWYgKGxpbSkge1xuK1x0XHRsaW0tXHUwMDNlaW9fb3B0ID0gbGltLVx1MDAzZWlvX21pbiAqIG5yX3N0cmlwZXM7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBDYWxsZWQgZnJvbSB0aGUgc3luYyB0aHJlYWQsIHdoaWNoIG1kX3JlYXBfc3luY190aHJlYWQoKSB3YWl0cyBmb3JcbitcdCAqIHdpdGggcmVjb25maWdfbXV0ZXggaGVsZCwgc28gZG9uJ3Qgd2FpdCBmb3IgcS1cdTAwM2VsaW1pdHNfbG9jayBoZXJlLlxuK1x0ICogaW9fb3B0IGlzIGEgaGludCwgc2tpcHBpbmcgaXQgb24gYSBjb250ZW5kZWQgcGFzcyBpcyBmaW5lLlxuK1x0ICovXG4rXHRpZiAoIW1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKG1kZGV2LCBcdTAwMjZvd24pKVxuK1x0XHRyZXR1cm47XG4rXG4gXHQvKiBkb24ndCBib3RoZXIgdXBkYXRpbmcgaW9fb3B0IGlmIHdlIGNhbid0IHN1c3BlbmQgdGhlIGFycmF5ICovXG4tXHRpZiAobWRkZXZfc3VzcGVuZChtZGRldiwgZmFsc2UpIFx1MDAzYyAwKVxuK1x0aWYgKG1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKSBcdTAwM2MgMCkge1xuK1x0XHRxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlKTtcbiBcdFx0cmV0dXJuO1xuLVx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlKTtcbi1cdGxpbS5pb19vcHQgPSBsaW0uaW9fbWluICogbnJfc3RyaXBlcztcbi1cdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4rXHR9XG4rXHRvd24uaW9fb3B0ID0gb3duLmlvX21pbiAqIG5yX3N0cmlwZXM7XG4rXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZvd24pO1xuIFx0bWRkZXZfcmVzdW1lKG1kZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobWRkZXZfdXBkYXRlX2lvX29wdCk7XG5AQCAtNzQ4Niw3ICs3NjAwLDggQEAgc3RhdGljIGludCBnZXRfZGlza19pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHZvaWQgX191c2VyICogYXJnKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbylcbitpbnQgbWRfYWRkX25ld19kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgKmluZm8sXG4rXHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0c3RydWN0IG1kX3JkZXYgKnJkZXY7XG4gXHRkZXZfdCBkZXYgPSBNS0RFVihpbmZvLVx1MDAzZW1ham9yLGluZm8tXHUwMDNlbWlub3IpO1xuQEAgLTc2MzQsMTEgKzc3NDksMTEgQEAgaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKVxuIFx0XHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdFx0bWRkZXYtXHUwMDNlY2x1c3Rlcl9vcHMtXHUwMDNlYWRkX25ld19kaXNrX2NhbmNlbChtZGRldik7XG4gXHRcdFx0XHRlbHNlXG4tXHRcdFx0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYpO1xuK1x0XHRcdFx0XHRlcnIgPSBhZGRfYm91bmRfcmRldihyZGV2LCBsaW0pO1xuIFx0XHRcdH1cbiBcbiBcdFx0fSBlbHNlIGlmICghZXJyKVxuLVx0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYpO1xuK1x0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYsIGxpbSk7XG4gXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtNzY5MSw3ICs3ODA2LDggQEAgaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIGRldl90IGRldilcbitzdGF0aWMgaW50IGhvdF9yZW1vdmVfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBkZXZfdCBkZXYsXG4rXHRcdFx0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCBtZF9yZGV2ICpyZGV2O1xuIFxuQEAgLTc3MDYsNyArNzgyMiw3IEBAIHN0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIGRldl90IGRldilcbiBcdFx0Z290byBraWNrX3JkZXY7XG4gXG4gXHRjbGVhcl9iaXQoQmxvY2tlZCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4tXHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIHJkZXYpO1xuK1x0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCByZGV2LCBsaW0pO1xuIFxuIFx0aWYgKHJkZXYtXHUwMDNlcmFpZF9kaXNrIFx1MDAzZT0gMClcbiBcdFx0Z290byBidXN5O1xuQEAgLTgyOTEsNiArODQwNywyMiBAQCBzdGF0aWMgaW5saW5lIGludCBtZF9pb2N0bF92YWxpZCh1bnNpZ25lZCBpbnQgY21kKVxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIENvbW1hbmRzIHRoYXQgY2FuIHJlYWNoIC1cdTAwM2Vob3RfYWRkX2Rpc2soKS4gIEFERF9ORVdfRElTSyBvbmx5IGRvZXMgc28gZm9yIGFcbisgKiBqb3VybmFsIGRldmljZSBvciBhIHBlcnNvbmFsaXR5IHdpdGhvdXQgLVx1MDAzZWhvdF9yZW1vdmVfZGlzaywgYnV0IHRoYXQgZGVwZW5kc1xuKyAqIG9uIGRpc2sgaW5mbyBzdGlsbCBpbiB1c2VyIG1lbW9yeSBoZXJlLCBzbyBpdCBpcyBpbmNsdWRlZCBhcyBhIHdob2xlLlxuKyAqL1xuK3N0YXRpYyBib29sIG1kX2lvY3RsX21heV9hZGRfZGlzayh1bnNpZ25lZCBpbnQgY21kKVxuK3tcbitcdHN3aXRjaCAoY21kKSB7XG4rXHRjYXNlIEFERF9ORVdfRElTSzpcbitcdGNhc2UgSE9UX1JFTU9WRV9ESVNLOlxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbit9XG4rXG4gc3RhdGljIGJvb2wgbWRfaW9jdGxfbmVlZF9zdXNwZW5kKHVuc2lnbmVkIGludCBjbWQpXG4ge1xuIFx0c3dpdGNoIChjbWQpIHtcbkBAIC04MzQ2LDYgKzg0NzgsOSBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbiBcdHVuc2lnbmVkIGludCBub2lvX2ZsYWdzID0gMDtcbiBcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IE5VTEw7XG4rXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbXAgPSBOVUxMO1xuIFx0Ym9vbCBzdXNwZW5kO1xuIFxuIFx0ZXJyID0gbWRfaW9jdGxfdmFsaWQoY21kKTtcbkBAIC04Mzk2LDExICs4NTMxLDIwIEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0aWYgKCFtZF9pc19yZHdyKG1kZGV2KSlcbiBcdFx0Zmx1c2hfd29yayhcdTAwMjZtZGRldi1cdTAwM2VzeW5jX3dvcmspO1xuIFxuK1x0LyogcS1cdTAwM2VsaW1pdHNfbG9jayBuZXN0cyBvdXRzaWRlIGJvdGgsIHNlZSBtZF9zdGFydF9zeW5jKCkgKi9cbitcdGlmIChtZF9pb2N0bF9tYXlfYWRkX2Rpc2soY21kKSBcdTAwMjZcdTAwMjYgIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuK1x0XHRxID0gbWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZTtcbitcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbitcdFx0bGltcCA9IFx1MDAyNmxpbTtcbitcdH1cbitcbiBcdHN1c3BlbmQgPSBtZF9pb2N0bF9uZWVkX3N1c3BlbmQoY21kKTtcbiBcdGVyciA9IHN1c3BlbmQgPyBtZGRldl9zdXNwZW5kX2FuZF9sb2NrKG1kZGV2KSA6IG1kZGV2X2xvY2sobWRkZXYpO1xuIFx0aWYgKGVycikge1xuIFx0XHRwcl9kZWJ1ZyhcIm1kOiBpb2N0bCBsb2NrIGludGVycnVwdGVkLCByZWFzb24gJWQsIGNtZCAlZFxcblwiLFxuIFx0XHRcdCBlcnIsIGNtZCk7XG4rXHRcdGlmIChsaW1wKVxuK1x0XHRcdHF1ZXVlX2xpbWl0c19jYW5jZWxfdXBkYXRlKHEpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcdGlmIChzdXNwZW5kKVxuQEAgLTg0NDIsNyArODU4Niw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0XHRnb3RvIHVubG9jaztcbiBcbiBcdGNhc2UgSE9UX1JFTU9WRV9ESVNLOlxuLVx0XHRlcnIgPSBob3RfcmVtb3ZlX2Rpc2sobWRkZXYsIG5ld19kZWNvZGVfZGV2KGFyZykpO1xuK1x0XHRlcnIgPSBob3RfcmVtb3ZlX2Rpc2sobWRkZXYsIG5ld19kZWNvZGVfZGV2KGFyZyksIGxpbXApO1xuIFx0XHRnb3RvIHVubG9jaztcbiBcbiBcdGNhc2UgQUREX05FV19ESVNLOlxuQEAgLTg0NTgsNyArODYwMiw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0XHRcdFx0LyogTmVlZCB0byBjbGVhciByZWFkLW9ubHkgZm9yIHRoaXMgKi9cbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGVsc2Vcbi1cdFx0XHRcdGVyciA9IG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXHUwMDI2aW5mbyk7XG4rXHRcdFx0XHRlcnIgPSBtZF9hZGRfbmV3X2Rpc2sobWRkZXYsIFx1MDAyNmluZm8sIGxpbXApO1xuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuQEAgLTg0OTYsNyArODY0MCw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2aW5mbywgYXJncCwgc2l6ZW9mKGluZm8pKSlcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRlbHNlXG4tXHRcdFx0ZXJyID0gbWRfYWRkX25ld19kaXNrKG1kZGV2LCBcdTAwMjZpbmZvKTtcbitcdFx0XHRlcnIgPSBtZF9hZGRfbmV3X2Rpc2sobWRkZXYsIFx1MDAyNmluZm8sIGxpbXApO1xuIFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbiBcbkBAIC04NTI5LDYgKzg2NzMsOSBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbiBcdCAgICBlcnIgIT0gLUVJTlZBTClcbiBcdFx0bWRkZXYtXHUwMDNlaG9sZF9hY3RpdmUgPSAwO1xuIFxuK1x0aWYgKGxpbXApXG4rXHRcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApO1xuK1xuIFx0aWYgKHN1c3BlbmQpIHtcbiBcdFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZ3MpO1xuIFx0XHRtZGRldl91bmxvY2tfYW5kX3Jlc3VtZShtZGRldik7XG5AQCAtMTAxNjcsOCArMTAzMTQsOCBAQCBzdGF0aWMgaW50IHJlbW92ZV9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnRoaXMpXG4gXHRyZXR1cm4gcmVtb3ZlZDtcbiB9XG4gXG4tc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldixcbi1cdFx0XHRcdCBzdHJ1Y3QgbWRfcmRldiAqdGhpcylcbitzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqdGhpcyxcbitcdFx0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0c3RydWN0IG1kX3JkZXYgKnJkZXY7XG4gXHRpbnQgc3BhcmVzID0gMDtcbkBAIC0xMDE5MSw3ICsxMDMzOCw3IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghdGVzdF9iaXQoSm91cm5hbCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG4gXHRcdFx0cmRldi1cdTAwM2VyZWNvdmVyeV9vZmZzZXQgPSAwO1xuLVx0XHRpZiAobWRkZXYtXHUwMDNlcGVycy1cdTAwM2Vob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHtcbitcdFx0aWYgKG1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByZGV2LCBsaW0pID09IDApIHtcbiBcdFx0XHQvKiBmYWlsdXJlIGhlcmUgaXMgT0sgKi9cbiBcdFx0XHRzeXNmc19saW5rX3JkZXYobWRkZXYsIHJkZXYpO1xuIFx0XHRcdGlmICghdGVzdF9iaXQoSm91cm5hbCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG5AQCAtMTAyMDYsNyArMTAzNTMsOCBAQCBzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxuIFx0cmV0dXJuIHNwYXJlcztcbiB9XG4gXG4tc3RhdGljIGJvb2wgbWRfY2hvb3NlX3N5bmNfYWN0aW9uKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCAqc3BhcmVzKVxuK3N0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcyxcbitcdFx0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdC8qIENoZWNrIGlmIHJlc2hhcGUgaXMgaW4gcHJvZ3Jlc3MgZmlyc3QuICovXG4gXHRpZiAobWRkZXYtXHUwMDNlcmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IpIHtcbkBAIC0xMDIzNCw3ICsxMDM4Miw3IEBAIHN0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcylcbiBcdCAqIGFsc28gcmVtb3ZlZCBhbmQgcmUtYWRkZWQsIHRvIGFsbG93IHRoZSBwZXJzb25hbGl0eSB0byBmYWlsIHRoZVxuIFx0ICogcmUtYWRkLlxuIFx0ICovXG4tXHQqc3BhcmVzID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMKTtcbitcdCpzcGFyZXMgPSByZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIE5VTEwsIGxpbSk7XG4gXHRpZiAoKnNwYXJlcyB8fCB0ZXN0X2JpdChNRF9SRUNPVkVSWV9MQVpZX1JFQ09WRVIsIFx1MDAyNm1kZGV2LVx1MDAzZXJlY292ZXJ5KSkge1xuIFx0XHRjbGVhcl9iaXQoTURfUkVDT1ZFUllfU1lOQywgXHUwMDI2bWRkZXYtXHUwMDNlcmVjb3ZlcnkpO1xuIFx0XHRjbGVhcl9iaXQoTURfUkVDT1ZFUllfQ0hFQ0ssIFx1MDAyNm1kZGV2LVx1MDAzZXJlY292ZXJ5KTtcbkBAIC0xMDI1Niw2ICsxMDQwNCw5IEBAIHN0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcylcbiBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXG4ge1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IGNvbnRhaW5lcl9vZih3cywgc3RydWN0IG1kZGV2LCBzeW5jX3dvcmspO1xuK1x0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMO1xuK1x0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDtcbiBcdGludCBzcGFyZXMgPSAwO1xuIFx0Ym9vbCBzdXNwZW5kID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBpbnQgbm9pb19mbGFncyA9IDA7XG5AQCAtMTAyNjcsNiArMTA0MTgsMTcgQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxuIFx0ICovXG4gXHRpZiAoKG1kZGV2LVx1MDAzZXJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yIHx8ICFtZF9pc19yZHdyKG1kZGV2KSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbWRfc3BhcmVzX25lZWRfY2hhbmdlKG1kZGV2KSkge1xuK1x0XHQvKlxuK1x0XHQgKiBBZGRpbmcgYSBzcGFyZSBiZWxvdyBzdGFja3MgaXRzIGxpbWl0cywgd2hpY2ggbmVlZHNcbitcdFx0ICogcS1cdTAwM2VsaW1pdHNfbG9jay4gIFRha2UgaXQgYmVmb3JlIHN1c3BlbmRpbmc6IGl0cyBob2xkZXJcbitcdFx0ICogd2FpdHMgaW4gYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIGZvciBJL08gdGhhdFxuK1x0XHQgKiBtZGRldi1cdTAwM2VzdXNwZW5kZWQgaG9sZHMgYmFjaywgc28gdGhlIG90aGVyIG9yZGVyIGRlYWRsb2Nrcy5cbitcdFx0ICovXG4rXHRcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpKSB7XG4rXHRcdFx0cSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4rXHRcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbitcdFx0XHRsaW1wID0gXHUwMDI2bGltO1xuK1x0XHR9XG4gXHRcdHN1c3BlbmQgPSB0cnVlO1xuIFx0XHRtZGRldl9zdXNwZW5kKG1kZGV2LCBmYWxzZSk7XG4gXHRcdG5vaW9fZmxhZ3MgPSBtZW1hbGxvY19ub2lvX3NhdmUoKTtcbkBAIC0xMDI4MSw2ICsxMDQ0MywxMiBAQCBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXG4gXHRpZiAoIXN1c3BlbmQgXHUwMDI2XHUwMDI2IChtZGRldi1cdTAwM2VyZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvciB8fCAhbWRfaXNfcmR3cihtZGRldikpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG1kX3NwYXJlc19uZWVkX2NoYW5nZShtZGRldikpIHtcbiBcdFx0bWRkZXZfdW5sb2NrKG1kZGV2KTtcbitcdFx0Lyogc2VlIGFib3ZlOiBxLVx1MDAzZWxpbWl0c19sb2NrIG5lc3RzIG91dHNpZGUgYm90aCAqL1xuK1x0XHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuK1x0XHRcdHEgPSBtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlO1xuK1x0XHRcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XG4rXHRcdFx0bGltcCA9IFx1MDAyNmxpbTtcbitcdFx0fVxuIFx0XHRtZGRldl9zdXNwZW5kX2FuZF9sb2NrX25vaW50cihtZGRldik7XG4gXHRcdHN1c3BlbmQgPSB0cnVlO1xuIFx0XHRub2lvX2ZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG5AQCAtMTAyOTQsMTEgKzEwNDYyLDExIEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cylcbiBcdFx0ICogQXMgd2Ugb25seSBhZGQgZGV2aWNlcyB0aGF0IGFyZSBhbHJlYWR5IGluLXN5bmMsIHdlIGNhblxuIFx0XHQgKiBhY3RpdmF0ZSB0aGUgc3BhcmVzIGltbWVkaWF0ZWx5LlxuIFx0XHQgKi9cbi1cdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMKTtcbitcdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMLCBsaW1wKTtcbiBcdFx0Z290byBub3RfcnVubmluZztcbiBcdH1cbiBcbi1cdGlmICghbWRfY2hvb3NlX3N5bmNfYWN0aW9uKG1kZGV2LCBcdTAwMjZzcGFyZXMpKVxuK1x0aWYgKCFtZF9jaG9vc2Vfc3luY19hY3Rpb24obWRkZXYsIFx1MDAyNnNwYXJlcywgbGltcCkpXG4gXHRcdGdvdG8gbm90X3J1bm5pbmc7XG4gXG4gXHRpZiAoIW1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlc3luY19yZXF1ZXN0KVxuQEAgLTEwMzI5LDYgKzEwNDk3LDggQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxuIFx0ICogICAgIGh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MjAwXG4gXHQgKiBUaGVyZWZvcmUsIHVzZSBfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpLlxuIFx0ICovXG4rXHRpZiAobGltcClcbitcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltcCk7XG4gXHRpZiAoc3VzcGVuZCkge1xuIFx0XHRtZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFncyk7XG4gXHRcdF9fbWRkZXZfcmVzdW1lKG1kZGV2LCBmYWxzZSk7XG5AQCAtMTAzNTEsNiArMTA1MjEsOCBAQCBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXG4gXHQgKiAgICAgaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgyMDBcbiBcdCAqIFRoZXJlZm9yZSwgdXNlIF9fbWRkZXZfcmVzdW1lKG1kZGV2LCBmYWxzZSkuXG4gXHQgKi9cbitcdGlmIChsaW1wKVxuK1x0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcbiBcdGlmIChzdXNwZW5kKSB7XG4gXHRcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWdzKTtcbiBcdFx0X19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKTtcbkBAIC0xMDc5Myw2ICsxMDk2NSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG1kX2luaXQodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBjaGVja19zYl9jaGFuZ2VzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIHtcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFx0c3RydWN0IG1kcF9zdXBlcmJsb2NrXzEgKnNiID0gcGFnZV9hZGRyZXNzKHJkZXYtXHUwMDNlc2JfcGFnZSk7XG4gXHRzdHJ1Y3QgbWRfcmRldiAqcmRldjIsICp0bXA7XG4gXHRpbnQgcm9sZSwgcmV0O1xuQEAgLTEwODQ5LDcgKzExMDIyLDI0IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3NiX2NoYW5nZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4gXHRcdFx0XHRcdHJkZXYyLVx1MDAzZXNhdmVkX3JhaWRfZGlzayA9IC0xO1xuIFx0XHRcdFx0ZWxzZVxuIFx0XHRcdFx0XHRyZGV2Mi1cdTAwM2VzYXZlZF9yYWlkX2Rpc2sgPSByb2xlO1xuLVx0XHRcdFx0cmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCByZGV2Mik7XG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogcmVjb25maWdfbXV0ZXggaXMgaGVsZCwgc28gZG9uJ3Qgd2FpdCBmb3JcbitcdFx0XHRcdCAqIHEtXHUwMDNlbGltaXRzX2xvY2s7IE1EX1JFQ09WRVJZX05FRURFRCBiZWxvd1xuK1x0XHRcdFx0ICogbGVhdmVzIGEgc2tpcHBlZCBhZGQgdG8gbWRfc3RhcnRfc3luYygpLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRpZiAobWRkZXZfc3RhY2tfbGltaXRzX3RyeWxvY2sobWRkZXYsIFx1MDAyNmxpbSkpIHtcbitcdFx0XHRcdFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPVxuK1x0XHRcdFx0XHRcdG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4rXG4rXHRcdFx0XHRcdHJldCA9IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldixcbitcdFx0XHRcdFx0XHRcdFx0ICAgIHJkZXYyLCBcdTAwMjZsaW0pO1xuK1x0XHRcdFx0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBcdTAwMjZsaW0pO1xuK1x0XHRcdFx0fSBlbHNlIGlmIChtZGRldl9pc19kbShtZGRldikpIHtcbitcdFx0XHRcdFx0cmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgcmRldjIsIE5VTEwpO1xuK1x0XHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdFx0cmV0ID0gcmVtb3ZlX3NwYXJlcyhtZGRldiwgcmRldjIpO1xuK1x0XHRcdFx0fVxuIFx0XHRcdFx0cHJfaW5mbyhcIkFjdGl2YXRlZCBzcGFyZTogJXBnXFxuXCIsXG4gXHRcdFx0XHRcdHJkZXYyLVx1MDAzZWJkZXYpO1xuIFx0XHRcdFx0Lyogd2FrZXVwIG1kZGV2LVx1MDAzZXRocmVhZCBoZXJlLCBzbyBhcnJheSBjb3VsZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaFxuaW5kZXggYjZkMmU4OTI5YTBmOS4uY2VjYThjZmNkY2I5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQuaFxuKysrIGIvZHJpdmVycy9tZC9tZC5oXG5AQCAtNzY1LDcgKzc2NSw4IEBAIHN0cnVjdCBtZF9wZXJzb25hbGl0eVxuIFx0ICogaWYgYXBwcm9wcmlhdGUsIGFuZCBzaG91bGQgYWJvcnQgcmVjb3ZlcnkgaWYgbmVlZGVkXG4gXHQgKi9cbiBcdHZvaWQgKCplcnJvcl9oYW5kbGVyKShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7XG4tXHRpbnQgKCpob3RfYWRkX2Rpc2spIChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7XG4rXHRpbnQgKCpob3RfYWRkX2Rpc2spKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIFx0aW50ICgqaG90X3JlbW92ZV9kaXNrKSAoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xuIFx0aW50ICgqc3BhcmVfYWN0aXZlKSAoc3RydWN0IG1kZGV2ICptZGRldik7XG4gXHRzZWN0b3JfdCAoKnN5bmNfcmVxdWVzdCkoc3RydWN0IG1kZGV2ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLFxuQEAgLTEwNDEsMTMgKzEwNDIsMTcgQEAgc3RydWN0IG1kdV9kaXNrX2luZm9fcztcbiBleHRlcm4gaW50IG1kcF9tYWpvcjtcbiB2b2lkIG1kX2F1dG9zdGFydF9hcnJheXMoaW50IHBhcnQpO1xuIGludCBtZF9zZXRfYXJyYXlfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2FycmF5X2luZm9fcyAqaW5mbyk7XG4taW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKTtcbitpbnQgbWRfYWRkX25ld19kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgKmluZm8sXG4rXHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIGludCBkb19tZF9ydW4oc3RydWN0IG1kZGV2ICptZGRldik7XG4gI2RlZmluZSBNRERFVl9TVEFDS19JTlRFR1JJVFlcdCgxdSBcdTAwM2NcdTAwM2MgMClcbiBpbnQgbWRkZXZfc3RhY2tfcmRldl9saW1pdHMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBtZGRldl9zdGFja19uZXdfcmRldihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7XG4tdm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzKTtcbitpbnQgbWRkZXZfc3RhY2tfcmRldl9pbnRvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTtcbit2b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMsXG4rXHRcdFx0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtZF9mb3BzO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuY1xuaW5kZXggZjA2NDZmYjI0MzcxZi4uZGQzNDhiNTY5NWQwNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuY1xuKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jXG5AQCAtMTg5OCw3ICsxODk4LDggQEAgc3RhdGljIGJvb2wgcmFpZDFfcmVtb3ZlX2NvbmYoc3RydWN0IHIxY29uZiAqY29uZiwgaW50IGRpc2spXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGludCByYWlkMV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbitzdGF0aWMgaW50IHJhaWQxX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCByMWNvbmYgKmNvbmYgPSBtZGRldi1cdTAwM2Vwcml2YXRlO1xuIFx0aW50IGVyciA9IC1FRVhJU1Q7XG5AQCAtMTkyMyw3ICsxOTI0LDEwIEBAIHN0YXRpYyBpbnQgcmFpZDFfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4gXHRmb3IgKG1pcnJvciA9IGZpcnN0OyBtaXJyb3IgXHUwMDNjPSBsYXN0OyBtaXJyb3IrKykge1xuIFx0XHRwID0gY29uZi1cdTAwM2VtaXJyb3JzICsgbWlycm9yO1xuIFx0XHRpZiAoIXAtXHUwMDNlcmRldikge1xuLVx0XHRcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcbitcdFx0XHRpZiAobGltKVxuK1x0XHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfcmRldl9pbnRvKG1kZGV2LCByZGV2LCBsaW0pO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuY1xuaW5kZXggMTA5M2M3OThkOWRkZS4uNjQxNjE5MzI4YTZjNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmNcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcbkBAIC0yMDk1LDcgKzIwOTUsOCBAQCBzdGF0aWMgaW50IHJhaWQxMF9zcGFyZV9hY3RpdmUoc3RydWN0IG1kZGV2ICptZGRldilcbiBcdHJldHVybiBjb3VudDtcbiB9XG4gXG4tc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4rc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsXG4rXHRcdFx0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCByMTBjb25mICpjb25mID0gbWRkZXYtXHUwMDNlcHJpdmF0ZTtcbiBcdGludCBlcnIgPSAtRUVYSVNUO1xuQEAgLTIxMzAsNyArMjEzMSwxMCBAQCBzdGF0aWMgaW50IHJhaWQxMF9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRlcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7XG4rXHRcdGlmIChsaW0pXG4rXHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfcmRldl9pbnRvKG1kZGV2LCByZGV2LCBsaW0pO1xuK1x0XHRlbHNlXG4rXHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdHAtXHUwMDNlaGVhZF9wb3NpdGlvbiA9IDA7XG5AQCAtMjE0Nyw3ICsyMTUxLDEwIEBAIHN0YXRpYyBpbnQgcmFpZDEwX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIFx0XHRjbGVhcl9iaXQoSW5fc3luYywgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4gXHRcdHNldF9iaXQoUmVwbGFjZW1lbnQsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuIFx0XHRyZGV2LVx1MDAzZXJhaWRfZGlzayA9IHJlcGxfc2xvdDtcbi1cdFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xuK1x0XHRpZiAobGltKVxuK1x0XHRcdGVyciA9IG1kZGV2X3N0YWNrX3JkZXZfaW50byhtZGRldiwgcmRldiwgbGltKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRjb25mLVx1MDAzZWZ1bGxzeW5jID0gMTtcbkBAIC00NDg0LDcgKzQ0OTEsNyBAQCBzdGF0aWMgaW50IHJhaWQxMF9zdGFydF9yZXNoYXBlKHN0cnVjdCBtZGRldiAqbWRkZXYpXG4gXHRcdHJkZXZfZm9yX2VhY2gocmRldiwgbWRkZXYpXG4gXHRcdFx0aWYgKHJkZXYtXHUwMDNlcmFpZF9kaXNrIFx1MDAzYyAwIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAhdGVzdF9iaXQoRmF1bHR5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkge1xuLVx0XHRcdFx0aWYgKHJhaWQxMF9hZGRfZGlzayhtZGRldiwgcmRldikgPT0gMCkge1xuK1x0XHRcdFx0aWYgKHJhaWQxMF9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkge1xuIFx0XHRcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2sgXHUwMDNlPVxuIFx0XHRcdFx0XHQgICAgY29uZi1cdTAwM2VwcmV2LnJhaWRfZGlza3MpXG4gXHRcdFx0XHRcdFx0c2V0X2JpdChJbl9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbkBAIC00OTIxLDcgKzQ5MjgsNyBAQCBzdGF0aWMgdm9pZCBlbmRfcmVzaGFwZShzdHJ1Y3QgcjEwY29uZiAqY29uZilcbiBcdGNvbmYtXHUwMDNlcmVzaGFwZV9zYWZlID0gTWF4U2VjdG9yO1xuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNvbmYtXHUwMDNlZGV2aWNlX2xvY2spO1xuIFxuLVx0bWRkZXZfdXBkYXRlX2lvX29wdChjb25mLVx1MDAzZW1kZGV2LCByYWlkMTBfbnJfc3RyaXBlcyhjb25mKSk7XG4rXHRtZGRldl91cGRhdGVfaW9fb3B0KGNvbmYtXHUwMDNlbWRkZXYsIHJhaWQxMF9ucl9zdHJpcGVzKGNvbmYpLCBOVUxMKTtcbiBcdGNvbmYtXHUwMDNlZnVsbHN5bmMgPSAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmNcbmluZGV4IGI5MTU0NWNlMDkwZGUuLjIyNzU5YzYzMWM0ZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmNcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuY1xuQEAgLTcyODgsNiArNzI4OCw5IEBAIHN0YXRpYyBzc2l6ZV90XG4gcmFpZDVfc3RvcmVfc2tpcF9jb3B5KHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IHI1Y29uZiAqY29uZjtcbitcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gTlVMTDtcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuK1x0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7XG4gXHR1bnNpZ25lZCBsb25nIG5ldztcbiBcdGludCBlcnI7XG4gXG5AQCAtNzI5NywyMyArNzMwMCwzMyBAQCByYWlkNV9zdG9yZV9za2lwX2NvcHkoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRuZXcgPSAhIW5ldztcbiBcbitcdC8qIHEtXHUwMDNlbGltaXRzX2xvY2sgbmVzdHMgb3V0c2lkZSBib3RoLCBzZWUgbWRfc3RhcnRfc3luYygpICovXG4rXHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuK1x0XHRxID0gbWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZTtcbitcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbitcdFx0bGltcCA9IFx1MDAyNmxpbTtcbitcdH1cbitcbiBcdGVyciA9IG1kZGV2X3N1c3BlbmRfYW5kX2xvY2sobWRkZXYpO1xuLVx0aWYgKGVycilcbitcdGlmIChlcnIpIHtcbitcdFx0aWYgKGxpbXApXG4rXHRcdFx0cXVldWVfbGltaXRzX2NhbmNlbF91cGRhdGUocSk7XG4gXHRcdHJldHVybiBlcnI7XG4rXHR9XG4gXHRjb25mID0gbWRkZXYtXHUwMDNlcHJpdmF0ZTtcbiBcdGlmICghY29uZilcbiBcdFx0ZXJyID0gLUVOT0RFVjtcbiBcdGVsc2UgaWYgKG5ldyAhPSBjb25mLVx1MDAzZXNraXBfY29weSkge1xuLVx0XHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4tXHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbi1cbiBcdFx0Y29uZi1cdTAwM2Vza2lwX2NvcHkgPSBuZXc7XG4tXHRcdGlmIChuZXcpXG4tXHRcdFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1NUQUJMRV9XUklURVM7XG4tXHRcdGVsc2Vcbi1cdFx0XHRsaW0uZmVhdHVyZXMgXHUwMDI2PSB+QkxLX0ZFQVRfU1RBQkxFX1dSSVRFUztcbi1cdFx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgXHUwMDI2bGltKTtcbitcdFx0aWYgKGxpbXApIHtcbitcdFx0XHRpZiAobmV3KVxuK1x0XHRcdFx0bGltcC1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9TVEFCTEVfV1JJVEVTO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGxpbXAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+QkxLX0ZFQVRfU1RBQkxFX1dSSVRFUztcbitcdFx0fVxuIFx0fVxuK1x0aWYgKGxpbXApXG4rXHRcdGVyciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApID86IGVycjtcbiBcdG1kZGV2X3VubG9ja19hbmRfcmVzdW1lKG1kZGV2KTtcbiBcdHJldHVybiBlcnIgPzogbGVuO1xuIH1cbkBAIC04NDQxLDcgKzg0NTQsOCBAQCBzdGF0aWMgaW50IHJhaWQ1X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCByYWlkNV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbitzdGF0aWMgaW50IHJhaWQ1X2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCByNWNvbmYgKmNvbmYgPSBtZGRldi1cdTAwM2Vwcml2YXRlO1xuIFx0aW50IHJldCwgZXJyID0gLUVFWElTVDtcbkBAIC04NzI4LDcgKzg3NDIsNyBAQCBzdGF0aWMgaW50IHJhaWQ1X3N0YXJ0X3Jlc2hhcGUoc3RydWN0IG1kZGV2ICptZGRldilcbiBcdFx0cmRldl9mb3JfZWFjaChyZGV2LCBtZGRldilcbiBcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2sgXHUwMDNjIDAgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICF0ZXN0X2JpdChGYXVsdHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdFx0XHRpZiAocmFpZDVfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHtcbitcdFx0XHRcdGlmIChyYWlkNV9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkge1xuIFx0XHRcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2tcbiBcdFx0XHRcdFx0ICAgIFx1MDAzZT0gY29uZi1cdTAwM2VwcmV2aW91c19yYWlkX2Rpc2tzKVxuIFx0XHRcdFx0XHRcdHNldF9iaXQoSW5fc3luYywgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG5AQCAtODc5OSw3ICs4ODEzLDcgQEAgc3RhdGljIHZvaWQgZW5kX3Jlc2hhcGUoc3RydWN0IHI1Y29uZiAqY29uZilcbiBcdFx0d2FrZV91cChcdTAwMjZjb25mLVx1MDAzZXdhaXRfZm9yX3Jlc2hhcGUpO1xuIFxuIFx0XHRtZGRldl91cGRhdGVfaW9fb3B0KGNvbmYtXHUwMDNlbWRkZXYsXG4tXHRcdFx0Y29uZi1cdTAwM2VyYWlkX2Rpc2tzIC0gY29uZi1cdTAwM2VtYXhfZGVncmFkZWQpO1xuK1x0XHRcdGNvbmYtXHUwMDNlcmFpZF9kaXNrcyAtIGNvbmYtXHUwMDNlbWF4X2RlZ3JhZGVkLCBOVUxMKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDRmNzkwNWMzNDEyYjguLmI3NWU4NTI5MWUyOTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTEwMSw2ICsxMTAxLDMyIEBAIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4gXHRtdXRleF9sb2NrKFx1MDAyNnEtXHUwMDNlbGltaXRzX2xvY2spO1xuIFx0cmV0dXJuIHEtXHUwMDNlbGltaXRzO1xuIH1cbitcbisvKipcbisgKiBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlX3RyeWxvY2sgLSB0cnkgdG8gc3RhcnQgYW4gYXRvbWljIHVwZGF0ZSBvZiBxdWV1ZVxuKyAqXHRsaW1pdHNcbisgKiBAcTpcdFx0cXVldWUgdG8gdXBkYXRlXG4rICogQGxpbTpcdHJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBsaW1pdHMgb24gc3VjY2Vzc1xuKyAqXG4rICogTGlrZSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKCksIGJ1dCBmYWlscyBpbnN0ZWFkIG9mIHdhaXRpbmcgd2hlbiBhbm90aGVyXG4rICogdXBkYXRlIGlzIGluIGZsaWdodC4gIEZvciBjYWxsZXJzIHRoYXQgbXVzdCBub3QgYmxvY2sgb24gcS1cdTAwM2VsaW1pdHNfbG9ja1xuKyAqIGJlY2F1c2UgdGhleSBob2xkIHNvbWV0aGluZyBpdHMgY3VycmVudCBvd25lciBpcyB3YWl0aW5nIGZvci5cbisgKlxuKyAqIENvbnRleHQ6IHByb2Nlc3MgY29udGV4dC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbitxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlX3RyeWxvY2soc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4rXHRcdFx0XHQgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbitcdF9fY29uZF9hY3F1aXJlcyh0cnVlLCBcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKVxuK3tcbitcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0KmxpbSA9IHEtXHUwMDNlbGltaXRzO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIGludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4gXHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkgX19yZWxlYXNlcyhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKTtcbiBpbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoxMzoxNi42MTE2MTQ2OTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzQ1Mzg1NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUQgUkFJRCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiBpdCdzIGZ1enotd29ydGh5LCB3aGF0IGtpbmQgb2YgY29uZmlndXJhdGlvbiBpcyBuZWVkZWQsIGFuZCBpZiB3ZSBjYW4gaWRlbnRpZnkgc3BlY2lmaWMgc3ltYm9scyB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gSXQgbG9va3MgbGlrZSBpdCdzIGFsbCBhYm91dCByZXNvbHZpbmcgbG9jayBvcmRlcmluZyBpc3N1ZXMgYW5kIHBvdGVudGlhbCBkZWFkbG9ja3Mgd2l0aGluIHRoZSBNRCAoTXVsdGlwbGUgRGV2aWNlcy9zb2Z0d2FyZSBSQUlEKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBhcm91bmQgdGhvc2UgbG9ja3M6IGBxLVx1MDAzZWxpbWl0c19sb2NrYCwgYHJlY29uZmlnX211dGV4YCwgYW5kIGBtZGRldl9zdXNwZW5kKClgLiAgVGhlIGNvZGUgdG91Y2hlcyBhIGxvdCBvZiBmaWxlcyB3aXRoaW4gYGRyaXZlcnMvbWQvYCwgc28gaXQncyBhIHByZXR0eSBjZW50cmFsIGFyZWEuXG5cbkl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGFkZGluZyB0aGlzIG5ldyBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZV90cnlsb2NrYCBmdW5jdGlvbi4gVGhlIHBhdGNoIHRoZW4gc2VlbXMgdG8gYmUgcHJvcGFnYXRpbmcgY2hhbmdlcyB0aHJvdWdob3V0IHRoZSBNRCBzdWJzeXN0ZW0sIG1vZGlmeWluZyBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCB1cGRhdGluZyBsb2NrIGFjcXVpc2l0aW9uIHN0cmF0ZWdpZXMuIFNwZWNpZmljYWxseTpcblxuKiAgIEl0IHVwZGF0ZXMgY2FsbHMgcmVsYXRlZCB0byBhZGRpbmcgZGlza3MgKGBob3RfYWRkX2Rpc2tgLCBgbWRfYWRkX25ld19kaXNrYCkgYW5kIGFkanVzdGluZyBxdWV1ZSBsaW1pdHMgaW4gdGhlIGBkbS1yYWlkLmNgLCBgbWQtYXV0b2RldGVjdC5jYCwgYW5kIGBtZC1saW5lYXIuY2AgZmlsZXMuXG4qICAgVGhlIGBtZC5jYCBmaWxlIHNlZXMgdGhlIG1vc3QgY2hhbmdlcywgaW5jbHVkaW5nIGEgbmV3IGBxdWV1ZV9saW1pdHNgIHBhcmFtZXRlciBiZWluZyBhZGRlZCB0byB0aGUgcmRldiBzeXNmcyBlbnRyeSBgc3RvcmVgIG1ldGhvZC4gVGhpcyBhbHNvIGludm9sdmVzIGNoYW5nZXMgdG8gaG93IGxvY2tzIGFyZSBhY3F1aXJlZCBpbiBgcmRldl9hdHRyX3N0b3JlKClgLCBhZGRpbmcgbmV3IGZ1bmN0aW9ucyBsaWtlIGBtZGRldl9zdGFja19yZGV2X2ludG8oKWAgYW5kIGBtZGRldl9zdGFja19saW1pdHNfdHJ5bG9jaygpYCwgYW5kIHVwZGF0ZXMgdG8gYG1kZGV2X3VwZGF0ZV9pb19vcHQoKWAgYW5kIG90aGVyIGNvcmUgTUQgZnVuY3Rpb25zIChgbWRfYWRkX25ld19kaXNrKClgLCBgaG90X3JlbW92ZV9kaXNrKClgLCBgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKClgLCBldGMuKS5cbiogICBJdCdzIGFsc28gdXBkYXRpbmcgZnVuY3Rpb25zIGFjcm9zcyBzZXZlcmFsIFJBSUQgaW1wbGVtZW50YXRpb25zIChgcmFpZDEuY2AsIGByYWlkMTAuY2AsIGByYWlkNS5jYCkgdG8gaGFuZGxlIHRoaXMgYHF1ZXVlX2xpbWl0c2Agc3RydWN0LlxuXG5BbHJpZ2h0LCB0aGF0J3MgdGhlIGNvZGUuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgcmVhY2hhYmlsaXR5LiBNRCBSQUlELCBiZWluZyBhIGNvcmUgcGFydCBvZiBzdG9yYWdlIG1hbmFnZW1lbnQsIHNob3VsZCBiZSBwcmV0dHkgZWFzaWx5IHJlYWNoYWJsZSwgZXNwZWNpYWxseSBpbiBhIGZ1enppbmcgY29udGV4dC4gRnJvbSB3aGF0IEkga25vdywgaXQncyBhY2Nlc3NpYmxlIHRocm91Z2ggaW9jdGxzIG9uIGAvZGV2L21kKmAsIGFuZCBzeXNmcyBlbnRyaWVzIHVuZGVyIGAvc3lzL2Jsb2NrL21kWC9tZC8uLi5gLiBTeXprYWxsZXIgc2hvdWxkIGFscmVhZHkgaGF2ZSBnb29kIGNvdmVyYWdlIGZvciB0aGVzZSBpbnRlcmZhY2VzLiBJZiBzbywgdGhhdCBncmVhdGx5IGluY3JlYXNlcyB0aGUgbGlrZWxpaG9vZCBvZiBmaW5kaW5nIGJ1Z3MuXG5cbkxhc3RseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBNRCBSQUlEIGFuZCBpdHMgc3ViLWNvbXBvbmVudHMgYXJlIGVuYWJsZWQgdG8gdHJpZ2dlciB0aGVzZSB1cGRhdGVkIGNvZGUgcGF0aHMuIFRpbWUgdG8gZ3JlcCBmb3IgdGhlIHJlbGV2YW50IGBDT05GSUdfTUQqYCBhbmQgYENPTkZJR19CTEtfREVWX01EKmAgb3B0aW9ucyBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyB3aWxsIHRlbGwgbWUgd2hpY2ggY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHNldCBmb3IgYSBnb29kIGZ1enppbmcgcnVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjEzOjIyLjM1NzAwMjk3NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjczNTQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9NRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21kL0tjb25maWc9MTM9aWYgTURcXG5kcml2ZXJzL21kL0tjb25maWctMTQtXFxuZHJpdmVycy9tZC9LY29uZmlnOjE1OmNvbmZpZyBCTEtfREVWX01EXFxuZHJpdmVycy9tZC9LY29uZmlnLTE2LVxcdHRyaXN0YXRlIFxcXCJSQUlEIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjEzOjIyLjQwOTc0Mzk5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTUwNTk4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE1EIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgTUQgKE11bHRpcGxlIERldmljZSkgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGlzIGtlcm5lbCBidWlsZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGRyaXZlcnMvbWQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLCBuYXR1cmFsbHkuIEkgZmlndXJlIHRoZSBmaXJzdCA1MCBsaW5lcyBvciBzbyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGNvcmUgTUQgc2V0dGluZ3MuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IHZhcmlhYmxlcyBhbmQgYW55IGNyaXRpY2FsIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGFmZmVjdCBob3cgTUQgaXMgY29uZmlndXJlZCwgYW5kIHdoYXQgdGhlIGJhc2UtbGV2ZWwgY2hvaWNlcyBhcmUgZm9yIFJBSUQsIExWTSwgYW5kIGFueSBvdGhlciByZWxldmFudCBibG9jayBkZXZpY2UgbWFuYWdlbWVudCBjb21wb25lbnRzLiBJdCdzIGEgcXVpY2sgd2F5IHRvIGdldCBjb250ZXh0IGFuZCBzZWUgaG93IHRoaW5ncyBhcmUgc3RydWN0dXJlZCBiZWZvcmUgZGlnZ2luZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODEzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MTM6MjQuNDA0ODA2NzA0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBCbG9jayBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBNRFxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiTXVsdGlwbGUgZGV2aWNlcyBkcml2ZXIgc3VwcG9ydCAoUkFJRCBhbmQgTFZNKVxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgU3VwcG9ydCBtdWx0aXBsZSBwaHlzaWNhbCBzcGluZGxlcyB0aHJvdWdoIGEgc2luZ2xlIGxvZ2ljYWwgZGV2aWNlLlxcbiAgMTE6XFx0XFx0ICBSZXF1aXJlZCBmb3IgUkFJRCBhbmQgbG9naWNhbCB2b2x1bWUgbWFuYWdlbWVudC5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0aWYgTURcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIEJMS19ERVZfTURcXG4gIDE2OlxcdFxcdHRyaXN0YXRlIFxcXCJSQUlEIHN1cHBvcnRcXFwiXFxuICAxNzpcXHRcXHRzZWxlY3QgQkxPQ0tfSE9MREVSX0RFUFJFQ0FURUQgaWYgU1lTRlNcXG4gIDE4OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgMTk6XFx0XFx0IyBCTE9DS19MRUdBQ1lfQVVUT0xPQUQgcmVxdWlyZW1lbnQgc2hvdWxkIGJlIHJlbW92ZWRcXG4gIDIwOlxcdFxcdCMgYWZ0ZXIgcmVsZXZhbnQgbWRhZG0gZW5oYW5jZW1lbnRzIC0gdG8gbWFrZSBcXFwibmFtZXM9eWVzXFxcIlxcbiAgMjE6XFx0XFx0IyB0aGUgZGVmYXVsdCAtIGFyZSB3aWRlbHkgYXZhaWxhYmxlLlxcbiAgMjI6XFx0XFx0c2VsZWN0IEJMT0NLX0xFR0FDWV9BVVRPTE9BRFxcbiAgMjM6XFx0XFx0aGVscFxcbiAgMjQ6XFx0XFx0ICBUaGlzIGRyaXZlciBsZXRzIHlvdSBjb21iaW5lIHNldmVyYWwgaGFyZCBkaXNrIHBhcnRpdGlvbnMgaW50byBvbmVcXG4gIDI1OlxcdFxcdCAgbG9naWNhbCBibG9jayBkZXZpY2UuIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2ltcGx5IGFwcGVuZCBvbmVcXG4gIDI2OlxcdFxcdCAgcGFydGl0aW9uIHRvIGFub3RoZXIgb25lIG9yIHRvIGNvbWJpbmUgc2V2ZXJhbCByZWR1bmRhbnQgaGFyZCBkaXNrc1xcbiAgMjc6XFx0XFx0ICBpbnRvIGEgUkFJRDEvNC81IGRldmljZSBzbyBhcyB0byBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBoYXJkXFxuICAyODpcXHRcXHQgIGRpc2sgZmFpbHVyZXMuIFRoaXMgaXMgY2FsbGVkIFxcXCJTb2Z0d2FyZSBSQUlEXFxcIiBzaW5jZSB0aGUgY29tYmluaW5nIG9mXFxuICAyOTpcXHRcXHQgIHRoZSBwYXJ0aXRpb25zIGlzIGRvbmUgYnkgdGhlIGtlcm5lbC4gXFxcIkhhcmR3YXJlIFJBSURcXFwiIG1lYW5zIHRoYXQgdGhlXFxuICAzMDpcXHRcXHQgIGNvbWJpbmluZyBpcyBkb25lIGJ5IGEgZGVkaWNhdGVkIGNvbnRyb2xsZXI7IGlmIHlvdSBoYXZlIHN1Y2ggYVxcbiAgMzE6XFx0XFx0ICBjb250cm9sbGVyLCB5b3UgZG8gbm90IG5lZWQgdG8gc2F5IFkgaGVyZS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBNb3JlIGluZm9ybWF0aW9uIGFib3V0IFNvZnR3YXJlIFJBSUQgb24gTGludXggaXMgY29udGFpbmVkIGluIHRoZVxcbiAgMzQ6XFx0XFx0ICBTb2Z0d2FyZSBSQUlEIG1pbmktSE9XVE8sIGF2YWlsYWJsZSBmcm9tXFxuICAzNTpcXHRcXHQgIFxcdTAwM2NodHRwczovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG9cXHUwMDNlLiBUaGVyZSB5b3Ugd2lsbCBhbHNvIGxlYXJuXFxuICAzNjpcXHRcXHQgIHdoZXJlIHRvIGdldCB0aGUgc3VwcG9ydGluZyB1c2VyIHNwYWNlIHV0aWxpdGllcyByYWlkdG9vbHMuXFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM5OlxcdFxcbiAgNDA6XFx0Y29uZmlnIE1EX0JJVE1BUFxcbiAgNDE6XFx0XFx0Ym9vbCBcXFwiTUQgUkFJRCBiaXRtYXAgc3VwcG9ydFxcXCJcXG4gIDQyOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDM6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfREVWX01EXFxuICA0NDpcXHRcXHRoZWxwXFxuICA0NTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCBzdXBwb3J0IGZvciB0aGUgd3JpdGUgaW50ZW50IGJpdG1hcCB3aWxsIGJlXFxuICA0NjpcXHRcXHQgIGVuYWJsZWQuIFRoZSBiaXRtYXAgY2FuIGJlIHVzZWQgdG8gb3B0aW1pemUgcmVzeW5jIHNwZWVkIGFmdGVyIHBvd2VyXFxuICA0NzpcXHRcXHQgIGZhaWx1cmUgb3IgcmVhZGRpbmcgYSBkaXNrLCBsaW1pdGluZyBpdCB0byByZWNvcmRlZCBkaXJ0eSBzZWN0b3JzIGluXFxuICA0ODpcXHRcXHQgIGJpdG1hcC5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBUaGlzIGZlYXR1cmUgY2FuIGJlIGFkZGVkIHRvIGV4aXN0aW5nIE1EIGFycmF5IG9yIE1EIGFycmF5IGNhbiBiZVxcbiAgNTE6XFx0XFx0ICBjcmVhdGVkIHdpdGggYml0bWFwIHZpYSBtZGFkbSg4KS5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgNTQ6XFx0XFxuICA1NTpcXHRjb25maWcgTURfTExCSVRNQVBcXG4gIDU2OlxcdFxcdGJvb2wgXFxcIk1EIFJBSUQgbG9ja2xlc3MgYml0bWFwIHN1cHBvcnRcXFwiXFxuICA1NzpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfTURcXG4gIDU4OlxcdFxcdGhlbHBcXG4gIDU5OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHN1cHBvcnQgZm9yIHRoZSBsb2NrbGVzcyB3cml0ZSBpbnRlbnQgYml0bWFwIHdpbGxcXG4gIDYwOlxcdFxcdCAgYmUgZW5hYmxlZC5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0ICBOb3RlLCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBNRF9BVVRPREVURUNUXFxuICA2NzpcXHRcXHRib29sIFxcXCJBdXRvZGV0ZWN0IFJBSUQgYXJyYXlzIGR1cmluZyBrZXJuZWwgYm9vdFxcXCJcXG4gIDY4OlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVl9NRD15XFxuICA2OTpcXHRcXHRkZWZhdWx0IHlcXG4gIDcwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MTM6MjQuNDA0OTEyNjE0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA0ODA2MzY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFJBSUQgUGVyc29uYWxpdHkgQ29uZmlndXJhdGlvbnMgaW4gYGRyaXZlcnMvbWQvS2NvbmZpZ2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcyBvciBvdmVybG9va2VkIG1vZGlmaWNhdGlvbnMuIE15IHByaW1hcnkgZm9jdXMgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbWQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gUkFJRCBwZXJzb25hbGl0aWVzIHRoYXQgaGF2ZSBiZWVuIGFsdGVyZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBsaW5lYXIsIHJhaWQxLCByYWlkMTAsIGFuZCByYWlkNDU2L3JhaWQ1LiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBtb2RpZmljYXRpb25zIG1hZGUgYXJlIGNvbnNpc3RlbnQgYWNyb3NzIGFsbCBhZmZlY3RlZCBSQUlEIGxldmVscyBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMgaW4gaG93IHRoZXNlIHBlcnNvbmFsaXRpZXMgYXJlIGRlZmluZWQgb3IgZW5hYmxlZC4gSSdsbCBiZSBtZXRpY3Vsb3VzbHkgY2hlY2tpbmcgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0byBnZXQgYSBob2xpc3RpYyB2aWV3IG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZXMuIFRoaXMgdGhvcm91Z2ggYW5hbHlzaXMgc2hvdWxkIGhlbHAgbWUgaWRlbnRpZnkgYW5kIHJlY3RpZnkgYW55IHBvdGVudGlhbCBpc3N1ZXMgYmVmb3JlIHRoZXkgY2F1c2UgcHJvYmxlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTY2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoxMzoyNy40NTI5Nzg3NTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzAxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21kL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzE6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUga2VybmVsIHdpbGwgdHJ5IHRvIGF1dG9kZXRlY3QgcmFpZFxcbiAgNzI6XFx0XFx0ICBhcnJheXMgYXMgcGFydCBvZiBpdHMgYm9vdCBwcm9jZXNzLlxcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHQgIElmIHlvdSBkb24ndCB1c2UgcmFpZCBhbmQgc2F5IFksIHRoaXMgYXV0b2RldGVjdGlvbiBjYW4gY2F1c2VcXG4gIDc1OlxcdFxcdCAgYSBzZXZlcmFsLXNlY29uZCBkZWxheSBpbiB0aGUgYm9vdCB0aW1lIGR1ZSB0byB2YXJpb3VzXFxuICA3NjpcXHRcXHQgIHN5bmNocm9uaXNhdGlvbiBzdGVwcyB0aGF0IGFyZSBwYXJ0IG9mIHRoaXMgc3RlcC5cXG4gIDc3OlxcdFxcbiAgNzg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgNzk6XFx0XFxuICA4MDpcXHRjb25maWcgTURfQklUTUFQX0ZJTEVcXG4gIDgxOlxcdFxcdGJvb2wgXFxcIk1EIGJpdG1hcCBmaWxlIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbiAgODI6XFx0XFx0ZGVmYXVsdCB5XFxuICA4MzpcXHRcXHRkZXBlbmRzIG9uIE1EX0JJVE1BUFxcbiAgODQ6XFx0XFx0aGVscFxcbiAgODU6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgc3VwcG9ydCBmb3Igd3JpdGUgaW50ZW50IGJpdG1hcHMgaW4gZmlsZXMgb24gYW5cXG4gIDg2OlxcdFxcdCAgZXh0ZXJuYWwgZmlsZSBzeXN0ZW0gaXMgZW5hYmxlZC4gIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIGludGVybmFsXFxuICA4NzpcXHRcXHQgIGJpdG1hcHMgbmVhciB0aGUgTUQgc3VwZXJibG9jaywgYW5kIHZlcnkgcHJvYmxlbWF0aWMgY29kZSB0aGF0IGFidXNlc1xcbiAgODg6XFx0XFx0ICB2YXJpb3VzIGtlcm5lbCBBUElzIGFuZCBjYW4gb25seSB3b3JrIHdpdGggZmlsZXMgb24gYSBmaWxlIHN5c3RlbSBub3RcXG4gIDg5OlxcdFxcdCAgYWN0dWFsbHkgc2l0dGluZyBvbiB0aGUgTUQgZGV2aWNlLlxcbiAgOTA6XFx0XFxuICA5MTpcXHRjb25maWcgTURfTElORUFSXFxuICA5MjpcXHRcXHR0cmlzdGF0ZSBcXFwiTGluZWFyIChhcHBlbmQpIG1vZGVcXFwiXFxuICA5MzpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfTURcXG4gIDk0OlxcdFxcdGhlbHBcXG4gIDk1OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBtdWx0aXBsZSBkZXZpY2VzIGRyaXZlciB3aWxsIGJlIGFibGUgdG9cXG4gIDk2OlxcdFxcdCAgdXNlIHRoZSBzby1jYWxsZWQgbGluZWFyIG1vZGUsIGkuZS4gaXQgd2lsbCBjb21iaW5lIHRoZSBoYXJkIGRpc2tcXG4gIDk3OlxcdFxcdCAgcGFydGl0aW9ucyBieSBzaW1wbHkgYXBwZW5kaW5nIG9uZSB0byB0aGUgb3RoZXIuXFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDEwMDpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGxpbmVhci5cXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRjb25maWcgTURfUkFJRDBcXG4gMTA1OlxcdFxcdHRyaXN0YXRlIFxcXCJSQUlELTAgKHN0cmlwaW5nKSBtb2RlXFxcIlxcbiAxMDY6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfREVWX01EXFxuIDEwNzpcXHRcXHRoZWxwXFxuIDEwODpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgbXVsdGlwbGUgZGV2aWNlcyBkcml2ZXIgd2lsbCBiZSBhYmxlIHRvXFxuIDEwOTpcXHRcXHQgIHVzZSB0aGUgc28tY2FsbGVkIHJhaWQwIG1vZGUsIGkuZS4gaXQgd2lsbCBjb21iaW5lIHRoZSBoYXJkIGRpc2tcXG4gMTEwOlxcdFxcdCAgcGFydGl0aW9ucyBpbnRvIG9uZSBsb2dpY2FsIGRldmljZSBpbiBzdWNoIGEgZmFzaGlvbiBhcyB0byBmaWxsIHRoZW1cXG4gMTExOlxcdFxcdCAgdXAgZXZlbmx5LCBvbmUgY2h1bmsgaGVyZSBhbmQgb25lIGNodW5rIHRoZXJlLiBUaGlzIHdpbGwgaW5jcmVhc2VcXG4gMTEyOlxcdFxcdCAgdGhlIHRocm91Z2hwdXQgcmF0ZSBpZiB0aGUgcGFydGl0aW9ucyByZXNpZGUgb24gZGlzdGluY3QgZGlza3MuXFxuIDExMzpcXHRcXG4gMTE0OlxcdFxcdCAgSW5mb3JtYXRpb24gYWJvdXQgU29mdHdhcmUgUkFJRCBvbiBMaW51eCBpcyBjb250YWluZWQgaW4gdGhlXFxuIDExNTpcXHRcXHQgIFNvZnR3YXJlLVJBSUQgbWluaS1IT1dUTywgYXZhaWxhYmxlIGZyb21cXG4gMTE2OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1xcdTAwM2UuIFRoZXJlIHlvdSB3aWxsIGFsc29cXG4gMTE3OlxcdFxcdCAgbGVhcm4gd2hlcmUgdG8gZ2V0IHRoZSBzdXBwb3J0aW5nIHVzZXIgc3BhY2UgdXRpbGl0aWVzIHJhaWR0b29scy5cXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTIwOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgcmFpZDAuXFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMTIzOlxcdFxcbiAxMjQ6XFx0Y29uZmlnIE1EX1JBSUQxXFxuIDEyNTpcXHRcXHR0cmlzdGF0ZSBcXFwiUkFJRC0xIChtaXJyb3JpbmcpIG1vZGVcXFwiXFxuIDEyNjpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfTURcXG4gMTI3OlxcdFxcdGhlbHBcXG4gMTI4OlxcdFxcdCAgQSBSQUlELTEgc2V0IGNvbnNpc3RzIG9mIHNldmVyYWwgZGlzayBkcml2ZXMgd2hpY2ggYXJlIGV4YWN0IGNvcGllc1xcbiAxMjk6XFx0XFx0ICBvZiBlYWNoIG90aGVyLiAgSW4gdGhlIGV2ZW50IG9mIGEgbWlycm9yIGZhaWx1cmUsIHRoZSBSQUlEIGRyaXZlclxcbiAxMzA6XFx0XFx0ICB3aWxsIGNvbnRpbnVlIHRvIHVzZSB0aGUgb3BlcmF0aW9uYWwgbWlycm9ycyBpbiB0aGUgc2V0LCBwcm92aWRpbmdcXG4gMTMxOlxcdFxcdCAgYW4gZXJyb3IgZnJlZSBNRCAobXVsdGlwbGUgZGV2aWNlKSB0byB0aGUgaGlnaGVyIGxldmVscyBvZiB0aGVcXG4gMTMyOlxcdFxcdCAga2VybmVsLiAgSW4gYSBzZXQgd2l0aCBOIGRyaXZlcywgdGhlIGF2YWlsYWJsZSBzcGFjZSBpcyB0aGUgY2FwYWNpdHlcXG4gMTMzOlxcdFxcdCAgb2YgYSBzaW5nbGUgZHJpdmUsIGFuZCB0aGUgc2V0IHByb3RlY3RzIGFnYWluc3QgYSBmYWlsdXJlIG9mIChOIC0gMSlcXG4gMTM0OlxcdFxcdCAgZHJpdmVzLlxcbiAxMzU6XFx0XFxuIDEzNjpcXHRcXHQgIEluZm9ybWF0aW9uIGFib3V0IFNvZnR3YXJlIFJBSUQgb24gTGludXggaXMgY29udGFpbmVkIGluIHRoZVxcbiAxMzc6XFx0XFx0ICBTb2Z0d2FyZS1SQUlEIG1pbmktSE9XVE8sIGF2YWlsYWJsZSBmcm9tXFxuIDEzODpcXHRcXHQgIFxcdTAwM2NodHRwczovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG9cXHUwMDNlLiAgVGhlcmUgeW91IHdpbGwgYWxzb1xcbiAxMzk6XFx0XFx0ICBsZWFybiB3aGVyZSB0byBnZXQgdGhlIHN1cHBvcnRpbmcgdXNlciBzcGFjZSB1dGlsaXRpZXMgcmFpZHRvb2xzLlxcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHQgIElmIHlvdSB3YW50IHRvIHVzZSBzdWNoIGEgUkFJRC0xIHNldCwgc2F5IFkuICBUbyBjb21waWxlIHRoaXMgY29kZVxcbiAxNDI6XFx0XFx0ICBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByYWlkMS5cXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxNDU6XFx0XFxuIDE0NjpcXHRjb25maWcgTURfUkFJRDEwXFxuIDE0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiUkFJRC0xMCAobWlycm9yZWQgc3RyaXBpbmcpIG1vZGVcXFwiXFxuIDE0ODpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfTURcXG4gMTQ5OlxcdFxcdGhlbHBcXG4gMTUwOlxcdFxcdCAgUkFJRC0xMCBwcm92aWRlcyBhIGNvbWJpbmF0aW9uIG9mIHN0cmlwaW5nIChSQUlELTApIGFuZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoxMzoyNy40NTMwNzczMDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODkzODQzMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGlmIEknbSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkNvbnNpZGVyaW5nIFJBSUQgT3B0aW9ucyoqXG5cbkFscmlnaHQsIEkndmUgYmVlbiBmb2N1c2luZyBwcmltYXJpbHkgb24gdGhlIG1vcmUgY29tbW9uIFJBSUQgY29uZmlndXJhdGlvbnMsIGJ1dCBpdCdzIGNydWNpYWwgdG8gYmUgdGhvcm91Z2guIExldCdzIG5vdCBvdmVybG9vayBzb21lIG9mIHRoZSBsZXNzLXVzZWQgYnV0IHBvdGVudGlhbGx5IHJlbGV2YW50IG9wdGlvbnMuIFRpbWUgdG8gZXhwYW5kIG15IG1lbnRhbCBjaGVja2xpc3QuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZywgZXNwZWNpYWxseSBpbiBzcGVjaWZpYyB1c2UgY2FzZXMgd2hlcmUgdGhlc2UgYWx0ZXJuYXRpdmVzIG1pZ2h0IGJlIGlkZWFsLiBNeSBpbml0aWFsIGNvbnNpZGVyYXRpb25zIGNvdmVyZWQgdGhlIHdvcmtob3JzZXMsIGJ1dCBhIGRlZXBlciBkaXZlIGlzIG5lY2Vzc2FyeS4gU3BlY2lmaWNhbGx5LCBsZXQncyBhbHNvIGdpdmUgYSB0aG9yb3VnaCBvbmNlLW92ZXIgdG8gUkFJRCA0LCA1LCBhbmQgNiDigJMgcmV2aXNpdGluZyB0aGVpciBzdHJlbmd0aHMsIHdlYWtuZXNzZXMsIGFuZCBwb3RlbnRpYWwgYXBwbGljYWJpbGl0eS4gSSBzaG91bGQgYWxzbyByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgRE0tUkFJRCdzIGNhcGFiaWxpdGllcyBhbmQgaXRzIHBsYWNlIGluIHRoaXMgbGFuZHNjYXBlLiBBIGNvbXByZWhlbnNpdmUgdmlldyByZXF1aXJlcyB0aGlzIG1vcmUgZ3JhbnVsYXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTA2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoxMzoyOS4zNDY5MjM0MThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MSxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1MTpcXHRcXHQgIG1pcnJvcmluZyAoUkFJRC0xKSB3aXRoIGVhc2llciBjb25maWd1cmF0aW9uIGFuZCBtb3JlIGZsZXhpYmxlXFxuIDE1MjpcXHRcXHQgIGxheW91dC5cXG4gMTUzOlxcdFxcdCAgVW5saWtlIFJBSUQtMCwgYnV0IGxpa2UgUkFJRC0xLCBSQUlELTEwIHJlcXVpcmVzIGFsbCBkZXZpY2VzIHRvXFxuIDE1NDpcXHRcXHQgIGJlIHRoZSBzYW1lIHNpemUgKG9yIGF0IGxlYXN0LCBvbmx5IGFzIG11Y2ggYXMgdGhlIHNtYWxsZXN0IGRldmljZVxcbiAxNTU6XFx0XFx0ICB3aWxsIGJlIHVzZWQpLlxcbiAxNTY6XFx0XFx0ICBSQUlELTEwIHByb3ZpZGVzIGEgdmFyaWV0eSBvZiBsYXlvdXRzIHRoYXQgcHJvdmlkZSBkaWZmZXJlbnQgbGV2ZWxzXFxuIDE1NzpcXHRcXHQgIG9mIHJlZHVuZGFuY3kgYW5kIHBlcmZvcm1hbmNlLlxcbiAxNTg6XFx0XFxuIDE1OTpcXHRcXHQgIFJBSUQtMTAgcmVxdWlyZXMgbWRhZG0tMS43LjAgb3IgbGF0ZXIsIGF2YWlsYWJsZSBhdDpcXG4gMTYwOlxcdFxcbiAxNjE6XFx0XFx0ICBodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9yYWlkL21kYWRtL1xcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDE2NDpcXHRcXG4gMTY1OlxcdGNvbmZpZyBNRF9SQUlENDU2XFxuIDE2NjpcXHRcXHR0cmlzdGF0ZSBcXFwiUkFJRC00L1JBSUQtNS9SQUlELTYgbW9kZVxcXCJcXG4gMTY3OlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVl9NRFxcbiAxNjg6XFx0XFx0c2VsZWN0IFJBSUQ2X1BRXFxuIDE2OTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gMTcwOlxcdFxcdHNlbGVjdCBBU1lOQ19NRU1DUFlcXG4gMTcxOlxcdFxcdHNlbGVjdCBBU1lOQ19YT1JcXG4gMTcyOlxcdFxcdHNlbGVjdCBBU1lOQ19QUVxcbiAxNzM6XFx0XFx0c2VsZWN0IEFTWU5DX1JBSUQ2X1JFQ09WXFxuIDE3NDpcXHRcXHRoZWxwXFxuIDE3NTpcXHRcXHQgIEEgUkFJRC01IHNldCBvZiBOIGRyaXZlcyB3aXRoIGEgY2FwYWNpdHkgb2YgQyBNQiBwZXIgZHJpdmUgcHJvdmlkZXNcXG4gMTc2OlxcdFxcdCAgdGhlIGNhcGFjaXR5IG9mIEMgKiAoTiAtIDEpIE1CLCBhbmQgcHJvdGVjdHMgYWdhaW5zdCBhIGZhaWx1cmVcXG4gMTc3OlxcdFxcdCAgb2YgYSBzaW5nbGUgZHJpdmUuIEZvciBhIGdpdmVuIHNlY3RvciAocm93KSBudW1iZXIsIChOIC0gMSkgZHJpdmVzXFxuIDE3ODpcXHRcXHQgIGNvbnRhaW4gZGF0YSBzZWN0b3JzLCBhbmQgb25lIGRyaXZlIGNvbnRhaW5zIHRoZSBwYXJpdHkgcHJvdGVjdGlvbi5cXG4gMTc5OlxcdFxcdCAgRm9yIGEgUkFJRC00IHNldCwgdGhlIHBhcml0eSBibG9ja3MgYXJlIHByZXNlbnQgb24gYSBzaW5nbGUgZHJpdmUsXFxuIDE4MDpcXHRcXHQgIHdoaWxlIGEgUkFJRC01IHNldCBkaXN0cmlidXRlcyB0aGUgcGFyaXR5IGFjcm9zcyB0aGUgZHJpdmVzIGluIG9uZVxcbiAxODE6XFx0XFx0ICBvZiB0aGUgYXZhaWxhYmxlIHBhcml0eSBkaXN0cmlidXRpb24gbWV0aG9kcy5cXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0ICBBIFJBSUQtNiBzZXQgb2YgTiBkcml2ZXMgd2l0aCBhIGNhcGFjaXR5IG9mIEMgTUIgcGVyIGRyaXZlXFxuIDE4NDpcXHRcXHQgIHByb3ZpZGVzIHRoZSBjYXBhY2l0eSBvZiBDICogKE4gLSAyKSBNQiwgYW5kIHByb3RlY3RzXFxuIDE4NTpcXHRcXHQgIGFnYWluc3QgYSBmYWlsdXJlIG9mIGFueSB0d28gZHJpdmVzLiBGb3IgYSBnaXZlbiBzZWN0b3JcXG4gMTg2OlxcdFxcdCAgKHJvdykgbnVtYmVyLCAoTiAtIDIpIGRyaXZlcyBjb250YWluIGRhdGEgc2VjdG9ycywgYW5kIHR3b1xcbiAxODc6XFx0XFx0ICBkcml2ZXMgY29udGFpbnMgdHdvIGluZGVwZW5kZW50IHJlZHVuZGFuY3kgc3luZHJvbWVzLiAgTGlrZVxcbiAxODg6XFx0XFx0ICBSQUlELTUsIFJBSUQtNiBkaXN0cmlidXRlcyB0aGUgc3luZHJvbWVzIGFjcm9zcyB0aGUgZHJpdmVzXFxuIDE4OTpcXHRcXHQgIGluIG9uZSBvZiB0aGUgYXZhaWxhYmxlIHBhcml0eSBkaXN0cmlidXRpb24gbWV0aG9kcy5cXG4gMTkwOlxcdFxcbiAxOTE6XFx0XFx0ICBJbmZvcm1hdGlvbiBhYm91dCBTb2Z0d2FyZSBSQUlEIG9uIExpbnV4IGlzIGNvbnRhaW5lZCBpbiB0aGVcXG4gMTkyOlxcdFxcdCAgU29mdHdhcmUtUkFJRCBtaW5pLUhPV1RPLCBhdmFpbGFibGUgZnJvbVxcbiAxOTM6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXFx1MDAzZS4gVGhlcmUgeW91IHdpbGwgYWxzb1xcbiAxOTQ6XFx0XFx0ICBsZWFybiB3aGVyZSB0byBnZXQgdGhlIHN1cHBvcnRpbmcgdXNlciBzcGFjZSB1dGlsaXRpZXMgcmFpZHRvb2xzLlxcbiAxOTU6XFx0XFxuIDE5NjpcXHRcXHQgIElmIHlvdSB3YW50IHRvIHVzZSBzdWNoIGEgUkFJRC00L1JBSUQtNS9SQUlELTYgc2V0LCBzYXkgWS4gIFRvXFxuIDE5NzpcXHRcXHQgIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDE5ODpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHJhaWQ0NTYuXFxuIDE5OTpcXHRcXG4gMjAwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMjAxOlxcdFxcbiAyMDI6XFx0Y29uZmlnIE1EX0NMVVNURVJcXG4gMjAzOlxcdFxcdHRyaXN0YXRlIFxcXCJDbHVzdGVyIFN1cHBvcnQgZm9yIE1EXFxcIlxcbiAyMDQ6XFx0XFx0c2VsZWN0IE1EX0JJVE1BUFxcbiAyMDU6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfREVWX01EXFxuIDIwNjpcXHRcXHRkZXBlbmRzIG9uIERMTVxcbiAyMDc6XFx0XFx0ZGVmYXVsdCBuXFxuIDIwODpcXHRcXHRoZWxwXFxuIDIwOTpcXHRcXHRDbHVzdGVyaW5nIHN1cHBvcnQgZm9yIE1EIGRldmljZXMuIFRoaXMgZW5hYmxlcyBsb2NraW5nIGFuZFxcbiAyMTA6XFx0XFx0c3luY2hyb25pemF0aW9uIGFjcm9zcyBtdWx0aXBsZSBzeXN0ZW1zIG9uIHRoZSBjbHVzdGVyLCBzbyBhbGxcXG4gMjExOlxcdFxcdG5vZGVzIGluIHRoZSBjbHVzdGVyIGNhbiBhY2Nlc3MgdGhlIE1EIGRldmljZXMgc2ltdWx0YW5lb3VzbHkuXFxuIDIxMjpcXHRcXG4gMjEzOlxcdFxcdFRoaXMgYnJpbmdzIHRoZSByZWR1bmRhbmN5IChhbmQgdXB0aW1lKSBvZiBSQUlEIGxldmVscyBhY3Jvc3MgdGhlXFxuIDIxNDpcXHRcXHRub2RlcyBvZiB0aGUgY2x1c3Rlci4gQ3VycmVudGx5LCBpdCBjYW4gd29yayB3aXRoIHJhaWQxIGFuZCByYWlkMTBcXG4gMjE1OlxcdFxcdChsaW1pdGVkIHN1cHBvcnQpLlxcbiAyMTY6XFx0XFxuIDIxNzpcXHRcXHRJZiB1bnN1cmUsIHNheSBOLlxcbiAyMTg6XFx0XFxuIDIxOTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbWQvYmNhY2hlL0tjb25maWdcXFwiXFxuIDIyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MTM6MjkuMzQ3MDE2MjE4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyNDQ5MTQ0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydCBhbmQgdXNpbmcgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlOlxuXG4qKkNoZWNraW5nIERNLVJBSUQgaW4gYSBCcm9hZGVyIENvbnRleHQqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgaXNzdWUsIGFuZCBJJ3ZlIGFscmVhZHkgY29uc2lkZXJlZCBbbWVudGlvbiBwcmV2aW91cyBwb2ludHMgaWYgdGhlIG9yaWdpbmFsIGNvbnRleHQgaXMgYXZhaWxhYmxlXS4gTm93LCBJIG5lZWQgdG8gZXhwYW5kIG15IGZvY3VzIGEgYml0LiBMZXQncyBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBvdmVybG9va2VkIHNvbWV0aGluZyByZWxhdGVkIHRvIERNLVJBSUQuIEl0J3Mgb2Z0ZW4gdGhlIGVsZXBoYW50IGluIHRoZSByb29tIHRoYXQgZ2V0cyBmb3Jnb3R0ZW4gd2hlbiBkaWFnbm9zaW5nIGNvbXBsZXggc3RvcmFnZSBpc3N1ZXMuIFRoaW5ncyBnZXQgaGFpcnkgZmFzdCB3aGVuIHlvdSBoYXZlIExWTSwgTUQgYW5kIERNLVJBSUQgYWxsIHBsYXlpbmcgdG9nZXRoZXIuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgdHlwaWNhbCBmYWlsdXJlIG1vZGVzLCBnb3RjaGFzLCBhbmQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGNvbXBvbmVudHMgaW4gdGhhdCBzdGFjay4gU3BlY2lmaWNhbGx5LCBhcmUgdGhlIGtlcm5lbCBtb2R1bGVzIGxvYWRlZD8gSXMgdGhlIGRldmljZSBtYXBwZXIgbGF5ZXIgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIGFuZCBob3cgYWJvdXQgdGhlIFJBSUQgY29uZmlndXJhdGlvbiBpdHNlbGY/IEknbGwgcHJvYmFibHkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHNvbWUgb2YgdGhlIG1vcmUgYWR2YW5jZWQgZmVhdHVyZXMgbGlrZSBtdWx0aXBhdGhpbmcgYW5kIHNuYXBzaG90dGluZyBhcyBwb3RlbnRpYWwgY29tcGxpY2F0aW5nIGZhY3RvcnMuIEkgc3VzcGVjdCBETS1SQUlEIGhlcmUsIGJ1dCBpdHMgd29ydGggYSBxdWljayBjaGVjayB0byBydWxlIGl0IG91dCBiZWZvcmUgSSBnbyBkZWVwZXIgZG93biBhIHJhYmJpdCBob2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg5MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MTM6MzQuNTkxOTMzMDkxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTcwOTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRE1fUkFJRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21kL0tjb25maWc9NDIwPWNvbmZpZyBETV9MT0dfVVNFUlNQQUNFXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctNDMwLVxcbmRyaXZlcnMvbWQvS2NvbmZpZzo0MzE6Y29uZmlnIERNX1JBSURcXG5kcml2ZXJzL21kL0tjb25maWctNDMyLSAgICAgICB0cmlzdGF0ZSBcXFwiUkFJRCAxLzQvNS82LzEwIHRhcmdldFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MTM6MzQuNjQzNjQ4NDkxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2NDI1ODI3NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgTUQgTGF5ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcXVlc3Rpb24gb2Ygd2hldGhlciB0aGlzIHBhdGNoIGlzIFwiV29ydGhGdXp6aW5nXCIgaXMgYSByZXNvdW5kaW5nIFwieWVzLlwiIFRoZSBtb2RpZmljYXRpb25zIHRvdWNoIGNyaXRpY2FsIGFyZWFzIG9mIHRoZSBNRCAoTXVsdGlwbGUgRGV2aWNlKSBsYXllcjogbG9ja2luZyBoaWVyYXJjaGllcyBpbnZvbHZpbmcgbXV0ZXhlcyBhbmQgbG9ja3MgbGlrZSBgcS1cdTAwM2VsaW1pdHNfbG9ja2AgYW5kIGByZWNvbmZpZ19tdXRleGAsIHF1ZXVlIGxpbWl0cyBoYW5kbGluZywgYW5kIGRpc2sgYWRkaXRpb24vcmVtb3ZhbCwgYWxsIGFjcm9zcyBzZXZlcmFsIFJBSUQgcGVyc29uYWxpdGllcy4gU3BlY2lmaWNhbGx5LCBjaGFuZ2VzIGluIGlvY3RsIGhhbmRsaW5nLCBzeXNmcyBpbnRlcmFjdGlvbnMsIHN5bmMgdGhyZWFkIGV4ZWN1dGlvbiwgYW5kIGBob3RfYWRkX2Rpc2tgIGNhbGxiYWNrcyBpbmRpY2F0ZSBhIGhpZ2ggbGlrZWxpaG9vZCBvZiBpbnRyb2R1Y2luZyByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2Nrcywgb3Igb3RoZXIgY29uY3VycmVuY3ktcmVsYXRlZCBidWdzLiBHaXZlbiB0aGF0IHRoZXNlIGNvZGUgcGF0aHMgYXJlIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bHMgYW5kIHN5c2ZzLCBmdXp6aW5nIGlzIGFic29sdXRlbHkgY3J1Y2lhbCB0byB0ZXN0IHRoZSByb2J1c3RuZXNzIG9mIHRoZSBuZXcgbG9ja2luZyBvcmRlciBhbmQgcXVldWUgbGltaXQgaW1wbGVtZW50YXRpb25zLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBcIkZvY3VzU3ltYm9sc1wiIHRvIHRhcmdldCB3aXRoIHRoZSBmdXp6ZXIuIFdlIG5lZWQgdG8gc2VsZWN0IHRoZSBrZXkgZnVuY3Rpb25zIGFuZCBlbnRyeSBwb2ludHMgdGhhdCBlbmNhcHN1bGF0ZSB0aGUgY2hhbmdlZCBsb2dpYy5cblxuSGVyZSdzIG15IGxpc3QsIGJhc2VkIG9uIHRoZSBtb2RpZmllZCBhbmQgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnM6XG5cbiogICBJbiBgZHJpdmVycy9tZC9tZC5jYDogYG1kZGV2X3N0YWNrX3JkZXZfaW50b2AsIGBtZGRldl91cGRhdGVfaW9fb3B0YCwgYG1kX2FkZF9uZXdfZGlza2AsIGByZW1vdmVfYW5kX2FkZF9zcGFyZXNgLCBgaG90X3JlbW92ZV9kaXNrYCwgYHJkZXZfYXR0cl9zdG9yZWAsIGBtZF9pb2N0bGAsIGBtZF9zdGFydF9zeW5jYCwgYGNoZWNrX3NiX2NoYW5nZXNgLCBgYWRkX2JvdW5kX3JkZXZgLlxuKiAgIEluIGBkcml2ZXJzL21kL3JhaWQxLmNgOiBgcmFpZDFfYWRkX2Rpc2tgXG4qICAgSW4gYGRyaXZlcnMvbWQvcmFpZDEwLmNgOiBgcmFpZDEwX2FkZF9kaXNrYFxuKiAgIEluIGBkcml2ZXJzL21kL3JhaWQ1LmNgOiBgcmFpZDVfYWRkX2Rpc2tgLCBgcmFpZDVfc3RvcmVfc2tpcF9jb3B5YFxuKiAgIEluIGBkcml2ZXJzL21kL21kLWxpbmVhci5jYDogYGxpbmVhcl9hZGRgXG5cbkkgYWxzbyBjb25maXJtZWQgdGhhdCBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZV90cnlsb2NrYCBpcyBhIHN0YXRpYyBpbmxpbmUgaW4gYGluY2x1ZGUvbGludXgvYmxrZGV2LmhgLCBhcyBleHBlY3RlZC5cblxuRmluYWxseSwgd2UgbmVlZCB0byBlbnN1cmUgdGhlIGNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIHRvIHRyaWdnZXIgdGhlIGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIG11bHRpcGxlIFJBSUQgcGVyc29uYWxpdGllcyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LCBzbyB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSBhbGwgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgdGVzdGVkOlxuXG4qICAgYEJMS19ERVZfTURgXG4qICAgYE1EX1JBSUQxYFxuKiAgIGBNRF9SQUlEMTBgXG4qICAgYE1EX1JBSUQ0NTZgXG4qICAgYE1EX0xJTkVBUmBcbiogICBgRE1fUkFJRGBcblxuSSBhbSBhbHNvIGRvdWJsZS1jaGVja2luZyB0aGUgY29uZmlndXJhdGlvbiBjb3ZlcmFnZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGZpbGVzIHJlbGF0ZWQgdG8gbXVsdGlwbGUgUkFJRCBpbXBsZW1lbnRhdGlvbnMsIHNvIGVuYWJsaW5nIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaG91bGQgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIEluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSwgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYERNX1JBSURgICh3aGljaCBkZXBlbmRzIG9uIGBCTEtfREVWX0RNYCBhbmQgaW5kaXJlY3RseSBvbiBgTURfUkFJRDQ1NmApIGlzIHJlbGV2YW50IGJlY2F1c2Ugb2YgdGhlIGBkcml2ZXJzL21kL2RtLXJhaWQuY2AgY2hhbmdlLCBhbmQgdG8gYSBsZXNzZXIgZXh0ZW50LCBgTURfQVVUT0RFVEVDVGAgYXMgd2VsbC4gV2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIGZvY3VzaW5nIG9uIHRoZSBsaXN0ZWQgc3ltYm9scywgd2UgY2FuIHBlcmZvcm0gYSBjb21wcmVoZW5zaXZlIGZ1enppbmcgY2FtcGFpZ24gb24gdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyNjUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjEzOjQyLjI4NjIzNDI0NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwMjM3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERNX1JBSURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZC9LY29uZmlnPTQyMD1jb25maWcgRE1fTE9HX1VTRVJTUEFDRVxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTQzMC1cXG5kcml2ZXJzL21kL0tjb25maWc6NDMxOmNvbmZpZyBETV9SQUlEXFxuZHJpdmVycy9tZC9LY29uZmlnLTQzMi0gICAgICAgdHJpc3RhdGUgXFxcIlJBSUQgMS80LzUvNi8xMCB0YXJnZXRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjEzOjQyLjMzODI2NTI0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjk3MjA1NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIFJBSUQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgUkFJRCBjb25maWd1cmF0aW9uLiBUaGUgY29udGV4dCBzdWdnZXN0cyB0aGF0IHRoZSByZWxldmFudCBjb2RlIHdpbGwgYmUgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gTGV0J3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9tZC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIG1vZHVsZSBjb25maWd1cmF0aW9uIGZvciB0aGUgUkFJRCBkcml2ZXJzIHdpbGwgYmUuIEl0J3MgYSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50LiBTcGVjaWZpY2FsbHksIGxldCdzIHplcm8gaW4gb24gbGluZSA0MzEuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2x1ZSB0aGVyZSB0byB3aGF0IGlzIGJlaW5nIGNvbmZpZ3VyZWQgYW5kIHdoZXJlIHRoaW5ncyBhcmUgZGVmaW5lZC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB3aGF0ZXZlciBJJ20gbG9va2luZyBmb3Igd2lsbCBiZSByZWxhdGVkIHRvIHdoYXRldmVyIGlzIG9uIHRoYXQgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoxMzo0NC4wMzU0NzM2NTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjU6XFx0XFx0ICBUaGUgdXNlcnNwYWNlIGxvZ2dpbmcgbW9kdWxlIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvclxcbiA0MjY6XFx0XFx0ICByZWxheWluZyB0aGUgZG0tZGlydHktbG9nIEFQSSB0byB1c2Vyc3BhY2UuICBMb2cgZGVzaWduc1xcbiA0Mjc6XFx0XFx0ICB3aGljaCBhcmUgbW9yZSBzdWl0ZWQgdG8gdXNlcnNwYWNlIGltcGxlbWVudGF0aW9uIChlLmcuXFxuIDQyODpcXHRcXHQgIHNoYXJlZCBzdG9yYWdlIGxvZ3MpIG9yIGV4cGVyaW1lbnRhbCBsb2dzIGNhbiBiZSBpbXBsZW1lbnRlZFxcbiA0Mjk6XFx0XFx0ICBieSBsZXZlcmFnaW5nIHRoaXMgZnJhbWV3b3JrLlxcbiA0MzA6XFx0XFxuIDQzMTpcXHRjb25maWcgRE1fUkFJRFxcbiA0MzI6XFx0ICAgICAgIHRyaXN0YXRlIFxcXCJSQUlEIDEvNC81LzYvMTAgdGFyZ2V0XFxcIlxcbiA0MzM6XFx0ICAgICAgIGRlcGVuZHMgb24gQkxLX0RFVl9ETVxcbiA0MzQ6XFx0ICAgICAgIHNlbGVjdCBNRF9SQUlEMFxcbiA0MzU6XFx0ICAgICAgIHNlbGVjdCBNRF9SQUlEMVxcbiA0MzY6XFx0ICAgICAgIHNlbGVjdCBNRF9SQUlEMTBcXG4gNDM3OlxcdCAgICAgICBzZWxlY3QgTURfUkFJRDQ1NlxcbiA0Mzg6XFx0ICAgICAgIHNlbGVjdCBNRF9CSVRNQVBcXG4gNDM5OlxcdCAgICAgICBzZWxlY3QgQkxLX0RFVl9NRFxcbiA0NDA6XFx0XFx0aGVscFxcbiA0NDE6XFx0XFx0IEEgZG0gdGFyZ2V0IHRoYXQgc3VwcG9ydHMgUkFJRDEsIFJBSUQxMCwgUkFJRDQsIFJBSUQ1IGFuZCBSQUlENiBtYXBwaW5nc1xcbiA0NDI6XFx0XFxuIDQ0MzpcXHRcXHQgQSBSQUlELTUgc2V0IG9mIE4gZHJpdmVzIHdpdGggYSBjYXBhY2l0eSBvZiBDIE1CIHBlciBkcml2ZSBwcm92aWRlc1xcbiA0NDQ6XFx0XFx0IHRoZSBjYXBhY2l0eSBvZiBDICogKE4gLSAxKSBNQiwgYW5kIHByb3RlY3RzIGFnYWluc3QgYSBmYWlsdXJlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjEzOjQ0LjAzNTU3NjY0MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjcxNDQyNjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNRCBSQUlEIExheWVyIFJlZmFjdG9yaW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2VkIG9uIHRoZSBjb25maWdz4oCUYEJMS19ERVZfTURgLCBgTURfUkFJRDFgLCBgTURfUkFJRDEwYCwgYE1EX1JBSUQ0NTZgLCBgTURfTElORUFSYCwgYW5kIGBETV9SQUlEYOKAlGl0J3MgY2xlYXJseSBmb2N1c2VkIG9uIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgbGF5ZXIuIFRoZSBjb3JlIG9mIHRoaXMgcmVmYWN0b3Igc2VlbXMgdG8gYmUgYWJvdXQgaG93IHF1ZXVlIGxpbWl0cyBhcmUgdXBkYXRlZCBhbmQgdGhlIG9yZGVyIGluIHdoaWNoIGxvY2tzIGFyZSBhY3F1aXJlZCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYHEtXHUwMDNlbGltaXRzX2xvY2tgLCBgcmVjb25maWdfbXV0ZXhgLCBhbmQgZGV2aWNlIHN1c3BlbnNpb24uXG5cblRoZXkncmUgaW50cm9kdWNpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jaygpYCBhbmQgYG1kZGV2X3N0YWNrX3JkZXZfaW50bygpYC4gQW55dGltZSB5b3UgbWVzcyB3aXRoIGxvY2sgaGllcmFyY2hpZXMgaW4gdGhpcyBraW5kIG9mIGxvdy1sZXZlbCBjb2RlLCBteSBhbnRlbm5hIGdvIHVwLiBXZSdyZSB0YWxraW5nIGFib3V0IG9wZXJhdGlvbnMgZHVyaW5nIGhvdC1hZGQsIHNwYXJlIHJlbW92YWwvYWRkaXRpb24sIHJlc2hhcGVzLCBhbmQgdGhvc2UgYXJlIGFsbCBzZW5zaXRpdmUgcG9pbnRzLiBJdCdzIGFsc28gd29ydGggbm90aW5nIGhvdyBtYW55IGludGVyYWN0aW9ucyB0aGUga2VybmVsIGhhcyB3aXRoIHRob3NlLiBXZSBzaG91bGQgYmUgZXh0cmEgdmlnaWxhbnQsIGFuZCB0aGF0IG1lYW5zIHdlIHdpbGwgbmVlZCB0byBnaXZlIGl0IHNwZWNpYWwgYXR0ZW50aW9uIHRvIGF2b2lkIHN1YnRsZSBkZWFkbG9ja3MsIGxvY2tpbmcgaW5jb25zaXN0ZW5jaWVzLCBhbmQgcG90ZW50aWFsIHN0YXRlIHJlZ3Jlc3Npb25zLlxuXG5MZXQncyBkbyBhIHNhbml0eSBjaGVjayBvbiB0aGUgZm9jdXMgc3ltYm9scy4gTG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSBnb29kIGxpc3Q6IGBtZGRldl9zdGFja19yZGV2X2ludG9gLCBgbWRkZXZfdXBkYXRlX2lvX29wdGAsIGBtZF9hZGRfbmV3X2Rpc2tgLCBgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzYCwgYHJkZXZfYXR0cl9zdG9yZWAsIGBtZF9zdGFydF9zeW5jYCwgYHJhaWQxX2FkZF9kaXNrYCwgYHJhaWQxMF9hZGRfZGlza2AsIGByYWlkNV9hZGRfZGlza2AsIGByYWlkNV9zdG9yZV9za2lwX2NvcHlgLCBhbmQgYGxpbmVhcl9hZGRgLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBsaXN0LlxuXG5UaGV5IGFyZSBhbGwgc3BlY2lmaWMgdG8gTUQgUkFJRCwgYW5kIHRoYXQncyBleGFjdGx5IHdoYXQgd2Ugd2FudC4gVGhleSBhcmUgYWxzbyBwcmVzZW50IGluIHRoZSBtb2RpZmllZCBDIGZpbGVzIHdoaWNoIG1lYW5zIGl0IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgcmV2aWV3LlxuXG5JIG5lZWQgdG8gZmxhZyB0aGlzIGZvciBmdXp6aW5nIGFuZCBleHRlbnNpdmUgdGVzdGluZy4gTm93LCBJJ20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzcwNCwiT3V0cHV0VG9rZW5zIjoyODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoxMzo0OS43MDcwMjI1NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODI3MzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX01EXCIsXG4gICAgXCJNRF9SQUlEMVwiLFxuICAgIFwiTURfUkFJRDEwXCIsXG4gICAgXCJNRF9SQUlENDU2XCIsXG4gICAgXCJNRF9MSU5FQVJcIixcbiAgICBcIkRNX1JBSURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZGRldl9zdGFja19yZGV2X2ludG9cIixcbiAgICBcIm1kZGV2X3VwZGF0ZV9pb19vcHRcIixcbiAgICBcIm1kX2FkZF9uZXdfZGlza1wiLFxuICAgIFwicmVtb3ZlX2FuZF9hZGRfc3BhcmVzXCIsXG4gICAgXCJyZGV2X2F0dHJfc3RvcmVcIixcbiAgICBcIm1kX3N0YXJ0X3N5bmNcIixcbiAgICBcInJhaWQxX2FkZF9kaXNrXCIsXG4gICAgXCJyYWlkMTBfYWRkX2Rpc2tcIixcbiAgICBcInJhaWQ1X2FkZF9kaXNrXCIsXG4gICAgXCJyYWlkNV9zdG9yZV9za2lwX2NvcHlcIixcbiAgICBcImxpbmVhcl9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cnVjdHVyZXMgbG9jayBhY3F1aXNpdGlvbiBhbmQgcXVldWUgbGltaXRzIHByb3BhZ2F0aW9uIGluIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgbGF5ZXIgdG8gcHJldmVudCBkZWFkbG9ja3MgYmV0d2VlbiBxLVxcdTAwM2VsaW1pdHNfbG9jaywgcmVjb25maWdfbXV0ZXgsIGFuZCBtZGRldl9zdXNwZW5kLiBJdCBhbHRlcnMgZGlzayBhZGRpdGlvbi9yZW1vdmFsIGFuZCBzeXNmcy9pb2N0bCBoYW5kbGluZyBhY3Jvc3MgbXVsdGlwbGUgUkFJRCBwZXJzb25hbGl0aWVzIChyYWlkMSwgcmFpZDEwLCByYWlkNSwgbGluZWFyLCBkbS1yYWlkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGlzY292ZXIgcG90ZW50aWFsIGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGNvcnJ1cHRpb25zIGR1cmluZyBjb25jdXJyZW50IFJBSUQgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTURcIixcbiAgICBcIk1EX1JBSUQxXCIsXG4gICAgXCJNRF9SQUlEMTBcIixcbiAgICBcIk1EX1JBSUQ0NTZcIixcbiAgICBcIk1EX0xJTkVBUlwiLFxuICAgIFwiRE1fUkFJRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1kZGV2X3N0YWNrX3JkZXZfaW50b1wiLFxuICAgIFwibWRkZXZfdXBkYXRlX2lvX29wdFwiLFxuICAgIFwibWRfYWRkX25ld19kaXNrXCIsXG4gICAgXCJyZW1vdmVfYW5kX2FkZF9zcGFyZXNcIixcbiAgICBcInJkZXZfYXR0cl9zdG9yZVwiLFxuICAgIFwibWRfc3RhcnRfc3luY1wiLFxuICAgIFwicmFpZDFfYWRkX2Rpc2tcIixcbiAgICBcInJhaWQxMF9hZGRfZGlza1wiLFxuICAgIFwicmFpZDVfYWRkX2Rpc2tcIixcbiAgICBcInJhaWQ1X3N0b3JlX3NraXBfY29weVwiLFxuICAgIFwibGluZWFyX2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc3RydWN0dXJlcyBsb2NrIGFjcXVpc2l0aW9uIGFuZCBxdWV1ZSBsaW1pdHMgcHJvcGFnYXRpb24gaW4gdGhlIE1EIChzb2Z0d2FyZSBSQUlEKSBsYXllciB0byBwcmV2ZW50IGRlYWRsb2NrcyBiZXR3ZWVuIHEtXFx1MDAzZWxpbWl0c19sb2NrLCByZWNvbmZpZ19tdXRleCwgYW5kIG1kZGV2X3N1c3BlbmQuIEl0IGFsdGVycyBkaXNrIGFkZGl0aW9uL3JlbW92YWwgYW5kIHN5c2ZzL2lvY3RsIGhhbmRsaW5nIGFjcm9zcyBtdWx0aXBsZSBSQUlEIHBlcnNvbmFsaXRpZXMgKHJhaWQxLCByYWlkMTAsIHJhaWQ1LCBsaW5lYXIsIGRtLXJhaWQpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBkaXNjb3ZlciBwb3RlbnRpYWwgZGVhZGxvY2tzLCBsb2NraW5nIG9yZGVyIHZpb2xhdGlvbnMsIHJhY2UgY29uZGl0aW9ucywgb3Igc3RhdGUgY29ycnVwdGlvbnMgZHVyaW5nIGNvbmN1cnJlbnQgUkFJRCBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjEzOjQ5Ljc4Mjg1NzU1MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYwNzM0MDcxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE4OjEzOjQ5Ljc4MzMwNjk2M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk2MDY4ODgxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgc3Vic3lzdGVtIGFuZCBibG9jayBsYXllciBoZWxwZXIgZnVuY3Rpb25zIHRvIHJlc3RydWN0dXJlIGhvdyBxdWV1ZSBsaW1pdHMgYXJlIHVwZGF0ZWQgYWNyb3NzIG1kLWxpbmVhciwgcmFpZDEsIHJhaWQxMCwgYW5kIHJhaWQ1IGFycmF5cy4gU3BlY2lmaWNhbGx5LCBpdCBwYXNzZXMgYW4gZXhpc3Rpbmcgb3IgbmV3bHkgc3RhcnRlZCBgc3RydWN0IHF1ZXVlX2xpbWl0c2AgdGhyb3VnaCB2YXJpb3VzIGhvdC1hZGQvcmVtb3ZlL3VwZGF0ZSBjYWxsIHBhdGhzIHRvIGF2b2lkIGxvY2staW52ZXJzaW9uIGRlYWRsb2NrcyBiZXR3ZWVuIGBxLVxcdTAwM2VsaW1pdHNfbG9ja2AsIGFycmF5IHN1c3BlbnNpb24sIGFuZCBgcmVjb25maWdfbXV0ZXhgLlxcblxcbkFsbCBgc3RydWN0IHF1ZXVlX2xpbWl0c2AgaW5zdGFuY2VzIG9uIHRoZSBzdGFjayBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAodmlhIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClgLCB3aGljaCByZXR1cm5zIGBxLVxcdTAwM2VsaW1pdHNgIGJ5IHZhbHVlLCBvciBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZV90cnlsb2NrKClgIHdoaWNoIHBvcHVsYXRlcyBgKmxpbWApLiBObyB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSByZWFkLCBwYXNzZWQgdG8gY29udHJvbCBmbG93LCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgZGVhZGxvY2tzLCBsb2NraW5nIG9yZGVyIHZpb2xhdGlvbnMsIG9yIHJlZmVyZW5jZS9zdGF0ZSBlcnJvcnMsIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIEtBU0FOL2tlcm5lbCBkZWJ1Z2dlcnMgcmF0aGVyIHRoYW4gS01TQU4uIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIHRoZXJlZm9yZSBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYzYzZiZjI2NmEyNGNmNTc1NGI3YmMwNDUwMTFlNzQzZDJlM2Q3N2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE4OjEzOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkLmMgYi9kcml2ZXJzL21kL2RtLXJhaWQuY1xuaW5kZXggOGY1YTVlMTM0MmE5NS4uMjFhMTkyMmJlZTRmYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZC5jXG4rKysgYi9kcml2ZXJzL21kL2RtLXJhaWQuY1xuQEAgLTM5MjMsNyArMzkyMyw3IEBAIHN0YXRpYyB2b2lkIGF0dGVtcHRfcmVzdG9yZV9vZl9mYXVsdHlfZGV2aWNlcyhzdHJ1Y3QgcmFpZF9zZXQgKnJzKVxuIFx0XHRcdGNsZWFyX2JpdChGYXVsdHksIFx1MDAyNnItXHUwMDNlZmxhZ3MpO1xuIFx0XHRcdGNsZWFyX2JpdChXcml0ZUVycm9yU2VlbiwgXHUwMDI2ci1cdTAwM2VmbGFncyk7XG4gXG4tXHRcdFx0aWYgKG1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByKSkge1xuK1x0XHRcdGlmIChtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhtZGRldiwgciwgTlVMTCkpIHtcbiBcdFx0XHRcdC8qIEZhaWxlZCB0byByZXZpdmUgdGhpcyBkZXZpY2UsIHRyeSBuZXh0ICovXG4gXHRcdFx0XHRyLVx1MDAzZXJhaWRfZGlzayA9IHItXHUwMDNlc2F2ZWRfcmFpZF9kaXNrID0gLTE7XG4gXHRcdFx0XHRyLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC1hdXRvZGV0ZWN0LmMgYi9kcml2ZXJzL21kL21kLWF1dG9kZXRlY3QuY1xuaW5kZXggNGI4MDE2NWFmZDIzMy4uOTI5NTEzMTA5NjU3ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQtYXV0b2RldGVjdC5jXG4rKysgYi9kcml2ZXJzL21kL21kLWF1dG9kZXRlY3QuY1xuQEAgLTIxMyw3ICsyMTMsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWRfc2V0dXBfZHJpdmUoc3RydWN0IG1kX3NldHVwX2FyZ3MgKmFyZ3MpXG4gXHRcdFx0XHQoMSBcdTAwM2NcdTAwM2MgTURfRElTS19BQ1RJVkUpIHwgKDEgXHUwMDNjXHUwMDNjIE1EX0RJU0tfU1lOQyk7XG4gXHRcdH1cbiBcbi1cdFx0bWRfYWRkX25ld19kaXNrKG1kZGV2LCBcdTAwMjZkaW5mbyk7XG4rXHRcdG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXHUwMDI2ZGluZm8sIE5VTEwpO1xuIFx0fVxuIFxuIFx0aWYgKCFlcnIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC1saW5lYXIuYyBiL2RyaXZlcnMvbWQvbWQtbGluZWFyLmNcbmluZGV4IDczYjM2N2I2MWI4NzMuLjFmNDRjMmQ3ZGI5M2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL21kLWxpbmVhci5jXG4rKysgYi9kcml2ZXJzL21kL21kLWxpbmVhci5jXG5AQCAtMTg2LDcgKzE4Niw4IEBAIHN0YXRpYyBpbnQgbGluZWFyX3J1bihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBsaW5lYXJfYWRkKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuK3N0YXRpYyBpbnQgbGluZWFyX2FkZChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldixcbitcdFx0ICAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdC8qIEFkZGluZyBhIGRyaXZlIHRvIGEgbGluZWFyIGFycmF5IGFsbG93cyB0aGUgYXJyYXkgdG8gZ3Jvdy5cbiBcdCAqIEl0IGlzIHBlcm1pdHRlZCBpZiB0aGUgbmV3IGRyaXZlIGhhcyBhIG1hdGNoaW5nIHN1cGVyYmxvY2tcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmNcbmluZGV4IDY4MGIzNGE2M2NiM2QuLmM0MDU0ZDA2ZDEwNzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL21kLmNcbisrKyBiL2RyaXZlcnMvbWQvbWQuY1xuQEAgLTk0LDggKzk0LDggQEAgc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJlc3luY193YWl0KTtcbiAgKi9cbiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1kX21pc2Nfd3E7XG4gXG4tc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldixcbi1cdFx0XHRcdCBzdHJ1Y3QgbWRfcmRldiAqdGhpcyk7XG4rc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnRoaXMsXG4rXHRcdFx0XHQgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTtcbiBzdGF0aWMgdm9pZCBtZGRldl9kZXRhY2goc3RydWN0IG1kZGV2ICptZGRldik7XG4gc3RhdGljIHZvaWQgZXhwb3J0X3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xuIHN0YXRpYyB2b2lkIG1kX3dha2V1cF90aHJlYWRfZGlyZWN0bHkoc3RydWN0IG1kX3RocmVhZCBfX3JjdSAqKnRocmVhZCk7XG5AQCAtMjk4MSw3ICsyOTgxLDcgQEAgdm9pZCBtZF91cGRhdGVfc2Ioc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZvcmNlX2NoYW5nZSlcbiB9XG4gRVhQT1JUX1NZTUJPTChtZF91cGRhdGVfc2IpO1xuIFxuLXN0YXRpYyBpbnQgYWRkX2JvdW5kX3JkZXYoc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4rc3RhdGljIGludCBhZGRfYm91bmRfcmRldihzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSByZGV2LVx1MDAzZW1kZGV2O1xuIFx0aW50IGVyciA9IDA7XG5AQCAtMjk5NCw3ICsyOTk0LDcgQEAgc3RhdGljIGludCBhZGRfYm91bmRfcmRldihzdHJ1Y3QgbWRfcmRldiAqcmRldilcbiBcdFx0ICovXG4gXHRcdHN1cGVyX3R5cGVzW21kZGV2LVx1MDAzZW1ham9yX3ZlcnNpb25dLlxuIFx0XHRcdHZhbGlkYXRlX3N1cGVyKG1kZGV2LCBOVUxMLypmcmVzaGVzdCovLCByZGV2KTtcbi1cdFx0ZXJyID0gbWRkZXYtXHUwMDNlcGVycy1cdTAwM2Vob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYpO1xuK1x0XHRlcnIgPSBtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhtZGRldiwgcmRldiwgbGltKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdG1kX2tpY2tfcmRldl9mcm9tX2FycmF5KHJkZXYpO1xuIFx0XHRcdHJldHVybiBlcnI7XG5AQCAtMzAzMyw3ICszMDMzLDEzIEBAIHN0YXRpYyBpbnQgY21kX21hdGNoKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqc3RyKVxuIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5IHtcbiBcdHN0cnVjdCBhdHRyaWJ1dGUgYXR0cjtcbiBcdHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgbWRfcmRldiAqLCBjaGFyICopO1xuLVx0c3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbWRfcmRldiAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7XG4rXHQvKlxuK1x0ICogQGxpbTogYSBxdWV1ZSBsaW1pdHMgdXBkYXRlIHRoZSBjYWxsZXIgb3ducywgb3IgTlVMTC4gIFN0b3JlcyB0aGF0XG4rXHQgKiBjYW4gYWRkIGEgbGVnIHRvIHRoZSBhcnJheSBtdXN0IHN0YWNrIGludG8gaXQgcmF0aGVyIHRoYW4gdGFrZVxuK1x0ICogcS1cdTAwM2VsaW1pdHNfbG9jayB0aGVtc2VsdmVzLCBzZWUgbWRfc3RhcnRfc3luYygpLlxuK1x0ICovXG4rXHRzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxuK1x0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIH07XG4gXG4gc3RhdGljIHNzaXplX3RcbkBAIC0zMDc5LDcgKzMwODUsOCBAQCBzdGF0ZV9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4rc3RhdGVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0LyogY2FuIHdyaXRlXG4gXHQgKiAgZmF1bHR5ICAtIHNpbXVsYXRlcyBhbiBlcnJvclxuQEAgLTMxMTAsNyArMzExNyw3IEBAIHN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHR9IGVsc2UgaWYgKGNtZF9tYXRjaChidWYsIFwicmVtb3ZlXCIpKSB7XG4gXHRcdGlmIChyZGV2LVx1MDAzZW1kZGV2LVx1MDAzZXBlcnMpIHtcbiBcdFx0XHRjbGVhcl9iaXQoQmxvY2tlZCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4tXHRcdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYpO1xuK1x0XHRcdHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhyZGV2LVx1MDAzZW1kZGV2LCByZGV2LCBsaW0pO1xuIFx0XHR9XG4gXHRcdGlmIChyZGV2LVx1MDAzZXJhaWRfZGlzayBcdTAwM2U9IDApXG4gXHRcdFx0ZXJyID0gLUVCVVNZO1xuQEAgLTMyMjksNyArMzIzNiw3IEBAIHN0YXRlX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHRcdFx0aWYgKCFtZGRldl9pc19jbHVzdGVyZWQocmRldi1cdTAwM2VtZGRldikgfHxcbiBcdFx0XHQgICAgKGVyciA9IG1kZGV2LVx1MDAzZWNsdXN0ZXJfb3BzLVx1MDAzZWdhdGhlcl9iaXRtYXBzKHJkZXYpKSA9PSAwKSB7XG4gXHRcdFx0XHRjbGVhcl9iaXQoRmF1bHR5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYpO1xuK1x0XHRcdFx0ZXJyID0gYWRkX2JvdW5kX3JkZXYocmRldiwgbGltKTtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZVxuIFx0XHRcdGVyciA9IC1FQlVTWTtcbkBAIC0zMjU3LDcgKzMyNjQsOCBAQCBlcnJvcnNfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1lcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbitlcnJvcnNfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdCAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHVuc2lnbmVkIGludCBuO1xuIFx0aW50IHJ2O1xuQEAgLTMyODMsNyArMzI5MSw4IEBAIHNsb3Rfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1zbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4rc2xvdF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxuK1x0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdGludCBzbG90O1xuIFx0aW50IGVycjtcbkBAIC0zMzE0LDcgKzMzMjMsNyBAQCBzbG90X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHRcdGlmIChyZGV2LVx1MDAzZW1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X3JlbW92ZV9kaXNrID09IE5VTEwpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGNsZWFyX2JpdChCbG9ja2VkLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtXHUwMDNlbWRkZXYsIHJkZXYpO1xuK1x0XHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMocmRldi1cdTAwM2VtZGRldiwgcmRldiwgbGltKTtcbiBcdFx0aWYgKHJkZXYtXHUwMDNlcmFpZF9kaXNrIFx1MDAzZT0gMClcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgXHUwMDI2cmRldi1cdTAwM2VtZGRldi1cdTAwM2VyZWNvdmVyeSk7XG5AQCAtMzM0NCw3ICszMzUzLDggQEAgc2xvdF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIFx0XHRcdHJkZXYtXHUwMDNlc2F2ZWRfcmFpZF9kaXNrID0gLTE7XG4gXHRcdGNsZWFyX2JpdChJbl9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbiBcdFx0Y2xlYXJfYml0KEJpdG1hcF9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbi1cdFx0ZXJyID0gcmRldi1cdTAwM2VtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhyZGV2LVx1MDAzZW1kZGV2LCByZGV2KTtcbitcdFx0ZXJyID0gcmRldi1cdTAwM2VtZGRldi1cdTAwM2VwZXJzLVx1MDAzZWhvdF9hZGRfZGlzayhyZGV2LVx1MDAzZW1kZGV2LCByZGV2LFxuK1x0XHRcdFx0XHRcdCAgICAgbGltKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdHJkZXYtXHUwMDNlcmFpZF9kaXNrID0gLTE7XG4gXHRcdFx0cmV0dXJuIGVycjtcbkBAIC0zMzc3LDcgKzMzODcsOCBAQCBvZmZzZXRfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1vZmZzZXRfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbitvZmZzZXRfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdCAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQ7XG4gXHRpZiAoa3N0cnRvdWxsKGJ1ZiwgMTAsIFx1MDAyNm9mZnNldCkgXHUwMDNjIDApXG5AQCAtMzQwMyw3ICszNDE0LDggQEAgc3RhdGljIHNzaXplX3QgbmV3X29mZnNldF9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBuZXdfb2Zmc2V0X3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuLVx0XHRcdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuK1x0XHRcdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxuK1x0XHRcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdfb2Zmc2V0O1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IHJkZXYtXHUwMDNlbWRkZXY7XG5AQCAtMzUxMCw3ICszNTIyLDggQEAgc3RhdGljIGludCBzdHJpY3RfYmxvY2tzX3RvX3NlY3RvcnMoY29uc3QgY2hhciAqYnVmLCBzZWN0b3JfdCAqc2VjdG9ycylcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Rcbi1yZGV2X3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbityZGV2X3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCBtZGRldiAqbXlfbWRkZXYgPSByZGV2LVx1MDAzZW1kZGV2O1xuIFx0c2VjdG9yX3Qgb2xkc2VjdG9ycyA9IHJkZXYtXHUwMDNlc2VjdG9ycztcbkBAIC0zNTcyLDcgKzM1ODUsOCBAQCBzdGF0aWMgc3NpemVfdCByZWNvdmVyeV9zdGFydF9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIFx0cmV0dXJuIHNwcmludGYocGFnZSwgXCIlbGx1XFxuXCIsIHJlY292ZXJ5X3N0YXJ0KTtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3QgcmVjb3Zlcnlfc3RhcnRfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbitzdGF0aWMgc3NpemVfdCByZWNvdmVyeV9zdGFydF9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGxvbmcgcmVjb3Zlcnlfc3RhcnQ7XG4gXG5AQCAtMzYxMSw3ICszNjI1LDkgQEAgc3RhdGljIHNzaXplX3QgYmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHBhZ2UsIDApO1xuIH1cbi1zdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbitcbitzdGF0aWMgc3NpemVfdCBiYl9zdG9yZShzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcbitcdFx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0aW50IHJ2ID0gYmFkYmxvY2tzX3N0b3JlKFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCBwYWdlLCBsZW4sIDApO1xuIFx0LyogTWF5YmUgdGhhdCBhY2sgd2FzIGFsbCB3ZSBuZWVkZWQgKi9cbkBAIC0zNjI2LDcgKzM2NDIsOSBAQCBzdGF0aWMgc3NpemVfdCB1YmJfc2hvdyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgY2hhciAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHBhZ2UsIDEpO1xuIH1cbi1zdGF0aWMgc3NpemVfdCB1YmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG4rXG4rc3RhdGljIHNzaXplX3QgdWJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxuK1x0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0cmV0dXJuIGJhZGJsb2Nrc19zdG9yZShcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcGFnZSwgbGVuLCAxKTtcbiB9XG5AQCAtMzY0MCw3ICszNjU4LDggQEAgcHBsX3NlY3Rvcl9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXBwbF9zZWN0b3Jfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbitwcGxfc2VjdG9yX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sXG4rXHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBsb25nIHNlY3RvcjtcbiBcbkBAIC0zNjc5LDcgKzM2OTgsOCBAQCBwcGxfc2l6ZV9zaG93KHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjaGFyICpwYWdlKVxuIH1cbiBcbiBzdGF0aWMgc3NpemVfdFxuLXBwbF9zaXplX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4rcHBsX3NpemVfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbixcbitcdCAgICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG4gXG5AQCAtMzc0MCw2ICszNzYwLDkgQEAgcmRldl9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuIFx0c3RydWN0IHJkZXZfc3lzZnNfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5LCBhdHRyKTtcbiBcdHN0cnVjdCBtZF9yZGV2ICpyZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBtZF9yZGV2LCBrb2JqKTtcbiBcdHN0cnVjdCBrZXJuZnNfbm9kZSAqa24gPSBOVUxMO1xuK1x0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMO1xuK1x0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDtcbiBcdGJvb2wgc3VzcGVuZCA9IGZhbHNlO1xuIFx0c3NpemVfdCBydjtcbiBcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSBSRUFEX09OQ0UocmRldi1cdTAwM2VtZGRldik7XG5AQCAtMzc2MCwxNSArMzc4MywzNyBAQCByZGV2X2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4gXHRcdFx0c3VzcGVuZCA9IHRydWU7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogVGhlc2UgY2FuIGFkZCBhIGxlZyBiYWNrLCB3aGljaCBzdGFja3MgaXRzIGxpbWl0czsgdGhlIG90aGVyXG4rXHQgKiBzdGF0ZV9zdG9yZSgpIHZhbHVlcyBuZXZlciByZWFjaCAtXHUwMDNlaG90X2FkZF9kaXNrKCkuICBxLVx1MDAzZWxpbWl0c19sb2NrXG4rXHQgKiBuZXN0cyBvdXRzaWRlIHRoZSBsb2NrIGFuZCB0aGUgc3VzcGVuZCwgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cbitcdCAqL1xuK1x0aWYgKChlbnRyeS1cdTAwM2VzdG9yZSA9PSBzbG90X3N0b3JlIHx8XG4rXHQgICAgIChlbnRyeS1cdTAwM2VzdG9yZSA9PSBzdGF0ZV9zdG9yZSBcdTAwMjZcdTAwMjZcbitcdCAgICAgIChjbWRfbWF0Y2gocGFnZSwgXCJyZW1vdmVcIikgfHwgY21kX21hdGNoKHBhZ2UsIFwicmUtYWRkXCIpKSkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFtZGRldl9pc19kbShtZGRldikpIHtcbitcdFx0cSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4rXHRcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XG4rXHRcdGxpbXAgPSBcdTAwMjZsaW07XG4rXHR9XG4rXG4gXHRydiA9IHN1c3BlbmQgPyBtZGRldl9zdXNwZW5kX2FuZF9sb2NrKG1kZGV2KSA6IG1kZGV2X2xvY2sobWRkZXYpO1xuIFx0aWYgKCFydikge1xuIFx0XHRpZiAocmRldi1cdTAwM2VtZGRldiA9PSBOVUxMKVxuIFx0XHRcdHJ2ID0gLUVOT0RFVjtcbiBcdFx0ZWxzZVxuLVx0XHRcdHJ2ID0gZW50cnktXHUwMDNlc3RvcmUocmRldiwgcGFnZSwgbGVuZ3RoKTtcbitcdFx0XHRydiA9IGVudHJ5LVx1MDAzZXN0b3JlKHJkZXYsIHBhZ2UsIGxlbmd0aCwgbGltcCk7XG4rXHRcdC8qIGFwcGx5IHRoZSBsaW1pdHMgYmVmb3JlIHRoZSBhcnJheSB0YWtlcyBJL08gYWdhaW4gKi9cbitcdFx0aWYgKGxpbXApIHtcbitcdFx0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcbitcdFx0XHRsaW1wID0gTlVMTDtcbitcdFx0fVxuIFx0XHRzdXNwZW5kID8gbWRkZXZfdW5sb2NrX2FuZF9yZXN1bWUobWRkZXYpIDogbWRkZXZfdW5sb2NrKG1kZGV2KTtcbiBcdH1cbiBcbitcdGlmIChsaW1wKVxuK1x0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcbitcbiBcdGlmIChrbilcbiBcdFx0c3lzZnNfdW5icmVha19hY3RpdmVfcHJvdGVjdGlvbihrbik7XG4gXG5AQCAtNjI3NSwyMCArNjMyMCw4OSBAQCBpbnQgbWRkZXZfc3RhY2tfbmV3X3JkZXYoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3N0YWNrX25ld19yZGV2KTtcbiBcbisvKlxuKyAqIFN0YWNrIGEgbmV3IHJkZXYgaW50byBsaW1pdHMgdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIGxpbWl0c19sb2NrIGZvciBhbmRcbisgKiB3aWxsIGNvbW1pdCBpdHNlbGYuICBVc2VkIGZyb20gcGF0aHMgdGhhdCBtdXN0IHRha2UgbGltaXRzX2xvY2sgYmVmb3JlXG4rICogcXVpZXNjaW5nIHRoZSBhcnJheSwgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cbisgKi9cbitpbnQgbWRkZXZfc3RhY2tfcmRldl9pbnRvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuK3tcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgdG1wID0gKmxpbTtcbitcbitcdGlmIChtZGRldl9pc19kbShtZGRldikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHF1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShyZGV2LVx1MDAzZWJkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2VxdWV1ZSkgXHUwMDNlXG4rXHQgICAgcXVldWVfbG9naWNhbF9ibG9ja19zaXplKG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWUpKSB7XG4rXHRcdHByX2VycihcIiVzOiBpbmNvbXBhdGlibGUgbG9naWNhbF9ibG9ja19zaXplLCBjYW4gbm90IGFkZFxcblwiLFxuK1x0XHQgICAgICAgbWRuYW1lKG1kZGV2KSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cXVldWVfbGltaXRzX3N0YWNrX2JkZXYoXHUwMDI2dG1wLCByZGV2LVx1MDAzZWJkZXYsIHJkZXYtXHUwMDNlZGF0YV9vZmZzZXQsXG4rXHRcdFx0XHRtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZWRpc2tfbmFtZSk7XG4rXG4rXHRpZiAoIXF1ZXVlX2xpbWl0c19zdGFja19pbnRlZ3JpdHlfYmRldihcdTAwMjZ0bXAsIHJkZXYtXHUwMDNlYmRldikpIHtcbitcdFx0cHJfZXJyKFwiJXM6IGluY29tcGF0aWJsZSBpbnRlZ3JpdHkgcHJvZmlsZSBmb3IgJXBnXFxuXCIsXG4rXHRcdCAgICAgICBtZG5hbWUobWRkZXYpLCByZGV2LVx1MDAzZWJkZXYpO1xuK1x0XHRyZXR1cm4gLUVOWElPO1xuK1x0fVxuK1xuK1x0KmxpbSA9IHRtcDtcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtZGRldl9zdGFja19yZGV2X2ludG8pO1xuK1xuKy8qIGZvciBjYWxsZXJzIHRoYXQgbXVzdCBub3Qgd2FpdCBmb3IgcS1cdTAwM2VsaW1pdHNfbG9jaywgc2VlIG1kX3N0YXJ0X3N5bmMoKSAqL1xuK3N0YXRpYyBib29sIG1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKHN0cnVjdCBtZGRldiAqbWRkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuK3tcbitcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxO1xuK1xuK1x0aWYgKG1kZGV2X2lzX2RtKG1kZGV2KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4rXG4rXHRyZXR1cm4gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZV90cnlsb2NrKHEsIGxpbSk7XG4rfVxuK1xuIC8qIHVwZGF0ZSB0aGUgb3B0aW1hbCBJL08gc2l6ZSBhZnRlciBhIHJlc2hhcGUgKi9cbi12b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMpXG4rdm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzLFxuK1x0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuLVx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzIG93bjtcbiBcbiBcdGlmIChtZGRldl9pc19kbShtZGRldikpXG4gXHRcdHJldHVybjtcbiBcbitcdC8qXG4rXHQgKiBXaXRoIGFuIHVwZGF0ZSBvd25lZCBieSB0aGUgY2FsbGVyIGp1c3QgY2hhbmdlIGl0IGluIHBsYWNlOyBpdCBpc1xuK1x0ICogY29tbWl0dGVkLCBhbmQgdGhlIGFycmF5IHJlc3VtZWQsIGJ5IHdob2V2ZXIgc3RhcnRlZCBpdC4gIFRha2luZ1xuK1x0ICogcS1cdTAwM2VsaW1pdHNfbG9jayBoZXJlIHdvdWxkIG5lc3QgaXQgaW5zaWRlIHJlY29uZmlnX211dGV4IGFuZCB0aGVcbitcdCAqIHN1c3BlbmQsIHdoaWNoIGRlYWRsb2Nrcywgc2VlIG1kX3N0YXJ0X3N5bmMoKS5cbitcdCAqL1xuK1x0aWYgKGxpbSkge1xuK1x0XHRsaW0tXHUwMDNlaW9fb3B0ID0gbGltLVx1MDAzZWlvX21pbiAqIG5yX3N0cmlwZXM7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBDYWxsZWQgZnJvbSB0aGUgc3luYyB0aHJlYWQsIHdoaWNoIG1kX3JlYXBfc3luY190aHJlYWQoKSB3YWl0cyBmb3JcbitcdCAqIHdpdGggcmVjb25maWdfbXV0ZXggaGVsZCwgc28gZG9uJ3Qgd2FpdCBmb3IgcS1cdTAwM2VsaW1pdHNfbG9jayBoZXJlLlxuK1x0ICogaW9fb3B0IGlzIGEgaGludCwgc2tpcHBpbmcgaXQgb24gYSBjb250ZW5kZWQgcGFzcyBpcyBmaW5lLlxuK1x0ICovXG4rXHRpZiAoIW1kZGV2X3N0YWNrX2xpbWl0c190cnlsb2NrKG1kZGV2LCBcdTAwMjZvd24pKVxuK1x0XHRyZXR1cm47XG4rXG4gXHQvKiBkb24ndCBib3RoZXIgdXBkYXRpbmcgaW9fb3B0IGlmIHdlIGNhbid0IHN1c3BlbmQgdGhlIGFycmF5ICovXG4tXHRpZiAobWRkZXZfc3VzcGVuZChtZGRldiwgZmFsc2UpIFx1MDAzYyAwKVxuK1x0aWYgKG1kZGV2X3N1c3BlbmQobWRkZXYsIGZhbHNlKSBcdTAwM2MgMCkge1xuK1x0XHRxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlKTtcbiBcdFx0cmV0dXJuO1xuLVx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlKTtcbi1cdGxpbS5pb19vcHQgPSBsaW0uaW9fbWluICogbnJfc3RyaXBlcztcbi1cdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4rXHR9XG4rXHRvd24uaW9fb3B0ID0gb3duLmlvX21pbiAqIG5yX3N0cmlwZXM7XG4rXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZvd24pO1xuIFx0bWRkZXZfcmVzdW1lKG1kZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobWRkZXZfdXBkYXRlX2lvX29wdCk7XG5AQCAtNzQ4Niw3ICs3NjAwLDggQEAgc3RhdGljIGludCBnZXRfZGlza19pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHZvaWQgX191c2VyICogYXJnKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBtZF9hZGRfbmV3X2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kdV9kaXNrX2luZm9fcyAqaW5mbylcbitpbnQgbWRfYWRkX25ld19kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgKmluZm8sXG4rXHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0c3RydWN0IG1kX3JkZXYgKnJkZXY7XG4gXHRkZXZfdCBkZXYgPSBNS0RFVihpbmZvLVx1MDAzZW1ham9yLGluZm8tXHUwMDNlbWlub3IpO1xuQEAgLTc2MzQsMTEgKzc3NDksMTEgQEAgaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKVxuIFx0XHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdFx0bWRkZXYtXHUwMDNlY2x1c3Rlcl9vcHMtXHUwMDNlYWRkX25ld19kaXNrX2NhbmNlbChtZGRldik7XG4gXHRcdFx0XHRlbHNlXG4tXHRcdFx0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYpO1xuK1x0XHRcdFx0XHRlcnIgPSBhZGRfYm91bmRfcmRldihyZGV2LCBsaW0pO1xuIFx0XHRcdH1cbiBcbiBcdFx0fSBlbHNlIGlmICghZXJyKVxuLVx0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYpO1xuK1x0XHRcdGVyciA9IGFkZF9ib3VuZF9yZGV2KHJkZXYsIGxpbSk7XG4gXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtNzY5MSw3ICs3ODA2LDggQEAgaW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIGRldl90IGRldilcbitzdGF0aWMgaW50IGhvdF9yZW1vdmVfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBkZXZfdCBkZXYsXG4rXHRcdFx0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCBtZF9yZGV2ICpyZGV2O1xuIFxuQEAgLTc3MDYsNyArNzgyMiw3IEBAIHN0YXRpYyBpbnQgaG90X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIGRldl90IGRldilcbiBcdFx0Z290byBraWNrX3JkZXY7XG4gXG4gXHRjbGVhcl9iaXQoQmxvY2tlZCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4tXHRyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIHJkZXYpO1xuK1x0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCByZGV2LCBsaW0pO1xuIFxuIFx0aWYgKHJkZXYtXHUwMDNlcmFpZF9kaXNrIFx1MDAzZT0gMClcbiBcdFx0Z290byBidXN5O1xuQEAgLTgyOTEsNiArODQwNywyMiBAQCBzdGF0aWMgaW5saW5lIGludCBtZF9pb2N0bF92YWxpZCh1bnNpZ25lZCBpbnQgY21kKVxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIENvbW1hbmRzIHRoYXQgY2FuIHJlYWNoIC1cdTAwM2Vob3RfYWRkX2Rpc2soKS4gIEFERF9ORVdfRElTSyBvbmx5IGRvZXMgc28gZm9yIGFcbisgKiBqb3VybmFsIGRldmljZSBvciBhIHBlcnNvbmFsaXR5IHdpdGhvdXQgLVx1MDAzZWhvdF9yZW1vdmVfZGlzaywgYnV0IHRoYXQgZGVwZW5kc1xuKyAqIG9uIGRpc2sgaW5mbyBzdGlsbCBpbiB1c2VyIG1lbW9yeSBoZXJlLCBzbyBpdCBpcyBpbmNsdWRlZCBhcyBhIHdob2xlLlxuKyAqL1xuK3N0YXRpYyBib29sIG1kX2lvY3RsX21heV9hZGRfZGlzayh1bnNpZ25lZCBpbnQgY21kKVxuK3tcbitcdHN3aXRjaCAoY21kKSB7XG4rXHRjYXNlIEFERF9ORVdfRElTSzpcbitcdGNhc2UgSE9UX1JFTU9WRV9ESVNLOlxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbit9XG4rXG4gc3RhdGljIGJvb2wgbWRfaW9jdGxfbmVlZF9zdXNwZW5kKHVuc2lnbmVkIGludCBjbWQpXG4ge1xuIFx0c3dpdGNoIChjbWQpIHtcbkBAIC04MzQ2LDYgKzg0NzgsOSBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbiBcdHVuc2lnbmVkIGludCBub2lvX2ZsYWdzID0gMDtcbiBcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IE5VTEw7XG4rXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbXAgPSBOVUxMO1xuIFx0Ym9vbCBzdXNwZW5kO1xuIFxuIFx0ZXJyID0gbWRfaW9jdGxfdmFsaWQoY21kKTtcbkBAIC04Mzk2LDExICs4NTMxLDIwIEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0aWYgKCFtZF9pc19yZHdyKG1kZGV2KSlcbiBcdFx0Zmx1c2hfd29yayhcdTAwMjZtZGRldi1cdTAwM2VzeW5jX3dvcmspO1xuIFxuK1x0LyogcS1cdTAwM2VsaW1pdHNfbG9jayBuZXN0cyBvdXRzaWRlIGJvdGgsIHNlZSBtZF9zdGFydF9zeW5jKCkgKi9cbitcdGlmIChtZF9pb2N0bF9tYXlfYWRkX2Rpc2soY21kKSBcdTAwMjZcdTAwMjYgIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuK1x0XHRxID0gbWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZTtcbitcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbitcdFx0bGltcCA9IFx1MDAyNmxpbTtcbitcdH1cbitcbiBcdHN1c3BlbmQgPSBtZF9pb2N0bF9uZWVkX3N1c3BlbmQoY21kKTtcbiBcdGVyciA9IHN1c3BlbmQgPyBtZGRldl9zdXNwZW5kX2FuZF9sb2NrKG1kZGV2KSA6IG1kZGV2X2xvY2sobWRkZXYpO1xuIFx0aWYgKGVycikge1xuIFx0XHRwcl9kZWJ1ZyhcIm1kOiBpb2N0bCBsb2NrIGludGVycnVwdGVkLCByZWFzb24gJWQsIGNtZCAlZFxcblwiLFxuIFx0XHRcdCBlcnIsIGNtZCk7XG4rXHRcdGlmIChsaW1wKVxuK1x0XHRcdHF1ZXVlX2xpbWl0c19jYW5jZWxfdXBkYXRlKHEpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcdGlmIChzdXNwZW5kKVxuQEAgLTg0NDIsNyArODU4Niw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0XHRnb3RvIHVubG9jaztcbiBcbiBcdGNhc2UgSE9UX1JFTU9WRV9ESVNLOlxuLVx0XHRlcnIgPSBob3RfcmVtb3ZlX2Rpc2sobWRkZXYsIG5ld19kZWNvZGVfZGV2KGFyZykpO1xuK1x0XHRlcnIgPSBob3RfcmVtb3ZlX2Rpc2sobWRkZXYsIG5ld19kZWNvZGVfZGV2KGFyZyksIGxpbXApO1xuIFx0XHRnb3RvIHVubG9jaztcbiBcbiBcdGNhc2UgQUREX05FV19ESVNLOlxuQEAgLTg0NTgsNyArODYwMiw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0XHRcdFx0LyogTmVlZCB0byBjbGVhciByZWFkLW9ubHkgZm9yIHRoaXMgKi9cbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGVsc2Vcbi1cdFx0XHRcdGVyciA9IG1kX2FkZF9uZXdfZGlzayhtZGRldiwgXHUwMDI2aW5mbyk7XG4rXHRcdFx0XHRlcnIgPSBtZF9hZGRfbmV3X2Rpc2sobWRkZXYsIFx1MDAyNmluZm8sIGxpbXApO1xuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuQEAgLTg0OTYsNyArODY0MCw3IEBAIHN0YXRpYyBpbnQgbWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2aW5mbywgYXJncCwgc2l6ZW9mKGluZm8pKSlcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRlbHNlXG4tXHRcdFx0ZXJyID0gbWRfYWRkX25ld19kaXNrKG1kZGV2LCBcdTAwMjZpbmZvKTtcbitcdFx0XHRlcnIgPSBtZF9hZGRfbmV3X2Rpc2sobWRkZXYsIFx1MDAyNmluZm8sIGxpbXApO1xuIFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbiBcbkBAIC04NTI5LDYgKzg2NzMsOSBAQCBzdGF0aWMgaW50IG1kX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbiBcdCAgICBlcnIgIT0gLUVJTlZBTClcbiBcdFx0bWRkZXYtXHUwMDNlaG9sZF9hY3RpdmUgPSAwO1xuIFxuK1x0aWYgKGxpbXApXG4rXHRcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApO1xuK1xuIFx0aWYgKHN1c3BlbmQpIHtcbiBcdFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZ3MpO1xuIFx0XHRtZGRldl91bmxvY2tfYW5kX3Jlc3VtZShtZGRldik7XG5AQCAtMTAxNjcsOCArMTAzMTQsOCBAQCBzdGF0aWMgaW50IHJlbW92ZV9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnRoaXMpXG4gXHRyZXR1cm4gcmVtb3ZlZDtcbiB9XG4gXG4tc3RhdGljIGludCByZW1vdmVfYW5kX2FkZF9zcGFyZXMoc3RydWN0IG1kZGV2ICptZGRldixcbi1cdFx0XHRcdCBzdHJ1Y3QgbWRfcmRldiAqdGhpcylcbitzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqdGhpcyxcbitcdFx0XHRcdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4ge1xuIFx0c3RydWN0IG1kX3JkZXYgKnJkZXY7XG4gXHRpbnQgc3BhcmVzID0gMDtcbkBAIC0xMDE5MSw3ICsxMDMzOCw3IEBAIHN0YXRpYyBpbnQgcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHN0cnVjdCBtZGRldiAqbWRkZXYsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghdGVzdF9iaXQoSm91cm5hbCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG4gXHRcdFx0cmRldi1cdTAwM2VyZWNvdmVyeV9vZmZzZXQgPSAwO1xuLVx0XHRpZiAobWRkZXYtXHUwMDNlcGVycy1cdTAwM2Vob3RfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHtcbitcdFx0aWYgKG1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlaG90X2FkZF9kaXNrKG1kZGV2LCByZGV2LCBsaW0pID09IDApIHtcbiBcdFx0XHQvKiBmYWlsdXJlIGhlcmUgaXMgT0sgKi9cbiBcdFx0XHRzeXNmc19saW5rX3JkZXYobWRkZXYsIHJkZXYpO1xuIFx0XHRcdGlmICghdGVzdF9iaXQoSm91cm5hbCwgXHUwMDI2cmRldi1cdTAwM2VmbGFncykpXG5AQCAtMTAyMDYsNyArMTAzNTMsOCBAQCBzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxuIFx0cmV0dXJuIHNwYXJlcztcbiB9XG4gXG4tc3RhdGljIGJvb2wgbWRfY2hvb3NlX3N5bmNfYWN0aW9uKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCAqc3BhcmVzKVxuK3N0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcyxcbitcdFx0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdC8qIENoZWNrIGlmIHJlc2hhcGUgaXMgaW4gcHJvZ3Jlc3MgZmlyc3QuICovXG4gXHRpZiAobWRkZXYtXHUwMDNlcmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IpIHtcbkBAIC0xMDIzNCw3ICsxMDM4Miw3IEBAIHN0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcylcbiBcdCAqIGFsc28gcmVtb3ZlZCBhbmQgcmUtYWRkZWQsIHRvIGFsbG93IHRoZSBwZXJzb25hbGl0eSB0byBmYWlsIHRoZVxuIFx0ICogcmUtYWRkLlxuIFx0ICovXG4tXHQqc3BhcmVzID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMKTtcbitcdCpzcGFyZXMgPSByZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYsIE5VTEwsIGxpbSk7XG4gXHRpZiAoKnNwYXJlcyB8fCB0ZXN0X2JpdChNRF9SRUNPVkVSWV9MQVpZX1JFQ09WRVIsIFx1MDAyNm1kZGV2LVx1MDAzZXJlY292ZXJ5KSkge1xuIFx0XHRjbGVhcl9iaXQoTURfUkVDT1ZFUllfU1lOQywgXHUwMDI2bWRkZXYtXHUwMDNlcmVjb3ZlcnkpO1xuIFx0XHRjbGVhcl9iaXQoTURfUkVDT1ZFUllfQ0hFQ0ssIFx1MDAyNm1kZGV2LVx1MDAzZXJlY292ZXJ5KTtcbkBAIC0xMDI1Niw2ICsxMDQwNCw5IEBAIHN0YXRpYyBib29sIG1kX2Nob29zZV9zeW5jX2FjdGlvbihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgKnNwYXJlcylcbiBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXG4ge1xuIFx0c3RydWN0IG1kZGV2ICptZGRldiA9IGNvbnRhaW5lcl9vZih3cywgc3RydWN0IG1kZGV2LCBzeW5jX3dvcmspO1xuK1x0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBOVUxMO1xuK1x0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1wID0gTlVMTDtcbiBcdGludCBzcGFyZXMgPSAwO1xuIFx0Ym9vbCBzdXNwZW5kID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBpbnQgbm9pb19mbGFncyA9IDA7XG5AQCAtMTAyNjcsNiArMTA0MTgsMTcgQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxuIFx0ICovXG4gXHRpZiAoKG1kZGV2LVx1MDAzZXJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yIHx8ICFtZF9pc19yZHdyKG1kZGV2KSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbWRfc3BhcmVzX25lZWRfY2hhbmdlKG1kZGV2KSkge1xuK1x0XHQvKlxuK1x0XHQgKiBBZGRpbmcgYSBzcGFyZSBiZWxvdyBzdGFja3MgaXRzIGxpbWl0cywgd2hpY2ggbmVlZHNcbitcdFx0ICogcS1cdTAwM2VsaW1pdHNfbG9jay4gIFRha2UgaXQgYmVmb3JlIHN1c3BlbmRpbmc6IGl0cyBob2xkZXJcbitcdFx0ICogd2FpdHMgaW4gYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIGZvciBJL08gdGhhdFxuK1x0XHQgKiBtZGRldi1cdTAwM2VzdXNwZW5kZWQgaG9sZHMgYmFjaywgc28gdGhlIG90aGVyIG9yZGVyIGRlYWRsb2Nrcy5cbitcdFx0ICovXG4rXHRcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpKSB7XG4rXHRcdFx0cSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4rXHRcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbitcdFx0XHRsaW1wID0gXHUwMDI2bGltO1xuK1x0XHR9XG4gXHRcdHN1c3BlbmQgPSB0cnVlO1xuIFx0XHRtZGRldl9zdXNwZW5kKG1kZGV2LCBmYWxzZSk7XG4gXHRcdG5vaW9fZmxhZ3MgPSBtZW1hbGxvY19ub2lvX3NhdmUoKTtcbkBAIC0xMDI4MSw2ICsxMDQ0MywxMiBAQCBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXG4gXHRpZiAoIXN1c3BlbmQgXHUwMDI2XHUwMDI2IChtZGRldi1cdTAwM2VyZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvciB8fCAhbWRfaXNfcmR3cihtZGRldikpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG1kX3NwYXJlc19uZWVkX2NoYW5nZShtZGRldikpIHtcbiBcdFx0bWRkZXZfdW5sb2NrKG1kZGV2KTtcbitcdFx0Lyogc2VlIGFib3ZlOiBxLVx1MDAzZWxpbWl0c19sb2NrIG5lc3RzIG91dHNpZGUgYm90aCAqL1xuK1x0XHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuK1x0XHRcdHEgPSBtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlO1xuK1x0XHRcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XG4rXHRcdFx0bGltcCA9IFx1MDAyNmxpbTtcbitcdFx0fVxuIFx0XHRtZGRldl9zdXNwZW5kX2FuZF9sb2NrX25vaW50cihtZGRldik7XG4gXHRcdHN1c3BlbmQgPSB0cnVlO1xuIFx0XHRub2lvX2ZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG5AQCAtMTAyOTQsMTEgKzEwNDYyLDExIEBAIHN0YXRpYyB2b2lkIG1kX3N0YXJ0X3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3cylcbiBcdFx0ICogQXMgd2Ugb25seSBhZGQgZGV2aWNlcyB0aGF0IGFyZSBhbHJlYWR5IGluLXN5bmMsIHdlIGNhblxuIFx0XHQgKiBhY3RpdmF0ZSB0aGUgc3BhcmVzIGltbWVkaWF0ZWx5LlxuIFx0XHQgKi9cbi1cdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMKTtcbitcdFx0cmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCBOVUxMLCBsaW1wKTtcbiBcdFx0Z290byBub3RfcnVubmluZztcbiBcdH1cbiBcbi1cdGlmICghbWRfY2hvb3NlX3N5bmNfYWN0aW9uKG1kZGV2LCBcdTAwMjZzcGFyZXMpKVxuK1x0aWYgKCFtZF9jaG9vc2Vfc3luY19hY3Rpb24obWRkZXYsIFx1MDAyNnNwYXJlcywgbGltcCkpXG4gXHRcdGdvdG8gbm90X3J1bm5pbmc7XG4gXG4gXHRpZiAoIW1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlc3luY19yZXF1ZXN0KVxuQEAgLTEwMzI5LDYgKzEwNDk3LDggQEAgc3RhdGljIHZvaWQgbWRfc3RhcnRfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKVxuIFx0ICogICAgIGh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MjAwXG4gXHQgKiBUaGVyZWZvcmUsIHVzZSBfX21kZGV2X3Jlc3VtZShtZGRldiwgZmFsc2UpLlxuIFx0ICovXG4rXHRpZiAobGltcClcbitcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltcCk7XG4gXHRpZiAoc3VzcGVuZCkge1xuIFx0XHRtZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFncyk7XG4gXHRcdF9fbWRkZXZfcmVzdW1lKG1kZGV2LCBmYWxzZSk7XG5AQCAtMTAzNTEsNiArMTA1MjEsOCBAQCBzdGF0aWMgdm9pZCBtZF9zdGFydF9zeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpXG4gXHQgKiAgICAgaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgyMDBcbiBcdCAqIFRoZXJlZm9yZSwgdXNlIF9fbWRkZXZfcmVzdW1lKG1kZGV2LCBmYWxzZSkuXG4gXHQgKi9cbitcdGlmIChsaW1wKVxuK1x0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1wKTtcbiBcdGlmIChzdXNwZW5kKSB7XG4gXHRcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWdzKTtcbiBcdFx0X19tZGRldl9yZXN1bWUobWRkZXYsIGZhbHNlKTtcbkBAIC0xMDc5Myw2ICsxMDk2NSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG1kX2luaXQodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBjaGVja19zYl9jaGFuZ2VzKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIHtcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFx0c3RydWN0IG1kcF9zdXBlcmJsb2NrXzEgKnNiID0gcGFnZV9hZGRyZXNzKHJkZXYtXHUwMDNlc2JfcGFnZSk7XG4gXHRzdHJ1Y3QgbWRfcmRldiAqcmRldjIsICp0bXA7XG4gXHRpbnQgcm9sZSwgcmV0O1xuQEAgLTEwODQ5LDcgKzExMDIyLDI0IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3NiX2NoYW5nZXMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4gXHRcdFx0XHRcdHJkZXYyLVx1MDAzZXNhdmVkX3JhaWRfZGlzayA9IC0xO1xuIFx0XHRcdFx0ZWxzZVxuIFx0XHRcdFx0XHRyZGV2Mi1cdTAwM2VzYXZlZF9yYWlkX2Rpc2sgPSByb2xlO1xuLVx0XHRcdFx0cmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LCByZGV2Mik7XG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogcmVjb25maWdfbXV0ZXggaXMgaGVsZCwgc28gZG9uJ3Qgd2FpdCBmb3JcbitcdFx0XHRcdCAqIHEtXHUwMDNlbGltaXRzX2xvY2s7IE1EX1JFQ09WRVJZX05FRURFRCBiZWxvd1xuK1x0XHRcdFx0ICogbGVhdmVzIGEgc2tpcHBlZCBhZGQgdG8gbWRfc3RhcnRfc3luYygpLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRpZiAobWRkZXZfc3RhY2tfbGltaXRzX3RyeWxvY2sobWRkZXYsIFx1MDAyNmxpbSkpIHtcbitcdFx0XHRcdFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPVxuK1x0XHRcdFx0XHRcdG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4rXG4rXHRcdFx0XHRcdHJldCA9IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldixcbitcdFx0XHRcdFx0XHRcdFx0ICAgIHJkZXYyLCBcdTAwMjZsaW0pO1xuK1x0XHRcdFx0XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBcdTAwMjZsaW0pO1xuK1x0XHRcdFx0fSBlbHNlIGlmIChtZGRldl9pc19kbShtZGRldikpIHtcbitcdFx0XHRcdFx0cmV0ID0gcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2LFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgcmRldjIsIE5VTEwpO1xuK1x0XHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdFx0cmV0ID0gcmVtb3ZlX3NwYXJlcyhtZGRldiwgcmRldjIpO1xuK1x0XHRcdFx0fVxuIFx0XHRcdFx0cHJfaW5mbyhcIkFjdGl2YXRlZCBzcGFyZTogJXBnXFxuXCIsXG4gXHRcdFx0XHRcdHJkZXYyLVx1MDAzZWJkZXYpO1xuIFx0XHRcdFx0Lyogd2FrZXVwIG1kZGV2LVx1MDAzZXRocmVhZCBoZXJlLCBzbyBhcnJheSBjb3VsZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaFxuaW5kZXggYjZkMmU4OTI5YTBmOS4uY2VjYThjZmNkY2I5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQuaFxuKysrIGIvZHJpdmVycy9tZC9tZC5oXG5AQCAtNzY1LDcgKzc2NSw4IEBAIHN0cnVjdCBtZF9wZXJzb25hbGl0eVxuIFx0ICogaWYgYXBwcm9wcmlhdGUsIGFuZCBzaG91bGQgYWJvcnQgcmVjb3ZlcnkgaWYgbmVlZGVkXG4gXHQgKi9cbiBcdHZvaWQgKCplcnJvcl9oYW5kbGVyKShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7XG4tXHRpbnQgKCpob3RfYWRkX2Rpc2spIChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7XG4rXHRpbnQgKCpob3RfYWRkX2Rpc2spKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIFx0aW50ICgqaG90X3JlbW92ZV9kaXNrKSAoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpO1xuIFx0aW50ICgqc3BhcmVfYWN0aXZlKSAoc3RydWN0IG1kZGV2ICptZGRldik7XG4gXHRzZWN0b3JfdCAoKnN5bmNfcmVxdWVzdCkoc3RydWN0IG1kZGV2ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLFxuQEAgLTEwNDEsMTMgKzEwNDIsMTcgQEAgc3RydWN0IG1kdV9kaXNrX2luZm9fcztcbiBleHRlcm4gaW50IG1kcF9tYWpvcjtcbiB2b2lkIG1kX2F1dG9zdGFydF9hcnJheXMoaW50IHBhcnQpO1xuIGludCBtZF9zZXRfYXJyYXlfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2FycmF5X2luZm9fcyAqaW5mbyk7XG4taW50IG1kX2FkZF9uZXdfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zICppbmZvKTtcbitpbnQgbWRfYWRkX25ld19kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgKmluZm8sXG4rXHRcdCAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuIGludCBkb19tZF9ydW4oc3RydWN0IG1kZGV2ICptZGRldik7XG4gI2RlZmluZSBNRERFVl9TVEFDS19JTlRFR1JJVFlcdCgxdSBcdTAwM2NcdTAwM2MgMClcbiBpbnQgbWRkZXZfc3RhY2tfcmRldl9saW1pdHMoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBtZGRldl9zdGFja19uZXdfcmRldihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldik7XG4tdm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzKTtcbitpbnQgbWRkZXZfc3RhY2tfcmRldl9pbnRvKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTtcbit2b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMsXG4rXHRcdFx0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBtZF9mb3BzO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuY1xuaW5kZXggZjA2NDZmYjI0MzcxZi4uZGQzNDhiNTY5NWQwNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuY1xuKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jXG5AQCAtMTg5OCw3ICsxODk4LDggQEAgc3RhdGljIGJvb2wgcmFpZDFfcmVtb3ZlX2NvbmYoc3RydWN0IHIxY29uZiAqY29uZiwgaW50IGRpc2spXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGludCByYWlkMV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbitzdGF0aWMgaW50IHJhaWQxX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCByMWNvbmYgKmNvbmYgPSBtZGRldi1cdTAwM2Vwcml2YXRlO1xuIFx0aW50IGVyciA9IC1FRVhJU1Q7XG5AQCAtMTkyMyw3ICsxOTI0LDEwIEBAIHN0YXRpYyBpbnQgcmFpZDFfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4gXHRmb3IgKG1pcnJvciA9IGZpcnN0OyBtaXJyb3IgXHUwMDNjPSBsYXN0OyBtaXJyb3IrKykge1xuIFx0XHRwID0gY29uZi1cdTAwM2VtaXJyb3JzICsgbWlycm9yO1xuIFx0XHRpZiAoIXAtXHUwMDNlcmRldikge1xuLVx0XHRcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcbitcdFx0XHRpZiAobGltKVxuK1x0XHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfcmRldl9pbnRvKG1kZGV2LCByZGV2LCBsaW0pO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuY1xuaW5kZXggMTA5M2M3OThkOWRkZS4uNjQxNjE5MzI4YTZjNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmNcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmNcbkBAIC0yMDk1LDcgKzIwOTUsOCBAQCBzdGF0aWMgaW50IHJhaWQxMF9zcGFyZV9hY3RpdmUoc3RydWN0IG1kZGV2ICptZGRldilcbiBcdHJldHVybiBjb3VudDtcbiB9XG4gXG4tc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4rc3RhdGljIGludCByYWlkMTBfYWRkX2Rpc2soc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYsXG4rXHRcdFx0ICAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCByMTBjb25mICpjb25mID0gbWRkZXYtXHUwMDNlcHJpdmF0ZTtcbiBcdGludCBlcnIgPSAtRUVYSVNUO1xuQEAgLTIxMzAsNyArMjEzMSwxMCBAQCBzdGF0aWMgaW50IHJhaWQxMF9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRlcnIgPSBtZGRldl9zdGFja19uZXdfcmRldihtZGRldiwgcmRldik7XG4rXHRcdGlmIChsaW0pXG4rXHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfcmRldl9pbnRvKG1kZGV2LCByZGV2LCBsaW0pO1xuK1x0XHRlbHNlXG4rXHRcdFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdHAtXHUwMDNlaGVhZF9wb3NpdGlvbiA9IDA7XG5AQCAtMjE0Nyw3ICsyMTUxLDEwIEBAIHN0YXRpYyBpbnQgcmFpZDEwX2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIFx0XHRjbGVhcl9iaXQoSW5fc3luYywgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG4gXHRcdHNldF9iaXQoUmVwbGFjZW1lbnQsIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpO1xuIFx0XHRyZGV2LVx1MDAzZXJhaWRfZGlzayA9IHJlcGxfc2xvdDtcbi1cdFx0ZXJyID0gbWRkZXZfc3RhY2tfbmV3X3JkZXYobWRkZXYsIHJkZXYpO1xuK1x0XHRpZiAobGltKVxuK1x0XHRcdGVyciA9IG1kZGV2X3N0YWNrX3JkZXZfaW50byhtZGRldiwgcmRldiwgbGltKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGVyciA9IG1kZGV2X3N0YWNrX25ld19yZGV2KG1kZGV2LCByZGV2KTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRjb25mLVx1MDAzZWZ1bGxzeW5jID0gMTtcbkBAIC00NDg0LDcgKzQ0OTEsNyBAQCBzdGF0aWMgaW50IHJhaWQxMF9zdGFydF9yZXNoYXBlKHN0cnVjdCBtZGRldiAqbWRkZXYpXG4gXHRcdHJkZXZfZm9yX2VhY2gocmRldiwgbWRkZXYpXG4gXHRcdFx0aWYgKHJkZXYtXHUwMDNlcmFpZF9kaXNrIFx1MDAzYyAwIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAhdGVzdF9iaXQoRmF1bHR5LCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKSkge1xuLVx0XHRcdFx0aWYgKHJhaWQxMF9hZGRfZGlzayhtZGRldiwgcmRldikgPT0gMCkge1xuK1x0XHRcdFx0aWYgKHJhaWQxMF9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkge1xuIFx0XHRcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2sgXHUwMDNlPVxuIFx0XHRcdFx0XHQgICAgY29uZi1cdTAwM2VwcmV2LnJhaWRfZGlza3MpXG4gXHRcdFx0XHRcdFx0c2V0X2JpdChJbl9zeW5jLCBcdTAwMjZyZGV2LVx1MDAzZWZsYWdzKTtcbkBAIC00OTIxLDcgKzQ5MjgsNyBAQCBzdGF0aWMgdm9pZCBlbmRfcmVzaGFwZShzdHJ1Y3QgcjEwY29uZiAqY29uZilcbiBcdGNvbmYtXHUwMDNlcmVzaGFwZV9zYWZlID0gTWF4U2VjdG9yO1xuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNvbmYtXHUwMDNlZGV2aWNlX2xvY2spO1xuIFxuLVx0bWRkZXZfdXBkYXRlX2lvX29wdChjb25mLVx1MDAzZW1kZGV2LCByYWlkMTBfbnJfc3RyaXBlcyhjb25mKSk7XG4rXHRtZGRldl91cGRhdGVfaW9fb3B0KGNvbmYtXHUwMDNlbWRkZXYsIHJhaWQxMF9ucl9zdHJpcGVzKGNvbmYpLCBOVUxMKTtcbiBcdGNvbmYtXHUwMDNlZnVsbHN5bmMgPSAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmNcbmluZGV4IGI5MTU0NWNlMDkwZGUuLjIyNzU5YzYzMWM0ZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmNcbisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuY1xuQEAgLTcyODgsNiArNzI4OCw5IEBAIHN0YXRpYyBzc2l6ZV90XG4gcmFpZDVfc3RvcmVfc2tpcF9jb3B5KHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IHI1Y29uZiAqY29uZjtcbitcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gTlVMTDtcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuK1x0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7XG4gXHR1bnNpZ25lZCBsb25nIG5ldztcbiBcdGludCBlcnI7XG4gXG5AQCAtNzI5NywyMyArNzMwMCwzMyBAQCByYWlkNV9zdG9yZV9za2lwX2NvcHkoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRuZXcgPSAhIW5ldztcbiBcbitcdC8qIHEtXHUwMDNlbGltaXRzX2xvY2sgbmVzdHMgb3V0c2lkZSBib3RoLCBzZWUgbWRfc3RhcnRfc3luYygpICovXG4rXHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSkge1xuK1x0XHRxID0gbWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZTtcbitcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbitcdFx0bGltcCA9IFx1MDAyNmxpbTtcbitcdH1cbitcbiBcdGVyciA9IG1kZGV2X3N1c3BlbmRfYW5kX2xvY2sobWRkZXYpO1xuLVx0aWYgKGVycilcbitcdGlmIChlcnIpIHtcbitcdFx0aWYgKGxpbXApXG4rXHRcdFx0cXVldWVfbGltaXRzX2NhbmNlbF91cGRhdGUocSk7XG4gXHRcdHJldHVybiBlcnI7XG4rXHR9XG4gXHRjb25mID0gbWRkZXYtXHUwMDNlcHJpdmF0ZTtcbiBcdGlmICghY29uZilcbiBcdFx0ZXJyID0gLUVOT0RFVjtcbiBcdGVsc2UgaWYgKG5ldyAhPSBjb25mLVx1MDAzZXNraXBfY29weSkge1xuLVx0XHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG4tXHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbi1cbiBcdFx0Y29uZi1cdTAwM2Vza2lwX2NvcHkgPSBuZXc7XG4tXHRcdGlmIChuZXcpXG4tXHRcdFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1NUQUJMRV9XUklURVM7XG4tXHRcdGVsc2Vcbi1cdFx0XHRsaW0uZmVhdHVyZXMgXHUwMDI2PSB+QkxLX0ZFQVRfU1RBQkxFX1dSSVRFUztcbi1cdFx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgXHUwMDI2bGltKTtcbitcdFx0aWYgKGxpbXApIHtcbitcdFx0XHRpZiAobmV3KVxuK1x0XHRcdFx0bGltcC1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9TVEFCTEVfV1JJVEVTO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGxpbXAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+QkxLX0ZFQVRfU1RBQkxFX1dSSVRFUztcbitcdFx0fVxuIFx0fVxuK1x0aWYgKGxpbXApXG4rXHRcdGVyciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbXApID86IGVycjtcbiBcdG1kZGV2X3VubG9ja19hbmRfcmVzdW1lKG1kZGV2KTtcbiBcdHJldHVybiBlcnIgPzogbGVuO1xuIH1cbkBAIC04NDQxLDcgKzg0NTQsOCBAQCBzdGF0aWMgaW50IHJhaWQ1X3JlbW92ZV9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCByYWlkNV9hZGRfZGlzayhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbitzdGF0aWMgaW50IHJhaWQ1X2FkZF9kaXNrKHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2LFxuK1x0XHRcdCAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuIHtcbiBcdHN0cnVjdCByNWNvbmYgKmNvbmYgPSBtZGRldi1cdTAwM2Vwcml2YXRlO1xuIFx0aW50IHJldCwgZXJyID0gLUVFWElTVDtcbkBAIC04NzI4LDcgKzg3NDIsNyBAQCBzdGF0aWMgaW50IHJhaWQ1X3N0YXJ0X3Jlc2hhcGUoc3RydWN0IG1kZGV2ICptZGRldilcbiBcdFx0cmRldl9mb3JfZWFjaChyZGV2LCBtZGRldilcbiBcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2sgXHUwMDNjIDAgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICF0ZXN0X2JpdChGYXVsdHksIFx1MDAyNnJkZXYtXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdFx0XHRpZiAocmFpZDVfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHtcbitcdFx0XHRcdGlmIChyYWlkNV9hZGRfZGlzayhtZGRldiwgcmRldiwgTlVMTCkgPT0gMCkge1xuIFx0XHRcdFx0XHRpZiAocmRldi1cdTAwM2VyYWlkX2Rpc2tcbiBcdFx0XHRcdFx0ICAgIFx1MDAzZT0gY29uZi1cdTAwM2VwcmV2aW91c19yYWlkX2Rpc2tzKVxuIFx0XHRcdFx0XHRcdHNldF9iaXQoSW5fc3luYywgXHUwMDI2cmRldi1cdTAwM2VmbGFncyk7XG5AQCAtODc5OSw3ICs4ODEzLDcgQEAgc3RhdGljIHZvaWQgZW5kX3Jlc2hhcGUoc3RydWN0IHI1Y29uZiAqY29uZilcbiBcdFx0d2FrZV91cChcdTAwMjZjb25mLVx1MDAzZXdhaXRfZm9yX3Jlc2hhcGUpO1xuIFxuIFx0XHRtZGRldl91cGRhdGVfaW9fb3B0KGNvbmYtXHUwMDNlbWRkZXYsXG4tXHRcdFx0Y29uZi1cdTAwM2VyYWlkX2Rpc2tzIC0gY29uZi1cdTAwM2VtYXhfZGVncmFkZWQpO1xuK1x0XHRcdGNvbmYtXHUwMDNlcmFpZF9kaXNrcyAtIGNvbmYtXHUwMDNlbWF4X2RlZ3JhZGVkLCBOVUxMKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDRmNzkwNWMzNDEyYjguLmI3NWU4NTI5MWUyOTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTEwMSw2ICsxMTAxLDMyIEBAIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4gXHRtdXRleF9sb2NrKFx1MDAyNnEtXHUwMDNlbGltaXRzX2xvY2spO1xuIFx0cmV0dXJuIHEtXHUwMDNlbGltaXRzO1xuIH1cbitcbisvKipcbisgKiBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlX3RyeWxvY2sgLSB0cnkgdG8gc3RhcnQgYW4gYXRvbWljIHVwZGF0ZSBvZiBxdWV1ZVxuKyAqXHRsaW1pdHNcbisgKiBAcTpcdFx0cXVldWUgdG8gdXBkYXRlXG4rICogQGxpbTpcdHJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBsaW1pdHMgb24gc3VjY2Vzc1xuKyAqXG4rICogTGlrZSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKCksIGJ1dCBmYWlscyBpbnN0ZWFkIG9mIHdhaXRpbmcgd2hlbiBhbm90aGVyXG4rICogdXBkYXRlIGlzIGluIGZsaWdodC4gIEZvciBjYWxsZXJzIHRoYXQgbXVzdCBub3QgYmxvY2sgb24gcS1cdTAwM2VsaW1pdHNfbG9ja1xuKyAqIGJlY2F1c2UgdGhleSBob2xkIHNvbWV0aGluZyBpdHMgY3VycmVudCBvd25lciBpcyB3YWl0aW5nIGZvci5cbisgKlxuKyAqIENvbnRleHQ6IHByb2Nlc3MgY29udGV4dC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbitxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlX3RyeWxvY2soc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4rXHRcdFx0XHQgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbitcdF9fY29uZF9hY3F1aXJlcyh0cnVlLCBcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKVxuK3tcbitcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0KmxpbSA9IHEtXHUwMDNlbGltaXRzO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIGludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4gXHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkgX19yZWxlYXNlcyhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKTtcbiBpbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxODoxMzo0OS43ODMzMDc4NDNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTYwNjg2OTk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBFdmFsdWF0aW9uOiBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgaXQgaW50cm9kdWNlcyBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCB3YXJyYW50aW5nIGEgS01TQU4gcnVuLiBJdCBzZWVtcyB0aGUgcGF0Y2ggaXMgcHJpbWFyaWx5IGZvY3VzZWQgb24gYWRkcmVzc2luZyBsb2NraW5nIG9yZGVyIGFuZCBkZWFkbG9jayBpc3N1ZXMgd2l0aGluIHRoZSBNRCBSQUlEIGNvZGUsIHBhcnRpY3VsYXJseSBhcm91bmQgYHEtXHUwMDNlbGltaXRzX2xvY2tgIHdoZW4gdXBkYXRpbmcgcXVldWUgbGltaXRzLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgY2hhbmdpbmcgaG93IGBzdHJ1Y3QgcXVldWVfbGltaXRzYCBpcyBoYW5kbGVkLiBJdCBhcHBlYXJzIHRoYXQgaW5zdGVhZCBvZiBkaXJlY3RseSBtYW5pcHVsYXRpbmcgYHEtXHUwMDNlbGltaXRzYCB3aXRoaW4gY3JpdGljYWwgc2VjdGlvbnMgd2hlcmUgZGVhZGxvY2tzIGFyZSBwb3NzaWJsZSwgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NhbCBjb3B5IChgbGltYCkgb2YgYHEtXHUwMDNlbGltaXRzYCB2aWEgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAsIHdoaWNoIGVzc2VudGlhbGx5IGNvcGllcyB0aGUgY29udGVudHMuIFRoaXMgbG9jYWwgY29weSBpcyB0aGVuIHBhc3NlZCB0byBmdW5jdGlvbnMgbGlrZSBgaG90X2FkZF9kaXNrYCwgYHJlbW92ZV9hbmRfYWRkX3NwYXJlc2AsIGV0Yy4gQ3J1Y2lhbGx5LCB0aGUgdXBkYXRlcyBhcmUgdGhlbiBjb21taXR0ZWQgYmFjayB2aWEgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKClgLiBJZiBhIHRyeSBsb2NrIGZhaWxzLCB0aGUgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4uXG5cbkkndmUgbWV0aWN1bG91c2x5IHJldmlld2VkIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdmFyaWFibGUgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gSSBleGFtaW5lZCB0aGUgaW5zdGFuY2VzIHdoZXJlIGBzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtgIGFuZCBgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltcCA9IE5VTEw7YCBhcmUgdXNlZCBhY3Jvc3MgdGhlIHBhdGNoZWQgZnVuY3Rpb25zLiBJbiBlYWNoIGluc3RhbmNlIChgcmRldl9hdHRyX3N0b3JlYCwgYG1kX2lvY3RsYCwgYG1kX3N0YXJ0X3N5bmNgLCBgY2hlY2tfc2JfY2hhbmdlc2AsIGBtZGRldl91cGRhdGVfaW9fb3B0YCwgYHJhaWQ1X3N0b3JlX3NraXBfY29weWAgYW5kIGBtZGRldl9zdGFja19yZGV2X2ludG9gKSwgYGxpbWAgaXMgYWx3YXlzIGluaXRpYWxpemVkICpiZWZvcmUqIGl0J3MgcmVmZXJlbmNlZCwgcHJpbWFyaWx5IGJ5IGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClgLCB3aGljaCByZXR1cm5zIGBxLVx1MDAzZWxpbWl0c2AgYnkgdmFsdWUuICBFdmVuIHdoZW4gYSBwb2ludGVyIHRvIGBsaW1gIGlzIHBhc3NlZCwgaXQgaXMgaW5pdGlhbGl6ZWQuIEluIHRoZSBpbnN0YW5jZXMgd2hlcmUgdGhlIHRyeWxvY2sgaXMgdXNlZCwgaXQgZmFpbHMgYmVmb3JlIHVzYWdlLiBgbWRkZXZfc3RhY2tfcmRldl9pbnRvYCBjb3BpZXMgdGhlIHBhc3NlZC1pbiBgbGltYC4gVGhlIGNvcHkgaXMgdXNlZC5cblxuSSBzZWUgbm8gc2NlbmFyaW8gd2hlcmUgdW5pbml0aWFsaXplZCBkYXRhIGlzIGJlaW5nIHJlYWQgb3IgbGVha2VkLiBUaGUgcGF0Y2ggYXBwZWFycyB0byBiZSBhIGNhcmVmdWwgcmVmYWN0b3JpbmcsIGltcHJvdmluZyBsb2NraW5nIGFuZCB0aHVzIHJlbGlhYmlsaXR5LiBUaGUgY3JpdGljYWwgZGF0YSBmbG93IGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGxpbWAgc3RydWN0IGFyZSBzYWZlLCBhbmQgdGhlcmUgYXJlIG5vIGNvcGllcyB0byB1c2VyIHNwYWNlIHRoYXQgYXJlIG1vZGlmaWVkLlxuXG5Db25zaWRlcmluZyB0aGlzIGFuYWx5c2lzLCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCAqZG9lcyBub3QqIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoIHNwZWNpZmljIHR5cGVzIG9mIG1lbW9yeSBlcnJvcnMgdGhhdCBhcmUgbm90IGFkZHJlc3NlZCBpbiB0aGlzIHBhdGNoLiAgR2l2ZW4gdGhpcyBpcyBhIHJlZmFjdG9yLCBLQVNBTiwgTE9DS0RFUCBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgdGhlIHJpZ2h0IHRvb2xzIGhlcmUuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSdtIGNvbmZpZGVudCBpbiB0aGlzIGV2YWx1YXRpb24uIExldCdzIGZsYWcgdGhpcyBhcyBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU3NywiT3V0cHV0VG9rZW5zIjoyNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTg6MTM6NTkuMzkwMTc5OTg4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUQgKHNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSBhbmQgYmxvY2sgbGF5ZXIgaGVscGVyIGZ1bmN0aW9ucyB0byByZXN0cnVjdHVyZSBob3cgcXVldWUgbGltaXRzIGFyZSB1cGRhdGVkIGFjcm9zcyBtZC1saW5lYXIsIHJhaWQxLCByYWlkMTAsIGFuZCByYWlkNSBhcnJheXMuIFNwZWNpZmljYWxseSwgaXQgcGFzc2VzIGFuIGV4aXN0aW5nIG9yIG5ld2x5IHN0YXJ0ZWQgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIHRocm91Z2ggdmFyaW91cyBob3QtYWRkL3JlbW92ZS91cGRhdGUgY2FsbCBwYXRocyB0byBhdm9pZCBsb2NrLWludmVyc2lvbiBkZWFkbG9ja3MgYmV0d2VlbiBgcS1cXHUwMDNlbGltaXRzX2xvY2tgLCBhcnJheSBzdXNwZW5zaW9uLCBhbmQgYHJlY29uZmlnX211dGV4YC5cXG5cXG5BbGwgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIGluc3RhbmNlcyBvbiB0aGUgc3RhY2sgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKHZpYSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCwgd2hpY2ggcmV0dXJucyBgcS1cXHUwMDNlbGltaXRzYCBieSB2YWx1ZSwgb3IgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jaygpYCB3aGljaCBwb3B1bGF0ZXMgYCpsaW1gKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgcmVhZCwgcGFzc2VkIHRvIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCBvciByZWZlcmVuY2Uvc3RhdGUgZXJyb3JzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWdnZXJzIHJhdGhlciB0aGFuIEtNU0FOLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyB0aGVyZWZvcmUgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUQgKHNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSBhbmQgYmxvY2sgbGF5ZXIgaGVscGVyIGZ1bmN0aW9ucyB0byByZXN0cnVjdHVyZSBob3cgcXVldWUgbGltaXRzIGFyZSB1cGRhdGVkIGFjcm9zcyBtZC1saW5lYXIsIHJhaWQxLCByYWlkMTAsIGFuZCByYWlkNSBhcnJheXMuIFNwZWNpZmljYWxseSwgaXQgcGFzc2VzIGFuIGV4aXN0aW5nIG9yIG5ld2x5IHN0YXJ0ZWQgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIHRocm91Z2ggdmFyaW91cyBob3QtYWRkL3JlbW92ZS91cGRhdGUgY2FsbCBwYXRocyB0byBhdm9pZCBsb2NrLWludmVyc2lvbiBkZWFkbG9ja3MgYmV0d2VlbiBgcS1cXHUwMDNlbGltaXRzX2xvY2tgLCBhcnJheSBzdXNwZW5zaW9uLCBhbmQgYHJlY29uZmlnX211dGV4YC5cXG5cXG5BbGwgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIGluc3RhbmNlcyBvbiB0aGUgc3RhY2sgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKHZpYSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCwgd2hpY2ggcmV0dXJucyBgcS1cXHUwMDNlbGltaXRzYCBieSB2YWx1ZSwgb3IgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVfdHJ5bG9jaygpYCB3aGljaCBwb3B1bGF0ZXMgYCpsaW1gKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgcmVhZCwgcGFzc2VkIHRvIGNvbnRyb2wgZmxvdywgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCBvciByZWZlcmVuY2Uvc3RhdGUgZXJyb3JzLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWdnZXJzIHJhdGhlciB0aGFuIEtNU0FOLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyB0aGVyZWZvcmUgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5mkd9[1] Phase: Succeeded StartedAt: 2026-09-07 18:14:10 +0000 UTC FinishedAt: 2026-09-07 18:14:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 18:14:10 +0000 UTC FinishedAt: 2026-09-07 18:14:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2] Phase: Succeeded StartedAt: 2026-09-07 18:14:10 +0000 UTC FinishedAt: 2026-09-07 21:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 18:14:10 +0000 UTC FinishedAt: 2026-09-07 21:52:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 18:14:10 +0000 UTC FinishedAt: 2026-09-07 18:14:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 18:14:10 +0000 UTC FinishedAt: 2026-09-07 18:14:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5mkd9/series-workflow5mkd9-convert-artifact-2852539896/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 18:14:20 +0000 UTC FinishedAt: 2026-09-07 18:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 18:14:20 +0000 UTC FinishedAt: 2026-09-07 18:30:34 +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:*208dfef6-3aac-4ddd-86d7-df2fd53089cb,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-workflow5mkd9/series-workflow5mkd9-convert-artifact-2852539896/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": "5ccd102b-ac52-4214-ac9c-3bff75585256", "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-workflow5mkd9/series-workflow5mkd9-build-action-2189169326/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 18:14:20 +0000 UTC FinishedAt: 2026-09-07 18:30:24 +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:*208dfef6-3aac-4ddd-86d7-df2fd53089cb,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-workflow5mkd9/series-workflow5mkd9-convert-artifact-2852539896/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": "5ccd102b-ac52-4214-ac9c-3bff75585256", "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-workflow5mkd9/series-workflow5mkd9-build-action-2189169326/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 18:30:34 +0000 UTC FinishedAt: 2026-09-07 18:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 18:30:34 +0000 UTC FinishedAt: 2026-09-07 18:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 18:30:34 +0000 UTC FinishedAt: 2026-09-07 18:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 18:30:34 +0000 UTC FinishedAt: 2026-09-07 18:30:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5mkd9/series-workflow5mkd9-convert-artifact-4236853343/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 18:30:44 +0000 UTC FinishedAt: 2026-09-07 18:32:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 18:30:44 +0000 UTC FinishedAt: 2026-09-07 18:32:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5ccd102b-ac52-4214-ac9c-3bff75585256,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-workflow5mkd9/series-workflow5mkd9-build-action-2189169326/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-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 18:32:36 +0000 UTC FinishedAt: 2026-09-07 18:32:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 18:32:36 +0000 UTC FinishedAt: 2026-09-07 18:32:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 18:32:36 +0000 UTC FinishedAt: 2026-09-07 18:49:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 18:32:36 +0000 UTC FinishedAt: 2026-09-07 18:49:06 +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:*208dfef6-3aac-4ddd-86d7-df2fd53089cb,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-workflow5mkd9/series-workflow5mkd9-convert-artifact-4236853343/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": "724421b9-c05e-4e6a-b999-625ade11a7fa", "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-workflow5mkd9/series-workflow5mkd9-build-action-1280953843/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 18:32:36 +0000 UTC FinishedAt: 2026-09-07 18:48:56 +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:*208dfef6-3aac-4ddd-86d7-df2fd53089cb,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-workflow5mkd9/series-workflow5mkd9-convert-artifact-4236853343/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": "724421b9-c05e-4e6a-b999-625ade11a7fa", "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-workflow5mkd9/series-workflow5mkd9-build-action-1280953843/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 18:49:06 +0000 UTC FinishedAt: 2026-09-07 18:49:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 18:49:06 +0000 UTC FinishedAt: 2026-09-07 18:49:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 18:49:06 +0000 UTC FinishedAt: 2026-09-07 18:50:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 18:49:06 +0000 UTC FinishedAt: 2026-09-07 18:50:46 +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:*724421b9-c05e-4e6a-b999-625ade11a7fa,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-workflow5mkd9/series-workflow5mkd9-build-action-1280953843/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-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 18:50:56 +0000 UTC FinishedAt: 2026-09-07 21:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 18:50:56 +0000 UTC FinishedAt: 2026-09-07 21:52:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"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:*5ccd102b-ac52-4214-ac9c-3bff75585256,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*724421b9-c05e-4e6a-b999-625ade11a7fa,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-workflow5mkd9/series-workflow5mkd9-build-action-2189169326/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-workflow5mkd9/series-workflow5mkd9-build-action-1280953843/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 18:50:56 +0000 UTC FinishedAt: 2026-09-07 18:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 18:50:56 +0000 UTC FinishedAt: 2026-09-07 18:51:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"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-workflow5mkd9/series-workflow5mkd9-convert-artifact-3108996216/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 18:50:56 +0000 UTC FinishedAt: 2026-09-07 18:50:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 18:50:56 +0000 UTC FinishedAt: 2026-09-07 18:50:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 18:50:56 +0000 UTC FinishedAt: 2026-09-07 18:50:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 18:51:06 +0000 UTC FinishedAt: 2026-09-07 21:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mkd9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mddev_stack_rdev_into","mddev_update_io_opt","md_add_new_disk","remove_and_add_spares","rdev_attr_store","md_start_sync","raid1_add_disk","raid10_add_disk","raid5_add_disk","raid5_store_skip_copy","linear_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_MD","MD_RAID1","MD_RAID10","MD_RAID456","MD_LINEAR","DM_RAID"],"series_id":"7d257b5c-4433-41a0-b63e-dadc753ea572","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 18:51:06 +0000 UTC FinishedAt: 2026-09-07 21:52:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5ccd102b-ac52-4214-ac9c-3bff75585256,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*724421b9-c05e-4e6a-b999-625ade11a7fa,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-workflow5mkd9/series-workflow5mkd9-build-action-2189169326/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-workflow5mkd9/series-workflow5mkd9-build-action-1280953843/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-workflow5mkd9/series-workflow5mkd9-convert-artifact-3108996216/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,}