Name: series-workflowrgqm8 Phase: Succeeded StartedAt: 2026-07-11 00:49:56 +0000 UTC FinishedAt: 2026-07-11 05:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[0] Phase: Succeeded StartedAt: 2026-07-11 00:49:56 +0000 UTC FinishedAt: 2026-07-11 01:10:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 00:49:56 +0000 UTC FinishedAt: 2026-07-11 01:10:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT4_FS_POSIX_ACL", "EXT4_FS_SECURITY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT4_FS_POSIX_ACL", "EXT4_FS_SECURITY" ], "series_id": "2e06603c-8787-4415-8d45-101104a45a9b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_put_ea_inode", "ext4_ea_inode_work", "ext4_xattr_delete_inode", "ext4_xattr_release_block", "ext4_xattr_inode_dec_ref_all", "ext4_xattr_block_set", "ext4_xattr_ibody_set" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089", "9b2e3f5d-279a-469f-9f2a-05f96ea11587" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAxOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RVhUNF9GU19QT1NJWF9BQ0wmIzM0OywKICAgICYjMzQ7RVhUNF9GU19TRUNVUklUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfcHV0X2VhX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfZWFfaW5vZGVfd29yayYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2smIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2Jsb2NrX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lib2R5X3NldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGV4dDQgeGF0dHIgbG9naWMsIHNwZWNpZmljYWxseSBob3cgRUEgaW5vZGVzIGFyZSB0cmFja2VkIGFuZCBmcmVlZCwgaW50cm9kdWNpbmcgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSB2aWEgYSB3b3JrcXVldWUgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHdpZGVseSB1c2VkIGZpbGVzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDE6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhZDEyZmY0OGQxNTNhMGIxMTNiYzNjOTVkMmQ3ODQxOTEwNjZlZGNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDE6MDk6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLmI5YjBhZGE3Nzc0YmI0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMTA3MCw4ICYjNDM7MTA3MCwxNCBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcbiBcdCAqIGJldHdlZW4gcmVhZGVycyBvZiBFQXMgYW5kIHdyaXRlcnMgb2YgcmVndWxhciBmaWxlIGRhdGEsIHNvXG4gXHQgKiBpbnN0ZWFkIHdlIHN5bmNocm9uaXplIG9uIHhhdHRyX3NlbSB3aGVuIHJlYWRpbmcgb3IgY2hhbmdpbmdcbiBcdCAqIEVBcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcbiYjNDM7XHQgKiB0aGUgc3BhY2UgZm9yIGRlZmVycmVkIGlwdXQgbGlua2FnZS5cbiBcdCAqL1xuLVx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XG4mIzQzO1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSBpX2VhX2lwdXRfbm9kZTtcbiYjNDM7XHR9O1xuIFxuIFx0LypcbiBcdCAqIElub2RlcyB3aXRoIEVYVDRfU1RBVEVfT1JQSEFOX0ZJTEUgdXNlIGlfb3JwaGFuX2lkeC4gT3RoZXJ3aXNlXG5AQCAtMTc3MCw2ICYjNDM7MTc3NiwxMSBAQCBzdHJ1Y3QgZXh0NF9zYl9pbmZvIHtcbiBcdHN0cnVjdCBleHQ0X2VzX3N0YXRzIHNfZXNfc3RhdHM7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfYmxvY2tfY2FjaGU7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfaW5vZGVfY2FjaGU7XG4mIzQzO1xuJiM0MztcdC8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIHNfZWFfaW5vZGVfdG9fZnJlZTtcbiYjNDM7XHRzdHJ1Y3QgZGVsYXllZF93b3JrIHNfZWFfaW5vZGVfd29yaztcbiYjNDM7XG4gXHRzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIFxuIFx0LyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi43NDdjNTJjMjMyY2MwMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMTc2LDcgJiM0MzsxNzYsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdCAqICh4YXR0ciBibG9jayBmcmVlaW5nKSwgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yIChpbm9kZSBmcmVlaW5nKVxuIFx0ICovXG4gXHRpbnQgZXh0cmFfY3JlZGl0cyA9IDY7XG4tXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xuIFx0Ym9vbCBmcmVlemVfcHJvdGVjdGVkID0gZmFsc2U7XG4gXG4gXHR0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTtcbkBAIC0yODEsOCAmIzQzOzI4MCw3IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fVxuIFxuIFx0LyogUmVtb3ZlIHhhdHRyIHJlZmVyZW5jZXMuICovXG4tXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRcdCAgICAgIGV4dHJhX2NyZWRpdHMpO1xuJiM0MztcdGVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIGV4dHJhX2NyZWRpdHMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRleHQ0X3dhcm5pbmcoaW5vZGUtXHUwMDNlaV9zYiwgXCYjMzQ7eGF0dHIgZGVsZXRlIChlcnIgJWQpXCYjMzQ7LCBlcnIpO1xuIHN0b3BfaGFuZGxlOlxuQEAgLTI5MCw3ICYjNDM7Mjg4LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XG4gXHRcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdFx0Z290byBub19kZWxldGU7XG4gXHR9XG4gXG5AQCAtMzIwLDcgJiM0MzszMTcsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4gXHRpZiAoZnJlZXplX3Byb3RlY3RlZClcbiBcdFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdHJldHVybjtcbiBub19kZWxldGU6XG4gXHQvKlxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLjg5OGQ4YzY0MzFiYWVhIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC0xMzAzLDYgJiM0MzsxMzAzLDggQEAgc3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdFx0XHQgXHUwMDI2c2ItXHUwMDNlc191dWlkKTtcbiBcbiBcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcbiYjNDM7XHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXG4mIzQzO1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XG4gXG4gXHRkZXN0cm95X3dvcmtxdWV1ZShzYmktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xuQEAgLTE0MjMsNiAmIzQzOzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0bWVtc2V0KFx1MDAyNmVpLVx1MDAzZWlfZHF1b3QsIDAsIHNpemVvZihlaS1cdTAwM2VpX2RxdW90KSk7XG4gI2VuZGlmXG4gXHRlaS1cdTAwM2VqaW5vZGUgPSBOVUxMO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVpbml0aWFsaXplIHhhdHRyX3NlbSBldmVyeSBhbGxvY2F0aW9uIGJlY2F1c2UgRUEgaW5vZGVzXG4mIzQzO1x0ICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heVxuJiM0MztcdCAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXNcbiYjNDM7XHQgKiBwcmV2aW91c2x5IHVzZWQgYXMgYW4gRUEgaW5vZGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2V4YXR0cl9zZW0pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZWktXHUwMDNlaV9yc3ZfY29udmVyc2lvbl9saXN0KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmVpLVx1MDAzZWlfY29tcGxldGVkX2lvX2xvY2spO1xuIFx0ZWktXHUwMDNlaV9zeW5jX3RpZCA9IDA7XG5AQCAtMTQ4OCw3ICYjNDM7MTQ5Nyw2IEBAIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXG4gXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGZvbztcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmVpLVx1MDAzZWlfb3JwaGFuKTtcbi1cdGluaXRfcndzZW0oXHUwMDI2ZWktXHUwMDNleGF0dHJfc2VtKTtcbiBcdGluaXRfcndzZW0oXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4gXHRpbm9kZV9pbml0X29uY2UoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbiBcdGV4dDRfZmNfaW5pdF9pbm9kZShcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuQEAgLTU0OTcsNiAmIzQzOzU1MDUsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdFx0XHQgIGV4dDRfaGFzX2ZlYXR1cmVfb3JwaGFuX3ByZXNlbnQoc2IpIHx8XG4gXHRcdFx0ICBleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWxfbmVlZHNfcmVjb3Zlcnkoc2IpKTtcbiBcbiYjNDM7XHRleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzYmkpO1xuJiM0MztcbiBcdGlmIChleHQ0X2hhc19mZWF0dXJlX21tcChzYikgXHUwMDI2XHUwMDI2ICFzYl9yZG9ubHkoc2IpKSB7XG4gXHRcdGVyciA9IGV4dDRfbXVsdGlfbW91bnRfcHJvdGVjdChzYiwgbGU2NF90b19jcHUoZXMtXHUwMDNlc19tbXBfYmxvY2spKTtcbiBcdFx0aWYgKGVycilcbkBAIC01NzQ3LDYgJiM0Mzs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRyZXR1cm4gMDtcbiBcbiBmYWlsZWRfbW91bnQ5OlxuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqL1xuJiM0MztcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xuQEAgLTU3NjcsNiAmIzQzOzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0aWYgKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG4gZmFpbGVkX21vdW50X3dxOlxuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbiYjNDM7XHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpO1xuIFx0c2JpLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xuIFxuQEAgLTU3NzcsNiAmIzQzOzU3OTEsOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuIFx0fVxuIGZhaWxlZF9tb3VudDNhOlxuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi9cbiYjNDM7XHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcbiBmYWlsZWRfbW91bnQzOlxuIFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cbkBAIC02NDQ3LDYgJiM0Mzs2NDYzLDcgQEAgc3RhdGljIGludCBleHQ0X3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpXG4gXG4gXHR0cmFjZV9leHQ0X3N5bmNfZnMoc2IsIHdhaXQpO1xuIFx0Zmx1c2hfd29ya3F1ZXVlKHNiaS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG4mIzQzO1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0LypcbiBcdCAqIFdyaXRlYmFjayBxdW90YSBpbiBub24tam91cm5hbGxlZCBxdW90YSBjYXNlIC0gam91cm5hbGxlZCBxdW90YSBoYXNcbiBcdCAqIG5vIGRpcnR5IGRxdW90c1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xuaW5kZXggOTgyYTFmODMxZTIyODIuLjRhZTZjZTExMTU2NjBlIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3hhdHRyLmNcbkBAIC0xMTQsMTAgJiM0MzsxMTQsNiBAQCBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcbiAjZGVmaW5lIEVBX0lOT0RFX0NBQ0hFKGlub2RlKVx0KCgoc3RydWN0IGV4dDRfc2JfaW5mbyAqKSBcXFxuIFx0XHRcdFx0aW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2ZzX2luZm8pLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpXG4gXG4tc3RhdGljIGludFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0c3RydWN0IGlub2RlICppbm9kZSk7XG4tXG4gI2lmZGVmIENPTkZJR19MT0NLREVQXG4gdm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9jbGFzcyhzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlKVxuIHtcbkBAIC01NjcsNyAmIzQzOzU2Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSxcbiBcdFx0XHRcdFx0ZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuIFx0fVxuIG91dDpcbi1cdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTExMDQsMTAgJiM0MzsxMTAwLDEwIEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcJiMzNDtpbmMgcmVmIGVycm9yICVkXCYjMzQ7LCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTEzMyw3ICYjNDM7MTEyOSw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2NsZWFudXAgZGVjIHJlZiBlcnJvciAlZFwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHR9XG4gXHRyZXR1cm4gc2F2ZWRfZXJyO1xuIH1cbkBAIC0xMTYwLDcgJiM0MzsxMTU2LDYgQEAgc3RhdGljIHZvaWRcbiBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRcdCAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbiBcdFx0XHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICpmaXJzdCwgYm9vbCBibG9ja19jc3VtLFxuLVx0XHRcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgICAgIGludCBleHRyYV9jcmVkaXRzLCBib29sIHNraXBfcXVvdGEpXG4ge1xuIFx0c3RydWN0IGlub2RlICplYV9pbm9kZTtcbkBAIC0xMTk3LDE0ICYjNDM7MTE5Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGVyciA9IGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KGVhX2lub2RlX2FycmF5LCBlYV9pbm9kZSk7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4tXHRcdFx0XHRcdCAgIFwmIzM0O0V4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWRcJiMzNDssIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbiBcdFx0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzX2ZuKGhhbmRsZSwgY3JlZGl0cywgY3JlZGl0cyxcbiBcdFx0XHRleHQ0X2ZyZWVfbWV0YWRhdGFfcmV2b2tlX2NyZWRpdHMocGFyZW50LVx1MDAzZWlfc2IsIDEpLFxuIFx0XHRcdGV4dDRfeGF0dHJfcmVzdGFydF9mbihoYW5kbGUsIHBhcmVudCwgYmgsIGJsb2NrX2NzdW0sXG5AQCAtMTIxMiw2ICYjNDM7MTE5OSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O0Vuc3VyZSBjcmVkaXRzIGVycj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbkBAIC0xMjIxLDYgJiM0MzsxMjA5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHRcJiMzNDtSZS1nZXQgd3JpdGUgYWNjZXNzIGVycj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0XHRlcnIpO1xuJiM0MztcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcdFx0fVxuQEAgLTEyMjksNiAmIzQzOzEyMTgsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcJiMzNDtlYV9pbm9kZSBkZWMgcmVmIGVycj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5AQCAtMTI0NSw2ICYjNDM7MTIzNSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGVudHJ5LVx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XG4gXHRcdGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XG4gXG4mIzQzO1x0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdGRpcnR5ID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0xMjcxLDcgJiM0MzsxMjYyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBzdGF0aWMgdm9pZFxuIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLVx0XHRcdCBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCBpbnQgZXh0cmFfY3JlZGl0cylcbiB7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKmVhX2Jsb2NrX2NhY2hlID0gRUFfQkxPQ0tfQ0FDSEUoaW5vZGUpO1xuQEAgLTEzMTMsNyAmIzQzOzEzMDMsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHRcdCAgICAgQkZJUlNUKGJoKSxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XG4gXHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsXG5AQCAtMTUwNSw3ICYjNDM7MTQ5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0aWYgKGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsIGVhX2lub2RlKSlcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XCYjMzQ7Y2xlYW51cCBkZWMgcmVmIGVycm9yICVkXCYjMzQ7LCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdFx0fVxuIFxuQEAgLTE1NjQsNyAmIzQzOzE1NTMsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4gXHRcdFx0a3ZmcmVlKGVhX2RhdGEpO1xuIFx0XHRcdHJldHVybiBlYV9pbm9kZTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdG5leHRfZW50cnk6XG4gXHRcdGNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGVhX2lub2RlX2NhY2hlLCBjZSk7XG4gXHR9XG5AQCAtMTYxNSw3ICYjNDM7MTYwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdFx0ICAgICAgZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuIFx0cmV0dXJuIGVhX2lub2RlO1xuIG91dF9lcnI6XG4tXHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHZhbHVlX2xlbik7XG4gXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIH1cbkBAIC0xODQ4LDcgJiM0MzsxODM3LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuIFxuIFx0cmV0ID0gMDtcbiBvdXQ6XG4tXHRpcHV0KG9sZF9lYV9pbm9kZSk7XG4mIzQzO1x0ZXh0NF9wdXRfZWFfaW5vZGUob2xkX2VhX2lub2RlKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTIwMTAsNyAmIzQzOzE5OTksNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0b2xkX2VhX2lub2RlX3F1b3RhID0gbGUzMl90b19jcHUoXG4gXHRcdFx0XHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfc2l6ZSk7XG4gXHRcdFx0fVxuLVx0XHRcdGlwdXQodG1wX2lub2RlKTtcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUodG1wX2lub2RlKTtcbiBcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbkBAIC0yMTUwLDcgJiM0MzsyMTM5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdFx0ICAgXCYjMzQ7ZGVjIHJlZiBlcnJvcj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0XHRcdCAgIGVycm9yKTtcbi1cdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbiBcdFx0XHR9XG4gXG5AQCAtMjE4MiwxMiAmIzQzOzIxNzEsOCBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIFx0LyogRHJvcCB0aGUgcHJldmlvdXMgeGF0dHIgYmxvY2suICovXG4gXHRpZiAoYnMtXHUwMDNlYmggXHUwMDI2XHUwMDI2IGJzLVx1MDAzZWJoICE9IG5ld19iaCkge1xuLVx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xuLVxuIFx0XHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtXHUwMDNlYmgsXG4tXHRcdFx0XHRcdCBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0IDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7XG4tXHRcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XG4gXHR9XG4gXHRlcnJvciA9IDA7XG4gXG5AQCAtMjIwMyw3ICYjNDM7MjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdH1cbiBcdGlmIChjZSlcbiBcdFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XG5AQCAtMjI4NSw3ICYjNDM7MjI3MCw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG5AQCAtMjI5Nyw3ICYjNDM7MjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRoZWFkZXItXHUwMDNlaF9tYWdpYyA9IGNwdV90b19sZTMyKDApO1xuIFx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTtcbiBcdH1cbi1cdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yODYzLDQ2ICYjNDM7Mjg0OCw2IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovXG4tI2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxuLVxuLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuXG4tICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcbi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cbi0gKi9cbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkge1xuLVx0XHQvKlxuLVx0XHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXG4tXHRcdCAqL1xuLVx0XHQoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHRcdFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XG4tXHRcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgPSAwO1xuLVx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xuLVx0XHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICYjNDM7IG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqL1xuLVx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDtcbi1cbi1cdFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdFx0ICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ICYjNDM7IEVJQV9JTkNSLFxuLVx0XHRcdFx0XHQgR0ZQX05PRlMpO1xuLVx0XHRpZiAobmV3X2FycmF5ID09IE5VTEwpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdG1lbWNweShuZXdfYXJyYXksICplYV9pbm9kZV9hcnJheSxcbi1cdFx0ICAgICAgIHN0cnVjdF9zaXplKCplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0ICAgKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQpKTtcbi1cdFx0a2ZyZWUoKmVhX2lub2RlX2FycmF5KTtcbi1cdFx0KmVhX2lub2RlX2FycmF5ID0gbmV3X2FycmF5O1xuLVx0fVxuLVx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQmIzQzOyYjNDM7O1xuLVx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlaW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50IC0gMV0gPSBpbm9kZTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKClcbiAgKlxuQEAgLTI5MTMsNyAmIzQzOzI4NTgsNiBAQCBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuICAqIHJlZmVyZW5jZXMgb24geGF0dHIgYmxvY2sgYW5kIHhhdHRyIGlub2Rlcy5cbiAgKi9cbiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHQgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgICAgaW50IGV4dHJhX2NyZWRpdHMpXG4ge1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XG5AQCAtMjk1Miw3ICYjNDM7Mjg5Niw2IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcbiBcdFx0XHRcdFx0XHQgICAgIElGSVJTVChoZWFkZXIpLFxuIFx0XHRcdFx0XHRcdCAgICAgZmFsc2UgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0fVxuQEAgLTI5ODYsMTIgJiM0MzsyOTI5LDEyIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xuLVx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdH1cbiBcbiBcdFx0fVxuIFxuLVx0XHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsIGVhX2lub2RlX2FycmF5LFxuJiM0MztcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4gXHRcdC8qXG4gXHRcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcbkBAIC0zMDEzLDE2ICYjNDM7Mjk1Niw2MyBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KVxuJiM0MzsvKlxuJiM0MzsgKiBXb3JrZXIgZnVuY3Rpb24gZm9yIGRlZmVycmVkIEVBIGlub2RlIGlwdXQuICBQcm9jZXNzZXMgYWxsIGlub2RlcyBxdWV1ZWRcbiYjNDM7ICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0aW50IGlkeDtcbiYjNDM7XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvLFxuJiM0MztcdFx0XHRcdFx0XHRzX2VhX2lub2RlX3dvcmspO1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbiBcbi1cdGlmIChlYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxuJiM0MztcdHdoaWxlIChub2RlKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpO1xuJiM0MztcdFx0bm9kZSA9IG5vZGUtXHUwMDNlbmV4dDtcbiYjNDM7XHRcdGlwdXQoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlbGVhc2UgYSBWRlMgcmVmZXJlbmNlIG9uIGFuIEVBIGlub2RlLiAgTXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgaXB1dCgpXG4mIzQzOyAqIGluIGFueSBjb250ZXh0IHdoZXJlIHhhdHRyX3NlbSBvciBhIGpiZDIgaGFuZGxlIGlzIGhlbGQuXG4mIzQzOyAqXG4mIzQzOyAqIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IHJlZmVyZW5jZSwgZHJvcHMgaXQgaW1tZWRpYXRlbHkgdmlhXG4mIzQzOyAqIGlwdXRfaWZfbm90X2xhc3QoKSB3aXRoIG5vIGZ1cnRoZXIgYWN0aW9uIG5lZWRlZC5cbiYjNDM7ICpcbiYjNDM7ICogSWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UsIHRoZSBpbm9kZSBpcyBsaW5rZWQgb250byBhIHBlci1zYlxuJiM0MzsgKiBsbGlzdCB2aWEgaV9lYV9pcHV0X25vZGUgKGVtYmVkZGVkIGluIGV4dDRfaW5vZGVfaW5mbywgc2hhcmluZyBzcGFjZVxuJiM0MzsgKiB3aXRoIHRoZSB1bnVzZWQgeGF0dHJfc2VtKSBhbmQgYSBkZWxheWVkIHdvcmtlciBwZXJmb3JtcyB0aGUgZmluYWxcbiYjNDM7ICogaXB1dCgpIGluIGEgY2xlYW4gY29udGV4dC5cbiYjNDM7ICpcbiYjNDM7ICogTm90ZTogd2hpbGUgYW4gaW5vZGUgaXMgb24gc19lYV9pbm9kZV90b19mcmVlLCB0aGUgdW5jb25zdW1lZCBpX2NvdW50XG4mIzQzOyAqIHJlZmVyZW5jZSAoc3RpbGwgMSkga2VlcHMgaXQgaW4gdGhlIGlub2RlIGNhY2hlLCBzbyBhbnkgY29uY3VycmVudFxuJiM0MzsgKiBpZ2V0KCkgYnVtcHMgaV9jb3VudCB0byBcdTAwM2U9IDIgYW5kIGlwdXRfaWZfbm90X2xhc3QoKSB3aWxsIHN1Y2NlZWQuXG4mIzQzOyAqIE5vYm9keSB3aWxsIGFkZCB0aGUgaW5vZGUgYSBzZWNvbmQgdGltZSB1bnRpbCBleHQ0X2VhX2lub2RlX3dvcmsoKVxuJiM0MzsgKiBkcm9wcyB0aGF0IHJlZmVyZW5jZSB2aWEgaXB1dCgpLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFpbm9kZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKTtcbiYjNDM7XHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXG4gXHRcdHJldHVybjtcbiYjNDM7XHRsbGlzdF9hZGQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2VhX2lwdXRfbm9kZSxcbiYjNDM7XHRcdCAgXHUwMDI2RVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlIGEgc2hvcnQgZGVsYXkgdG8gYWxsb3cgbXVsdGlwbGUgRUEgaW5vZGVzIHRvIGFjY3VtdWxhdGUsXG4mIzQzO1x0ICogcmVkdWNpbmcgd29ya3F1ZXVlIHdha2V1cHMgd2hlbiBzZXZlcmFsIGFyZSByZWxlYXNlZCB0b2dldGhlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2RVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2VhX2lub2RlX3dvcmssIDEpO1xuJiM0Mzt9XG4gXG4tXHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgZWFfaW5vZGVfYXJyYXktXHUwMDNlY291bnQ7ICYjNDM7JiM0MztpZHgpXG4tXHRcdGlwdXQoZWFfaW5vZGVfYXJyYXktXHUwMDNlaW5vZGVzW2lkeF0pO1xuLVx0a2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuJiM0Mzt2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcbiYjNDM7e1xuJiM0MztcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbiYjNDM7XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrLCBleHQ0X2VhX2lub2RlX3dvcmspO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuaCBiL2ZzL2V4dDQveGF0dHIuaFxuaW5kZXggMWZlZGY0NGQ0ZmI2NWUuLjgyMWRjNmE1MGU1MWU3IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC94YXR0ci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3hhdHRyLmhcbkBAIC0xMzEsMTEgJiM0MzsxMzEsNiBAQCBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIHtcbiBcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcbiB9O1xuIFxuLXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5IHtcbi1cdHVuc2lnbmVkIGludCBjb3VudDtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGVzW10gX19jb3VudGVkX2J5KGNvdW50KTtcbi19O1xuLVxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3VzZXJfaGFuZGxlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcjtcbkBAIC0xODcsOSAmIzQzOzE4Miw5IEBAIGV4dGVybiBpbnQgX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRib29sIGlzX2NyZWF0ZSk7XG4gXG4gZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiphcnJheSxcbiBcdFx0XHRcdCAgIGludCBleHRyYV9jcmVkaXRzKTtcbi1leHRlcm4gdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmFycmF5KTtcbiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKTtcbiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXG4gZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IDUwY2U3MzFhMmI3OGYxLi5hYTFkNTAxZDJiYjYyNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtMjQxMyw2ICYjNDM7MjQxMywyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJfc2V0X3N5c2ZzX25hbWVfZ2VuZXJpYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaFxuIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTtcbiBleHRlcm4gdm9pZCBpcHV0KHN0cnVjdCBpbm9kZSAqKTtcbiB2b2lkIGlwdXRfbm90X2xhc3Qoc3RydWN0IGlub2RlICopO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGlwdXRfaWZfbm90X2xhc3QgLSBkcm9wIGFuIGlub2RlIHJlZmVyZW5jZSBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmVcbiYjNDM7ICogQGlub2RlOiBpbm9kZSB0byBwdXRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWZlcmVuY2Ugd2FzIGRyb3BwZWQsIGZhbHNlIGlmIHRoaXMgd2FzIHRoZSBsYXN0XG4mIzQzOyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciBtdXN0IGFycmFuZ2UgZm9yIGZpbmFsIGlwdXQoKSBpbiBhIHNhZmUgY29udGV4dC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0VkZTX0JVR19PTl9JTk9ERShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiAoSV9GUkVFSU5HIHwgSV9DTEVBUiksIGlub2RlKTtcbiYjNDM7XHRWRlNfQlVHX09OX0lOT0RFKGljb3VudF9yZWFkX29uY2UoaW5vZGUpIFx1MDAzYyAxLCBpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIGF0b21pY19hZGRfdW5sZXNzKFx1MDAyNmlub2RlLVx1MDAzZWlfY291bnQsIC0xLCAxKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMTowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0VYVDRfRlNfUE9TSVhfQUNMJiMzNDssCiAgICAmIzM0O0VYVDRfRlNfU0VDVVJJVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3B1dF9lYV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X2VhX2lub2RlX3dvcmsmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9kZWxldGVfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9ibG9ja19zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pYm9keV9zZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleHQ0IHhhdHRyIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IEVBIGlub2RlcyBhcmUgdHJhY2tlZCBhbmQgZnJlZWQsIGludHJvZHVjaW5nIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gdmlhIGEgd29ya3F1ZXVlIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSB3aWRlbHkgdXNlZCBmaWxlc3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZDEyZmY0OGQxNTNhMGIxMTNiYzNjOTVkMmQ3ODQxOTEwNjZlZGNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTEgMDE6MDk6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IGIzN2MxMzZlYTNhYjMzLi5iOWIwYWRhNzc3NGJiNCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0LmgKQEAgLTEwNzAsOCAmIzQzOzEwNzAsMTQgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7CiAJICogYmV0d2VlbiByZWFkZXJzIG9mIEVBcyBhbmQgd3JpdGVycyBvZiByZWd1bGFyIGZpbGUgZGF0YSwgc28KIAkgKiBpbnN0ZWFkIHdlIHN5bmNocm9uaXplIG9uIHhhdHRyX3NlbSB3aGVuIHJlYWRpbmcgb3IgY2hhbmdpbmcKIAkgKiBFQXMuCiYjNDM7CSAqCiYjNDM7CSAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2UKJiM0MzsJICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuCiAJICovCi0Jc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtOwomIzQzOwkJc3RydWN0IGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGU7CiYjNDM7CX07CiAKIAkvKgogCSAqIElub2RlcyB3aXRoIEVYVDRfU1RBVEVfT1JQSEFOX0ZJTEUgdXNlIGlfb3JwaGFuX2lkeC4gT3RoZXJ3aXNlCkBAIC0xNzcwLDYgJiM0MzsxNzc2LDExIEBAIHN0cnVjdCBleHQ0X3NiX2luZm8gewogCXN0cnVjdCBleHQ0X2VzX3N0YXRzIHNfZXNfc3RhdHM7CiAJc3RydWN0IG1iX2NhY2hlICpzX2VhX2Jsb2NrX2NhY2hlOwogCXN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTsKJiM0MzsKJiM0MzsJLyogRGVmZXJyZWQgaXB1dCBmb3IgRUEgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzICovCiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkIHNfZWFfaW5vZGVfdG9fZnJlZTsKJiM0MzsJc3RydWN0IGRlbGF5ZWRfd29yayBzX2VhX2lub2RlX3dvcms7CiYjNDM7CiAJc3BpbmxvY2tfdCBzX2VzX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAogCS8qIEpvdXJuYWwgdHJpZ2dlcnMgZm9yIGNoZWNrc3VtIGNvbXB1dGF0aW9uICovCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggY2U5OTgwN2M1ZjViMmMuLjc0N2M1MmMyMzJjYzAzIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jCkBAIC0xNzYsNyAmIzQzOzE3Niw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCSAqICh4YXR0ciBibG9jayBmcmVlaW5nKSwgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yIChpbm9kZSBmcmVlaW5nKQogCSAqLwogCWludCBleHRyYV9jcmVkaXRzID0gNjsKLQlzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMOwogCWJvb2wgZnJlZXplX3Byb3RlY3RlZCA9IGZhbHNlOwogCiAJdHJhY2VfZXh0NF9ldmljdF9pbm9kZShpbm9kZSk7CkBAIC0yODEsOCAmIzQzOzI4MCw3IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCX0KIAogCS8qIFJlbW92ZSB4YXR0ciByZWZlcmVuY2VzLiAqLwotCWVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsICZhbXA7ZWFfaW5vZGVfYXJyYXksCi0JCQkJICAgICAgZXh0cmFfY3JlZGl0cyk7CiYjNDM7CWVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIGV4dHJhX2NyZWRpdHMpOwogCWlmIChlcnIpIHsKIAkJZXh0NF93YXJuaW5nKGlub2RlLSZndDtpX3NiLCAmIzM0O3hhdHRyIGRlbGV0ZSAoZXJyICVkKSYjMzQ7LCBlcnIpOwogc3RvcF9oYW5kbGU6CkBAIC0yOTAsNyAmIzQzOzI4OCw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQlleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpOwogCQlpZiAoZnJlZXplX3Byb3RlY3RlZCkKIAkJCXNiX2VuZF9pbnR3cml0ZShpbm9kZS0mZ3Q7aV9zYik7Ci0JCWV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7CiAJCWdvdG8gbm9fZGVsZXRlOwogCX0KIApAQCAtMzIwLDcgJiM0MzszMTcsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCWlmIChmcmVlemVfcHJvdGVjdGVkKQogCQlzYl9lbmRfaW50d3JpdGUoaW5vZGUtJmd0O2lfc2IpOwotCWV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7CiAJcmV0dXJuOwogbm9fZGVsZXRlOgogCS8qCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLjg5OGQ4YzY0MzFiYWVhIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jCkBAIC0xMzAzLDYgJiM0MzsxMzAzLDggQEAgc3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAkJCSAmYW1wO3NiLSZndDtzX3V1aWQpOwogCiAJZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpOwomIzQzOwkvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovCiYjNDM7CWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrKTsKIAlleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTsKIAogCWRlc3Ryb3lfd29ya3F1ZXVlKHNiaS0mZ3Q7cnN2X2NvbnZlcnNpb25fd3EpOwpAQCAtMTQyMyw2ICYjNDM7MTQyNSwxMyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJbWVtc2V0KCZhbXA7ZWktJmd0O2lfZHF1b3QsIDAsIHNpemVvZihlaS0mZ3Q7aV9kcXVvdCkpOwogI2VuZGlmCiAJZWktJmd0O2ppbm9kZSA9IE5VTEw7CiYjNDM7CS8qCiYjNDM7CSAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2RlcwomIzQzOwkgKiBzaGFyZSB0aGlzIHNwYWNlIHdpdGggaV9lYV9pcHV0X25vZGUgKHZpYSB1bmlvbikgd2hpY2ggbWF5CiYjNDM7CSAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXMKJiM0MzsJICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLgomIzQzOwkgKi8KJiM0MzsJaW5pdF9yd3NlbSgmYW1wO2VpLSZndDt4YXR0cl9zZW0pOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7ZWktJmd0O2lfcnN2X2NvbnZlcnNpb25fbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtlaS0mZ3Q7aV9jb21wbGV0ZWRfaW9fbG9jayk7CiAJZWktJmd0O2lfc3luY190aWQgPSAwOwpAQCAtMTQ4OCw3ICYjNDM7MTQ5Nyw2IEBAIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pCiAJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBmb287CiAKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2VpLSZndDtpX29ycGhhbik7Ci0JaW5pdF9yd3NlbSgmYW1wO2VpLSZndDt4YXR0cl9zZW0pOwogCWluaXRfcndzZW0oJmFtcDtlaS0mZ3Q7aV9kYXRhX3NlbSk7CiAJaW5vZGVfaW5pdF9vbmNlKCZhbXA7ZWktJmd0O3Zmc19pbm9kZSk7CiAJZXh0NF9mY19pbml0X2lub2RlKCZhbXA7ZWktJmd0O3Zmc19pbm9kZSk7CkBAIC01NDk3LDYgJiM0Mzs1NTA1LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJCQkgIGV4dDRfaGFzX2ZlYXR1cmVfb3JwaGFuX3ByZXNlbnQoc2IpIHx8CiAJCQkgIGV4dDRfaGFzX2ZlYXR1cmVfam91cm5hbF9uZWVkc19yZWNvdmVyeShzYikpOwogCiYjNDM7CWV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHNiaSk7CiYjNDM7CiAJaWYgKGV4dDRfaGFzX2ZlYXR1cmVfbW1wKHNiKSAmYW1wOyZhbXA7ICFzYl9yZG9ubHkoc2IpKSB7CiAJCWVyciA9IGV4dDRfbXVsdGlfbW91bnRfcHJvdGVjdChzYiwgbGU2NF90b19jcHUoZXMtJmd0O3NfbW1wX2Jsb2NrKSk7CiAJCWlmIChlcnIpCkBAIC01NzQ3LDYgJiM0Mzs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJcmV0dXJuIDA7CiAKIGZhaWxlZF9tb3VudDk6CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqLwomIzQzOwlmbHVzaF9kZWxheWVkX3dvcmsoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfd29yayk7CiAJZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7CiBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZAogCWV4dDRfcmVsZWFzZV9vcnBoYW5faW5mbyhzYik7CkBAIC01NzY3LDYgJiM0Mzs1Nzc5LDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWQKIAlpZiAoRVhUNF9TQihzYiktJmd0O3Jzdl9jb252ZXJzaW9uX3dxKQogCQlkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS0mZ3Q7cnN2X2NvbnZlcnNpb25fd3EpOwogZmFpbGVkX21vdW50X3dxOgomIzQzOwkvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgZnJlZWluZyBzdHJ1Y3R1cmVzICovCiYjNDM7CWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrKTsKIAlleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLSZndDtzX2VhX2lub2RlX2NhY2hlKTsKIAlzYmktJmd0O3NfZWFfaW5vZGVfY2FjaGUgPSBOVUxMOwogCkBAIC01Nzc3LDYgJiM0Mzs1NzkxLDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWQKIAkJZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktJmd0O3Nfam91cm5hbCk7CiAJfQogZmFpbGVkX21vdW50M2E6CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi8KJiM0MzsJZmx1c2hfZGVsYXllZF93b3JrKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3dvcmspOwogCWV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpOwogZmFpbGVkX21vdW50MzoKIAkvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqLwpAQCAtNjQ0Nyw2ICYjNDM7NjQ2Myw3IEBAIHN0YXRpYyBpbnQgZXh0NF9zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KQogCiAJdHJhY2VfZXh0NF9zeW5jX2ZzKHNiLCB3YWl0KTsKIAlmbHVzaF93b3JrcXVldWUoc2JpLSZndDtyc3ZfY29udmVyc2lvbl93cSk7CiYjNDM7CWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrKTsKIAkvKgogCSAqIFdyaXRlYmFjayBxdW90YSBpbiBub24tam91cm5hbGxlZCBxdW90YSBjYXNlIC0gam91cm5hbGxlZCBxdW90YSBoYXMKIAkgKiBubyBkaXJ0eSBkcXVvdHMKZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuYwppbmRleCA5ODJhMWY4MzFlMjI4Mi4uNGFlNmNlMTExNTY2MGUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3hhdHRyLmMKQEAgLTExNCwxMCAmIzQzOzExNCw2IEBAIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0gewogI2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSkJKCgoc3RydWN0IGV4dDRfc2JfaW5mbyAqKSBcCiAJCQkJaW5vZGUtJmd0O2lfc2ItJmd0O3NfZnNfaW5mbyktJmd0O3NfZWFfaW5vZGVfY2FjaGUpCiAKLXN0YXRpYyBpbnQKLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCi0JCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLQogI2lmZGVmIENPTkZJR19MT0NLREVQCiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpCiB7CkBAIC01NjcsNyAmIzQzOzU2Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSwKIAkJCQkJZWFfaW5vZGUtJmd0O2lfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTsKIAl9CiBvdXQ6Ci0JaXB1dChlYV9pbm9kZSk7CiYjNDM7CWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMTA0LDEwICYjNDM7MTEwMCwxMCBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZihoYW5kbGUsIGVhX2lub2RlKTsKIAkJaWYgKGVycikgewogCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCAmIzM0O2luYyByZWYgZXJyb3IgJWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJCWdvdG8gY2xlYW51cDsKIAkJfQotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAl9CiAJcmV0dXJuIDA7CiAKQEAgLTExMzMsNyAmIzQzOzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIpCiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7Y2xlYW51cCBkZWMgcmVmIGVycm9yICVkJiMzNDssCiAJCQkJCSAgIGVycik7Ci0JCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpOwogCX0KIAlyZXR1cm4gc2F2ZWRfZXJyOwogfQpAQCAtMTE2MCw3ICYjNDM7MTE1Niw2IEBAIHN0YXRpYyB2b2lkCiBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSwKLQkJCSAgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKIAkJCSAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlOwpAQCAtMTE5NywxNCAmIzQzOzExOTIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyKQogCQkJY29udGludWU7CiAKLQkJZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAotCQkJCQkgICAmIzM0O0V4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwotCQkJY29udGludWU7Ci0JCX0KLQogCQllcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLAogCQkJZXh0NF9mcmVlX21ldGFkYXRhX3Jldm9rZV9jcmVkaXRzKHBhcmVudC0mZ3Q7aV9zYiwgMSksCiAJCQlleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLApAQCAtMTIxMiw2ICYjNDM7MTE5OSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIgJmx0OyAwKSB7CiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7RW5zdXJlIGNyZWRpdHMgZXJyPSVkJiMzNDssCiAJCQkJCSAgIGVycik7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGVyciAmZ3Q7IDApIHsKQEAgLTEyMjEsNiAmIzQzOzEyMDksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKIAkJCQkJCSYjMzQ7UmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWQmIzM0OywKIAkJCQkJCWVycik7CiYjNDM7CQkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJfQpAQCAtMTIyOSw2ICYjNDM7MTIxOCw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIpIHsKIAkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgJiMzNDtlYV9pbm9kZSBkZWMgcmVmIGVycj0lZCYjMzQ7LAogCQkJCQkgICBlcnIpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTEyNDUsNiAmIzQzOzEyMzUsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQllbnRyeS0mZ3Q7ZV92YWx1ZV9pbnVtID0gMDsKIAkJZW50cnktJmd0O2VfdmFsdWVfc2l6ZSA9IDA7CiAKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJZGlydHkgPSB0cnVlOwogCX0KIApAQCAtMTI3MSw3ICYjNDM7MTI2Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiBzdGF0aWMgdm9pZAogZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKLQkJCSBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LAogCQkJIGludCBleHRyYV9jcmVkaXRzKQogewogCXN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7CkBAIC0xMzEzLDcgJiM0MzsxMzAzLDYgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLAogCQkJCQkJICAgICBCRklSU1QoYmgpLAogCQkJCQkJICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sCi0JCQkJCQkgICAgIGVhX2lub2RlX2FycmF5LAogCQkJCQkJICAgICBleHRyYV9jcmVkaXRzLAogCQkJCQkJICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pOwogCQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJoLCAwLCAxLApAQCAtMTUwNSw3ICYjNDM7MTQ5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsCiAJCQlpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKQogCQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKIAkJCQkJJiMzNDtjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJCXJldHVybiBFUlJfUFRSKGVycik7CiAJCX0KIApAQCAtMTU2NCw3ICYjNDM7MTU1Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSwKIAkJCWt2ZnJlZShlYV9kYXRhKTsKIAkJCXJldHVybiBlYV9pbm9kZTsKIAkJfQotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAluZXh0X2VudHJ5OgogCQljZSA9IG1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChlYV9pbm9kZV9jYWNoZSwgY2UpOwogCX0KQEAgLTE2MTUsNyAmIzQzOzE2MDQsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCQkgICAgICBlYV9pbm9kZS0mZ3Q7aV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pOwogCXJldHVybiBlYV9pbm9kZTsKIG91dF9lcnI6Ci0JaXB1dChlYV9pbm9kZSk7CiYjNDM7CWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAlleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHZhbHVlX2xlbik7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KQEAgLTE4NDgsNyAmIzQzOzE4MzcsNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksCiAKIAlyZXQgPSAwOwogb3V0OgotCWlwdXQob2xkX2VhX2lub2RlKTsKJiM0MzsJZXh0NF9wdXRfZWFfaW5vZGUob2xkX2VhX2lub2RlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDEwLDcgJiM0MzsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlvbGRfZWFfaW5vZGVfcXVvdGEgPSBsZTMyX3RvX2NwdSgKIAkJCQkJCXMtJmd0O2hlcmUtJmd0O2VfdmFsdWVfc2l6ZSk7CiAJCQl9Ci0JCQlpcHV0KHRtcF9pbm9kZSk7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUodG1wX2lub2RlKTsKIAogCQkJcy0mZ3Q7aGVyZS0mZ3Q7ZV92YWx1ZV9pbnVtID0gMDsKIAkJCXMtJmd0O2hlcmUtJmd0O2VfdmFsdWVfc2l6ZSA9IDA7CkBAIC0yMTUwLDcgJiM0MzsyMTM5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAogCQkJCQkJCSAgICYjMzQ7ZGVjIHJlZiBlcnJvcj0lZCYjMzQ7LAogCQkJCQkJCSAgIGVycm9yKTsKLQkJCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCQkJZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpOwogCQkJCWVhX2lub2RlID0gTlVMTDsKIAkJCX0KIApAQCAtMjE4MiwxMiAmIzQzOzIxNzEsOCBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCiAJLyogRHJvcCB0aGUgcHJldmlvdXMgeGF0dHIgYmxvY2suICovCiAJaWYgKGJzLSZndDtiaCAmYW1wOyZhbXA7IGJzLSZndDtiaCAhPSBuZXdfYmgpIHsKLQkJc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDsKLQogCQlleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtJmd0O2JoLAotCQkJCQkgJmFtcDtlYV9pbm9kZV9hcnJheSwKIAkJCQkJIDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7Ci0JCWV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7CiAJfQogCWVycm9yID0gMDsKIApAQCAtMjIwMyw3ICYjNDM7MjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLAogCQkJCQkJICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7CiAJCX0KLQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQlleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7CiAJfQogCWlmIChjZSkKIAkJbWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7CkBAIC0yMjg1LDcgJiM0MzsyMjcwLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCQkgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJfQogCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtMjI5Nyw3ICYjNDM7MjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQloZWFkZXItJmd0O2hfbWFnaWMgPSBjcHVfdG9fbGUzMigwKTsKIAkJZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUik7CiAJfQotCWlwdXQoZWFfaW5vZGUpOwomIzQzOwlleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4NjMsNDYgJiM0MzsyODQ4LDYgQEAgaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsCiAJcmV0dXJuIGVycm9yOwogfQogCi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovCi0jZGVmaW5lIEVJQV9NQVNLIChFSUFfSU5DUiAtIDEpCi0KLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuCi0gKiBJZiBAZWFfaW5vZGVfYXJyYXkgaXMgbmV3IG9yIGZ1bGwgaXQgd2lsbCBiZSBncm93biBhbmQgdGhlIG9sZAotICogY29udGVudHMgY29waWVkIG92ZXIuCi0gKi8KLXN0YXRpYyBpbnQKLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCi0JCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkgewotCQkvKgotCQkgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuCi0JCSAqLwotCQkoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsCi0JCQkJCQkgRUlBX01BU0ssIEdGUF9OT0ZTKTsKLQkJaWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCSgqZWFfaW5vZGVfYXJyYXkpLSZndDtjb3VudCA9IDA7Ci0JfSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50ICZhbXA7IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykgewotCQkvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICYjNDM7IG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqLwotCQlzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDsKLQotCQluZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLAotCQkJCQkgKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50ICYjNDM7IEVJQV9JTkNSLAotCQkJCQkgR0ZQX05PRlMpOwotCQlpZiAobmV3X2FycmF5ID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJbWVtY3B5KG5ld19hcnJheSwgKmVhX2lub2RlX2FycmF5LAotCQkgICAgICAgc3RydWN0X3NpemUoKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsCi0JCQkJICAgKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50KSk7Ci0JCWtmcmVlKCplYV9pbm9kZV9hcnJheSk7Ci0JCSplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTsKLQl9Ci0JKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50JiM0MzsmIzQzOzsKLQkoKmVhX2lub2RlX2FycmF5KS0mZ3Q7aW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLSZndDtjb3VudCAtIDFdID0gaW5vZGU7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSgpCiAgKgpAQCAtMjkxMyw3ICYjNDM7Mjg1OCw2IEBAIGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuCiAgKi8KIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCiAJCQkgICAgaW50IGV4dHJhX2NyZWRpdHMpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CkBAIC0yOTUyLDcgJiM0MzsyODk2LDYgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsCiAJCQkJCQkgICAgIElGSVJTVChoZWFkZXIpLAogCQkJCQkJICAgICBmYWxzZSAvKiBibG9ja19jc3VtICovLAotCQkJCQkJICAgICBlYV9pbm9kZV9hcnJheSwKIAkJCQkJCSAgICAgZXh0cmFfY3JlZGl0cywKIAkJCQkJCSAgICAgZmFsc2UgLyogc2tpcF9xdW90YSAqLyk7CiAJfQpAQCAtMjk4NiwxMiAmIzQzOzI5MjksMTIgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCWNvbnRpbnVlOwogCQkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCSAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LSZndDtlX3ZhbHVlX3NpemUpKTsKLQkJCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCQkJZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpOwogCQkJfQogCiAJCX0KIAotCQlleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsIGVhX2lub2RlX2FycmF5LAomIzQzOwkJZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLAogCQkJCQkgZXh0cmFfY3JlZGl0cyk7CiAJCS8qCiAJCSAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXMKQEAgLTMwMTMsMTYgJiM0MzsyOTU2LDYzIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiBlcnJvcjsKIH0KIAotdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KQomIzQzOy8qCiYjNDM7ICogV29ya2VyIGZ1bmN0aW9uIGZvciBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0LiAgUHJvY2Vzc2VzIGFsbCBpbm9kZXMgcXVldWVkCiYjNDM7ICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWludCBpZHg7CiYjNDM7CXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksCiYjNDM7CQkJCQkJc3RydWN0IGV4dDRfc2JfaW5mbywKJiM0MzsJCQkJCQlzX2VhX2lub2RlX3dvcmspOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfdG9fZnJlZSk7CiAKLQlpZiAoZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkKJiM0MzsJd2hpbGUgKG5vZGUpIHsKJiM0MzsJCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gY29udGFpbmVyX29mKG5vZGUsCiYjNDM7CQkJCQlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCBpX2VhX2lwdXRfbm9kZSk7CiYjNDM7CQlub2RlID0gbm9kZS0mZ3Q7bmV4dDsKJiM0MzsJCWlwdXQoJmFtcDtlaS0mZ3Q7dmZzX2lub2RlKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlbGVhc2UgYSBWRlMgcmVmZXJlbmNlIG9uIGFuIEVBIGlub2RlLiAgTXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgaXB1dCgpCiYjNDM7ICogaW4gYW55IGNvbnRleHQgd2hlcmUgeGF0dHJfc2VtIG9yIGEgamJkMiBoYW5kbGUgaXMgaGVsZC4KJiM0MzsgKgomIzQzOyAqIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IHJlZmVyZW5jZSwgZHJvcHMgaXQgaW1tZWRpYXRlbHkgdmlhCiYjNDM7ICogaXB1dF9pZl9ub3RfbGFzdCgpIHdpdGggbm8gZnVydGhlciBhY3Rpb24gbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogSWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UsIHRoZSBpbm9kZSBpcyBsaW5rZWQgb250byBhIHBlci1zYgomIzQzOyAqIGxsaXN0IHZpYSBpX2VhX2lwdXRfbm9kZSAoZW1iZWRkZWQgaW4gZXh0NF9pbm9kZV9pbmZvLCBzaGFyaW5nIHNwYWNlCiYjNDM7ICogd2l0aCB0aGUgdW51c2VkIHhhdHRyX3NlbSkgYW5kIGEgZGVsYXllZCB3b3JrZXIgcGVyZm9ybXMgdGhlIGZpbmFsCiYjNDM7ICogaXB1dCgpIGluIGEgY2xlYW4gY29udGV4dC4KJiM0MzsgKgomIzQzOyAqIE5vdGU6IHdoaWxlIGFuIGlub2RlIGlzIG9uIHNfZWFfaW5vZGVfdG9fZnJlZSwgdGhlIHVuY29uc3VtZWQgaV9jb3VudAomIzQzOyAqIHJlZmVyZW5jZSAoc3RpbGwgMSkga2VlcHMgaXQgaW4gdGhlIGlub2RlIGNhY2hlLCBzbyBhbnkgY29uY3VycmVudAomIzQzOyAqIGlnZXQoKSBidW1wcyBpX2NvdW50IHRvICZndDs9IDIgYW5kIGlwdXRfaWZfbm90X2xhc3QoKSB3aWxsIHN1Y2NlZWQuCiYjNDM7ICogTm9ib2R5IHdpbGwgYWRkIHRoZSBpbm9kZSBhIHNlY29uZCB0aW1lIHVudGlsIGV4dDRfZWFfaW5vZGVfd29yaygpCiYjNDM7ICogZHJvcHMgdGhhdCByZWZlcmVuY2UgdmlhIGlwdXQoKS4KJiM0MzsgKi8KJiM0Mzt2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlpZiAoIWlub2RlKQomIzQzOwkJcmV0dXJuOwomIzQzOwlXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLSZndDtpX2ZsYWdzICZhbXA7IEVYVDRfRUFfSU5PREVfRkwpKTsKJiM0MzsJaWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKQogCQlyZXR1cm47CiYjNDM7CWxsaXN0X2FkZCgmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfZWFfaXB1dF9ub2RlLAomIzQzOwkJICAmYW1wO0VYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwomIzQzOwkvKgomIzQzOwkgKiBVc2UgYSBzaG9ydCBkZWxheSB0byBhbGxvdyBtdWx0aXBsZSBFQSBpbm9kZXMgdG8gYWNjdW11bGF0ZSwKJiM0MzsJICogcmVkdWNpbmcgd29ya3F1ZXVlIHdha2V1cHMgd2hlbiBzZXZlcmFsIGFyZSByZWxlYXNlZCB0b2dldGhlci4KJiM0MzsJICovCiYjNDM7CXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO0VYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2VhX2lub2RlX3dvcmssIDEpOwomIzQzO30KIAotCWZvciAoaWR4ID0gMDsgaWR4ICZsdDsgZWFfaW5vZGVfYXJyYXktJmd0O2NvdW50OyAmIzQzOyYjNDM7aWR4KQotCQlpcHV0KGVhX2lub2RlX2FycmF5LSZndDtpbm9kZXNbaWR4XSk7Ci0Ja2ZyZWUoZWFfaW5vZGVfYXJyYXkpOwomIzQzO3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKQomIzQzO3sKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrLCBleHQ0X2VhX2lub2RlX3dvcmspOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oCmluZGV4IDFmZWRmNDRkNGZiNjVlLi44MjFkYzZhNTBlNTFlNyAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuaApAQCAtMTMxLDExICYjNDM7MTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7CiAJc3RydWN0IGV4dDRfaWxvYyBpbG9jOwogfTsKIAotc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgewotCXVuc2lnbmVkIGludCBjb3VudDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7Ci19OwotCiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyOwpAQCAtMTg3LDkgJiM0MzsxODIsOSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCWJvb2wgaXNfY3JlYXRlKTsKIAogZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksCiAJCQkJICAgaW50IGV4dHJhX2NyZWRpdHMpOwotZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7CiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKTsKJiM0MztleHRlcm4gdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLAogCQkJICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDUwY2U3MzFhMmI3OGYxLi5hYTFkNTAxZDJiYjYyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMjQxMyw2ICYjNDM7MjQxMywyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJfc2V0X3N5c2ZzX25hbWVfZ2VuZXJpYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaAogZXh0ZXJuIHZvaWQgaWhvbGQoc3RydWN0IGlub2RlICogaW5vZGUpOwogZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7CiB2b2lkIGlwdXRfbm90X2xhc3Qoc3RydWN0IGlub2RlICopOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGlwdXRfaWZfbm90X2xhc3QgLSBkcm9wIGFuIGlub2RlIHJlZmVyZW5jZSBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmUKJiM0MzsgKiBAaW5vZGU6IGlub2RlIHRvIHB1dAomIzQzOyAqCiYjNDM7ICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWZlcmVuY2Ugd2FzIGRyb3BwZWQsIGZhbHNlIGlmIHRoaXMgd2FzIHRoZSBsYXN0CiYjNDM7ICogcmVmZXJlbmNlIGFuZCB0aGUgY2FsbGVyIG11c3QgYXJyYW5nZSBmb3IgZmluYWwgaXB1dCgpIGluIGEgc2FmZSBjb250ZXh0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJVkZTX0JVR19PTl9JTk9ERShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpICZhbXA7IChJX0ZSRUVJTkcgfCBJX0NMRUFSKSwgaW5vZGUpOwomIzQzOwlWRlNfQlVHX09OX0lOT0RFKGljb3VudF9yZWFkX29uY2UoaW5vZGUpICZsdDsgMSwgaW5vZGUpOwomIzQzOwlyZXR1cm4gYXRvbWljX2FkZF91bmxlc3MoJmFtcDtpbm9kZS0mZ3Q7aV9jb3VudCwgLTEsIDEpOwomIzQzO30KJiM0MzsKIGludCBpbm9kZV91cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsCiAJCXVuc2lnbmVkIGludCBmbGFncyk7CiBpbnQgZ2VuZXJpY191cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAxOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeHQ0IFhhdHRyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBleHQ0LiBJdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBob3cgRXh0ZW5kZWQgQXR0cmlidXRlcyAoRUFzKSBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgdHJhY2tpbmcgYW5kIGZyZWVpbmcgb2YgRUEgaW5vZGVzLiBUaGV5JiMzOTt2ZSBhZGRlZCB0aGlzIGBleHQ0X3B1dF9lYV9pbm9kZWAgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBVc2luZyBgaXB1dF9pZl9ub3RfbGFzdGAgaXMgYSBnb29kIGFwcHJvYWNoIHRvIGF2b2lkIHByZW1hdHVyZSBpbm9kZSByZWxlYXNlLCBhbmQgZGVmZXJyaW5nIHRoZSBmaW5hbCBgaXB1dGAgdG8gdGhhdCB3b3JrcXVldWUsIGBzX2VhX2lub2RlX3dvcmtgLCBtYWtlcyBzZW5zZSBmb3IgYXZvaWRpbmcgcG90ZW50aWFsIGxvY2sgb3JkZXJpbmcgaXNzdWVzLCB3aGljaCBpcyBhbHdheXMgYSBjb25jZXJuIGluIGZpbGVzeXN0ZW0gY29kZS4gR29vZCB0byBzZWUgdGhleSYjMzk7cmUgYmVpbmcgcHJvYWN0aXZlIGFib3V0IHRoYXQuCgpOb3csIHRoZSB1bmlvbmluZyBvZiBgeGF0dHJfc2VtYCB3aXRoIGBpX2VhX2lwdXRfbm9kZWAgd2l0aGluIGBleHQ0X2lub2RlX2luZm9gIHNlZW1zIGxpa2UgYSBjbGV2ZXIgb3B0aW1pemF0aW9uLiBDb25zb2xpZGF0aW5nIHRob3NlIHR3bywgZXNwZWNpYWxseSBpZiBgaV9lYV9pcHV0X25vZGVgIGlzIGFuIGBsbGlzdF9ub2RlYCwgbWFrZXMgbWUgdGhpbmsgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHJlZHVjZSBtZW1vcnkgZm9vdHByaW50LCBhbmQgcG9zc2libHkgaW1wcm92ZSBjYWNoZSBlZmZpY2llbmN5LiBTbWFydCBtb3ZlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGNvcmUgZXh0NCBmaWxlc3lzdGVtLCBzbyBpdOKAmXMgd29ydGggYSBkZWVwIGRpdmUuCgpGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSByZWFjaGFibGUsIHdoaWNoIGlzIGNydWNpYWwuIEV4dDQgaXMgdGhlIGZpbGVzeXN0ZW0sIG9mIGNvdXJzZS4gVGhlbiwgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBFWFQ0X0ZTYCBpcyB0aGUgb2J2aW91cyBvbmUsIHdoaWNoIHdpbGwgYnJpbmcgaW4gbW9zdCBvZiB3aGF04oCZcyBuZWVkZWQsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBmb3IgYEVYVDRfRlNfWEFUVFJgIHRvbywganVzdCBpbiBjYXNlIHRoZXkmIzM5O3ZlIGdvdCBzb21lIGZpbmVyLWdyYWluZWQgZGVwZW5kZW5jaWVzLiBNYXliZSBgRVhUNF9GU19QT1NJWF9BQ0xgIG9yIGBFWFQ0X0ZTX1NFQ1VSSVRZYCBhcmUgaW52b2x2ZWQgdG9vLCB0aG91Z2ggbGVzcyBsaWtlbHkuIFRpbWUgdG8gY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUNCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXG5mcy9leHQ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTM0LVxuZnMvZXh0NC9LY29uZmlnOjM1OmNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuZnMvZXh0NC9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNjctXG5mcy9leHQ0L0tjb25maWc6Njg6Y29uZmlnIEVYVDRfREVCVUdcbmZzL2V4dDQvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7RXh0NCBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy03Ni1cbmZzL2V4dDQvS2NvbmZpZzo3Nzpjb25maWcgRVhUNF9LVU5JVF9URVNUU1xuZnMvZXh0NC9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGV4dDRcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAxOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjA2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXh0NCBYYXR0ciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgaGVhcnQgb2YgRXh0NCYjMzk7cyBleHRlbmRlZCBhdHRyaWJ1dGUgKHhhdHRyKSBoYW5kbGluZy4gSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgcXVpdGUgYSBmZXcga2V5IGZpbGVzOiBgZnMvZXh0NC94YXR0ci5jYCwgYGZzL2V4dDQvaW5vZGUuY2AsIGBmcy9leHQ0L3N1cGVyLmNgLCBhcyB3ZWxsIGFzIHRoZSByZWxhdGVkIGhlYWRlcnMsIGFuZCBldmVuIGBpbmNsdWRlL2xpbnV4L2ZzLmhgLiBUaGlzIHN1Z2dlc3RzIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZXMgYXJlIGhhcHBlbmluZywgcG90ZW50aWFsbHkgaW1wYWN0aW5nIGhvdyB4YXR0cnMgYXJlIHN0b3JlZCwgYWNjZXNzZWQsIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGUgZmlsZXN5c3RlbS4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpY2luZyBhIGNsdXN0ZXIgb2YgbmV3bHkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBmdW5jdGlvbnM6IGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X2VhX2lub2RlX3dvcmtgLCBgZXh0NF9pbml0X2VhX2lub2RlX3dvcmtgLCBgaXB1dF9pZl9ub3RfbGFzdGAsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBhbmQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLiBUaGUgbmFtZXMgYWxvbmUgZ2l2ZSBtZSBhIHByZXR0eSBnb29kIGlkZWEgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgYnV0IEkmIzM5O2xsIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGNvZGUuIEl0IGxvb2tzIGxpa2UgdGhleSBhcmUgaGFuZGxpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIChFQSkgaW5vZGVzLCBsaWtlbHkgYXJvdW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGlub2RlcyBhbmQgYXNzb2NpYXRlZCBibG9ja3MuIEl0IG1pZ2h0IGJlIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGNvdW50aW5nIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoZSB4YXR0ciBzcGFjZSwgYW5kIHBvdGVudGlhbGx5IGhvdyB0aGV5IGFyZSBjbGVhbmVkIHVwIG9yIHJlbW92ZWQuIFRoZSBgaXB1dF9pZl9ub3RfbGFzdGAgZnVuY3Rpb24gc2VlbXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgZm9jdXMgb24gaW5vZGUgaGFuZGxpbmcgYW5kIHJlZmVyZW5jZSBjb3VudHMuCgpCZWZvcmUgSSBnbyB0b28gZmFyLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGJhc2ljOiBpcyB4YXR0ciBmdW5jdGlvbmFsaXR5IGNvbmRpdGlvbmFsIG9uIHRoZSBgRVhUNF9GU19YQVRUUmAgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlzIGl0IGFsd2F5cyBidWlsdCBpbiBmb3IgRXh0ND8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpcyBleHBhbmRpbmcgZXhpc3RpbmcgZmVhdHVyZXMsIG9yIGNoYW5naW5nIHRoZSBzdGFuZGFyZCBiZWhhdmlvciBmb3IgbW9zdCBFeHQ0IGluc3RhbGxhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDE6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFQ0X0ZTX1hBVFRSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAxOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjM2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBFWFQ0IFhhdHRyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYW5kIHRoZXJlJiMzOTtzIG5vIGV4cGxpY2l0bHkgZGVmaW5lZCBgRVhUNF9GU19YQVRUUmAgb3B0aW9uIGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIGEgYml0IG9kZC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgc3VwcG9ydCBmb3IgZXh0NCBpcyBlaXRoZXIgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUgZmlsZXN5c3RlbSBpdHNlbGYsIG9yIHBlcmhhcHMgaXQmIzM5O3MgZ2F0ZWQgYmVoaW5kIHRoZSBnZW5lcmFsIGBFWFQ0X0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0JiMzOTtzIGRpZyBpbiBhIGJpdCBkZWVwZXIgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaGFzIHRvIHNheS4gVGhlIGBmcy9leHQ0L01ha2VmaWxlYCBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHNlZSBpZiBJIGNhbiB1bmRlcnN0YW5kIGhvdyB4YXR0ciBzdXBwb3J0IGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDE6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGF0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG4tLVxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cdFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXG5mcy9leHQ0L01ha2VmaWxlOjEyOlx0XHRzdXBlci5vIHN5bWxpbmsubyBzeXNmcy5vIHhhdHRyLm8geGF0dHJfaHVyZC5vIHhhdHRyX3RydXN0ZWQubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMzpcdFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cbmZzL2V4dDQvTWFrZWZpbGUtMTQtXG5mcy9leHQ0L01ha2VmaWxlPTE1PWV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXHQmIzQzOz0gYWNsLm9cbmZzL2V4dDQvTWFrZWZpbGU6MTY6ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVx0XHQmIzQzOz0geGF0dHJfc2VjdXJpdHkub1xuZnMvZXh0NC9NYWtlZmlsZS0xNy1leHQ0LXRlc3Qtb2Jqc1x0XHRcdFx0JiM0Mzs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAxOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzMzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFWFQ0IEV4dGVuZGVkIEF0dHJpYnV0ZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIHRoYXQgdGhlIGB4YXR0ci5vYCBvYmplY3QgZmlsZSBpcyAqYWx3YXlzKiBidWlsdCB3aGVuIHRoZSBgRVhUNF9GU2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgdGhvcm91Z2hseSB0ZXN0aW5nIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgY29kZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBlbmFibGUgYEVYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgLiBUaGF0IHNob3VsZCBwcm92aWRlIGNvbXBsZXRlIGNvdmVyYWdlLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHNvbWUga2V5IHN5bWJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5vZGUtcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQuIEkmIzM5O20gZm9jdXNpbmcgb24gYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBhbmQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLgoKYGV4dDRfcHV0X2VhX2lub2RlYCwgYWgsIHRoYXQmIzM5O3MgZGVmaW5lZCBpbiBgZnMvZXh0NC94YXR0ci5jYCBhbmQgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFNvIG90aGVyIEVYVDQgY29tcG9uZW50cyBhcmUgdXNpbmcgaXQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gTm93IGBleHQ0X2VhX2lub2RlX3dvcmtgIGlzIHN0YXRpYyB0byB0aGUgZmlsZSBhbmQgdGhlcmVmb3JlIG5vdCBleHBvc2VkIHRvIG90aGVyIGV4dDQgZmlsZXMuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAgaXMgaW4gdGhhdCBzYW1lIGZpbGUsIGBmcy9leHQ0L3hhdHRyLmNgLgoKSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRob3NlIGZ1bmN0aW9uIG5hbWVzLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmUgdGhlIGNvcnJlY3Qgc3ltYm9scy4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDE6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8odm9pZHxpbnQpIGV4dDRfcHV0X2VhX2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYz0yOTYzPXN0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI5OTUtICovXG5mcy9leHQ0L3hhdHRyLmM6Mjk5Njp2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L3hhdHRyLmMtMjk5Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAxOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDU1CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFeHRlbmRlZCBBdHRyaWJ1dGUgUmVsZWFzZSBhbmQgUmVmZXJlbmNlIENvdW50aW5nIGluIGV4dDQqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIHJ1bm5pbmcgdGhyb3VnaCBteSBoZWFkIGFzIEkgbG9vayBhdCB0aGlzOiBJIG5lZWQgdG8gemVybyBpbiBvbiBhIGZldyBjcml0aWNhbCBmdW5jdGlvbnMgd2l0aGluIHRoZSBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZSAoeGF0dHIpIGhhbmRsaW5nIGNvZGUuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJIHN1c3BlY3QgdGhlc2UgYXJlIGtleSBhcmVhcyBmb3IgcmV2aWV3IGFuZCBsaWtlbHkgd2hlcmUgcmVsYXRlZCBpc3N1ZXMgY291bGQgYmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dDogYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBhbmQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLgoKTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgYmxvY2sgcmVsZWFzZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGUga2V5IGZ1bmN0aW9ucyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIGFyZSBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCBhbmQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgIOKAkyBwYXJ0aWN1bGFybHkgaG93IHRoZXkgbWFuYWdlIHRoZSByZWxlYXNlIG9mIHhhdHRyIGJsb2NrcyBhbmQgcmVkdWNlIHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIGFzc29jaWF0ZWQgaW5vZGUsIHJlc3BlY3RpdmVseS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgZnMvZXh0NC94YXR0ci5jYCBhbmQgZmlndXJlIG91dCB0aGVpciBleGFjdCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDE6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyh2b2lkfGludCkgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDE6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYSBLZXJuZWwgSXNzdWU6IGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHNvbWV0aGluZyBhYm91dCBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIHplcm9lcyBpbiBvbiB0aGF0IGZ1bmN0aW9uIG5hbWUuIEl0IHNjcmVhbXMgJiMzNDtleHQ0IGZpbGVzeXN0ZW0mIzM0OyBhbmQgJiMzNDtleHRlbmRlZCBhdHRyaWJ1dGVzJiMzNDsg4oCTIHNwZWNpZmljYWxseSwgdGhlIHJlbGVhc2Ugb2YgYSBibG9jayBpbnZvbHZlZCBpbiBtYW5hZ2luZyB4YXR0cnMuIFRoaXMgbGlrZWx5IHBvaW50cyB0byBhbiBpc3N1ZSByZWxhdGVkIHRvIGhvdyB0aGUgZmlsZXN5c3RlbSBpcyBoYW5kbGluZyB0aGUgZnJlZWluZyB1cCBvZiBkaXNrIHNwYWNlIHRpZWQgdG8gdGhvc2UgZXh0ZW5kZWQgYXR0cmlidXRlIGVudHJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUga2luZCBvZiB3cml0ZSBwYXRoIG9yIHBlcmhhcHMgYSBkZWxldGlvbiBzY2VuYXJpbywgcG9zc2libHkgaW52b2x2aW5nIGNvcnJ1cHRlZCBtZXRhZGF0YSBvciBhIHJhY2UgY29uZGl0aW9uLiBJJiMzOTttIGltYWdpbmluZyBwb3RlbnRpYWxseSBhbiBpc3N1ZSB3aGVyZSB0aGUgYmxvY2sgaXMgYmVpbmcgcHJlbWF0dXJlbHkgcmVsZWFzZWQsIG9yIHBlcmhhcHMgaXMgbm90IGdldHRpbmcgZnJlZWQgdXAgY29ycmVjdGx5IGF0IGFsbC4gTmVlZCB0byBkaXZlIGRlZXBlciEgSeKAmWQgc3RhcnQgYnkgbG9va2luZyBmb3IgYW55IHJlY2VudCBwYXRjaGVzLCBidWdzIG9yIHJlZ3Jlc3Npb25zIGFyb3VuZCB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgbGFzdCBmZXcga2VybmVsIHJlbGVhc2VzLiBMZXTigJlzIGdyZXAgdGhlIGNvZGViYXNlIGZvciB0aGF0IGV4YWN0IGZ1bmN0aW9uIG5hbWUgYW5kIHNlZSB3aGF0IGNvbWVzIHVwLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCDigJMgd2hhdCBjYWxscyBpdD8gd2hhdCBpcyBjYWxsZWQgYnkgaXQ/IFdoYXQgc3RydWN0dXJlcyBkb2VzIGl0IGludGVyYWN0IHdpdGg/IFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jPTEyNjI9c3RhdGljIHZvaWRcbmZzL2V4dDQveGF0dHIuYzoxMjYzOmV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC94YXR0ci5jLTEyNjQtXHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE4ODg9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjE3My1cdGlmIChicy1cdTAwM2ViaCBcdTAwMjZcdTAwMjYgYnMtXHUwMDNlYmggIT0gbmV3X2JoKSB7XG5mcy9leHQ0L3hhdHRyLmM6MjE3NDpcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVx1MDAzZWJoLFxuZnMvZXh0NC94YXR0ci5jLTIxNzUtXHRcdFx0XHRcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xuLS1cbmZzL2V4dDQveGF0dHIuYz0yODYwPWludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yOTM2LVxuZnMvZXh0NC94YXR0ci5jOjI5Mzc6XHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbmZzL2V4dDQveGF0dHIuYy0yOTM4LVx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAxOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTIxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIEV4dDQgWGF0dHIgRGVsZXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAgZnVuY3Rpb24uIEdvb2QgdG8gc2VlIHRoYXQgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AgYW5kIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCBhcmUgYm90aCBzdGF0aWMsIHdoaWNoIGhlbHBzIGluIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZWlyIHVzZSB3aXRoaW4gdGhlIHhhdHRyIGhhbmRsaW5nLiBOb3csIHRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAgKmRvZXMqIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlbGF0ZWQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgZnJvbSB0aGVyZS4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHM/IExldCYjMzk7cyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmM9Mjc0OD1pbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjg1MS0vKlxuZnMvZXh0NC94YXR0ci5jOjI4NTI6ICogZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoKVxuZnMvZXh0NC94YXR0ci5jLTI4NTMtICpcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjg1OS0gKi9cbmZzL2V4dDQveGF0dHIuYzoyODYwOmludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC94YXR0ci5jLTI4NjEtXHRcdFx0ICAgIGludCBleHRyYV9jcmVkaXRzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk2OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEVYVDQgWGF0dHIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgaXQmIzM5O3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgd2UgaGFuZGxlIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgZm9yIEVBIGlub2RlcyB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gR2l2ZW4gdGhlIHNjb3BlLCB0aGlzIHNjcmVhbXMgJiMzNDtwb3RlbnRpYWwgZm9yIGZ1enppbmcgb3Bwb3J0dW5pdGllcy4mIzM0OyBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBjb25jZW50cmF0ZWQgYXJvdW5kIHRoZSBoYW5kbGluZyBvZiBFQSBpbm9kZXMuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMsIGp1c3QgdG8gYmUgc3VyZSB3ZSBhcmUgY292ZXJpbmcgYWxsIHBvdGVudGlhbCBiYXNlczogYEVYVDRfRlNgLCBgRVhUNF9GU19QT1NJWF9BQ0xgLCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgIGFyZSBkZWZpbml0ZWx5IHJlbGV2YW50IGhlcmUuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBhZGRlZC4gVGhlIGluaXRpYWwgbGlzdCBpbmNsdWRlcyBgZXh0NF9wdXRfZWFfaW5vZGVgLCBgZXh0NF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCwgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AsIGFuZCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIHNvIEkgd2lsbCBnaXZlIHRoZW0gdGhlIHByaW9yaXR5LgoKSG93ZXZlciwgSSBzaG91bGQgYmUgdGhvcm91Z2ggYW5kIGNoZWNrIGZvciBvdGhlciBjaGFuZ2VzLiBPa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBJIGZpbmQgYGV4dDRfYWxsb2NfaW5vZGVgIGluIGBmcy9leHQ0L3N1cGVyLmNgLCBgZXh0NF9ldmljdF9pbm9kZWAgaW4gYGZzL2V4dDQvaW5vZGUuY2AsIGBleHQ0X3B1dF9zdXBlcmAgaW4gYGZzL2V4dDQvc3VwZXIuY2AsIGBfX2V4dDRfZmlsbF9zdXBlcmAgaW4gYGZzL2V4dDQvc3VwZXIuY2AsIGBleHQ0X3N5bmNfZnNgIGluIGBmcy9leHQ0L3N1cGVyLmNgLCBgZXh0NF94YXR0cl9pbm9kZV9nZXRgIGluIGBmcy9leHQ0L3hhdHRyLmNgLCBgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbGAgaW4gYGZzL2V4dDQveGF0dHIuY2AsIGBleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZWAgaW4gYGZzL2V4dDQveGF0dHIuY2AsIGBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmRgIGluIGBmcy9leHQ0L3hhdHRyLmNgLCBgZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlYCBpbiBgZnMvZXh0NC94YXR0ci5jYCwgYGV4dDRfeGF0dHJfc2V0X2VudHJ5YCBpbiBgZnMvZXh0NC94YXR0ci5jYCwgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBpbiBgZnMvZXh0NC94YXR0ci5jYCwgYW5kIGBleHQ0X3hhdHRyX2lib2R5X3NldGAgaW4gYGZzL2V4dDQveGF0dHIuY2AuCgpPa2F5LCBhZnRlciByZXZpZXdpbmcgdGhlIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucywgSSBjYW4gc2VlIHRoYXQgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBhbmQgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YCBhcmUgYWxzbyBxdWl0ZSByZWxldmFudCBhbmQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBmdXp6aW5nIGZvY3VzLiBJJiMzOTtsbCBpbmNsdWRlIHRob3NlIGluIG15IGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AuCgpOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCB0aGUgYWN0dWFsIGZ1enppbmcsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGBpcHV0X2lmX25vdF9sYXN0YC4gVGhhdCBzZWVtcyBsaWtlIGFuIGltcG9ydGFudCBmdW5jdGlvbiB0byBrZWVwIGluIG1pbmQsIGluIHJlZ2FyZHMgdG8gdGhlIGNvZGUtcGF0aCB0YWtlbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB1dF9pZl9ub3RfbGFzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZzLmg9MjQxNT12b2lkIGlwdXRfbm90X2xhc3Qoc3RydWN0IGlub2RlICopO1xuLS1cbmluY2x1ZGUvbGludXgvZnMuaC0yNDE3LS8qKlxuaW5jbHVkZS9saW51eC9mcy5oOjI0MTg6ICogaXB1dF9pZl9ub3RfbGFzdCAtIGRyb3AgYW4gaW5vZGUgcmVmZXJlbmNlIG9ubHkgaWYgaXQgaXMgbm90IHRoZSBsYXN0IG9uZVxuaW5jbHVkZS9saW51eC9mcy5oLTI0MTktICogQGlub2RlOiBpbm9kZSB0byBwdXRcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjQyMy0gKi9cbmluY2x1ZGUvbGludXgvZnMuaDoyNDI0OnN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuaW5jbHVkZS9saW51eC9mcy5oLTI0MjUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQxNQoJCQkJCQkJb3V0cHV0OiAxODkKCQkJCQkJCXRob3VnaHRzOiAyMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSBhbmQgSSYjMzk7bSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdC4gRmlyc3Qgb2ZmLCB0aGlzIGZ1bmN0aW9uIGlzIGBzdGF0aWMgaW5saW5lYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93IGJlY2F1c2UgaXQgbWVhbnMgaXQgd29uJiMzOTt0IGNsdXR0ZXIgdGhlIGtlcm5lbCBzeW1ib2wgdGFibGUuIEkgY2FuIHNraXAgaW5jbHVkaW5nIGl0IGluIGBGb2N1c1N5bWJvbHNgLiBUaGF0JiMzOTtsbCBrZWVwIHRoaW5ncyBjbGVhbmVyLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHByZXBhcmUgdGhlIGZpbmFsIGRlY2lzaW9uLgoKYFdvcnRoRnV6emluZ2Agc2hvdWxkIGRlZmluaXRlbHkgYmUgYHRydWVgLiBUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBjb21wZWxsaW5nIGhlcmU6IHRoaXMgcGF0Y2ggaXMgbWVzc2luZyB3aXRoICpjb3JlKiBleHQ0IHhhdHRyIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIGlub2RlcyBhcmUgbWFuYWdlZC4gSXQmIzM5O3MgbWFraW5nIGZ1bmRhbWVudGFsIGNoYW5nZXMgdG8gaG93IHRob3NlIGlub2RlcyBhcmUgdHJhY2tlZCBhbmQgZnJlZWQsIGFuZCBpdCYjMzk7cyBkb2luZyBzbyB3aXRoIGEgbmV3IGRlZmVycmVkIGBpcHV0YCBtZWNoYW5pc20gaW1wbGVtZW50ZWQgdmlhIGEgd29ya3F1ZXVlLiBUaGlzIGlzIGRlc2lnbmVkIHRvIHNpZGVzdGVwIHRob3NlIG5hc3R5IGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZmlsZXN5c3RlbSB0aGF0JiMzOTtzIHVzZWQgKmV2ZXJ5d2hlcmUqLiBUaGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgYnVncyBpcyBoaWdoLCBhbmQgdGhlIGltcGFjdCBjb3VsZCBiZSB3aWRlc3ByZWFkLgoKR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgbG9vayBsaWtlIGBFWFQ0X0ZTYCwgYEVYVDRfRlNfUE9TSVhfQUNMYCwgYW5kIGBFWFQ0X0ZTX1NFQ1VSSVRZYC4KCkZpbmFsbHksIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IGlzIGxvb2tpbmcgc29saWQuIEkgc2hvdWxkIGtlZXAgYW4gZXllIG9uIHRoZXNlIGZ1bmN0aW9uczogYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIGFuZCBgZXh0NF94YXR0cl9pYm9keV9zZXRgLiBUaGV5JiMzOTtyZSBhbGwga2V5IHRvIHRoaXMgbmV3IEVBIGlub2RlIG1hbmFnZW1lbnQgYW5kIGRlZmVycmVkIGBpcHV0YCBwcm9jZXNzLiBJdCYjMzk7cyBhIGNvbXBsZXRlIHZpZXcgb2YgaG93IHRoZSBmdW5jdGlvbmFsaXR5IGlzIGNoYW5nZWQgYW5kIGdpdmVzIGEgZ29vZCBwb2ludCB0byBiZWdpbiB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTX1BPU0lYX0FDTCYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTX1NFQ1VSSVRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9wdXRfZWFfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9lYV9pbm9kZV93b3JrJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfZGVsZXRlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfYmxvY2tfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaWJvZHlfc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgZXh0NCB4YXR0ciBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBFQSBpbm9kZXMgYXJlIHRyYWNrZWQgYW5kIGZyZWVkLCBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIHZpYSBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgd2lkZWx5IHVzZWQgZmlsZXN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTX1BPU0lYX0FDTCYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTX1NFQ1VSSVRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9wdXRfZWFfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9lYV9pbm9kZV93b3JrJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfZGVsZXRlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfYmxvY2tfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaWJvZHlfc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgZXh0NCB4YXR0ciBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBFQSBpbm9kZXMgYXJlIHRyYWNrZWQgYW5kIGZyZWVkLCBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIHZpYSBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgd2lkZWx5IHVzZWQgZmlsZXN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAxOjA5OjI5LjY4NTA0MjI2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NzcxMDM1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiRVhUNF9GU19QT1NJWF9BQ0xcIixcbiAgICBcIkVYVDRfRlNfU0VDVVJJVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3B1dF9lYV9pbm9kZVwiLFxuICAgIFwiZXh0NF9lYV9pbm9kZV93b3JrXCIsXG4gICAgXCJleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZVwiLFxuICAgIFwiZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsXCIsXG4gICAgXCJleHQ0X3hhdHRyX2Jsb2NrX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9pYm9keV9zZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGV4dDQgeGF0dHIgbG9naWMsIHNwZWNpZmljYWxseSBob3cgRUEgaW5vZGVzIGFyZSB0cmFja2VkIGFuZCBmcmVlZCwgaW50cm9kdWNpbmcgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSB2aWEgYSB3b3JrcXVldWUgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHdpZGVseSB1c2VkIGZpbGVzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAxOjA5OjI5LjY4NTA0OTM4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTE1NDQ4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZDEyZmY0OGQxNTNhMGIxMTNiYzNjOTVkMmQ3ODQxOTEwNjZlZGNiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDExIDAxOjA5OjI4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxcbkBAIC0xMDcwLDggKzEwNzAsMTQgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XFxuIFxcdCAqIGJldHdlZW4gcmVhZGVycyBvZiBFQXMgYW5kIHdyaXRlcnMgb2YgcmVndWxhciBmaWxlIGRhdGEsIHNvXFxuIFxcdCAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZ1xcbiBcXHQgKiBFQXMuXFxuK1xcdCAqXFxuK1xcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcXG4rXFx0ICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuXFxuIFxcdCAqL1xcbi1cXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcXG4rXFx0XFx0c3RydWN0IGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGU7XFxuK1xcdH07XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBJbm9kZXMgd2l0aCBFWFQ0X1NUQVRFX09SUEhBTl9GSUxFIHVzZSBpX29ycGhhbl9pZHguIE90aGVyd2lzZVxcbkBAIC0xNzcwLDYgKzE3NzYsMTEgQEAgc3RydWN0IGV4dDRfc2JfaW5mbyB7XFxuIFxcdHN0cnVjdCBleHQ0X2VzX3N0YXRzIHNfZXNfc3RhdHM7XFxuIFxcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcXG4gXFx0c3RydWN0IG1iX2NhY2hlICpzX2VhX2lub2RlX2NhY2hlO1xcbitcXG4rXFx0LyogRGVmZXJyZWQgaXB1dCBmb3IgRUEgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzICovXFxuK1xcdHN0cnVjdCBsbGlzdF9oZWFkIHNfZWFfaW5vZGVfdG9fZnJlZTtcXG4rXFx0c3RydWN0IGRlbGF5ZWRfd29yayBzX2VhX2lub2RlX3dvcms7XFxuK1xcbiBcXHRzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbiBcXG4gXFx0LyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi9cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXFxuaW5kZXggY2U5OTgwN2M1ZjViMmMuLjc0N2M1MmMyMzJjYzAzIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xcbkBAIC0xNzYsNyArMTc2LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdCAqICh4YXR0ciBibG9jayBmcmVlaW5nKSwgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yIChpbm9kZSBmcmVlaW5nKVxcbiBcXHQgKi9cXG4gXFx0aW50IGV4dHJhX2NyZWRpdHMgPSA2O1xcbi1cXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xcbiBcXHRib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTtcXG4gXFxuIFxcdHRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpO1xcbkBAIC0yODEsOCArMjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFJlbW92ZSB4YXR0ciByZWZlcmVuY2VzLiAqL1xcbi1cXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBcXHUwMDI2ZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdFxcdFxcdCAgICAgIGV4dHJhX2NyZWRpdHMpO1xcbitcXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBleHRyYV9jcmVkaXRzKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRleHQ0X3dhcm5pbmcoaW5vZGUtXFx1MDAzZWlfc2IsIFxcXCJ4YXR0ciBkZWxldGUgKGVyciAlZClcXFwiLCBlcnIpO1xcbiBzdG9wX2hhbmRsZTpcXG5AQCAtMjkwLDcgKzI4OCw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xcbiBcXHRcXHRpZiAoZnJlZXplX3Byb3RlY3RlZClcXG4gXFx0XFx0XFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcXG4gXFx0XFx0Z290byBub19kZWxldGU7XFxuIFxcdH1cXG4gXFxuQEAgLTMyMCw3ICszMTcsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4gXFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXFxuIFxcdFxcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cXHUwMDNlaV9zYik7XFxuLVxcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuIFxcdHJldHVybjtcXG4gbm9fZGVsZXRlOlxcbiBcXHQvKlxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uODk4ZDhjNjQzMWJhZWEgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXFxuKysrIGIvZnMvZXh0NC9zdXBlci5jXFxuQEAgLTEzMDMsNiArMTMwMyw4IEBAIHN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdFxcdFxcdCBcXHUwMDI2c2ItXFx1MDAzZXNfdXVpZCk7XFxuIFxcbiBcXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XFxuK1xcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi9cXG4rXFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yayk7XFxuIFxcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xcbiBcXG4gXFx0ZGVzdHJveV93b3JrcXVldWUoc2JpLVxcdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XFxuQEAgLTE0MjMsNiArMTQyNSwxMyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdG1lbXNldChcXHUwMDI2ZWktXFx1MDAzZWlfZHF1b3QsIDAsIHNpemVvZihlaS1cXHUwMDNlaV9kcXVvdCkpO1xcbiAjZW5kaWZcXG4gXFx0ZWktXFx1MDAzZWppbm9kZSA9IE5VTEw7XFxuK1xcdC8qXFxuK1xcdCAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2Rlc1xcbitcXHQgKiBzaGFyZSB0aGlzIHNwYWNlIHdpdGggaV9lYV9pcHV0X25vZGUgKHZpYSB1bmlvbikgd2hpY2ggbWF5XFxuK1xcdCAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXNcXG4rXFx0ICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLlxcbitcXHQgKi9cXG4rXFx0aW5pdF9yd3NlbShcXHUwMDI2ZWktXFx1MDAzZXhhdHRyX3NlbSk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlaS1cXHUwMDNlaV9yc3ZfY29udmVyc2lvbl9saXN0KTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmVpLVxcdTAwM2VpX2NvbXBsZXRlZF9pb19sb2NrKTtcXG4gXFx0ZWktXFx1MDAzZWlfc3luY190aWQgPSAwO1xcbkBAIC0xNDg4LDcgKzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxcbiBcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGZvbztcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlaS1cXHUwMDNlaV9vcnBoYW4pO1xcbi1cXHRpbml0X3J3c2VtKFxcdTAwMjZlaS1cXHUwMDNleGF0dHJfc2VtKTtcXG4gXFx0aW5pdF9yd3NlbShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbiBcXHRpbm9kZV9pbml0X29uY2UoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbiBcXHRleHQ0X2ZjX2luaXRfaW5vZGUoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbkBAIC01NDk3LDYgKzU1MDUsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0XFx0XFx0ICBleHQ0X2hhc19mZWF0dXJlX29ycGhhbl9wcmVzZW50KHNiKSB8fFxcbiBcXHRcXHRcXHQgIGV4dDRfaGFzX2ZlYXR1cmVfam91cm5hbF9uZWVkc19yZWNvdmVyeShzYikpO1xcbiBcXG4rXFx0ZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc2JpKTtcXG4rXFxuIFxcdGlmIChleHQ0X2hhc19mZWF0dXJlX21tcChzYikgXFx1MDAyNlxcdTAwMjYgIXNiX3Jkb25seShzYikpIHtcXG4gXFx0XFx0ZXJyID0gZXh0NF9tdWx0aV9tb3VudF9wcm90ZWN0KHNiLCBsZTY0X3RvX2NwdShlcy1cXHUwMDNlc19tbXBfYmxvY2spKTtcXG4gXFx0XFx0aWYgKGVycilcXG5AQCAtNTc0Nyw2ICs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZmFpbGVkX21vdW50OTpcXG4rXFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIHF1b3RhIHNodXRkb3duICovXFxuK1xcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbiBcXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcXG4gZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4gXFx0ZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTtcXG5AQCAtNTc2Nyw2ICs1Nzc5LDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4gXFx0aWYgKEVYVDRfU0Ioc2IpLVxcdTAwM2Vyc3ZfY29udmVyc2lvbl93cSlcXG4gXFx0XFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXFx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcXG4gZmFpbGVkX21vdW50X3dxOlxcbitcXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgZnJlZWluZyBzdHJ1Y3R1cmVzICovXFxuK1xcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbiBcXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcXG4gXFx0c2JpLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gTlVMTDtcXG4gXFxuQEAgLTU3NzcsNiArNTc5MSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuIFxcdFxcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVxcdTAwM2VzX2pvdXJuYWwpO1xcbiBcXHR9XFxuIGZhaWxlZF9tb3VudDNhOlxcbitcXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBmcm9tIGpvdXJuYWwgcmVwbGF5ICovXFxuK1xcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbiBcXHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcXG4gZmFpbGVkX21vdW50MzpcXG4gXFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cXG5AQCAtNjQ0Nyw2ICs2NDYzLDcgQEAgc3RhdGljIGludCBleHQ0X3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpXFxuIFxcbiBcXHR0cmFjZV9leHQ0X3N5bmNfZnMoc2IsIHdhaXQpO1xcbiBcXHRmbHVzaF93b3JrcXVldWUoc2JpLVxcdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XFxuK1xcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbiBcXHQvKlxcbiBcXHQgKiBXcml0ZWJhY2sgcXVvdGEgaW4gbm9uLWpvdXJuYWxsZWQgcXVvdGEgY2FzZSAtIGpvdXJuYWxsZWQgcXVvdGEgaGFzXFxuIFxcdCAqIG5vIGRpcnR5IGRxdW90c1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmNcXG5pbmRleCA5ODJhMWY4MzFlMjI4Mi4uNGFlNmNlMTExNTY2MGUgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXFxuKysrIGIvZnMvZXh0NC94YXR0ci5jXFxuQEAgLTExNCwxMCArMTE0LDYgQEAgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7XFxuICNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXFx0KCgoc3RydWN0IGV4dDRfc2JfaW5mbyAqKSBcXFxcXFxuIFxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2ZzX2luZm8pLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlKVxcbiBcXG4tc3RhdGljIGludFxcbi1leHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbi1cXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4tXFxuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXFxuIHtcXG5AQCAtNTY3LDcgKzU2Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0XFx0XFx0XFx0ZWFfaW5vZGUtXFx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcXG4gXFx0fVxcbiBvdXQ6XFxuLVxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTExMDQsMTAgKzExMDAsMTAgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiaW5jIHJlZiBlcnJvciAlZFxcXCIsIGVycik7XFxuLVxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHR9XFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMTEzMyw3ICsxMTI5LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBlcnIpO1xcbi1cXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHR9XFxuIFxcdHJldHVybiBzYXZlZF9lcnI7XFxuIH1cXG5AQCAtMTE2MCw3ICsxMTU2LDYgQEAgc3RhdGljIHZvaWRcXG4gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICpmaXJzdCwgYm9vbCBibG9ja19jc3VtLFxcbi1cXHRcXHRcXHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdCAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xcbkBAIC0xMTk3LDE0ICsxMTkyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRlcnIgPSBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShlYV9pbm9kZV9hcnJheSwgZWFfaW5vZGUpO1xcbi1cXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFxcIkV4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWRcXFwiLCBlcnIpO1xcbi1cXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH1cXG4tXFxuIFxcdFxcdGVyciA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c19mbihoYW5kbGUsIGNyZWRpdHMsIGNyZWRpdHMsXFxuIFxcdFxcdFxcdGV4dDRfZnJlZV9tZXRhZGF0YV9yZXZva2VfY3JlZGl0cyhwYXJlbnQtXFx1MDAzZWlfc2IsIDEpLFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLFxcbkBAIC0xMjEyLDYgKzExOTksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJFbnN1cmUgY3JlZGl0cyBlcnI9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBlcnIpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChlcnIgXFx1MDAzZSAwKSB7XFxuQEAgLTEyMjEsNiArMTIwOSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFxcIlJlLWdldCB3cml0ZSBhY2Nlc3MgZXJyPSVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZXJyKTtcXG4rXFx0XFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuQEAgLTEyMjksNiArMTIxOCw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiZWFfaW5vZGUgZGVjIHJlZiBlcnI9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBlcnIpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xMjQ1LDYgKzEyMzUsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRlbnRyeS1cXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcXG4gXFx0XFx0ZW50cnktXFx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XFxuIFxcbitcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdFxcdGRpcnR5ID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG5AQCAtMTI3MSw3ICsxMjYyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gc3RhdGljIHZvaWRcXG4gZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi1cXHRcXHRcXHQgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0IGludCBleHRyYV9jcmVkaXRzKVxcbiB7XFxuIFxcdHN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7XFxuQEAgLTEzMTMsNyArMTMwMyw2IEBAIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEJGSVJTVChiaCksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdHJ1ZSAvKiBibG9ja19jc3VtICovLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGV4dHJhX2NyZWRpdHMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdHJ1ZSAvKiBza2lwX3F1b3RhICovKTtcXG4gXFx0XFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBiaCwgMCwgMSxcXG5AQCAtMTUwNSw3ICsxNDk0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0XFx0XFx0aWYgKGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsIGVhX2lub2RlKSlcXG4gXFx0XFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXFwiY2xlYW51cCBkZWMgcmVmIGVycm9yICVkXFxcIiwgZXJyKTtcXG4tXFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTU2NCw3ICsxNTUzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxcbiBcXHRcXHRcXHRrdmZyZWUoZWFfZGF0YSk7XFxuIFxcdFxcdFxcdHJldHVybiBlYV9pbm9kZTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRuZXh0X2VudHJ5OlxcbiBcXHRcXHRjZSA9IG1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChlYV9pbm9kZV9jYWNoZSwgY2UpO1xcbiBcXHR9XFxuQEAgLTE2MTUsNyArMTYwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxcbiBcXHRcXHRcXHRcXHQgICAgICBlYV9pbm9kZS1cXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xcbiBcXHRyZXR1cm4gZWFfaW5vZGU7XFxuIG91dF9lcnI6XFxuLVxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgdmFsdWVfbGVuKTtcXG4gXFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gfVxcbkBAIC0xODQ4LDcgKzE4MzcsNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksXFxuIFxcbiBcXHRyZXQgPSAwO1xcbiBvdXQ6XFxuLVxcdGlwdXQob2xkX2VhX2lub2RlKTtcXG4rXFx0ZXh0NF9wdXRfZWFfaW5vZGUob2xkX2VhX2lub2RlKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMjAxMCw3ICsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0b2xkX2VhX2lub2RlX3F1b3RhID0gbGUzMl90b19jcHUoXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSk7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aXB1dCh0bXBfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZSh0bXBfaW5vZGUpO1xcbiBcXG4gXFx0XFx0XFx0cy1cXHUwMDNlaGVyZS1cXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcXG4gXFx0XFx0XFx0cy1cXHUwMDNlaGVyZS1cXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcXG5AQCAtMjE1MCw3ICsyMTM5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwiZGVjIHJlZiBlcnJvcj0lZFxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGVycm9yKTtcXG4tXFx0XFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0XFx0ZWFfaW5vZGUgPSBOVUxMO1xcbiBcXHRcXHRcXHR9XFxuIFxcbkBAIC0yMTgyLDEyICsyMTcxLDggQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFxuIFxcdC8qIERyb3AgdGhlIHByZXZpb3VzIHhhdHRyIGJsb2NrLiAqL1xcbiBcXHRpZiAoYnMtXFx1MDAzZWJoIFxcdTAwMjZcXHUwMDI2IGJzLVxcdTAwM2ViaCAhPSBuZXdfYmgpIHtcXG4tXFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcXG4tXFxuIFxcdFxcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBicy1cXHUwMDNlYmgsXFxuLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdFxcdFxcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xcbi1cXHRcXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xcbiBcXHR9XFxuIFxcdGVycm9yID0gMDtcXG4gXFxuQEAgLTIyMDMsNyArMjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdH1cXG4gXFx0aWYgKGNlKVxcbiBcXHRcXHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIGNlKTtcXG5AQCAtMjI4NSw3ICsyMjcwLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcXG4tXFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcdH1cXG5AQCAtMjI5Nyw3ICsyMjgyLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdGhlYWRlci1cXHUwMDNlaF9tYWdpYyA9IGNwdV90b19sZTMyKDApO1xcbiBcXHRcXHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTtcXG4gXFx0fVxcbi1cXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMjg2Myw0NiArMjg0OCw2IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuLSNkZWZpbmUgRUlBX0lOQ1IgMTYgLyogbXVzdCBiZSAyXm4gKi9cXG4tI2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxcbi1cXG4tLyogQWRkIHRoZSBsYXJnZSB4YXR0ciBAaW5vZGUgaW50byBAZWFfaW5vZGVfYXJyYXkgZm9yIGRlZmVycmVkIGlwdXQoKS5cXG4tICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcXG4tICogY29udGVudHMgY29waWVkIG92ZXIuXFxuLSAqL1xcbi1zdGF0aWMgaW50XFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLXtcXG4tXFx0aWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFN0YXJ0IHdpdGggMTUgaW5vZGVzLCBzbyBpdCBmaXRzIGludG8gYSBwb3dlci1vZi10d28gc2l6ZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdCgqZWFfaW5vZGVfYXJyYXkpID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XFxuLVxcdFxcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdFxcdCgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCA9IDA7XFxuLVxcdH0gZWxzZSBpZiAoKCgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCBcXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xcbi1cXHRcXHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovXFxuLVxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICpuZXdfYXJyYXkgPSBOVUxMO1xcbi1cXG4tXFx0XFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4tXFx0XFx0XFx0XFx0XFx0ICgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCArIEVJQV9JTkNSLFxcbi1cXHRcXHRcXHRcXHRcXHQgR0ZQX05PRlMpO1xcbi1cXHRcXHRpZiAobmV3X2FycmF5ID09IE5VTEwpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRcXHRtZW1jcHkobmV3X2FycmF5LCAqZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4tXFx0XFx0XFx0XFx0ICAgKCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50KSk7XFxuLVxcdFxcdGtmcmVlKCplYV9pbm9kZV9hcnJheSk7XFxuLVxcdFxcdCplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTtcXG4tXFx0fVxcbi1cXHQoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQrKztcXG4tXFx0KCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWlub2Rlc1soKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQgLSAxXSA9IGlub2RlO1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gLypcXG4gICogZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoKVxcbiAgKlxcbkBAIC0yOTEzLDcgKzI4NTgsNiBAQCBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuXFxuICAqL1xcbiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdCAgICBpbnQgZXh0cmFfY3JlZGl0cylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcXG5AQCAtMjk1Miw3ICsyODk2LDYgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBJRklSU1QoaGVhZGVyKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmYWxzZSAvKiBibG9ja19jc3VtICovLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGV4dHJhX2NyZWRpdHMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZmFsc2UgLyogc2tpcF9xdW90YSAqLyk7XFxuIFxcdH1cXG5AQCAtMjk4NiwxMiArMjkyOSwxMiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVxcdTAwM2VlX3ZhbHVlX3NpemUpKTtcXG4tXFx0XFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBlYV9pbm9kZV9hcnJheSxcXG4rXFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxcbiBcXHRcXHRcXHRcXHRcXHQgZXh0cmFfY3JlZGl0cyk7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcXG5AQCAtMzAxMywxNiArMjk1Niw2MyBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIGVycm9yO1xcbiB9XFxuIFxcbi12b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkpXFxuKy8qXFxuKyAqIFdvcmtlciBmdW5jdGlvbiBmb3IgZGVmZXJyZWQgRUEgaW5vZGUgaXB1dC4gIFByb2Nlc3NlcyBhbGwgaW5vZGVzIHF1ZXVlZFxcbisgKiBvbiBzX2VhX2lub2RlX3RvX2ZyZWUgaW4gYSBjb250ZXh0IGZyZWUgb2YgeGF0dHJfc2VtL2piZDIgaGFuZGxlIGxvY2tzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZXh0NF9lYV9pbm9kZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbi1cXHRpbnQgaWR4O1xcbitcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzX2VhX2lub2RlX3dvcmspO1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcXG4gXFxuLVxcdGlmIChlYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxcbitcXHR3aGlsZSAobm9kZSkge1xcbitcXHRcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCBpX2VhX2lwdXRfbm9kZSk7XFxuK1xcdFxcdG5vZGUgPSBub2RlLVxcdTAwM2VuZXh0O1xcbitcXHRcXHRpcHV0KFxcdTAwMjZlaS1cXHUwMDNldmZzX2lub2RlKTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKlxcbisgKiBSZWxlYXNlIGEgVkZTIHJlZmVyZW5jZSBvbiBhbiBFQSBpbm9kZS4gIE11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGlwdXQoKVxcbisgKiBpbiBhbnkgY29udGV4dCB3aGVyZSB4YXR0cl9zZW0gb3IgYSBqYmQyIGhhbmRsZSBpcyBoZWxkLlxcbisgKlxcbisgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCByZWZlcmVuY2UsIGRyb3BzIGl0IGltbWVkaWF0ZWx5IHZpYVxcbisgKiBpcHV0X2lmX25vdF9sYXN0KCkgd2l0aCBubyBmdXJ0aGVyIGFjdGlvbiBuZWVkZWQuXFxuKyAqXFxuKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgaW5vZGUgaXMgbGlua2VkIG9udG8gYSBwZXItc2JcXG4rICogbGxpc3QgdmlhIGlfZWFfaXB1dF9ub2RlIChlbWJlZGRlZCBpbiBleHQ0X2lub2RlX2luZm8sIHNoYXJpbmcgc3BhY2VcXG4rICogd2l0aCB0aGUgdW51c2VkIHhhdHRyX3NlbSkgYW5kIGEgZGVsYXllZCB3b3JrZXIgcGVyZm9ybXMgdGhlIGZpbmFsXFxuKyAqIGlwdXQoKSBpbiBhIGNsZWFuIGNvbnRleHQuXFxuKyAqXFxuKyAqIE5vdGU6IHdoaWxlIGFuIGlub2RlIGlzIG9uIHNfZWFfaW5vZGVfdG9fZnJlZSwgdGhlIHVuY29uc3VtZWQgaV9jb3VudFxcbisgKiByZWZlcmVuY2UgKHN0aWxsIDEpIGtlZXBzIGl0IGluIHRoZSBpbm9kZSBjYWNoZSwgc28gYW55IGNvbmN1cnJlbnRcXG4rICogaWdldCgpIGJ1bXBzIGlfY291bnQgdG8gXFx1MDAzZT0gMiBhbmQgaXB1dF9pZl9ub3RfbGFzdCgpIHdpbGwgc3VjY2VlZC5cXG4rICogTm9ib2R5IHdpbGwgYWRkIHRoZSBpbm9kZSBhIHNlY29uZCB0aW1lIHVudGlsIGV4dDRfZWFfaW5vZGVfd29yaygpXFxuKyAqIGRyb3BzIHRoYXQgcmVmZXJlbmNlIHZpYSBpcHV0KCkuXFxuKyAqL1xcbit2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0aWYgKCFpbm9kZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpO1xcbitcXHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXFxuIFxcdFxcdHJldHVybjtcXG4rXFx0bGxpc3RfYWRkKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2VhX2lwdXRfbm9kZSxcXG4rXFx0XFx0ICBcXHUwMDI2RVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XFxuK1xcdC8qXFxuK1xcdCAqIFVzZSBhIHNob3J0IGRlbGF5IHRvIGFsbG93IG11bHRpcGxlIEVBIGlub2RlcyB0byBhY2N1bXVsYXRlLFxcbitcXHQgKiByZWR1Y2luZyB3b3JrcXVldWUgd2FrZXVwcyB3aGVuIHNldmVyYWwgYXJlIHJlbGVhc2VkIHRvZ2V0aGVyLlxcbitcXHQgKi9cXG4rXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19lYV9pbm9kZV93b3JrLCAxKTtcXG4rfVxcbiBcXG4tXFx0Zm9yIChpZHggPSAwOyBpZHggXFx1MDAzYyBlYV9pbm9kZV9hcnJheS1cXHUwMDNlY291bnQ7ICsraWR4KVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlX2FycmF5LVxcdTAwM2Vpbm9kZXNbaWR4XSk7XFxuLVxcdGtmcmVlKGVhX2lub2RlX2FycmF5KTtcXG4rdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXFxuK3tcXG4rXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XFxuK1xcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oXFxuaW5kZXggMWZlZGY0NGQ0ZmI2NWUuLjgyMWRjNmE1MGU1MWU3IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQveGF0dHIuaFxcbisrKyBiL2ZzL2V4dDQveGF0dHIuaFxcbkBAIC0xMzEsMTEgKzEzMSw2IEBAIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQge1xcbiBcXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XFxuIH07XFxuIFxcbi1zdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XFxuLVxcdHVuc2lnbmVkIGludCBjb3VudDtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZXNbXSBfX2NvdW50ZWRfYnkoY291bnQpO1xcbi19O1xcbi1cXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7XFxuQEAgLTE4Nyw5ICsxODIsOSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRib29sIGlzX2NyZWF0ZSk7XFxuIFxcbiBleHRlcm4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksXFxuIFxcdFxcdFxcdFxcdCAgIGludCBleHRyYV9jcmVkaXRzKTtcXG4tZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7XFxuK2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7XFxuK2V4dGVybiB2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBcXG4gZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxcbmluZGV4IDUwY2U3MzFhMmI3OGYxLi5hYTFkNTAxZDJiYjYyNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5AQCAtMjQxMyw2ICsyNDEzLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcl9zZXRfc3lzZnNfbmFtZV9nZW5lcmljKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoXFxuIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTtcXG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XFxuIHZvaWQgaXB1dF9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKik7XFxuK1xcbisvKipcXG4rICogaXB1dF9pZl9ub3RfbGFzdCAtIGRyb3AgYW4gaW5vZGUgcmVmZXJlbmNlIG9ubHkgaWYgaXQgaXMgbm90IHRoZSBsYXN0IG9uZVxcbisgKiBAaW5vZGU6IGlub2RlIHRvIHB1dFxcbisgKlxcbisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlZmVyZW5jZSB3YXMgZHJvcHBlZCwgZmFsc2UgaWYgdGhpcyB3YXMgdGhlIGxhc3RcXG4rICogcmVmZXJlbmNlIGFuZCB0aGUgY2FsbGVyIG11c3QgYXJyYW5nZSBmb3IgZmluYWwgaXB1dCgpIGluIGEgc2FmZSBjb250ZXh0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBpcHV0X2lmX25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0VkZTX0JVR19PTl9JTk9ERShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgKElfRlJFRUlORyB8IElfQ0xFQVIpLCBpbm9kZSk7XFxuK1xcdFZGU19CVUdfT05fSU5PREUoaWNvdW50X3JlYWRfb25jZShpbm9kZSkgXFx1MDAzYyAxLCBpbm9kZSk7XFxuK1xcdHJldHVybiBhdG9taWNfYWRkX3VubGVzcyhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfY291bnQsIC0xLCAxKTtcXG4rfVxcbitcXG4gaW50IGlub2RlX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcXG4gXFx0XFx0dW5zaWduZWQgaW50IGZsYWdzKTtcXG4gaW50IGdlbmVyaWNfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTozMC4yNzczMDY2NDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Mzg0ODI5MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkVYVDRfRlNfUE9TSVhfQUNMXCIsXG4gICAgXCJFWFQ0X0ZTX1NFQ1VSSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgICBcImV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICAgIFwiZXh0NF94YXR0cl9kZWxldGVfaW5vZGVcIixcbiAgICBcImV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja1wiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbFwiLFxuICAgIFwiZXh0NF94YXR0cl9ibG9ja19zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfaWJvZHlfc2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleHQ0IHhhdHRyIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IEVBIGlub2RlcyBhcmUgdHJhY2tlZCBhbmQgZnJlZWQsIGludHJvZHVjaW5nIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gdmlhIGEgd29ya3F1ZXVlIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSB3aWRlbHkgdXNlZCBmaWxlc3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFkMTJmZjQ4ZDE1M2EwYjExM2JjM2M5NWQyZDc4NDE5MTA2NmVkY2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAwMTowOToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IGIzN2MxMzZlYTNhYjMzLi5iOWIwYWRhNzc3NGJiNCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTEwNzAsOCArMTA3MCwxNCBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcbiBcdCAqIGJldHdlZW4gcmVhZGVycyBvZiBFQXMgYW5kIHdyaXRlcnMgb2YgcmVndWxhciBmaWxlIGRhdGEsIHNvXG4gXHQgKiBpbnN0ZWFkIHdlIHN5bmNocm9uaXplIG9uIHhhdHRyX3NlbSB3aGVuIHJlYWRpbmcgb3IgY2hhbmdpbmdcbiBcdCAqIEVBcy5cbitcdCAqXG4rXHQgKiBFQSBpbm9kZXMgKEVYVDRfRUFfSU5PREVfRkwpIGRvIG5vdCB1c2UgeGF0dHJfc2VtOyB0aGV5IHJldXNlXG4rXHQgKiB0aGUgc3BhY2UgZm9yIGRlZmVycmVkIGlwdXQgbGlua2FnZS5cbiBcdCAqL1xuLVx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XG4rXHR1bmlvbiB7XG4rXHRcdHN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtO1xuK1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSBpX2VhX2lwdXRfbm9kZTtcbitcdH07XG4gXG4gXHQvKlxuIFx0ICogSW5vZGVzIHdpdGggRVhUNF9TVEFURV9PUlBIQU5fRklMRSB1c2UgaV9vcnBoYW5faWR4LiBPdGhlcndpc2VcbkBAIC0xNzcwLDYgKzE3NzYsMTEgQEAgc3RydWN0IGV4dDRfc2JfaW5mbyB7XG4gXHRzdHJ1Y3QgZXh0NF9lc19zdGF0cyBzX2VzX3N0YXRzO1xuIFx0c3RydWN0IG1iX2NhY2hlICpzX2VhX2Jsb2NrX2NhY2hlO1xuIFx0c3RydWN0IG1iX2NhY2hlICpzX2VhX2lub2RlX2NhY2hlO1xuK1xuK1x0LyogRGVmZXJyZWQgaXB1dCBmb3IgRUEgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzICovXG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCBzX2VhX2lub2RlX3RvX2ZyZWU7XG4rXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHNfZWFfaW5vZGVfd29yaztcbitcbiBcdHNwaW5sb2NrX3Qgc19lc19sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gXG4gXHQvKiBKb3VybmFsIHRyaWdnZXJzIGZvciBjaGVja3N1bSBjb21wdXRhdGlvbiAqL1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggY2U5OTgwN2M1ZjViMmMuLjc0N2M1MmMyMzJjYzAzIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbm9kZS5jXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcbkBAIC0xNzYsNyArMTc2LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHQgKiAoeGF0dHIgYmxvY2sgZnJlZWluZyksIGJpdG1hcCwgZ3JvdXAgZGVzY3JpcHRvciAoaW5vZGUgZnJlZWluZylcbiBcdCAqL1xuIFx0aW50IGV4dHJhX2NyZWRpdHMgPSA2O1xuLVx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbiBcdGJvb2wgZnJlZXplX3Byb3RlY3RlZCA9IGZhbHNlO1xuIFxuIFx0dHJhY2VfZXh0NF9ldmljdF9pbm9kZShpbm9kZSk7XG5AQCAtMjgxLDggKzI4MCw3IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fVxuIFxuIFx0LyogUmVtb3ZlIHhhdHRyIHJlZmVyZW5jZXMuICovXG4tXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRcdCAgICAgIGV4dHJhX2NyZWRpdHMpO1xuK1x0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgZXh0cmFfY3JlZGl0cyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGV4dDRfd2FybmluZyhpbm9kZS1cdTAwM2VpX3NiLCBcInhhdHRyIGRlbGV0ZSAoZXJyICVkKVwiLCBlcnIpO1xuIHN0b3BfaGFuZGxlOlxuQEAgLTI5MCw3ICsyODgsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcbiBcdFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXG4gXHRcdFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0XHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0XHRnb3RvIG5vX2RlbGV0ZTtcbiBcdH1cbiBcbkBAIC0zMjAsNyArMzE3LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuIFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXG4gXHRcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XG4gXHRyZXR1cm47XG4gbm9fZGVsZXRlOlxuIFx0LypcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDI0NWY2N2QxMGRlZDM0Li44OThkOGM2NDMxYmFlYSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuKysrIGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtMTMwMyw2ICsxMzAzLDggQEAgc3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdFx0XHQgXHUwMDI2c2ItXHUwMDNlc191dWlkKTtcbiBcbiBcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi9cbitcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIFxuIFx0ZGVzdHJveV93b3JrcXVldWUoc2JpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcbkBAIC0xNDIzLDYgKzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0bWVtc2V0KFx1MDAyNmVpLVx1MDAzZWlfZHF1b3QsIDAsIHNpemVvZihlaS1cdTAwM2VpX2RxdW90KSk7XG4gI2VuZGlmXG4gXHRlaS1cdTAwM2VqaW5vZGUgPSBOVUxMO1xuK1x0LypcbitcdCAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2Rlc1xuK1x0ICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heVxuK1x0ICogaGF2ZSBvdmVyd3JpdHRlbiB0aGUgc2VtYXBob3JlIHdoZW4gdGhlIHNsYWIgb2JqZWN0IHdhc1xuK1x0ICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLlxuK1x0ICovXG4rXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZXhhdHRyX3NlbSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX3Jzdl9jb252ZXJzaW9uX2xpc3QpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZWktXHUwMDNlaV9jb21wbGV0ZWRfaW9fbG9jayk7XG4gXHRlaS1cdTAwM2VpX3N5bmNfdGlkID0gMDtcbkBAIC0xNDg4LDcgKzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuIFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBmb287XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX29ycGhhbik7XG4tXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZXhhdHRyX3NlbSk7XG4gXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuIFx0aW5vZGVfaW5pdF9vbmNlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4gXHRleHQ0X2ZjX2luaXRfaW5vZGUoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbkBAIC01NDk3LDYgKzU1MDUsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdFx0XHQgIGV4dDRfaGFzX2ZlYXR1cmVfb3JwaGFuX3ByZXNlbnQoc2IpIHx8XG4gXHRcdFx0ICBleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWxfbmVlZHNfcmVjb3Zlcnkoc2IpKTtcbiBcbitcdGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHNiaSk7XG4rXG4gXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9tbXAoc2IpIFx1MDAyNlx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xuIFx0XHRlcnIgPSBleHQ0X211bHRpX21vdW50X3Byb3RlY3Qoc2IsIGxlNjRfdG9fY3B1KGVzLVx1MDAzZXNfbW1wX2Jsb2NrKSk7XG4gXHRcdGlmIChlcnIpXG5AQCAtNTc0Nyw2ICs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRyZXR1cm4gMDtcbiBcbiBmYWlsZWRfbW91bnQ5OlxuK1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIHF1b3RhIHNodXRkb3duICovXG4rXHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcbiBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0ZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTtcbkBAIC01NzY3LDYgKzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0aWYgKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG4gZmFpbGVkX21vdW50X3dxOlxuK1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIGZyZWVpbmcgc3RydWN0dXJlcyAqL1xuK1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcbiBcdHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gTlVMTDtcbiBcbkBAIC01Nzc3LDYgKzU3OTEsOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuIFx0fVxuIGZhaWxlZF9tb3VudDNhOlxuK1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xuK1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG4gZmFpbGVkX21vdW50MzpcbiBcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXG5AQCAtNjQ0Nyw2ICs2NDYzLDcgQEAgc3RhdGljIGludCBleHQ0X3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpXG4gXG4gXHR0cmFjZV9leHQ0X3N5bmNfZnMoc2IsIHdhaXQpO1xuIFx0Zmx1c2hfd29ya3F1ZXVlKHNiaS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG4rXHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHQvKlxuIFx0ICogV3JpdGViYWNrIHF1b3RhIGluIG5vbi1qb3VybmFsbGVkIHF1b3RhIGNhc2UgLSBqb3VybmFsbGVkIHF1b3RhIGhhc1xuIFx0ICogbm8gZGlydHkgZHF1b3RzXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Mi4uNGFlNmNlMTExNTY2MGUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcbisrKyBiL2ZzL2V4dDQveGF0dHIuY1xuQEAgLTExNCwxMCArMTE0LDYgQEAgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7XG4gI2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSlcdCgoKHN0cnVjdCBleHQ0X3NiX2luZm8gKikgXFxcbiBcdFx0XHRcdGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19mc19pbmZvKS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKVxuIFxuLXN0YXRpYyBpbnRcbi1leHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuLVx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLVxuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3Moc3RydWN0IGlub2RlICplYV9pbm9kZSlcbiB7XG5AQCAtNTY3LDcgKzU2Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSxcbiBcdFx0XHRcdFx0ZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuIFx0fVxuIG91dDpcbi1cdGlwdXQoZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTEwNCwxMCArMTEwMCwxMCBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZihoYW5kbGUsIGVhX2lub2RlKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCJpbmMgcmVmIGVycm9yICVkXCIsIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdGdvdG8gY2xlYW51cDtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTEzMyw3ICsxMTI5LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCJjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcIixcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiBzYXZlZF9lcnI7XG4gfVxuQEAgLTExNjAsNyArMTE1Niw2IEBAIHN0YXRpYyB2b2lkXG4gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHQgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSxcbi1cdFx0XHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0ICAgICBpbnQgZXh0cmFfY3JlZGl0cywgYm9vbCBza2lwX3F1b3RhKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGU7XG5AQCAtMTE5NywxNCArMTE5Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGVyciA9IGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KGVhX2lub2RlX2FycmF5LCBlYV9pbm9kZSk7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4tXHRcdFx0XHRcdCAgIFwiRXhwYW5kIGlub2RlIGFycmF5IGVycj0lZFwiLCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4gXHRcdGVyciA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c19mbihoYW5kbGUsIGNyZWRpdHMsIGNyZWRpdHMsXG4gXHRcdFx0ZXh0NF9mcmVlX21ldGFkYXRhX3Jldm9rZV9jcmVkaXRzKHBhcmVudC1cdTAwM2VpX3NiLCAxKSxcbiBcdFx0XHRleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLFxuQEAgLTEyMTIsNiArMTE5OSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwiRW5zdXJlIGNyZWRpdHMgZXJyPSVkXCIsXG4gXHRcdFx0XHRcdCAgIGVycik7XG4rXHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbkBAIC0xMjIxLDYgKzEyMDksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdFwiUmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWRcIixcbiBcdFx0XHRcdFx0XHRlcnIpO1xuK1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuIFx0XHR9XG5AQCAtMTIyOSw2ICsxMjE4LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCJlYV9pbm9kZSBkZWMgcmVmIGVycj0lZFwiLFxuIFx0XHRcdFx0XHQgICBlcnIpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuQEAgLTEyNDUsNiArMTIzNSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGVudHJ5LVx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XG4gXHRcdGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XG4gXG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0ZGlydHkgPSB0cnVlO1xuIFx0fVxuIFxuQEAgLTEyNzEsNyArMTI2Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gc3RhdGljIHZvaWRcbiBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi1cdFx0XHQgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgaW50IGV4dHJhX2NyZWRpdHMpXG4ge1xuIFx0c3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTtcbkBAIC0xMzEzLDcgKzEzMDMsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHRcdCAgICAgQkZJUlNUKGJoKSxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XG4gXHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsXG5AQCAtMTUwNSw3ICsxNDk0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKVxuIFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcImNsZWFudXAgZGVjIHJlZiBlcnJvciAlZFwiLCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0XHR9XG4gXG5AQCAtMTU2NCw3ICsxNTUzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuIFx0XHRcdGt2ZnJlZShlYV9kYXRhKTtcbiBcdFx0XHRyZXR1cm4gZWFfaW5vZGU7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdG5leHRfZW50cnk6XG4gXHRcdGNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGVhX2lub2RlX2NhY2hlLCBjZSk7XG4gXHR9XG5AQCAtMTYxNSw3ICsxNjA0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0XHQgICAgICBlYV9pbm9kZS1cdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XG4gXHRyZXR1cm4gZWFfaW5vZGU7XG4gb3V0X2Vycjpcbi1cdGlwdXQoZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCB2YWx1ZV9sZW4pO1xuIFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG5AQCAtMTg0OCw3ICsxODM3LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuIFxuIFx0cmV0ID0gMDtcbiBvdXQ6XG4tXHRpcHV0KG9sZF9lYV9pbm9kZSk7XG4rXHRleHQ0X3B1dF9lYV9pbm9kZShvbGRfZWFfaW5vZGUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMjAxMCw3ICsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdG9sZF9lYV9pbm9kZV9xdW90YSA9IGxlMzJfdG9fY3B1KFxuIFx0XHRcdFx0XHRcdHMtXHUwMDNlaGVyZS1cdTAwM2VlX3ZhbHVlX3NpemUpO1xuIFx0XHRcdH1cbi1cdFx0XHRpcHV0KHRtcF9pbm9kZSk7XG4rXHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUodG1wX2lub2RlKTtcbiBcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbkBAIC0yMTUwLDcgKzIxMzksNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0XHQgICBcImRlYyByZWYgZXJyb3I9JWRcIixcbiBcdFx0XHRcdFx0XHRcdCAgIGVycm9yKTtcbi1cdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdFx0ZWFfaW5vZGUgPSBOVUxMO1xuIFx0XHRcdH1cbiBcbkBAIC0yMTgyLDEyICsyMTcxLDggQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdC8qIERyb3AgdGhlIHByZXZpb3VzIHhhdHRyIGJsb2NrLiAqL1xuIFx0aWYgKGJzLVx1MDAzZWJoIFx1MDAyNlx1MDAyNiBicy1cdTAwM2ViaCAhPSBuZXdfYmgpIHtcbi1cdFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbi1cbiBcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVx1MDAzZWJoLFxuLVx0XHRcdFx0XHQgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0XHRcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xuLVx0XHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0fVxuIFx0ZXJyb3IgPSAwO1xuIFxuQEAgLTIyMDMsNyArMjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0fVxuIFx0aWYgKGNlKVxuIFx0XHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIGNlKTtcbkBAIC0yMjg1LDcgKzIyNzAsNyBAQCBpbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdCAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG5AQCAtMjI5Nyw3ICsyMjgyLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdGhlYWRlci1cdTAwM2VoX21hZ2ljID0gY3B1X3RvX2xlMzIoMCk7XG4gXHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpO1xuIFx0fVxuLVx0aXB1dChlYV9pbm9kZSk7XG4rXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjg2Myw0NiArMjg0OCw2IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovXG4tI2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxuLVxuLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuXG4tICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcbi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cbi0gKi9cbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkge1xuLVx0XHQvKlxuLVx0XHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXG4tXHRcdCAqL1xuLVx0XHQoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHRcdFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XG4tXHRcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgPSAwO1xuLVx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xuLVx0XHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovXG4tXHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICpuZXdfYXJyYXkgPSBOVUxMO1xuLVxuLVx0XHRuZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0XHQgKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgKyBFSUFfSU5DUixcbi1cdFx0XHRcdFx0IEdGUF9OT0ZTKTtcbi1cdFx0aWYgKG5ld19hcnJheSA9PSBOVUxMKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHRtZW1jcHkobmV3X2FycmF5LCAqZWFfaW5vZGVfYXJyYXksXG4tXHRcdCAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdCAgICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50KSk7XG4tXHRcdGtmcmVlKCplYV9pbm9kZV9hcnJheSk7XG4tXHRcdCplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTtcbi1cdH1cbi1cdCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50Kys7XG4tXHQoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vpbm9kZXNbKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgLSAxXSA9IGlub2RlO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qXG4gICogZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoKVxuICAqXG5AQCAtMjkxMyw3ICsyODU4LDYgQEAgZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuXG4gICovXG4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0ICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0ICAgIGludCBleHRyYV9jcmVkaXRzKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xuQEAgLTI5NTIsNyArMjg5Niw2IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcbiBcdFx0XHRcdFx0XHQgICAgIElGSVJTVChoZWFkZXIpLFxuIFx0XHRcdFx0XHRcdCAgICAgZmFsc2UgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0fVxuQEAgLTI5ODYsMTIgKzI5MjksMTIgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0ICAgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV92YWx1ZV9zaXplKSk7XG4tXHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHR9XG4gXG4gXHRcdH1cbiBcbi1cdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBlYV9pbm9kZV9hcnJheSxcbitcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4gXHRcdC8qXG4gXHRcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcbkBAIC0zMDEzLDE2ICsyOTU2LDYzIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi12b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkpXG4rLypcbisgKiBXb3JrZXIgZnVuY3Rpb24gZm9yIGRlZmVycmVkIEVBIGlub2RlIGlwdXQuICBQcm9jZXNzZXMgYWxsIGlub2RlcyBxdWV1ZWRcbisgKiBvbiBzX2VhX2lub2RlX3RvX2ZyZWUgaW4gYSBjb250ZXh0IGZyZWUgb2YgeGF0dHJfc2VtL2piZDIgaGFuZGxlIGxvY2tzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0aW50IGlkeDtcbitcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksXG4rXHRcdFx0XHRcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyxcbitcdFx0XHRcdFx0XHRzX2VhX2lub2RlX3dvcmspO1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuIFxuLVx0aWYgKGVhX2lub2RlX2FycmF5ID09IE5VTEwpXG4rXHR3aGlsZSAobm9kZSkge1xuK1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCBpX2VhX2lwdXRfbm9kZSk7XG4rXHRcdG5vZGUgPSBub2RlLVx1MDAzZW5leHQ7XG4rXHRcdGlwdXQoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbitcdH1cbit9XG4rXG4rLypcbisgKiBSZWxlYXNlIGEgVkZTIHJlZmVyZW5jZSBvbiBhbiBFQSBpbm9kZS4gIE11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGlwdXQoKVxuKyAqIGluIGFueSBjb250ZXh0IHdoZXJlIHhhdHRyX3NlbSBvciBhIGpiZDIgaGFuZGxlIGlzIGhlbGQuXG4rICpcbisgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCByZWZlcmVuY2UsIGRyb3BzIGl0IGltbWVkaWF0ZWx5IHZpYVxuKyAqIGlwdXRfaWZfbm90X2xhc3QoKSB3aXRoIG5vIGZ1cnRoZXIgYWN0aW9uIG5lZWRlZC5cbisgKlxuKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgaW5vZGUgaXMgbGlua2VkIG9udG8gYSBwZXItc2JcbisgKiBsbGlzdCB2aWEgaV9lYV9pcHV0X25vZGUgKGVtYmVkZGVkIGluIGV4dDRfaW5vZGVfaW5mbywgc2hhcmluZyBzcGFjZVxuKyAqIHdpdGggdGhlIHVudXNlZCB4YXR0cl9zZW0pIGFuZCBhIGRlbGF5ZWQgd29ya2VyIHBlcmZvcm1zIHRoZSBmaW5hbFxuKyAqIGlwdXQoKSBpbiBhIGNsZWFuIGNvbnRleHQuXG4rICpcbisgKiBOb3RlOiB3aGlsZSBhbiBpbm9kZSBpcyBvbiBzX2VhX2lub2RlX3RvX2ZyZWUsIHRoZSB1bmNvbnN1bWVkIGlfY291bnRcbisgKiByZWZlcmVuY2UgKHN0aWxsIDEpIGtlZXBzIGl0IGluIHRoZSBpbm9kZSBjYWNoZSwgc28gYW55IGNvbmN1cnJlbnRcbisgKiBpZ2V0KCkgYnVtcHMgaV9jb3VudCB0byBcdTAwM2U9IDIgYW5kIGlwdXRfaWZfbm90X2xhc3QoKSB3aWxsIHN1Y2NlZWQuXG4rICogTm9ib2R5IHdpbGwgYWRkIHRoZSBpbm9kZSBhIHNlY29uZCB0aW1lIHVudGlsIGV4dDRfZWFfaW5vZGVfd29yaygpXG4rICogZHJvcHMgdGhhdCByZWZlcmVuY2UgdmlhIGlwdXQoKS5cbisgKi9cbit2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0aWYgKCFpbm9kZSlcbitcdFx0cmV0dXJuO1xuK1x0V0FSTl9PTl9PTkNFKCEoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSk7XG4rXHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXG4gXHRcdHJldHVybjtcbitcdGxsaXN0X2FkZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZWFfaXB1dF9ub2RlLFxuK1x0XHQgIFx1MDAyNkVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbitcdC8qXG4rXHQgKiBVc2UgYSBzaG9ydCBkZWxheSB0byBhbGxvdyBtdWx0aXBsZSBFQSBpbm9kZXMgdG8gYWNjdW11bGF0ZSxcbitcdCAqIHJlZHVjaW5nIHdvcmtxdWV1ZSB3YWtldXBzIHdoZW4gc2V2ZXJhbCBhcmUgcmVsZWFzZWQgdG9nZXRoZXIuXG4rXHQgKi9cbitcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfZWFfaW5vZGVfd29yaywgMSk7XG4rfVxuIFxuLVx0Zm9yIChpZHggPSAwOyBpZHggXHUwMDNjIGVhX2lub2RlX2FycmF5LVx1MDAzZWNvdW50OyArK2lkeClcbi1cdFx0aXB1dChlYV9pbm9kZV9hcnJheS1cdTAwM2Vpbm9kZXNbaWR4XSk7XG4tXHRrZnJlZShlYV9pbm9kZV9hcnJheSk7XG4rdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4re1xuK1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuK1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmggYi9mcy9leHQ0L3hhdHRyLmhcbmluZGV4IDFmZWRmNDRkNGZiNjVlLi44MjFkYzZhNTBlNTFlNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuaFxuKysrIGIvZnMvZXh0NC94YXR0ci5oXG5AQCAtMTMxLDExICsxMzEsNiBAQCBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIHtcbiBcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcbiB9O1xuIFxuLXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5IHtcbi1cdHVuc2lnbmVkIGludCBjb3VudDtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGVzW10gX19jb3VudGVkX2J5KGNvdW50KTtcbi19O1xuLVxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3VzZXJfaGFuZGxlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcjtcbkBAIC0xODcsOSArMTgyLDkgQEAgZXh0ZXJuIGludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdGJvb2wgaXNfY3JlYXRlKTtcbiBcbiBleHRlcm4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmFycmF5LFxuIFx0XHRcdFx0ICAgaW50IGV4dHJhX2NyZWRpdHMpO1xuLWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpO1xuK2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7XG4rZXh0ZXJuIHZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXG4gZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IDUwY2U3MzFhMmI3OGYxLi5hYTFkNTAxZDJiYjYyNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtMjQxMyw2ICsyNDEzLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcl9zZXRfc3lzZnNfbmFtZV9nZW5lcmljKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoXG4gZXh0ZXJuIHZvaWQgaWhvbGQoc3RydWN0IGlub2RlICogaW5vZGUpO1xuIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopO1xuIHZvaWQgaXB1dF9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKik7XG4rXG4rLyoqXG4rICogaXB1dF9pZl9ub3RfbGFzdCAtIGRyb3AgYW4gaW5vZGUgcmVmZXJlbmNlIG9ubHkgaWYgaXQgaXMgbm90IHRoZSBsYXN0IG9uZVxuKyAqIEBpbm9kZTogaW5vZGUgdG8gcHV0XG4rICpcbisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlZmVyZW5jZSB3YXMgZHJvcHBlZCwgZmFsc2UgaWYgdGhpcyB3YXMgdGhlIGxhc3RcbisgKiByZWZlcmVuY2UgYW5kIHRoZSBjYWxsZXIgbXVzdCBhcnJhbmdlIGZvciBmaW5hbCBpcHV0KCkgaW4gYSBzYWZlIGNvbnRleHQuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBpcHV0X2lmX25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0VkZTX0JVR19PTl9JTk9ERShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiAoSV9GUkVFSU5HIHwgSV9DTEVBUiksIGlub2RlKTtcbitcdFZGU19CVUdfT05fSU5PREUoaWNvdW50X3JlYWRfb25jZShpbm9kZSkgXHUwMDNjIDEsIGlub2RlKTtcbitcdHJldHVybiBhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZpbm9kZS1cdTAwM2VpX2NvdW50LCAtMSwgMSk7XG4rfVxuK1xuIGludCBpbm9kZV91cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsXG4gXHRcdHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IGdlbmVyaWNfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDE6MDk6MzAuMjc3MzA4MDk3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI1ODY4MDI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEV4dDQgWGF0dHIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBleHQ0LiBJdCdzIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyBFeHRlbmRlZCBBdHRyaWJ1dGVzIChFQXMpIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSB0cmFja2luZyBhbmQgZnJlZWluZyBvZiBFQSBpbm9kZXMuIFRoZXkndmUgYWRkZWQgdGhpcyBgZXh0NF9wdXRfZWFfaW5vZGVgIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVXNpbmcgYGlwdXRfaWZfbm90X2xhc3RgIGlzIGEgZ29vZCBhcHByb2FjaCB0byBhdm9pZCBwcmVtYXR1cmUgaW5vZGUgcmVsZWFzZSwgYW5kIGRlZmVycmluZyB0aGUgZmluYWwgYGlwdXRgIHRvIHRoYXQgd29ya3F1ZXVlLCBgc19lYV9pbm9kZV93b3JrYCwgbWFrZXMgc2Vuc2UgZm9yIGF2b2lkaW5nIHBvdGVudGlhbCBsb2NrIG9yZGVyaW5nIGlzc3Vlcywgd2hpY2ggaXMgYWx3YXlzIGEgY29uY2VybiBpbiBmaWxlc3lzdGVtIGNvZGUuIEdvb2QgdG8gc2VlIHRoZXkncmUgYmVpbmcgcHJvYWN0aXZlIGFib3V0IHRoYXQuXG5cbk5vdywgdGhlIHVuaW9uaW5nIG9mIGB4YXR0cl9zZW1gIHdpdGggYGlfZWFfaXB1dF9ub2RlYCB3aXRoaW4gYGV4dDRfaW5vZGVfaW5mb2Agc2VlbXMgbGlrZSBhIGNsZXZlciBvcHRpbWl6YXRpb24uIENvbnNvbGlkYXRpbmcgdGhvc2UgdHdvLCBlc3BlY2lhbGx5IGlmIGBpX2VhX2lwdXRfbm9kZWAgaXMgYW4gYGxsaXN0X25vZGVgLCBtYWtlcyBtZSB0aGluayB0aGV5J3JlIHRyeWluZyB0byByZWR1Y2UgbWVtb3J5IGZvb3RwcmludCwgYW5kIHBvc3NpYmx5IGltcHJvdmUgY2FjaGUgZWZmaWNpZW5jeS4gU21hcnQgbW92ZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBjb3JlIGV4dDQgZmlsZXN5c3RlbSwgc28gaXTigJlzIHdvcnRoIGEgZGVlcCBkaXZlLlxuXG5GaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSByZWFjaGFibGUsIHdoaWNoIGlzIGNydWNpYWwuIEV4dDQgaXMgdGhlIGZpbGVzeXN0ZW0sIG9mIGNvdXJzZS4gVGhlbiwgbGV0J3MgZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYEVYVDRfRlNgIGlzIHRoZSBvYnZpb3VzIG9uZSwgd2hpY2ggd2lsbCBicmluZyBpbiBtb3N0IG9mIHdoYXTigJlzIG5lZWRlZCwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGZvciBgRVhUNF9GU19YQVRUUmAgdG9vLCBqdXN0IGluIGNhc2UgdGhleSd2ZSBnb3Qgc29tZSBmaW5lci1ncmFpbmVkIGRlcGVuZGVuY2llcy4gTWF5YmUgYEVYVDRfRlNfUE9TSVhfQUNMYCBvciBgRVhUNF9GU19TRUNVUklUWWAgYXJlIGludm9sdmVkIHRvbywgdGhvdWdoIGxlc3MgbGlrZWx5LiBUaW1lIHRvIGNoZWNrIGBmcy9leHQ0L0tjb25maWdgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1OTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTozNi41MzU5OTA1MjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ0MzkwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTM0LVxcbmZzL2V4dDQvS2NvbmZpZzozNTpjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG5mcy9leHQ0L0tjb25maWctMzYtXFx0Ym9vbCBcXFwiVXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNjctXFxuZnMvZXh0NC9LY29uZmlnOjY4OmNvbmZpZyBFWFQ0X0RFQlVHXFxuZnMvZXh0NC9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkV4dDQgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNzYtXFxuZnMvZXh0NC9LY29uZmlnOjc3OmNvbmZpZyBFWFQ0X0tVTklUX1RFU1RTXFxuZnMvZXh0NC9LY29uZmlnLTc4LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgZXh0NFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTozNi42MDA0MzczOThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTU1MjU4OTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXh0NCBYYXR0ciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiBFeHQ0J3MgZXh0ZW5kZWQgYXR0cmlidXRlICh4YXR0cikgaGFuZGxpbmcuIEkgc2VlIGl0J3MgdG91Y2hpbmcgcXVpdGUgYSBmZXcga2V5IGZpbGVzOiBgZnMvZXh0NC94YXR0ci5jYCwgYGZzL2V4dDQvaW5vZGUuY2AsIGBmcy9leHQ0L3N1cGVyLmNgLCBhcyB3ZWxsIGFzIHRoZSByZWxhdGVkIGhlYWRlcnMsIGFuZCBldmVuIGBpbmNsdWRlL2xpbnV4L2ZzLmhgLiBUaGlzIHN1Z2dlc3RzIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZXMgYXJlIGhhcHBlbmluZywgcG90ZW50aWFsbHkgaW1wYWN0aW5nIGhvdyB4YXR0cnMgYXJlIHN0b3JlZCwgYWNjZXNzZWQsIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGUgZmlsZXN5c3RlbS5cblxuU3BlY2lmaWNhbGx5LCBJJ20gbm90aWNpbmcgYSBjbHVzdGVyIG9mIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgZnVuY3Rpb25zOiBgZXh0NF9wdXRfZWFfaW5vZGVgLCBgZXh0NF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrYCwgYGlwdXRfaWZfbm90X2xhc3RgLCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCwgYW5kIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYC4gVGhlIG5hbWVzIGFsb25lIGdpdmUgbWUgYSBwcmV0dHkgZ29vZCBpZGVhIG9mIHdoYXQncyBnb2luZyBvbiwgYnV0IEknbGwgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgY29kZS4gSXQgbG9va3MgbGlrZSB0aGV5IGFyZSBoYW5kbGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZXMsIGxpa2VseSBhcm91bmQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgaW5vZGVzIGFuZCBhc3NvY2lhdGVkIGJsb2Nrcy4gSXQgbWlnaHQgYmUgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcgb3IgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhlIHhhdHRyIHNwYWNlLCBhbmQgcG90ZW50aWFsbHkgaG93IHRoZXkgYXJlIGNsZWFuZWQgdXAgb3IgcmVtb3ZlZC4gVGhlIGBpcHV0X2lmX25vdF9sYXN0YCBmdW5jdGlvbiBzZWVtcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgYSBmb2N1cyBvbiBpbm9kZSBoYW5kbGluZyBhbmQgcmVmZXJlbmNlIGNvdW50cy5cblxuQmVmb3JlIEkgZ28gdG9vIGZhciwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBiYXNpYzogaXMgeGF0dHIgZnVuY3Rpb25hbGl0eSBjb25kaXRpb25hbCBvbiB0aGUgYEVYVDRfRlNfWEFUVFJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBpcyBpdCBhbHdheXMgYnVpbHQgaW4gZm9yIEV4dDQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgZXhwYW5kaW5nIGV4aXN0aW5nIGZlYXR1cmVzLCBvciBjaGFuZ2luZyB0aGUgc3RhbmRhcmQgYmVoYXZpb3IgZm9yIG1vc3QgRXh0NCBpbnN0YWxsYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYwNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTo0MS41NTU2OTg0MjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5Mjk1OTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYVDRfRlNfWEFUVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAxOjA5OjQxLjYxNDYzNDg0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MDU4MjU3MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBFWFQ0IFhhdHRyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCB0aGVyZSdzIG5vIGV4cGxpY2l0bHkgZGVmaW5lZCBgRVhUNF9GU19YQVRUUmAgb3B0aW9uIGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0J3MgYSBiaXQgb2RkLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBzdXBwb3J0IGZvciBleHQ0IGlzIGVpdGhlciBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBmaWxlc3lzdGVtIGl0c2VsZiwgb3IgcGVyaGFwcyBpdCdzIGdhdGVkIGJlaGluZCB0aGUgZ2VuZXJhbCBgRVhUNF9GU2AgY29uZmlndXJhdGlvbiBvcHRpb24uIExldCdzIGRpZyBpbiBhIGJpdCBkZWVwZXIgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaGFzIHRvIHNheS4gVGhlIGBmcy9leHQ0L01ha2VmaWxlYCBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaG93IHRoZSB2YXJpb3VzIGZlYXR1cmVzIGFyZSBlbmFibGVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgc2VlIGlmIEkgY2FuIHVuZGVyc3RhbmQgaG93IHhhdHRyIHN1cHBvcnQgaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMzYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTo0NC40MjA0NjQ2MDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5OTQwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGF0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XFx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcXFxcbi0tXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cXHRcXHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTI6XFx0XFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTM6XFx0XFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cXG5mcy9leHQ0L01ha2VmaWxlLTE0LVxcbmZzL2V4dDQvTWFrZWZpbGU9MTU9ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTClcXHQrPSBhY2wub1xcbmZzL2V4dDQvTWFrZWZpbGU6MTY6ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVxcdFxcdCs9IHhhdHRyX3NlY3VyaXR5Lm9cXG5mcy9leHQ0L01ha2VmaWxlLTE3LWV4dDQtdGVzdC1vYmpzXFx0XFx0XFx0XFx0Kz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDE6MDk6NDQuNDgwNDYzNjM4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk1MDA2NTMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRVhUNCBFeHRlbmRlZCBBdHRyaWJ1dGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIHRoYXQgdGhlIGB4YXR0ci5vYCBvYmplY3QgZmlsZSBpcyAqYWx3YXlzKiBidWlsdCB3aGVuIHRoZSBgRVhUNF9GU2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IHRvIG1ha2Ugc3VyZSB3ZSdyZSB0aG9yb3VnaGx5IHRlc3RpbmcgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBjb2RlLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGVuYWJsZSBgRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgRVhUNF9GU19TRUNVUklUWWAuIFRoYXQgc2hvdWxkIHByb3ZpZGUgY29tcGxldGUgY292ZXJhZ2UuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHNvbWUga2V5IHN5bWJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5vZGUtcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQuIEknbSBmb2N1c2luZyBvbiBgZXh0NF9wdXRfZWFfaW5vZGVgLCBgZXh0NF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCwgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AsIGFuZCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAuXG5cbmBleHQ0X3B1dF9lYV9pbm9kZWAsIGFoLCB0aGF0J3MgZGVmaW5lZCBpbiBgZnMvZXh0NC94YXR0ci5jYCBhbmQgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFNvIG90aGVyIEVYVDQgY29tcG9uZW50cyBhcmUgdXNpbmcgaXQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gTm93IGBleHQ0X2VhX2lub2RlX3dvcmtgIGlzIHN0YXRpYyB0byB0aGUgZmlsZSBhbmQgdGhlcmVmb3JlIG5vdCBleHBvc2VkIHRvIG90aGVyIGV4dDQgZmlsZXMuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAgaXMgaW4gdGhhdCBzYW1lIGZpbGUsIGBmcy9leHQ0L3hhdHRyLmNgLlxuXG5JIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhvc2UgZnVuY3Rpb24gbmFtZXMsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZSB0aGUgY29ycmVjdCBzeW1ib2xzLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTczMywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTo0OS40MzA1MzEwMDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMjcyNzU4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyh2b2lkfGludCkgZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0yOTYzPXN0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjk5NS0gKi9cXG5mcy9leHQ0L3hhdHRyLmM6Mjk5Njp2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC94YXR0ci5jLTI5OTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTo0OS43NjMyNjUxMjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4MTg5MTUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRXh0ZW5kZWQgQXR0cmlidXRlIFJlbGVhc2UgYW5kIFJlZmVyZW5jZSBDb3VudGluZyBpbiBleHQ0KipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZCBhcyBJIGxvb2sgYXQgdGhpczogSSBuZWVkIHRvIHplcm8gaW4gb24gYSBmZXcgY3JpdGljYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGUgKHhhdHRyKSBoYW5kbGluZyBjb2RlLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSBzdXNwZWN0IHRoZXNlIGFyZSBrZXkgYXJlYXMgZm9yIHJldmlldyBhbmQgbGlrZWx5IHdoZXJlIHJlbGF0ZWQgaXNzdWVzIGNvdWxkIGJlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dDogYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBhbmQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLlxuXG5NeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBibG9jayByZWxlYXNlIGFuZCByZWZlcmVuY2UgY291bnRpbmcuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgYXJlIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgIGFuZCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAg4oCTIHBhcnRpY3VsYXJseSBob3cgdGhleSBtYW5hZ2UgdGhlIHJlbGVhc2Ugb2YgeGF0dHIgYmxvY2tzIGFuZCByZWR1Y2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgYXNzb2NpYXRlZCBpbm9kZSwgcmVzcGVjdGl2ZWx5LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYGZzL2V4dDQveGF0dHIuY2AgYW5kIGZpZ3VyZSBvdXQgdGhlaXIgZXhhY3QgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDU1LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAxOjA5OjU0LjI0NTE1OTczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTc2OTI4OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8odm9pZHxpbnQpIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3hhdHRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAxOjA5OjU0LjMxMDkzNjU1OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjgxNjI5OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYSBLZXJuZWwgSXNzdWU6IGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgKipcblxuT2theSwgc28gSSdtIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AuIEltbWVkaWF0ZWx5LCBteSBicmFpbiB6ZXJvZXMgaW4gb24gdGhhdCBmdW5jdGlvbiBuYW1lLiBJdCBzY3JlYW1zIFwiZXh0NCBmaWxlc3lzdGVtXCIgYW5kIFwiZXh0ZW5kZWQgYXR0cmlidXRlc1wiIOKAkyBzcGVjaWZpY2FsbHksIHRoZSByZWxlYXNlIG9mIGEgYmxvY2sgaW52b2x2ZWQgaW4gbWFuYWdpbmcgeGF0dHJzLiBUaGlzIGxpa2VseSBwb2ludHMgdG8gYW4gaXNzdWUgcmVsYXRlZCB0byBob3cgdGhlIGZpbGVzeXN0ZW0gaXMgaGFuZGxpbmcgdGhlIGZyZWVpbmcgdXAgb2YgZGlzayBzcGFjZSB0aWVkIHRvIHRob3NlIGV4dGVuZGVkIGF0dHJpYnV0ZSBlbnRyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUga2luZCBvZiB3cml0ZSBwYXRoIG9yIHBlcmhhcHMgYSBkZWxldGlvbiBzY2VuYXJpbywgcG9zc2libHkgaW52b2x2aW5nIGNvcnJ1cHRlZCBtZXRhZGF0YSBvciBhIHJhY2UgY29uZGl0aW9uLiBJJ20gaW1hZ2luaW5nIHBvdGVudGlhbGx5IGFuIGlzc3VlIHdoZXJlIHRoZSBibG9jayBpcyBiZWluZyBwcmVtYXR1cmVseSByZWxlYXNlZCwgb3IgcGVyaGFwcyBpcyBub3QgZ2V0dGluZyBmcmVlZCB1cCBjb3JyZWN0bHkgYXQgYWxsLiBOZWVkIHRvIGRpdmUgZGVlcGVyISBJ4oCZZCBzdGFydCBieSBsb29raW5nIGZvciBhbnkgcmVjZW50IHBhdGNoZXMsIGJ1Z3Mgb3IgcmVncmVzc2lvbnMgYXJvdW5kIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoZSBsYXN0IGZldyBrZXJuZWwgcmVsZWFzZXMuIExldOKAmXMgZ3JlcCB0aGUgY29kZWJhc2UgZm9yIHRoYXQgZXhhY3QgZnVuY3Rpb24gbmFtZSBhbmQgc2VlIHdoYXQgY29tZXMgdXAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiBjYWxsIOKAkyB3aGF0IGNhbGxzIGl0PyB3aGF0IGlzIGNhbGxlZCBieSBpdD8gV2hhdCBzdHJ1Y3R1cmVzIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aD8gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTo1OC41OTI1Njg4OTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MDg2MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3hhdHRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC94YXR0ci5jPTEyNjI9c3RhdGljIHZvaWRcXG5mcy9leHQ0L3hhdHRyLmM6MTI2MzpleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmMtMTI2NC1cXHRcXHRcXHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xODg4PWV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjE3My1cXHRpZiAoYnMtXFx1MDAzZWJoIFxcdTAwMjZcXHUwMDI2IGJzLVxcdTAwM2ViaCAhPSBuZXdfYmgpIHtcXG5mcy9leHQ0L3hhdHRyLmM6MjE3NDpcXHRcXHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtXFx1MDAzZWJoLFxcbmZzL2V4dDQveGF0dHIuYy0yMTc1LVxcdFxcdFxcdFxcdFxcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI4NjA9aW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjkzNi1cXG5mcy9leHQ0L3hhdHRyLmM6MjkzNzpcXHRcXHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsXFxuZnMvZXh0NC94YXR0ci5jLTI5MzgtXFx0XFx0XFx0XFx0XFx0IGV4dHJhX2NyZWRpdHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTo1OC42NTY2NTk3NDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzNDM3MzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIEV4dDQgWGF0dHIgRGVsZXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhpcyBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgIGZ1bmN0aW9uLiBHb29kIHRvIHNlZSB0aGF0IGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgIGFuZCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAgYXJlIGJvdGggc3RhdGljLCB3aGljaCBoZWxwcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGVpciB1c2Ugd2l0aGluIHRoZSB4YXR0ciBoYW5kbGluZy4gTm93LCB0aGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgd2hhdCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgICpkb2VzKiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZWxhdGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBmbG93IGZyb20gdGhlcmUuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzPyBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUyMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAxOjEwOjAxLjU5MTAzNTQ1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ2NzQ1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF94YXR0cl9kZWxldGVfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0yNzQ4PWludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI4NTEtLypcXG5mcy9leHQ0L3hhdHRyLmM6Mjg1MjogKiBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSgpXFxuZnMvZXh0NC94YXR0ci5jLTI4NTMtICpcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yODU5LSAqL1xcbmZzL2V4dDQveGF0dHIuYzoyODYwOmludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQveGF0dHIuYy0yODYxLVxcdFxcdFxcdCAgICBpbnQgZXh0cmFfY3JlZGl0cylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDE6MTA6MDEuNjU1NzE0NDgxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNjcxMTAyMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBFWFQ0IFhhdHRyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGl0J3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgd2UgaGFuZGxlIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgZm9yIEVBIGlub2RlcyB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gR2l2ZW4gdGhlIHNjb3BlLCB0aGlzIHNjcmVhbXMgXCJwb3RlbnRpYWwgZm9yIGZ1enppbmcgb3Bwb3J0dW5pdGllcy5cIiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBjb25jZW50cmF0ZWQgYXJvdW5kIHRoZSBoYW5kbGluZyBvZiBFQSBpbm9kZXMuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zLCBqdXN0IHRvIGJlIHN1cmUgd2UgYXJlIGNvdmVyaW5nIGFsbCBwb3RlbnRpYWwgYmFzZXM6IGBFWFQ0X0ZTYCwgYEVYVDRfRlNfUE9TSVhfQUNMYCwgYW5kIGBFWFQ0X0ZTX1NFQ1VSSVRZYCBhcmUgZGVmaW5pdGVseSByZWxldmFudCBoZXJlLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkLiBUaGUgaW5pdGlhbCBsaXN0IGluY2x1ZGVzIGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X2VhX2lub2RlX3dvcmtgLCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCwgYW5kIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgc28gSSB3aWxsIGdpdmUgdGhlbSB0aGUgcHJpb3JpdHkuXG5cbkhvd2V2ZXIsIEkgc2hvdWxkIGJlIHRob3JvdWdoIGFuZCBjaGVjayBmb3Igb3RoZXIgY2hhbmdlcy4gT2theSwgbGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBJIGZpbmQgYGV4dDRfYWxsb2NfaW5vZGVgIGluIGBmcy9leHQ0L3N1cGVyLmNgLCBgZXh0NF9ldmljdF9pbm9kZWAgaW4gYGZzL2V4dDQvaW5vZGUuY2AsIGBleHQ0X3B1dF9zdXBlcmAgaW4gYGZzL2V4dDQvc3VwZXIuY2AsIGBfX2V4dDRfZmlsbF9zdXBlcmAgaW4gYGZzL2V4dDQvc3VwZXIuY2AsIGBleHQ0X3N5bmNfZnNgIGluIGBmcy9leHQ0L3N1cGVyLmNgLCBgZXh0NF94YXR0cl9pbm9kZV9nZXRgIGluIGBmcy9leHQ0L3hhdHRyLmNgLCBgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbGAgaW4gYGZzL2V4dDQveGF0dHIuY2AsIGBleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZWAgaW4gYGZzL2V4dDQveGF0dHIuY2AsIGBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmRgIGluIGBmcy9leHQ0L3hhdHRyLmNgLCBgZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlYCBpbiBgZnMvZXh0NC94YXR0ci5jYCwgYGV4dDRfeGF0dHJfc2V0X2VudHJ5YCBpbiBgZnMvZXh0NC94YXR0ci5jYCwgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBpbiBgZnMvZXh0NC94YXR0ci5jYCwgYW5kIGBleHQ0X3hhdHRyX2lib2R5X3NldGAgaW4gYGZzL2V4dDQveGF0dHIuY2AuXG5cbk9rYXksIGFmdGVyIHJldmlld2luZyB0aGUgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zLCBJIGNhbiBzZWUgdGhhdCBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGFuZCBgZXh0NF94YXR0cl9pYm9keV9zZXRgIGFyZSBhbHNvIHF1aXRlIHJlbGV2YW50IGFuZCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGZ1enppbmcgZm9jdXMuIEknbGwgaW5jbHVkZSB0aG9zZSBpbiBteSBsaXN0IG9mIGBGb2N1c1N5bWJvbHNgLlxuXG5Ob3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCB0aGUgYWN0dWFsIGZ1enppbmcsIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYGlwdXRfaWZfbm90X2xhc3RgLiBUaGF0IHNlZW1zIGxpa2UgYW4gaW1wb3J0YW50IGZ1bmN0aW9uIHRvIGtlZXAgaW4gbWluZCwgaW4gcmVnYXJkcyB0byB0aGUgY29kZS1wYXRoIHRha2VuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMToxMDowOS43MjI4MjY2MzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjI0MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdXRfaWZfbm90X2xhc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9mcy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZnMuaD0yNDE1PXZvaWQgaXB1dF9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjQxNy0vKipcXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjQxODogKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lXFxuaW5jbHVkZS9saW51eC9mcy5oLTI0MTktICogQGlub2RlOiBpbm9kZSB0byBwdXRcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaC0yNDIzLSAqL1xcbmluY2x1ZGUvbGludXgvZnMuaDoyNDI0OnN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmluY2x1ZGUvbGludXgvZnMuaC0yNDI1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDE6MTA6MDkuNzk0NDU2MDk2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3ODIyMTk0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSBhbmQgSSdtIHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBGaXJzdCBvZmYsIHRoaXMgZnVuY3Rpb24gaXMgYHN0YXRpYyBpbmxpbmVgLCB3aGljaCBpcyBnb29kIHRvIGtub3cgYmVjYXVzZSBpdCBtZWFucyBpdCB3b24ndCBjbHV0dGVyIHRoZSBrZXJuZWwgc3ltYm9sIHRhYmxlLiBJIGNhbiBza2lwIGluY2x1ZGluZyBpdCBpbiBgRm9jdXNTeW1ib2xzYC4gVGhhdCdsbCBrZWVwIHRoaW5ncyBjbGVhbmVyLlxuXG5Ob3csIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBwcmVwYXJlIHRoZSBmaW5hbCBkZWNpc2lvbi5cblxuYFdvcnRoRnV6emluZ2Agc2hvdWxkIGRlZmluaXRlbHkgYmUgYHRydWVgLiBUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBjb21wZWxsaW5nIGhlcmU6IHRoaXMgcGF0Y2ggaXMgbWVzc2luZyB3aXRoICpjb3JlKiBleHQ0IHhhdHRyIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIGlub2RlcyBhcmUgbWFuYWdlZC4gSXQncyBtYWtpbmcgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBob3cgdGhvc2UgaW5vZGVzIGFyZSB0cmFja2VkIGFuZCBmcmVlZCwgYW5kIGl0J3MgZG9pbmcgc28gd2l0aCBhIG5ldyBkZWZlcnJlZCBgaXB1dGAgbWVjaGFuaXNtIGltcGxlbWVudGVkIHZpYSBhIHdvcmtxdWV1ZS4gVGhpcyBpcyBkZXNpZ25lZCB0byBzaWRlc3RlcCB0aG9zZSBuYXN0eSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gV2UncmUgdGFsa2luZyBhYm91dCBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZmlsZXN5c3RlbSB0aGF0J3MgdXNlZCAqZXZlcnl3aGVyZSouIFRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzIGlzIGhpZ2gsIGFuZCB0aGUgaW1wYWN0IGNvdWxkIGJlIHdpZGVzcHJlYWQuXG5cbkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGxvb2sgbGlrZSBgRVhUNF9GU2AsIGBFWFQ0X0ZTX1BPU0lYX0FDTGAsIGFuZCBgRVhUNF9GU19TRUNVUklUWWAuXG5cbkZpbmFsbHksIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IGlzIGxvb2tpbmcgc29saWQuIEkgc2hvdWxkIGtlZXAgYW4gZXllIG9uIHRoZXNlIGZ1bmN0aW9uczogYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIGFuZCBgZXh0NF94YXR0cl9pYm9keV9zZXRgLiBUaGV5J3JlIGFsbCBrZXkgdG8gdGhpcyBuZXcgRUEgaW5vZGUgbWFuYWdlbWVudCBhbmQgZGVmZXJyZWQgYGlwdXRgIHByb2Nlc3MuIEl0J3MgYSBjb21wbGV0ZSB2aWV3IG9mIGhvdyB0aGUgZnVuY3Rpb25hbGl0eSBpcyBjaGFuZ2VkIGFuZCBnaXZlcyBhIGdvb2QgcG9pbnQgdG8gYmVnaW4gdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MTUsIk91dHB1dFRva2VucyI6MTg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAxOjEwOjE1LjU3NjY3OTgyMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NDUwODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJFWFQ0X0ZTX1BPU0lYX0FDTFwiLFxuICAgIFwiRVhUNF9GU19TRUNVUklUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfcHV0X2VhX2lub2RlXCIsXG4gICAgXCJleHQ0X2VhX2lub2RlX3dvcmtcIixcbiAgICBcImV4dDRfeGF0dHJfZGVsZXRlX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxcIixcbiAgICBcImV4dDRfeGF0dHJfYmxvY2tfc2V0XCIsXG4gICAgXCJleHQ0X3hhdHRyX2lib2R5X3NldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgZXh0NCB4YXR0ciBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBFQSBpbm9kZXMgYXJlIHRyYWNrZWQgYW5kIGZyZWVkLCBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIHZpYSBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgd2lkZWx5IHVzZWQgZmlsZXN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJFWFQ0X0ZTX1BPU0lYX0FDTFwiLFxuICAgIFwiRVhUNF9GU19TRUNVUklUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfcHV0X2VhX2lub2RlXCIsXG4gICAgXCJleHQ0X2VhX2lub2RlX3dvcmtcIixcbiAgICBcImV4dDRfeGF0dHJfZGVsZXRlX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxcIixcbiAgICBcImV4dDRfeGF0dHJfYmxvY2tfc2V0XCIsXG4gICAgXCJleHQ0X3hhdHRyX2lib2R5X3NldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgZXh0NCB4YXR0ciBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBFQSBpbm9kZXMgYXJlIHRyYWNrZWQgYW5kIGZyZWVkLCBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIHZpYSBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgd2lkZWx5IHVzZWQgZmlsZXN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgqm8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 00:49:56 +0000 UTC FinishedAt: 2026-07-11 01:10:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT4_FS_POSIX_ACL", "EXT4_FS_SECURITY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT4_FS_POSIX_ACL", "EXT4_FS_SECURITY" ], "series_id": "2e06603c-8787-4415-8d45-101104a45a9b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_put_ea_inode", "ext4_ea_inode_work", "ext4_xattr_delete_inode", "ext4_xattr_release_block", "ext4_xattr_inode_dec_ref_all", "ext4_xattr_block_set", "ext4_xattr_ibody_set" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089", "9b2e3f5d-279a-469f-9f2a-05f96ea11587" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAxOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RVhUNF9GU19QT1NJWF9BQ0wmIzM0OywKICAgICYjMzQ7RVhUNF9GU19TRUNVUklUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfcHV0X2VhX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfZWFfaW5vZGVfd29yayYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2smIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2Jsb2NrX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lib2R5X3NldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGV4dDQgeGF0dHIgbG9naWMsIHNwZWNpZmljYWxseSBob3cgRUEgaW5vZGVzIGFyZSB0cmFja2VkIGFuZCBmcmVlZCwgaW50cm9kdWNpbmcgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSB2aWEgYSB3b3JrcXVldWUgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHdpZGVseSB1c2VkIGZpbGVzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDE6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhZDEyZmY0OGQxNTNhMGIxMTNiYzNjOTVkMmQ3ODQxOTEwNjZlZGNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDE6MDk6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLmI5YjBhZGE3Nzc0YmI0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMTA3MCw4ICYjNDM7MTA3MCwxNCBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcbiBcdCAqIGJldHdlZW4gcmVhZGVycyBvZiBFQXMgYW5kIHdyaXRlcnMgb2YgcmVndWxhciBmaWxlIGRhdGEsIHNvXG4gXHQgKiBpbnN0ZWFkIHdlIHN5bmNocm9uaXplIG9uIHhhdHRyX3NlbSB3aGVuIHJlYWRpbmcgb3IgY2hhbmdpbmdcbiBcdCAqIEVBcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcbiYjNDM7XHQgKiB0aGUgc3BhY2UgZm9yIGRlZmVycmVkIGlwdXQgbGlua2FnZS5cbiBcdCAqL1xuLVx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XG4mIzQzO1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSBpX2VhX2lwdXRfbm9kZTtcbiYjNDM7XHR9O1xuIFxuIFx0LypcbiBcdCAqIElub2RlcyB3aXRoIEVYVDRfU1RBVEVfT1JQSEFOX0ZJTEUgdXNlIGlfb3JwaGFuX2lkeC4gT3RoZXJ3aXNlXG5AQCAtMTc3MCw2ICYjNDM7MTc3NiwxMSBAQCBzdHJ1Y3QgZXh0NF9zYl9pbmZvIHtcbiBcdHN0cnVjdCBleHQ0X2VzX3N0YXRzIHNfZXNfc3RhdHM7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfYmxvY2tfY2FjaGU7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfaW5vZGVfY2FjaGU7XG4mIzQzO1xuJiM0MztcdC8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIHNfZWFfaW5vZGVfdG9fZnJlZTtcbiYjNDM7XHRzdHJ1Y3QgZGVsYXllZF93b3JrIHNfZWFfaW5vZGVfd29yaztcbiYjNDM7XG4gXHRzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIFxuIFx0LyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi43NDdjNTJjMjMyY2MwMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMTc2LDcgJiM0MzsxNzYsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdCAqICh4YXR0ciBibG9jayBmcmVlaW5nKSwgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yIChpbm9kZSBmcmVlaW5nKVxuIFx0ICovXG4gXHRpbnQgZXh0cmFfY3JlZGl0cyA9IDY7XG4tXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xuIFx0Ym9vbCBmcmVlemVfcHJvdGVjdGVkID0gZmFsc2U7XG4gXG4gXHR0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTtcbkBAIC0yODEsOCAmIzQzOzI4MCw3IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fVxuIFxuIFx0LyogUmVtb3ZlIHhhdHRyIHJlZmVyZW5jZXMuICovXG4tXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRcdCAgICAgIGV4dHJhX2NyZWRpdHMpO1xuJiM0MztcdGVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIGV4dHJhX2NyZWRpdHMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRleHQ0X3dhcm5pbmcoaW5vZGUtXHUwMDNlaV9zYiwgXCYjMzQ7eGF0dHIgZGVsZXRlIChlcnIgJWQpXCYjMzQ7LCBlcnIpO1xuIHN0b3BfaGFuZGxlOlxuQEAgLTI5MCw3ICYjNDM7Mjg4LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XG4gXHRcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdFx0Z290byBub19kZWxldGU7XG4gXHR9XG4gXG5AQCAtMzIwLDcgJiM0MzszMTcsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4gXHRpZiAoZnJlZXplX3Byb3RlY3RlZClcbiBcdFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdHJldHVybjtcbiBub19kZWxldGU6XG4gXHQvKlxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLjg5OGQ4YzY0MzFiYWVhIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC0xMzAzLDYgJiM0MzsxMzAzLDggQEAgc3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdFx0XHQgXHUwMDI2c2ItXHUwMDNlc191dWlkKTtcbiBcbiBcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcbiYjNDM7XHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXG4mIzQzO1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XG4gXG4gXHRkZXN0cm95X3dvcmtxdWV1ZShzYmktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xuQEAgLTE0MjMsNiAmIzQzOzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0bWVtc2V0KFx1MDAyNmVpLVx1MDAzZWlfZHF1b3QsIDAsIHNpemVvZihlaS1cdTAwM2VpX2RxdW90KSk7XG4gI2VuZGlmXG4gXHRlaS1cdTAwM2VqaW5vZGUgPSBOVUxMO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVpbml0aWFsaXplIHhhdHRyX3NlbSBldmVyeSBhbGxvY2F0aW9uIGJlY2F1c2UgRUEgaW5vZGVzXG4mIzQzO1x0ICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heVxuJiM0MztcdCAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXNcbiYjNDM7XHQgKiBwcmV2aW91c2x5IHVzZWQgYXMgYW4gRUEgaW5vZGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2V4YXR0cl9zZW0pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZWktXHUwMDNlaV9yc3ZfY29udmVyc2lvbl9saXN0KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmVpLVx1MDAzZWlfY29tcGxldGVkX2lvX2xvY2spO1xuIFx0ZWktXHUwMDNlaV9zeW5jX3RpZCA9IDA7XG5AQCAtMTQ4OCw3ICYjNDM7MTQ5Nyw2IEBAIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXG4gXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGZvbztcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmVpLVx1MDAzZWlfb3JwaGFuKTtcbi1cdGluaXRfcndzZW0oXHUwMDI2ZWktXHUwMDNleGF0dHJfc2VtKTtcbiBcdGluaXRfcndzZW0oXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4gXHRpbm9kZV9pbml0X29uY2UoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbiBcdGV4dDRfZmNfaW5pdF9pbm9kZShcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuQEAgLTU0OTcsNiAmIzQzOzU1MDUsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdFx0XHQgIGV4dDRfaGFzX2ZlYXR1cmVfb3JwaGFuX3ByZXNlbnQoc2IpIHx8XG4gXHRcdFx0ICBleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWxfbmVlZHNfcmVjb3Zlcnkoc2IpKTtcbiBcbiYjNDM7XHRleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzYmkpO1xuJiM0MztcbiBcdGlmIChleHQ0X2hhc19mZWF0dXJlX21tcChzYikgXHUwMDI2XHUwMDI2ICFzYl9yZG9ubHkoc2IpKSB7XG4gXHRcdGVyciA9IGV4dDRfbXVsdGlfbW91bnRfcHJvdGVjdChzYiwgbGU2NF90b19jcHUoZXMtXHUwMDNlc19tbXBfYmxvY2spKTtcbiBcdFx0aWYgKGVycilcbkBAIC01NzQ3LDYgJiM0Mzs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRyZXR1cm4gMDtcbiBcbiBmYWlsZWRfbW91bnQ5OlxuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqL1xuJiM0MztcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xuQEAgLTU3NjcsNiAmIzQzOzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0aWYgKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG4gZmFpbGVkX21vdW50X3dxOlxuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbiYjNDM7XHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpO1xuIFx0c2JpLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xuIFxuQEAgLTU3NzcsNiAmIzQzOzU3OTEsOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuIFx0fVxuIGZhaWxlZF9tb3VudDNhOlxuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi9cbiYjNDM7XHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcbiBmYWlsZWRfbW91bnQzOlxuIFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cbkBAIC02NDQ3LDYgJiM0Mzs2NDYzLDcgQEAgc3RhdGljIGludCBleHQ0X3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpXG4gXG4gXHR0cmFjZV9leHQ0X3N5bmNfZnMoc2IsIHdhaXQpO1xuIFx0Zmx1c2hfd29ya3F1ZXVlKHNiaS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG4mIzQzO1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0LypcbiBcdCAqIFdyaXRlYmFjayBxdW90YSBpbiBub24tam91cm5hbGxlZCBxdW90YSBjYXNlIC0gam91cm5hbGxlZCBxdW90YSBoYXNcbiBcdCAqIG5vIGRpcnR5IGRxdW90c1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xuaW5kZXggOTgyYTFmODMxZTIyODIuLjRhZTZjZTExMTU2NjBlIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3hhdHRyLmNcbkBAIC0xMTQsMTAgJiM0MzsxMTQsNiBAQCBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcbiAjZGVmaW5lIEVBX0lOT0RFX0NBQ0hFKGlub2RlKVx0KCgoc3RydWN0IGV4dDRfc2JfaW5mbyAqKSBcXFxuIFx0XHRcdFx0aW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2ZzX2luZm8pLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpXG4gXG4tc3RhdGljIGludFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0c3RydWN0IGlub2RlICppbm9kZSk7XG4tXG4gI2lmZGVmIENPTkZJR19MT0NLREVQXG4gdm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9jbGFzcyhzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlKVxuIHtcbkBAIC01NjcsNyAmIzQzOzU2Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSxcbiBcdFx0XHRcdFx0ZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuIFx0fVxuIG91dDpcbi1cdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTExMDQsMTAgJiM0MzsxMTAwLDEwIEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcJiMzNDtpbmMgcmVmIGVycm9yICVkXCYjMzQ7LCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTEzMyw3ICYjNDM7MTEyOSw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2NsZWFudXAgZGVjIHJlZiBlcnJvciAlZFwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHR9XG4gXHRyZXR1cm4gc2F2ZWRfZXJyO1xuIH1cbkBAIC0xMTYwLDcgJiM0MzsxMTU2LDYgQEAgc3RhdGljIHZvaWRcbiBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRcdCAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbiBcdFx0XHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICpmaXJzdCwgYm9vbCBibG9ja19jc3VtLFxuLVx0XHRcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgICAgIGludCBleHRyYV9jcmVkaXRzLCBib29sIHNraXBfcXVvdGEpXG4ge1xuIFx0c3RydWN0IGlub2RlICplYV9pbm9kZTtcbkBAIC0xMTk3LDE0ICYjNDM7MTE5Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGVyciA9IGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KGVhX2lub2RlX2FycmF5LCBlYV9pbm9kZSk7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4tXHRcdFx0XHRcdCAgIFwmIzM0O0V4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWRcJiMzNDssIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbiBcdFx0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzX2ZuKGhhbmRsZSwgY3JlZGl0cywgY3JlZGl0cyxcbiBcdFx0XHRleHQ0X2ZyZWVfbWV0YWRhdGFfcmV2b2tlX2NyZWRpdHMocGFyZW50LVx1MDAzZWlfc2IsIDEpLFxuIFx0XHRcdGV4dDRfeGF0dHJfcmVzdGFydF9mbihoYW5kbGUsIHBhcmVudCwgYmgsIGJsb2NrX2NzdW0sXG5AQCAtMTIxMiw2ICYjNDM7MTE5OSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O0Vuc3VyZSBjcmVkaXRzIGVycj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbkBAIC0xMjIxLDYgJiM0MzsxMjA5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHRcJiMzNDtSZS1nZXQgd3JpdGUgYWNjZXNzIGVycj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0XHRlcnIpO1xuJiM0MztcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcdFx0fVxuQEAgLTEyMjksNiAmIzQzOzEyMTgsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcJiMzNDtlYV9pbm9kZSBkZWMgcmVmIGVycj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5AQCAtMTI0NSw2ICYjNDM7MTIzNSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGVudHJ5LVx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XG4gXHRcdGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XG4gXG4mIzQzO1x0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdGRpcnR5ID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0xMjcxLDcgJiM0MzsxMjYyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBzdGF0aWMgdm9pZFxuIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLVx0XHRcdCBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCBpbnQgZXh0cmFfY3JlZGl0cylcbiB7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKmVhX2Jsb2NrX2NhY2hlID0gRUFfQkxPQ0tfQ0FDSEUoaW5vZGUpO1xuQEAgLTEzMTMsNyAmIzQzOzEzMDMsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHRcdCAgICAgQkZJUlNUKGJoKSxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XG4gXHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsXG5AQCAtMTUwNSw3ICYjNDM7MTQ5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0aWYgKGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsIGVhX2lub2RlKSlcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XCYjMzQ7Y2xlYW51cCBkZWMgcmVmIGVycm9yICVkXCYjMzQ7LCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdFx0fVxuIFxuQEAgLTE1NjQsNyAmIzQzOzE1NTMsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4gXHRcdFx0a3ZmcmVlKGVhX2RhdGEpO1xuIFx0XHRcdHJldHVybiBlYV9pbm9kZTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdG5leHRfZW50cnk6XG4gXHRcdGNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGVhX2lub2RlX2NhY2hlLCBjZSk7XG4gXHR9XG5AQCAtMTYxNSw3ICYjNDM7MTYwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdFx0ICAgICAgZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuIFx0cmV0dXJuIGVhX2lub2RlO1xuIG91dF9lcnI6XG4tXHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHZhbHVlX2xlbik7XG4gXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIH1cbkBAIC0xODQ4LDcgJiM0MzsxODM3LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuIFxuIFx0cmV0ID0gMDtcbiBvdXQ6XG4tXHRpcHV0KG9sZF9lYV9pbm9kZSk7XG4mIzQzO1x0ZXh0NF9wdXRfZWFfaW5vZGUob2xkX2VhX2lub2RlKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTIwMTAsNyAmIzQzOzE5OTksNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0b2xkX2VhX2lub2RlX3F1b3RhID0gbGUzMl90b19jcHUoXG4gXHRcdFx0XHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfc2l6ZSk7XG4gXHRcdFx0fVxuLVx0XHRcdGlwdXQodG1wX2lub2RlKTtcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUodG1wX2lub2RlKTtcbiBcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbkBAIC0yMTUwLDcgJiM0MzsyMTM5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdFx0ICAgXCYjMzQ7ZGVjIHJlZiBlcnJvcj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0XHRcdCAgIGVycm9yKTtcbi1cdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbiBcdFx0XHR9XG4gXG5AQCAtMjE4MiwxMiAmIzQzOzIxNzEsOCBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIFx0LyogRHJvcCB0aGUgcHJldmlvdXMgeGF0dHIgYmxvY2suICovXG4gXHRpZiAoYnMtXHUwMDNlYmggXHUwMDI2XHUwMDI2IGJzLVx1MDAzZWJoICE9IG5ld19iaCkge1xuLVx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xuLVxuIFx0XHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtXHUwMDNlYmgsXG4tXHRcdFx0XHRcdCBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0IDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7XG4tXHRcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XG4gXHR9XG4gXHRlcnJvciA9IDA7XG4gXG5AQCAtMjIwMyw3ICYjNDM7MjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdH1cbiBcdGlmIChjZSlcbiBcdFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XG5AQCAtMjI4NSw3ICYjNDM7MjI3MCw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG5AQCAtMjI5Nyw3ICYjNDM7MjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRoZWFkZXItXHUwMDNlaF9tYWdpYyA9IGNwdV90b19sZTMyKDApO1xuIFx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTtcbiBcdH1cbi1cdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yODYzLDQ2ICYjNDM7Mjg0OCw2IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovXG4tI2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxuLVxuLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuXG4tICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcbi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cbi0gKi9cbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkge1xuLVx0XHQvKlxuLVx0XHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXG4tXHRcdCAqL1xuLVx0XHQoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHRcdFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XG4tXHRcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgPSAwO1xuLVx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xuLVx0XHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICYjNDM7IG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqL1xuLVx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDtcbi1cbi1cdFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdFx0ICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ICYjNDM7IEVJQV9JTkNSLFxuLVx0XHRcdFx0XHQgR0ZQX05PRlMpO1xuLVx0XHRpZiAobmV3X2FycmF5ID09IE5VTEwpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdG1lbWNweShuZXdfYXJyYXksICplYV9pbm9kZV9hcnJheSxcbi1cdFx0ICAgICAgIHN0cnVjdF9zaXplKCplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0ICAgKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQpKTtcbi1cdFx0a2ZyZWUoKmVhX2lub2RlX2FycmF5KTtcbi1cdFx0KmVhX2lub2RlX2FycmF5ID0gbmV3X2FycmF5O1xuLVx0fVxuLVx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQmIzQzOyYjNDM7O1xuLVx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlaW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50IC0gMV0gPSBpbm9kZTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKClcbiAgKlxuQEAgLTI5MTMsNyAmIzQzOzI4NTgsNiBAQCBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuICAqIHJlZmVyZW5jZXMgb24geGF0dHIgYmxvY2sgYW5kIHhhdHRyIGlub2Rlcy5cbiAgKi9cbiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHQgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgICAgaW50IGV4dHJhX2NyZWRpdHMpXG4ge1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XG5AQCAtMjk1Miw3ICYjNDM7Mjg5Niw2IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcbiBcdFx0XHRcdFx0XHQgICAgIElGSVJTVChoZWFkZXIpLFxuIFx0XHRcdFx0XHRcdCAgICAgZmFsc2UgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0fVxuQEAgLTI5ODYsMTIgJiM0MzsyOTI5LDEyIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xuLVx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdH1cbiBcbiBcdFx0fVxuIFxuLVx0XHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsIGVhX2lub2RlX2FycmF5LFxuJiM0MztcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4gXHRcdC8qXG4gXHRcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcbkBAIC0zMDEzLDE2ICYjNDM7Mjk1Niw2MyBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KVxuJiM0MzsvKlxuJiM0MzsgKiBXb3JrZXIgZnVuY3Rpb24gZm9yIGRlZmVycmVkIEVBIGlub2RlIGlwdXQuICBQcm9jZXNzZXMgYWxsIGlub2RlcyBxdWV1ZWRcbiYjNDM7ICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0aW50IGlkeDtcbiYjNDM7XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvLFxuJiM0MztcdFx0XHRcdFx0XHRzX2VhX2lub2RlX3dvcmspO1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbiBcbi1cdGlmIChlYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxuJiM0MztcdHdoaWxlIChub2RlKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpO1xuJiM0MztcdFx0bm9kZSA9IG5vZGUtXHUwMDNlbmV4dDtcbiYjNDM7XHRcdGlwdXQoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlbGVhc2UgYSBWRlMgcmVmZXJlbmNlIG9uIGFuIEVBIGlub2RlLiAgTXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgaXB1dCgpXG4mIzQzOyAqIGluIGFueSBjb250ZXh0IHdoZXJlIHhhdHRyX3NlbSBvciBhIGpiZDIgaGFuZGxlIGlzIGhlbGQuXG4mIzQzOyAqXG4mIzQzOyAqIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IHJlZmVyZW5jZSwgZHJvcHMgaXQgaW1tZWRpYXRlbHkgdmlhXG4mIzQzOyAqIGlwdXRfaWZfbm90X2xhc3QoKSB3aXRoIG5vIGZ1cnRoZXIgYWN0aW9uIG5lZWRlZC5cbiYjNDM7ICpcbiYjNDM7ICogSWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UsIHRoZSBpbm9kZSBpcyBsaW5rZWQgb250byBhIHBlci1zYlxuJiM0MzsgKiBsbGlzdCB2aWEgaV9lYV9pcHV0X25vZGUgKGVtYmVkZGVkIGluIGV4dDRfaW5vZGVfaW5mbywgc2hhcmluZyBzcGFjZVxuJiM0MzsgKiB3aXRoIHRoZSB1bnVzZWQgeGF0dHJfc2VtKSBhbmQgYSBkZWxheWVkIHdvcmtlciBwZXJmb3JtcyB0aGUgZmluYWxcbiYjNDM7ICogaXB1dCgpIGluIGEgY2xlYW4gY29udGV4dC5cbiYjNDM7ICpcbiYjNDM7ICogTm90ZTogd2hpbGUgYW4gaW5vZGUgaXMgb24gc19lYV9pbm9kZV90b19mcmVlLCB0aGUgdW5jb25zdW1lZCBpX2NvdW50XG4mIzQzOyAqIHJlZmVyZW5jZSAoc3RpbGwgMSkga2VlcHMgaXQgaW4gdGhlIGlub2RlIGNhY2hlLCBzbyBhbnkgY29uY3VycmVudFxuJiM0MzsgKiBpZ2V0KCkgYnVtcHMgaV9jb3VudCB0byBcdTAwM2U9IDIgYW5kIGlwdXRfaWZfbm90X2xhc3QoKSB3aWxsIHN1Y2NlZWQuXG4mIzQzOyAqIE5vYm9keSB3aWxsIGFkZCB0aGUgaW5vZGUgYSBzZWNvbmQgdGltZSB1bnRpbCBleHQ0X2VhX2lub2RlX3dvcmsoKVxuJiM0MzsgKiBkcm9wcyB0aGF0IHJlZmVyZW5jZSB2aWEgaXB1dCgpLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFpbm9kZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKTtcbiYjNDM7XHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXG4gXHRcdHJldHVybjtcbiYjNDM7XHRsbGlzdF9hZGQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2VhX2lwdXRfbm9kZSxcbiYjNDM7XHRcdCAgXHUwMDI2RVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlIGEgc2hvcnQgZGVsYXkgdG8gYWxsb3cgbXVsdGlwbGUgRUEgaW5vZGVzIHRvIGFjY3VtdWxhdGUsXG4mIzQzO1x0ICogcmVkdWNpbmcgd29ya3F1ZXVlIHdha2V1cHMgd2hlbiBzZXZlcmFsIGFyZSByZWxlYXNlZCB0b2dldGhlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2RVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2VhX2lub2RlX3dvcmssIDEpO1xuJiM0Mzt9XG4gXG4tXHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgZWFfaW5vZGVfYXJyYXktXHUwMDNlY291bnQ7ICYjNDM7JiM0MztpZHgpXG4tXHRcdGlwdXQoZWFfaW5vZGVfYXJyYXktXHUwMDNlaW5vZGVzW2lkeF0pO1xuLVx0a2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuJiM0Mzt2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcbiYjNDM7e1xuJiM0MztcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbiYjNDM7XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrLCBleHQ0X2VhX2lub2RlX3dvcmspO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuaCBiL2ZzL2V4dDQveGF0dHIuaFxuaW5kZXggMWZlZGY0NGQ0ZmI2NWUuLjgyMWRjNmE1MGU1MWU3IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC94YXR0ci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3hhdHRyLmhcbkBAIC0xMzEsMTEgJiM0MzsxMzEsNiBAQCBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIHtcbiBcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcbiB9O1xuIFxuLXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5IHtcbi1cdHVuc2lnbmVkIGludCBjb3VudDtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGVzW10gX19jb3VudGVkX2J5KGNvdW50KTtcbi19O1xuLVxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3VzZXJfaGFuZGxlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcjtcbkBAIC0xODcsOSAmIzQzOzE4Miw5IEBAIGV4dGVybiBpbnQgX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRib29sIGlzX2NyZWF0ZSk7XG4gXG4gZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiphcnJheSxcbiBcdFx0XHRcdCAgIGludCBleHRyYV9jcmVkaXRzKTtcbi1leHRlcm4gdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmFycmF5KTtcbiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKTtcbiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXG4gZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IDUwY2U3MzFhMmI3OGYxLi5hYTFkNTAxZDJiYjYyNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtMjQxMyw2ICYjNDM7MjQxMywyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJfc2V0X3N5c2ZzX25hbWVfZ2VuZXJpYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaFxuIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTtcbiBleHRlcm4gdm9pZCBpcHV0KHN0cnVjdCBpbm9kZSAqKTtcbiB2b2lkIGlwdXRfbm90X2xhc3Qoc3RydWN0IGlub2RlICopO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGlwdXRfaWZfbm90X2xhc3QgLSBkcm9wIGFuIGlub2RlIHJlZmVyZW5jZSBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmVcbiYjNDM7ICogQGlub2RlOiBpbm9kZSB0byBwdXRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWZlcmVuY2Ugd2FzIGRyb3BwZWQsIGZhbHNlIGlmIHRoaXMgd2FzIHRoZSBsYXN0XG4mIzQzOyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciBtdXN0IGFycmFuZ2UgZm9yIGZpbmFsIGlwdXQoKSBpbiBhIHNhZmUgY29udGV4dC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0VkZTX0JVR19PTl9JTk9ERShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiAoSV9GUkVFSU5HIHwgSV9DTEVBUiksIGlub2RlKTtcbiYjNDM7XHRWRlNfQlVHX09OX0lOT0RFKGljb3VudF9yZWFkX29uY2UoaW5vZGUpIFx1MDAzYyAxLCBpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIGF0b21pY19hZGRfdW5sZXNzKFx1MDAyNmlub2RlLVx1MDAzZWlfY291bnQsIC0xLCAxKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMTowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0VYVDRfRlNfUE9TSVhfQUNMJiMzNDssCiAgICAmIzM0O0VYVDRfRlNfU0VDVVJJVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3B1dF9lYV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X2VhX2lub2RlX3dvcmsmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9kZWxldGVfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9ibG9ja19zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pYm9keV9zZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleHQ0IHhhdHRyIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IEVBIGlub2RlcyBhcmUgdHJhY2tlZCBhbmQgZnJlZWQsIGludHJvZHVjaW5nIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gdmlhIGEgd29ya3F1ZXVlIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSB3aWRlbHkgdXNlZCBmaWxlc3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZDEyZmY0OGQxNTNhMGIxMTNiYzNjOTVkMmQ3ODQxOTEwNjZlZGNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTEgMDE6MDk6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IGIzN2MxMzZlYTNhYjMzLi5iOWIwYWRhNzc3NGJiNCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0LmgKQEAgLTEwNzAsOCAmIzQzOzEwNzAsMTQgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7CiAJICogYmV0d2VlbiByZWFkZXJzIG9mIEVBcyBhbmQgd3JpdGVycyBvZiByZWd1bGFyIGZpbGUgZGF0YSwgc28KIAkgKiBpbnN0ZWFkIHdlIHN5bmNocm9uaXplIG9uIHhhdHRyX3NlbSB3aGVuIHJlYWRpbmcgb3IgY2hhbmdpbmcKIAkgKiBFQXMuCiYjNDM7CSAqCiYjNDM7CSAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2UKJiM0MzsJICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuCiAJICovCi0Jc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtOwomIzQzOwkJc3RydWN0IGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGU7CiYjNDM7CX07CiAKIAkvKgogCSAqIElub2RlcyB3aXRoIEVYVDRfU1RBVEVfT1JQSEFOX0ZJTEUgdXNlIGlfb3JwaGFuX2lkeC4gT3RoZXJ3aXNlCkBAIC0xNzcwLDYgJiM0MzsxNzc2LDExIEBAIHN0cnVjdCBleHQ0X3NiX2luZm8gewogCXN0cnVjdCBleHQ0X2VzX3N0YXRzIHNfZXNfc3RhdHM7CiAJc3RydWN0IG1iX2NhY2hlICpzX2VhX2Jsb2NrX2NhY2hlOwogCXN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTsKJiM0MzsKJiM0MzsJLyogRGVmZXJyZWQgaXB1dCBmb3IgRUEgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzICovCiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkIHNfZWFfaW5vZGVfdG9fZnJlZTsKJiM0MzsJc3RydWN0IGRlbGF5ZWRfd29yayBzX2VhX2lub2RlX3dvcms7CiYjNDM7CiAJc3BpbmxvY2tfdCBzX2VzX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAogCS8qIEpvdXJuYWwgdHJpZ2dlcnMgZm9yIGNoZWNrc3VtIGNvbXB1dGF0aW9uICovCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggY2U5OTgwN2M1ZjViMmMuLjc0N2M1MmMyMzJjYzAzIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jCkBAIC0xNzYsNyAmIzQzOzE3Niw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCSAqICh4YXR0ciBibG9jayBmcmVlaW5nKSwgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yIChpbm9kZSBmcmVlaW5nKQogCSAqLwogCWludCBleHRyYV9jcmVkaXRzID0gNjsKLQlzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMOwogCWJvb2wgZnJlZXplX3Byb3RlY3RlZCA9IGZhbHNlOwogCiAJdHJhY2VfZXh0NF9ldmljdF9pbm9kZShpbm9kZSk7CkBAIC0yODEsOCAmIzQzOzI4MCw3IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCX0KIAogCS8qIFJlbW92ZSB4YXR0ciByZWZlcmVuY2VzLiAqLwotCWVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsICZhbXA7ZWFfaW5vZGVfYXJyYXksCi0JCQkJICAgICAgZXh0cmFfY3JlZGl0cyk7CiYjNDM7CWVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIGV4dHJhX2NyZWRpdHMpOwogCWlmIChlcnIpIHsKIAkJZXh0NF93YXJuaW5nKGlub2RlLSZndDtpX3NiLCAmIzM0O3hhdHRyIGRlbGV0ZSAoZXJyICVkKSYjMzQ7LCBlcnIpOwogc3RvcF9oYW5kbGU6CkBAIC0yOTAsNyAmIzQzOzI4OCw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQlleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpOwogCQlpZiAoZnJlZXplX3Byb3RlY3RlZCkKIAkJCXNiX2VuZF9pbnR3cml0ZShpbm9kZS0mZ3Q7aV9zYik7Ci0JCWV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7CiAJCWdvdG8gbm9fZGVsZXRlOwogCX0KIApAQCAtMzIwLDcgJiM0MzszMTcsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCWlmIChmcmVlemVfcHJvdGVjdGVkKQogCQlzYl9lbmRfaW50d3JpdGUoaW5vZGUtJmd0O2lfc2IpOwotCWV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7CiAJcmV0dXJuOwogbm9fZGVsZXRlOgogCS8qCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLjg5OGQ4YzY0MzFiYWVhIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jCkBAIC0xMzAzLDYgJiM0MzsxMzAzLDggQEAgc3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAkJCSAmYW1wO3NiLSZndDtzX3V1aWQpOwogCiAJZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpOwomIzQzOwkvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovCiYjNDM7CWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrKTsKIAlleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTsKIAogCWRlc3Ryb3lfd29ya3F1ZXVlKHNiaS0mZ3Q7cnN2X2NvbnZlcnNpb25fd3EpOwpAQCAtMTQyMyw2ICYjNDM7MTQyNSwxMyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJbWVtc2V0KCZhbXA7ZWktJmd0O2lfZHF1b3QsIDAsIHNpemVvZihlaS0mZ3Q7aV9kcXVvdCkpOwogI2VuZGlmCiAJZWktJmd0O2ppbm9kZSA9IE5VTEw7CiYjNDM7CS8qCiYjNDM7CSAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2RlcwomIzQzOwkgKiBzaGFyZSB0aGlzIHNwYWNlIHdpdGggaV9lYV9pcHV0X25vZGUgKHZpYSB1bmlvbikgd2hpY2ggbWF5CiYjNDM7CSAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXMKJiM0MzsJICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLgomIzQzOwkgKi8KJiM0MzsJaW5pdF9yd3NlbSgmYW1wO2VpLSZndDt4YXR0cl9zZW0pOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7ZWktJmd0O2lfcnN2X2NvbnZlcnNpb25fbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtlaS0mZ3Q7aV9jb21wbGV0ZWRfaW9fbG9jayk7CiAJZWktJmd0O2lfc3luY190aWQgPSAwOwpAQCAtMTQ4OCw3ICYjNDM7MTQ5Nyw2IEBAIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pCiAJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBmb287CiAKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2VpLSZndDtpX29ycGhhbik7Ci0JaW5pdF9yd3NlbSgmYW1wO2VpLSZndDt4YXR0cl9zZW0pOwogCWluaXRfcndzZW0oJmFtcDtlaS0mZ3Q7aV9kYXRhX3NlbSk7CiAJaW5vZGVfaW5pdF9vbmNlKCZhbXA7ZWktJmd0O3Zmc19pbm9kZSk7CiAJZXh0NF9mY19pbml0X2lub2RlKCZhbXA7ZWktJmd0O3Zmc19pbm9kZSk7CkBAIC01NDk3LDYgJiM0Mzs1NTA1LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJCQkgIGV4dDRfaGFzX2ZlYXR1cmVfb3JwaGFuX3ByZXNlbnQoc2IpIHx8CiAJCQkgIGV4dDRfaGFzX2ZlYXR1cmVfam91cm5hbF9uZWVkc19yZWNvdmVyeShzYikpOwogCiYjNDM7CWV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHNiaSk7CiYjNDM7CiAJaWYgKGV4dDRfaGFzX2ZlYXR1cmVfbW1wKHNiKSAmYW1wOyZhbXA7ICFzYl9yZG9ubHkoc2IpKSB7CiAJCWVyciA9IGV4dDRfbXVsdGlfbW91bnRfcHJvdGVjdChzYiwgbGU2NF90b19jcHUoZXMtJmd0O3NfbW1wX2Jsb2NrKSk7CiAJCWlmIChlcnIpCkBAIC01NzQ3LDYgJiM0Mzs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJcmV0dXJuIDA7CiAKIGZhaWxlZF9tb3VudDk6CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqLwomIzQzOwlmbHVzaF9kZWxheWVkX3dvcmsoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfd29yayk7CiAJZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7CiBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZAogCWV4dDRfcmVsZWFzZV9vcnBoYW5faW5mbyhzYik7CkBAIC01NzY3LDYgJiM0Mzs1Nzc5LDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWQKIAlpZiAoRVhUNF9TQihzYiktJmd0O3Jzdl9jb252ZXJzaW9uX3dxKQogCQlkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS0mZ3Q7cnN2X2NvbnZlcnNpb25fd3EpOwogZmFpbGVkX21vdW50X3dxOgomIzQzOwkvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgZnJlZWluZyBzdHJ1Y3R1cmVzICovCiYjNDM7CWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrKTsKIAlleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLSZndDtzX2VhX2lub2RlX2NhY2hlKTsKIAlzYmktJmd0O3NfZWFfaW5vZGVfY2FjaGUgPSBOVUxMOwogCkBAIC01Nzc3LDYgJiM0Mzs1NzkxLDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWQKIAkJZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktJmd0O3Nfam91cm5hbCk7CiAJfQogZmFpbGVkX21vdW50M2E6CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi8KJiM0MzsJZmx1c2hfZGVsYXllZF93b3JrKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3dvcmspOwogCWV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpOwogZmFpbGVkX21vdW50MzoKIAkvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqLwpAQCAtNjQ0Nyw2ICYjNDM7NjQ2Myw3IEBAIHN0YXRpYyBpbnQgZXh0NF9zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KQogCiAJdHJhY2VfZXh0NF9zeW5jX2ZzKHNiLCB3YWl0KTsKIAlmbHVzaF93b3JrcXVldWUoc2JpLSZndDtyc3ZfY29udmVyc2lvbl93cSk7CiYjNDM7CWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrKTsKIAkvKgogCSAqIFdyaXRlYmFjayBxdW90YSBpbiBub24tam91cm5hbGxlZCBxdW90YSBjYXNlIC0gam91cm5hbGxlZCBxdW90YSBoYXMKIAkgKiBubyBkaXJ0eSBkcXVvdHMKZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuYwppbmRleCA5ODJhMWY4MzFlMjI4Mi4uNGFlNmNlMTExNTY2MGUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3hhdHRyLmMKQEAgLTExNCwxMCAmIzQzOzExNCw2IEBAIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0gewogI2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSkJKCgoc3RydWN0IGV4dDRfc2JfaW5mbyAqKSBcCiAJCQkJaW5vZGUtJmd0O2lfc2ItJmd0O3NfZnNfaW5mbyktJmd0O3NfZWFfaW5vZGVfY2FjaGUpCiAKLXN0YXRpYyBpbnQKLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCi0JCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLQogI2lmZGVmIENPTkZJR19MT0NLREVQCiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpCiB7CkBAIC01NjcsNyAmIzQzOzU2Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSwKIAkJCQkJZWFfaW5vZGUtJmd0O2lfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTsKIAl9CiBvdXQ6Ci0JaXB1dChlYV9pbm9kZSk7CiYjNDM7CWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMTA0LDEwICYjNDM7MTEwMCwxMCBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZihoYW5kbGUsIGVhX2lub2RlKTsKIAkJaWYgKGVycikgewogCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCAmIzM0O2luYyByZWYgZXJyb3IgJWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJCWdvdG8gY2xlYW51cDsKIAkJfQotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAl9CiAJcmV0dXJuIDA7CiAKQEAgLTExMzMsNyAmIzQzOzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIpCiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7Y2xlYW51cCBkZWMgcmVmIGVycm9yICVkJiMzNDssCiAJCQkJCSAgIGVycik7Ci0JCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpOwogCX0KIAlyZXR1cm4gc2F2ZWRfZXJyOwogfQpAQCAtMTE2MCw3ICYjNDM7MTE1Niw2IEBAIHN0YXRpYyB2b2lkCiBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSwKLQkJCSAgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKIAkJCSAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlOwpAQCAtMTE5NywxNCAmIzQzOzExOTIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyKQogCQkJY29udGludWU7CiAKLQkJZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAotCQkJCQkgICAmIzM0O0V4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwotCQkJY29udGludWU7Ci0JCX0KLQogCQllcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLAogCQkJZXh0NF9mcmVlX21ldGFkYXRhX3Jldm9rZV9jcmVkaXRzKHBhcmVudC0mZ3Q7aV9zYiwgMSksCiAJCQlleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLApAQCAtMTIxMiw2ICYjNDM7MTE5OSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIgJmx0OyAwKSB7CiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7RW5zdXJlIGNyZWRpdHMgZXJyPSVkJiMzNDssCiAJCQkJCSAgIGVycik7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGVyciAmZ3Q7IDApIHsKQEAgLTEyMjEsNiAmIzQzOzEyMDksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKIAkJCQkJCSYjMzQ7UmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWQmIzM0OywKIAkJCQkJCWVycik7CiYjNDM7CQkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJfQpAQCAtMTIyOSw2ICYjNDM7MTIxOCw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIpIHsKIAkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgJiMzNDtlYV9pbm9kZSBkZWMgcmVmIGVycj0lZCYjMzQ7LAogCQkJCQkgICBlcnIpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTEyNDUsNiAmIzQzOzEyMzUsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQllbnRyeS0mZ3Q7ZV92YWx1ZV9pbnVtID0gMDsKIAkJZW50cnktJmd0O2VfdmFsdWVfc2l6ZSA9IDA7CiAKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJZGlydHkgPSB0cnVlOwogCX0KIApAQCAtMTI3MSw3ICYjNDM7MTI2Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiBzdGF0aWMgdm9pZAogZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKLQkJCSBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LAogCQkJIGludCBleHRyYV9jcmVkaXRzKQogewogCXN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7CkBAIC0xMzEzLDcgJiM0MzsxMzAzLDYgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLAogCQkJCQkJICAgICBCRklSU1QoYmgpLAogCQkJCQkJICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sCi0JCQkJCQkgICAgIGVhX2lub2RlX2FycmF5LAogCQkJCQkJICAgICBleHRyYV9jcmVkaXRzLAogCQkJCQkJICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pOwogCQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJoLCAwLCAxLApAQCAtMTUwNSw3ICYjNDM7MTQ5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsCiAJCQlpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKQogCQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKIAkJCQkJJiMzNDtjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJCXJldHVybiBFUlJfUFRSKGVycik7CiAJCX0KIApAQCAtMTU2NCw3ICYjNDM7MTU1Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSwKIAkJCWt2ZnJlZShlYV9kYXRhKTsKIAkJCXJldHVybiBlYV9pbm9kZTsKIAkJfQotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAluZXh0X2VudHJ5OgogCQljZSA9IG1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChlYV9pbm9kZV9jYWNoZSwgY2UpOwogCX0KQEAgLTE2MTUsNyAmIzQzOzE2MDQsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCQkgICAgICBlYV9pbm9kZS0mZ3Q7aV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pOwogCXJldHVybiBlYV9pbm9kZTsKIG91dF9lcnI6Ci0JaXB1dChlYV9pbm9kZSk7CiYjNDM7CWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAlleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHZhbHVlX2xlbik7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KQEAgLTE4NDgsNyAmIzQzOzE4MzcsNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksCiAKIAlyZXQgPSAwOwogb3V0OgotCWlwdXQob2xkX2VhX2lub2RlKTsKJiM0MzsJZXh0NF9wdXRfZWFfaW5vZGUob2xkX2VhX2lub2RlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDEwLDcgJiM0MzsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlvbGRfZWFfaW5vZGVfcXVvdGEgPSBsZTMyX3RvX2NwdSgKIAkJCQkJCXMtJmd0O2hlcmUtJmd0O2VfdmFsdWVfc2l6ZSk7CiAJCQl9Ci0JCQlpcHV0KHRtcF9pbm9kZSk7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUodG1wX2lub2RlKTsKIAogCQkJcy0mZ3Q7aGVyZS0mZ3Q7ZV92YWx1ZV9pbnVtID0gMDsKIAkJCXMtJmd0O2hlcmUtJmd0O2VfdmFsdWVfc2l6ZSA9IDA7CkBAIC0yMTUwLDcgJiM0MzsyMTM5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAogCQkJCQkJCSAgICYjMzQ7ZGVjIHJlZiBlcnJvcj0lZCYjMzQ7LAogCQkJCQkJCSAgIGVycm9yKTsKLQkJCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCQkJZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpOwogCQkJCWVhX2lub2RlID0gTlVMTDsKIAkJCX0KIApAQCAtMjE4MiwxMiAmIzQzOzIxNzEsOCBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCiAJLyogRHJvcCB0aGUgcHJldmlvdXMgeGF0dHIgYmxvY2suICovCiAJaWYgKGJzLSZndDtiaCAmYW1wOyZhbXA7IGJzLSZndDtiaCAhPSBuZXdfYmgpIHsKLQkJc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDsKLQogCQlleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtJmd0O2JoLAotCQkJCQkgJmFtcDtlYV9pbm9kZV9hcnJheSwKIAkJCQkJIDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7Ci0JCWV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7CiAJfQogCWVycm9yID0gMDsKIApAQCAtMjIwMyw3ICYjNDM7MjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLAogCQkJCQkJICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7CiAJCX0KLQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQlleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7CiAJfQogCWlmIChjZSkKIAkJbWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7CkBAIC0yMjg1LDcgJiM0MzsyMjcwLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCQkgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJfQogCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtMjI5Nyw3ICYjNDM7MjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQloZWFkZXItJmd0O2hfbWFnaWMgPSBjcHVfdG9fbGUzMigwKTsKIAkJZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUik7CiAJfQotCWlwdXQoZWFfaW5vZGUpOwomIzQzOwlleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4NjMsNDYgJiM0MzsyODQ4LDYgQEAgaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsCiAJcmV0dXJuIGVycm9yOwogfQogCi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovCi0jZGVmaW5lIEVJQV9NQVNLIChFSUFfSU5DUiAtIDEpCi0KLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuCi0gKiBJZiBAZWFfaW5vZGVfYXJyYXkgaXMgbmV3IG9yIGZ1bGwgaXQgd2lsbCBiZSBncm93biBhbmQgdGhlIG9sZAotICogY29udGVudHMgY29waWVkIG92ZXIuCi0gKi8KLXN0YXRpYyBpbnQKLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCi0JCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkgewotCQkvKgotCQkgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuCi0JCSAqLwotCQkoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsCi0JCQkJCQkgRUlBX01BU0ssIEdGUF9OT0ZTKTsKLQkJaWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCSgqZWFfaW5vZGVfYXJyYXkpLSZndDtjb3VudCA9IDA7Ci0JfSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50ICZhbXA7IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykgewotCQkvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICYjNDM7IG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqLwotCQlzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDsKLQotCQluZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLAotCQkJCQkgKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50ICYjNDM7IEVJQV9JTkNSLAotCQkJCQkgR0ZQX05PRlMpOwotCQlpZiAobmV3X2FycmF5ID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJbWVtY3B5KG5ld19hcnJheSwgKmVhX2lub2RlX2FycmF5LAotCQkgICAgICAgc3RydWN0X3NpemUoKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsCi0JCQkJICAgKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50KSk7Ci0JCWtmcmVlKCplYV9pbm9kZV9hcnJheSk7Ci0JCSplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTsKLQl9Ci0JKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50JiM0MzsmIzQzOzsKLQkoKmVhX2lub2RlX2FycmF5KS0mZ3Q7aW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLSZndDtjb3VudCAtIDFdID0gaW5vZGU7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSgpCiAgKgpAQCAtMjkxMyw3ICYjNDM7Mjg1OCw2IEBAIGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuCiAgKi8KIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCiAJCQkgICAgaW50IGV4dHJhX2NyZWRpdHMpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CkBAIC0yOTUyLDcgJiM0MzsyODk2LDYgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsCiAJCQkJCQkgICAgIElGSVJTVChoZWFkZXIpLAogCQkJCQkJICAgICBmYWxzZSAvKiBibG9ja19jc3VtICovLAotCQkJCQkJICAgICBlYV9pbm9kZV9hcnJheSwKIAkJCQkJCSAgICAgZXh0cmFfY3JlZGl0cywKIAkJCQkJCSAgICAgZmFsc2UgLyogc2tpcF9xdW90YSAqLyk7CiAJfQpAQCAtMjk4NiwxMiAmIzQzOzI5MjksMTIgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCWNvbnRpbnVlOwogCQkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCSAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LSZndDtlX3ZhbHVlX3NpemUpKTsKLQkJCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCQkJZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpOwogCQkJfQogCiAJCX0KIAotCQlleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsIGVhX2lub2RlX2FycmF5LAomIzQzOwkJZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLAogCQkJCQkgZXh0cmFfY3JlZGl0cyk7CiAJCS8qCiAJCSAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXMKQEAgLTMwMTMsMTYgJiM0MzsyOTU2LDYzIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiBlcnJvcjsKIH0KIAotdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KQomIzQzOy8qCiYjNDM7ICogV29ya2VyIGZ1bmN0aW9uIGZvciBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0LiAgUHJvY2Vzc2VzIGFsbCBpbm9kZXMgcXVldWVkCiYjNDM7ICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWludCBpZHg7CiYjNDM7CXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksCiYjNDM7CQkJCQkJc3RydWN0IGV4dDRfc2JfaW5mbywKJiM0MzsJCQkJCQlzX2VhX2lub2RlX3dvcmspOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfdG9fZnJlZSk7CiAKLQlpZiAoZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkKJiM0MzsJd2hpbGUgKG5vZGUpIHsKJiM0MzsJCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gY29udGFpbmVyX29mKG5vZGUsCiYjNDM7CQkJCQlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCBpX2VhX2lwdXRfbm9kZSk7CiYjNDM7CQlub2RlID0gbm9kZS0mZ3Q7bmV4dDsKJiM0MzsJCWlwdXQoJmFtcDtlaS0mZ3Q7dmZzX2lub2RlKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlbGVhc2UgYSBWRlMgcmVmZXJlbmNlIG9uIGFuIEVBIGlub2RlLiAgTXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgaXB1dCgpCiYjNDM7ICogaW4gYW55IGNvbnRleHQgd2hlcmUgeGF0dHJfc2VtIG9yIGEgamJkMiBoYW5kbGUgaXMgaGVsZC4KJiM0MzsgKgomIzQzOyAqIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IHJlZmVyZW5jZSwgZHJvcHMgaXQgaW1tZWRpYXRlbHkgdmlhCiYjNDM7ICogaXB1dF9pZl9ub3RfbGFzdCgpIHdpdGggbm8gZnVydGhlciBhY3Rpb24gbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogSWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UsIHRoZSBpbm9kZSBpcyBsaW5rZWQgb250byBhIHBlci1zYgomIzQzOyAqIGxsaXN0IHZpYSBpX2VhX2lwdXRfbm9kZSAoZW1iZWRkZWQgaW4gZXh0NF9pbm9kZV9pbmZvLCBzaGFyaW5nIHNwYWNlCiYjNDM7ICogd2l0aCB0aGUgdW51c2VkIHhhdHRyX3NlbSkgYW5kIGEgZGVsYXllZCB3b3JrZXIgcGVyZm9ybXMgdGhlIGZpbmFsCiYjNDM7ICogaXB1dCgpIGluIGEgY2xlYW4gY29udGV4dC4KJiM0MzsgKgomIzQzOyAqIE5vdGU6IHdoaWxlIGFuIGlub2RlIGlzIG9uIHNfZWFfaW5vZGVfdG9fZnJlZSwgdGhlIHVuY29uc3VtZWQgaV9jb3VudAomIzQzOyAqIHJlZmVyZW5jZSAoc3RpbGwgMSkga2VlcHMgaXQgaW4gdGhlIGlub2RlIGNhY2hlLCBzbyBhbnkgY29uY3VycmVudAomIzQzOyAqIGlnZXQoKSBidW1wcyBpX2NvdW50IHRvICZndDs9IDIgYW5kIGlwdXRfaWZfbm90X2xhc3QoKSB3aWxsIHN1Y2NlZWQuCiYjNDM7ICogTm9ib2R5IHdpbGwgYWRkIHRoZSBpbm9kZSBhIHNlY29uZCB0aW1lIHVudGlsIGV4dDRfZWFfaW5vZGVfd29yaygpCiYjNDM7ICogZHJvcHMgdGhhdCByZWZlcmVuY2UgdmlhIGlwdXQoKS4KJiM0MzsgKi8KJiM0Mzt2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlpZiAoIWlub2RlKQomIzQzOwkJcmV0dXJuOwomIzQzOwlXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLSZndDtpX2ZsYWdzICZhbXA7IEVYVDRfRUFfSU5PREVfRkwpKTsKJiM0MzsJaWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKQogCQlyZXR1cm47CiYjNDM7CWxsaXN0X2FkZCgmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfZWFfaXB1dF9ub2RlLAomIzQzOwkJICAmYW1wO0VYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwomIzQzOwkvKgomIzQzOwkgKiBVc2UgYSBzaG9ydCBkZWxheSB0byBhbGxvdyBtdWx0aXBsZSBFQSBpbm9kZXMgdG8gYWNjdW11bGF0ZSwKJiM0MzsJICogcmVkdWNpbmcgd29ya3F1ZXVlIHdha2V1cHMgd2hlbiBzZXZlcmFsIGFyZSByZWxlYXNlZCB0b2dldGhlci4KJiM0MzsJICovCiYjNDM7CXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO0VYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2VhX2lub2RlX3dvcmssIDEpOwomIzQzO30KIAotCWZvciAoaWR4ID0gMDsgaWR4ICZsdDsgZWFfaW5vZGVfYXJyYXktJmd0O2NvdW50OyAmIzQzOyYjNDM7aWR4KQotCQlpcHV0KGVhX2lub2RlX2FycmF5LSZndDtpbm9kZXNbaWR4XSk7Ci0Ja2ZyZWUoZWFfaW5vZGVfYXJyYXkpOwomIzQzO3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKQomIzQzO3sKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrLCBleHQ0X2VhX2lub2RlX3dvcmspOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oCmluZGV4IDFmZWRmNDRkNGZiNjVlLi44MjFkYzZhNTBlNTFlNyAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuaApAQCAtMTMxLDExICYjNDM7MTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7CiAJc3RydWN0IGV4dDRfaWxvYyBpbG9jOwogfTsKIAotc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgewotCXVuc2lnbmVkIGludCBjb3VudDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7Ci19OwotCiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyOwpAQCAtMTg3LDkgJiM0MzsxODIsOSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCWJvb2wgaXNfY3JlYXRlKTsKIAogZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksCiAJCQkJICAgaW50IGV4dHJhX2NyZWRpdHMpOwotZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7CiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKTsKJiM0MztleHRlcm4gdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLAogCQkJICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDUwY2U3MzFhMmI3OGYxLi5hYTFkNTAxZDJiYjYyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMjQxMyw2ICYjNDM7MjQxMywyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJfc2V0X3N5c2ZzX25hbWVfZ2VuZXJpYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaAogZXh0ZXJuIHZvaWQgaWhvbGQoc3RydWN0IGlub2RlICogaW5vZGUpOwogZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7CiB2b2lkIGlwdXRfbm90X2xhc3Qoc3RydWN0IGlub2RlICopOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGlwdXRfaWZfbm90X2xhc3QgLSBkcm9wIGFuIGlub2RlIHJlZmVyZW5jZSBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmUKJiM0MzsgKiBAaW5vZGU6IGlub2RlIHRvIHB1dAomIzQzOyAqCiYjNDM7ICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWZlcmVuY2Ugd2FzIGRyb3BwZWQsIGZhbHNlIGlmIHRoaXMgd2FzIHRoZSBsYXN0CiYjNDM7ICogcmVmZXJlbmNlIGFuZCB0aGUgY2FsbGVyIG11c3QgYXJyYW5nZSBmb3IgZmluYWwgaXB1dCgpIGluIGEgc2FmZSBjb250ZXh0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJVkZTX0JVR19PTl9JTk9ERShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpICZhbXA7IChJX0ZSRUVJTkcgfCBJX0NMRUFSKSwgaW5vZGUpOwomIzQzOwlWRlNfQlVHX09OX0lOT0RFKGljb3VudF9yZWFkX29uY2UoaW5vZGUpICZsdDsgMSwgaW5vZGUpOwomIzQzOwlyZXR1cm4gYXRvbWljX2FkZF91bmxlc3MoJmFtcDtpbm9kZS0mZ3Q7aV9jb3VudCwgLTEsIDEpOwomIzQzO30KJiM0MzsKIGludCBpbm9kZV91cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsCiAJCXVuc2lnbmVkIGludCBmbGFncyk7CiBpbnQgZ2VuZXJpY191cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAxOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeHQ0IFhhdHRyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBleHQ0LiBJdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBob3cgRXh0ZW5kZWQgQXR0cmlidXRlcyAoRUFzKSBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgdHJhY2tpbmcgYW5kIGZyZWVpbmcgb2YgRUEgaW5vZGVzLiBUaGV5JiMzOTt2ZSBhZGRlZCB0aGlzIGBleHQ0X3B1dF9lYV9pbm9kZWAgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBVc2luZyBgaXB1dF9pZl9ub3RfbGFzdGAgaXMgYSBnb29kIGFwcHJvYWNoIHRvIGF2b2lkIHByZW1hdHVyZSBpbm9kZSByZWxlYXNlLCBhbmQgZGVmZXJyaW5nIHRoZSBmaW5hbCBgaXB1dGAgdG8gdGhhdCB3b3JrcXVldWUsIGBzX2VhX2lub2RlX3dvcmtgLCBtYWtlcyBzZW5zZSBmb3IgYXZvaWRpbmcgcG90ZW50aWFsIGxvY2sgb3JkZXJpbmcgaXNzdWVzLCB3aGljaCBpcyBhbHdheXMgYSBjb25jZXJuIGluIGZpbGVzeXN0ZW0gY29kZS4gR29vZCB0byBzZWUgdGhleSYjMzk7cmUgYmVpbmcgcHJvYWN0aXZlIGFib3V0IHRoYXQuCgpOb3csIHRoZSB1bmlvbmluZyBvZiBgeGF0dHJfc2VtYCB3aXRoIGBpX2VhX2lwdXRfbm9kZWAgd2l0aGluIGBleHQ0X2lub2RlX2luZm9gIHNlZW1zIGxpa2UgYSBjbGV2ZXIgb3B0aW1pemF0aW9uLiBDb25zb2xpZGF0aW5nIHRob3NlIHR3bywgZXNwZWNpYWxseSBpZiBgaV9lYV9pcHV0X25vZGVgIGlzIGFuIGBsbGlzdF9ub2RlYCwgbWFrZXMgbWUgdGhpbmsgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHJlZHVjZSBtZW1vcnkgZm9vdHByaW50LCBhbmQgcG9zc2libHkgaW1wcm92ZSBjYWNoZSBlZmZpY2llbmN5LiBTbWFydCBtb3ZlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGNvcmUgZXh0NCBmaWxlc3lzdGVtLCBzbyBpdOKAmXMgd29ydGggYSBkZWVwIGRpdmUuCgpGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSByZWFjaGFibGUsIHdoaWNoIGlzIGNydWNpYWwuIEV4dDQgaXMgdGhlIGZpbGVzeXN0ZW0sIG9mIGNvdXJzZS4gVGhlbiwgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBFWFQ0X0ZTYCBpcyB0aGUgb2J2aW91cyBvbmUsIHdoaWNoIHdpbGwgYnJpbmcgaW4gbW9zdCBvZiB3aGF04oCZcyBuZWVkZWQsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBmb3IgYEVYVDRfRlNfWEFUVFJgIHRvbywganVzdCBpbiBjYXNlIHRoZXkmIzM5O3ZlIGdvdCBzb21lIGZpbmVyLWdyYWluZWQgZGVwZW5kZW5jaWVzLiBNYXliZSBgRVhUNF9GU19QT1NJWF9BQ0xgIG9yIGBFWFQ0X0ZTX1NFQ1VSSVRZYCBhcmUgaW52b2x2ZWQgdG9vLCB0aG91Z2ggbGVzcyBsaWtlbHkuIFRpbWUgdG8gY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUNCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXG5mcy9leHQ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTM0LVxuZnMvZXh0NC9LY29uZmlnOjM1OmNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuZnMvZXh0NC9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNjctXG5mcy9leHQ0L0tjb25maWc6Njg6Y29uZmlnIEVYVDRfREVCVUdcbmZzL2V4dDQvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7RXh0NCBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy03Ni1cbmZzL2V4dDQvS2NvbmZpZzo3Nzpjb25maWcgRVhUNF9LVU5JVF9URVNUU1xuZnMvZXh0NC9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGV4dDRcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAxOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjA2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXh0NCBYYXR0ciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgaGVhcnQgb2YgRXh0NCYjMzk7cyBleHRlbmRlZCBhdHRyaWJ1dGUgKHhhdHRyKSBoYW5kbGluZy4gSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgcXVpdGUgYSBmZXcga2V5IGZpbGVzOiBgZnMvZXh0NC94YXR0ci5jYCwgYGZzL2V4dDQvaW5vZGUuY2AsIGBmcy9leHQ0L3N1cGVyLmNgLCBhcyB3ZWxsIGFzIHRoZSByZWxhdGVkIGhlYWRlcnMsIGFuZCBldmVuIGBpbmNsdWRlL2xpbnV4L2ZzLmhgLiBUaGlzIHN1Z2dlc3RzIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZXMgYXJlIGhhcHBlbmluZywgcG90ZW50aWFsbHkgaW1wYWN0aW5nIGhvdyB4YXR0cnMgYXJlIHN0b3JlZCwgYWNjZXNzZWQsIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGUgZmlsZXN5c3RlbS4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpY2luZyBhIGNsdXN0ZXIgb2YgbmV3bHkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBmdW5jdGlvbnM6IGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X2VhX2lub2RlX3dvcmtgLCBgZXh0NF9pbml0X2VhX2lub2RlX3dvcmtgLCBgaXB1dF9pZl9ub3RfbGFzdGAsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBhbmQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLiBUaGUgbmFtZXMgYWxvbmUgZ2l2ZSBtZSBhIHByZXR0eSBnb29kIGlkZWEgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgYnV0IEkmIzM5O2xsIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGNvZGUuIEl0IGxvb2tzIGxpa2UgdGhleSBhcmUgaGFuZGxpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIChFQSkgaW5vZGVzLCBsaWtlbHkgYXJvdW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGlub2RlcyBhbmQgYXNzb2NpYXRlZCBibG9ja3MuIEl0IG1pZ2h0IGJlIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGNvdW50aW5nIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoZSB4YXR0ciBzcGFjZSwgYW5kIHBvdGVudGlhbGx5IGhvdyB0aGV5IGFyZSBjbGVhbmVkIHVwIG9yIHJlbW92ZWQuIFRoZSBgaXB1dF9pZl9ub3RfbGFzdGAgZnVuY3Rpb24gc2VlbXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgZm9jdXMgb24gaW5vZGUgaGFuZGxpbmcgYW5kIHJlZmVyZW5jZSBjb3VudHMuCgpCZWZvcmUgSSBnbyB0b28gZmFyLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGJhc2ljOiBpcyB4YXR0ciBmdW5jdGlvbmFsaXR5IGNvbmRpdGlvbmFsIG9uIHRoZSBgRVhUNF9GU19YQVRUUmAgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlzIGl0IGFsd2F5cyBidWlsdCBpbiBmb3IgRXh0ND8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpcyBleHBhbmRpbmcgZXhpc3RpbmcgZmVhdHVyZXMsIG9yIGNoYW5naW5nIHRoZSBzdGFuZGFyZCBiZWhhdmlvciBmb3IgbW9zdCBFeHQ0IGluc3RhbGxhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDE6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFQ0X0ZTX1hBVFRSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAxOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjM2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBFWFQ0IFhhdHRyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYW5kIHRoZXJlJiMzOTtzIG5vIGV4cGxpY2l0bHkgZGVmaW5lZCBgRVhUNF9GU19YQVRUUmAgb3B0aW9uIGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIGEgYml0IG9kZC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgc3VwcG9ydCBmb3IgZXh0NCBpcyBlaXRoZXIgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUgZmlsZXN5c3RlbSBpdHNlbGYsIG9yIHBlcmhhcHMgaXQmIzM5O3MgZ2F0ZWQgYmVoaW5kIHRoZSBnZW5lcmFsIGBFWFQ0X0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0JiMzOTtzIGRpZyBpbiBhIGJpdCBkZWVwZXIgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaGFzIHRvIHNheS4gVGhlIGBmcy9leHQ0L01ha2VmaWxlYCBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHNlZSBpZiBJIGNhbiB1bmRlcnN0YW5kIGhvdyB4YXR0ciBzdXBwb3J0IGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDE6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGF0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG4tLVxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cdFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXG5mcy9leHQ0L01ha2VmaWxlOjEyOlx0XHRzdXBlci5vIHN5bWxpbmsubyBzeXNmcy5vIHhhdHRyLm8geGF0dHJfaHVyZC5vIHhhdHRyX3RydXN0ZWQubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMzpcdFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cbmZzL2V4dDQvTWFrZWZpbGUtMTQtXG5mcy9leHQ0L01ha2VmaWxlPTE1PWV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXHQmIzQzOz0gYWNsLm9cbmZzL2V4dDQvTWFrZWZpbGU6MTY6ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVx0XHQmIzQzOz0geGF0dHJfc2VjdXJpdHkub1xuZnMvZXh0NC9NYWtlZmlsZS0xNy1leHQ0LXRlc3Qtb2Jqc1x0XHRcdFx0JiM0Mzs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAxOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzMzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFWFQ0IEV4dGVuZGVkIEF0dHJpYnV0ZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIHRoYXQgdGhlIGB4YXR0ci5vYCBvYmplY3QgZmlsZSBpcyAqYWx3YXlzKiBidWlsdCB3aGVuIHRoZSBgRVhUNF9GU2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgdGhvcm91Z2hseSB0ZXN0aW5nIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgY29kZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBlbmFibGUgYEVYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgLiBUaGF0IHNob3VsZCBwcm92aWRlIGNvbXBsZXRlIGNvdmVyYWdlLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHNvbWUga2V5IHN5bWJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5vZGUtcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQuIEkmIzM5O20gZm9jdXNpbmcgb24gYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBhbmQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLgoKYGV4dDRfcHV0X2VhX2lub2RlYCwgYWgsIHRoYXQmIzM5O3MgZGVmaW5lZCBpbiBgZnMvZXh0NC94YXR0ci5jYCBhbmQgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFNvIG90aGVyIEVYVDQgY29tcG9uZW50cyBhcmUgdXNpbmcgaXQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gTm93IGBleHQ0X2VhX2lub2RlX3dvcmtgIGlzIHN0YXRpYyB0byB0aGUgZmlsZSBhbmQgdGhlcmVmb3JlIG5vdCBleHBvc2VkIHRvIG90aGVyIGV4dDQgZmlsZXMuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAgaXMgaW4gdGhhdCBzYW1lIGZpbGUsIGBmcy9leHQ0L3hhdHRyLmNgLgoKSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRob3NlIGZ1bmN0aW9uIG5hbWVzLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmUgdGhlIGNvcnJlY3Qgc3ltYm9scy4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDE6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8odm9pZHxpbnQpIGV4dDRfcHV0X2VhX2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYz0yOTYzPXN0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI5OTUtICovXG5mcy9leHQ0L3hhdHRyLmM6Mjk5Njp2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L3hhdHRyLmMtMjk5Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAxOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDU1CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFeHRlbmRlZCBBdHRyaWJ1dGUgUmVsZWFzZSBhbmQgUmVmZXJlbmNlIENvdW50aW5nIGluIGV4dDQqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIHJ1bm5pbmcgdGhyb3VnaCBteSBoZWFkIGFzIEkgbG9vayBhdCB0aGlzOiBJIG5lZWQgdG8gemVybyBpbiBvbiBhIGZldyBjcml0aWNhbCBmdW5jdGlvbnMgd2l0aGluIHRoZSBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZSAoeGF0dHIpIGhhbmRsaW5nIGNvZGUuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJIHN1c3BlY3QgdGhlc2UgYXJlIGtleSBhcmVhcyBmb3IgcmV2aWV3IGFuZCBsaWtlbHkgd2hlcmUgcmVsYXRlZCBpc3N1ZXMgY291bGQgYmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dDogYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBhbmQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLgoKTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgYmxvY2sgcmVsZWFzZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGUga2V5IGZ1bmN0aW9ucyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIGFyZSBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCBhbmQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgIOKAkyBwYXJ0aWN1bGFybHkgaG93IHRoZXkgbWFuYWdlIHRoZSByZWxlYXNlIG9mIHhhdHRyIGJsb2NrcyBhbmQgcmVkdWNlIHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIGFzc29jaWF0ZWQgaW5vZGUsIHJlc3BlY3RpdmVseS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgZnMvZXh0NC94YXR0ci5jYCBhbmQgZmlndXJlIG91dCB0aGVpciBleGFjdCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDE6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyh2b2lkfGludCkgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDE6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYSBLZXJuZWwgSXNzdWU6IGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHNvbWV0aGluZyBhYm91dCBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIHplcm9lcyBpbiBvbiB0aGF0IGZ1bmN0aW9uIG5hbWUuIEl0IHNjcmVhbXMgJiMzNDtleHQ0IGZpbGVzeXN0ZW0mIzM0OyBhbmQgJiMzNDtleHRlbmRlZCBhdHRyaWJ1dGVzJiMzNDsg4oCTIHNwZWNpZmljYWxseSwgdGhlIHJlbGVhc2Ugb2YgYSBibG9jayBpbnZvbHZlZCBpbiBtYW5hZ2luZyB4YXR0cnMuIFRoaXMgbGlrZWx5IHBvaW50cyB0byBhbiBpc3N1ZSByZWxhdGVkIHRvIGhvdyB0aGUgZmlsZXN5c3RlbSBpcyBoYW5kbGluZyB0aGUgZnJlZWluZyB1cCBvZiBkaXNrIHNwYWNlIHRpZWQgdG8gdGhvc2UgZXh0ZW5kZWQgYXR0cmlidXRlIGVudHJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUga2luZCBvZiB3cml0ZSBwYXRoIG9yIHBlcmhhcHMgYSBkZWxldGlvbiBzY2VuYXJpbywgcG9zc2libHkgaW52b2x2aW5nIGNvcnJ1cHRlZCBtZXRhZGF0YSBvciBhIHJhY2UgY29uZGl0aW9uLiBJJiMzOTttIGltYWdpbmluZyBwb3RlbnRpYWxseSBhbiBpc3N1ZSB3aGVyZSB0aGUgYmxvY2sgaXMgYmVpbmcgcHJlbWF0dXJlbHkgcmVsZWFzZWQsIG9yIHBlcmhhcHMgaXMgbm90IGdldHRpbmcgZnJlZWQgdXAgY29ycmVjdGx5IGF0IGFsbC4gTmVlZCB0byBkaXZlIGRlZXBlciEgSeKAmWQgc3RhcnQgYnkgbG9va2luZyBmb3IgYW55IHJlY2VudCBwYXRjaGVzLCBidWdzIG9yIHJlZ3Jlc3Npb25zIGFyb3VuZCB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgbGFzdCBmZXcga2VybmVsIHJlbGVhc2VzLiBMZXTigJlzIGdyZXAgdGhlIGNvZGViYXNlIGZvciB0aGF0IGV4YWN0IGZ1bmN0aW9uIG5hbWUgYW5kIHNlZSB3aGF0IGNvbWVzIHVwLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCDigJMgd2hhdCBjYWxscyBpdD8gd2hhdCBpcyBjYWxsZWQgYnkgaXQ/IFdoYXQgc3RydWN0dXJlcyBkb2VzIGl0IGludGVyYWN0IHdpdGg/IFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jPTEyNjI9c3RhdGljIHZvaWRcbmZzL2V4dDQveGF0dHIuYzoxMjYzOmV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC94YXR0ci5jLTEyNjQtXHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE4ODg9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjE3My1cdGlmIChicy1cdTAwM2ViaCBcdTAwMjZcdTAwMjYgYnMtXHUwMDNlYmggIT0gbmV3X2JoKSB7XG5mcy9leHQ0L3hhdHRyLmM6MjE3NDpcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVx1MDAzZWJoLFxuZnMvZXh0NC94YXR0ci5jLTIxNzUtXHRcdFx0XHRcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xuLS1cbmZzL2V4dDQveGF0dHIuYz0yODYwPWludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yOTM2LVxuZnMvZXh0NC94YXR0ci5jOjI5Mzc6XHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbmZzL2V4dDQveGF0dHIuYy0yOTM4LVx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAxOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTIxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIEV4dDQgWGF0dHIgRGVsZXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAgZnVuY3Rpb24uIEdvb2QgdG8gc2VlIHRoYXQgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AgYW5kIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCBhcmUgYm90aCBzdGF0aWMsIHdoaWNoIGhlbHBzIGluIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZWlyIHVzZSB3aXRoaW4gdGhlIHhhdHRyIGhhbmRsaW5nLiBOb3csIHRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAgKmRvZXMqIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlbGF0ZWQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgZnJvbSB0aGVyZS4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHM/IExldCYjMzk7cyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmM9Mjc0OD1pbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjg1MS0vKlxuZnMvZXh0NC94YXR0ci5jOjI4NTI6ICogZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoKVxuZnMvZXh0NC94YXR0ci5jLTI4NTMtICpcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjg1OS0gKi9cbmZzL2V4dDQveGF0dHIuYzoyODYwOmludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC94YXR0ci5jLTI4NjEtXHRcdFx0ICAgIGludCBleHRyYV9jcmVkaXRzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk2OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEVYVDQgWGF0dHIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgaXQmIzM5O3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgd2UgaGFuZGxlIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgZm9yIEVBIGlub2RlcyB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gR2l2ZW4gdGhlIHNjb3BlLCB0aGlzIHNjcmVhbXMgJiMzNDtwb3RlbnRpYWwgZm9yIGZ1enppbmcgb3Bwb3J0dW5pdGllcy4mIzM0OyBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBjb25jZW50cmF0ZWQgYXJvdW5kIHRoZSBoYW5kbGluZyBvZiBFQSBpbm9kZXMuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMsIGp1c3QgdG8gYmUgc3VyZSB3ZSBhcmUgY292ZXJpbmcgYWxsIHBvdGVudGlhbCBiYXNlczogYEVYVDRfRlNgLCBgRVhUNF9GU19QT1NJWF9BQ0xgLCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgIGFyZSBkZWZpbml0ZWx5IHJlbGV2YW50IGhlcmUuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBhZGRlZC4gVGhlIGluaXRpYWwgbGlzdCBpbmNsdWRlcyBgZXh0NF9wdXRfZWFfaW5vZGVgLCBgZXh0NF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCwgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AsIGFuZCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIHNvIEkgd2lsbCBnaXZlIHRoZW0gdGhlIHByaW9yaXR5LgoKSG93ZXZlciwgSSBzaG91bGQgYmUgdGhvcm91Z2ggYW5kIGNoZWNrIGZvciBvdGhlciBjaGFuZ2VzLiBPa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBJIGZpbmQgYGV4dDRfYWxsb2NfaW5vZGVgIGluIGBmcy9leHQ0L3N1cGVyLmNgLCBgZXh0NF9ldmljdF9pbm9kZWAgaW4gYGZzL2V4dDQvaW5vZGUuY2AsIGBleHQ0X3B1dF9zdXBlcmAgaW4gYGZzL2V4dDQvc3VwZXIuY2AsIGBfX2V4dDRfZmlsbF9zdXBlcmAgaW4gYGZzL2V4dDQvc3VwZXIuY2AsIGBleHQ0X3N5bmNfZnNgIGluIGBmcy9leHQ0L3N1cGVyLmNgLCBgZXh0NF94YXR0cl9pbm9kZV9nZXRgIGluIGBmcy9leHQ0L3hhdHRyLmNgLCBgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbGAgaW4gYGZzL2V4dDQveGF0dHIuY2AsIGBleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZWAgaW4gYGZzL2V4dDQveGF0dHIuY2AsIGBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmRgIGluIGBmcy9leHQ0L3hhdHRyLmNgLCBgZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlYCBpbiBgZnMvZXh0NC94YXR0ci5jYCwgYGV4dDRfeGF0dHJfc2V0X2VudHJ5YCBpbiBgZnMvZXh0NC94YXR0ci5jYCwgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBpbiBgZnMvZXh0NC94YXR0ci5jYCwgYW5kIGBleHQ0X3hhdHRyX2lib2R5X3NldGAgaW4gYGZzL2V4dDQveGF0dHIuY2AuCgpPa2F5LCBhZnRlciByZXZpZXdpbmcgdGhlIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucywgSSBjYW4gc2VlIHRoYXQgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBhbmQgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YCBhcmUgYWxzbyBxdWl0ZSByZWxldmFudCBhbmQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBmdXp6aW5nIGZvY3VzLiBJJiMzOTtsbCBpbmNsdWRlIHRob3NlIGluIG15IGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AuCgpOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCB0aGUgYWN0dWFsIGZ1enppbmcsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGBpcHV0X2lmX25vdF9sYXN0YC4gVGhhdCBzZWVtcyBsaWtlIGFuIGltcG9ydGFudCBmdW5jdGlvbiB0byBrZWVwIGluIG1pbmQsIGluIHJlZ2FyZHMgdG8gdGhlIGNvZGUtcGF0aCB0YWtlbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB1dF9pZl9ub3RfbGFzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZzLmg9MjQxNT12b2lkIGlwdXRfbm90X2xhc3Qoc3RydWN0IGlub2RlICopO1xuLS1cbmluY2x1ZGUvbGludXgvZnMuaC0yNDE3LS8qKlxuaW5jbHVkZS9saW51eC9mcy5oOjI0MTg6ICogaXB1dF9pZl9ub3RfbGFzdCAtIGRyb3AgYW4gaW5vZGUgcmVmZXJlbmNlIG9ubHkgaWYgaXQgaXMgbm90IHRoZSBsYXN0IG9uZVxuaW5jbHVkZS9saW51eC9mcy5oLTI0MTktICogQGlub2RlOiBpbm9kZSB0byBwdXRcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjQyMy0gKi9cbmluY2x1ZGUvbGludXgvZnMuaDoyNDI0OnN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuaW5jbHVkZS9saW51eC9mcy5oLTI0MjUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQxNQoJCQkJCQkJb3V0cHV0OiAxODkKCQkJCQkJCXRob3VnaHRzOiAyMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSBhbmQgSSYjMzk7bSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdC4gRmlyc3Qgb2ZmLCB0aGlzIGZ1bmN0aW9uIGlzIGBzdGF0aWMgaW5saW5lYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93IGJlY2F1c2UgaXQgbWVhbnMgaXQgd29uJiMzOTt0IGNsdXR0ZXIgdGhlIGtlcm5lbCBzeW1ib2wgdGFibGUuIEkgY2FuIHNraXAgaW5jbHVkaW5nIGl0IGluIGBGb2N1c1N5bWJvbHNgLiBUaGF0JiMzOTtsbCBrZWVwIHRoaW5ncyBjbGVhbmVyLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHByZXBhcmUgdGhlIGZpbmFsIGRlY2lzaW9uLgoKYFdvcnRoRnV6emluZ2Agc2hvdWxkIGRlZmluaXRlbHkgYmUgYHRydWVgLiBUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBjb21wZWxsaW5nIGhlcmU6IHRoaXMgcGF0Y2ggaXMgbWVzc2luZyB3aXRoICpjb3JlKiBleHQ0IHhhdHRyIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIGlub2RlcyBhcmUgbWFuYWdlZC4gSXQmIzM5O3MgbWFraW5nIGZ1bmRhbWVudGFsIGNoYW5nZXMgdG8gaG93IHRob3NlIGlub2RlcyBhcmUgdHJhY2tlZCBhbmQgZnJlZWQsIGFuZCBpdCYjMzk7cyBkb2luZyBzbyB3aXRoIGEgbmV3IGRlZmVycmVkIGBpcHV0YCBtZWNoYW5pc20gaW1wbGVtZW50ZWQgdmlhIGEgd29ya3F1ZXVlLiBUaGlzIGlzIGRlc2lnbmVkIHRvIHNpZGVzdGVwIHRob3NlIG5hc3R5IGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZmlsZXN5c3RlbSB0aGF0JiMzOTtzIHVzZWQgKmV2ZXJ5d2hlcmUqLiBUaGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgYnVncyBpcyBoaWdoLCBhbmQgdGhlIGltcGFjdCBjb3VsZCBiZSB3aWRlc3ByZWFkLgoKR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgbG9vayBsaWtlIGBFWFQ0X0ZTYCwgYEVYVDRfRlNfUE9TSVhfQUNMYCwgYW5kIGBFWFQ0X0ZTX1NFQ1VSSVRZYC4KCkZpbmFsbHksIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IGlzIGxvb2tpbmcgc29saWQuIEkgc2hvdWxkIGtlZXAgYW4gZXllIG9uIHRoZXNlIGZ1bmN0aW9uczogYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIGFuZCBgZXh0NF94YXR0cl9pYm9keV9zZXRgLiBUaGV5JiMzOTtyZSBhbGwga2V5IHRvIHRoaXMgbmV3IEVBIGlub2RlIG1hbmFnZW1lbnQgYW5kIGRlZmVycmVkIGBpcHV0YCBwcm9jZXNzLiBJdCYjMzk7cyBhIGNvbXBsZXRlIHZpZXcgb2YgaG93IHRoZSBmdW5jdGlvbmFsaXR5IGlzIGNoYW5nZWQgYW5kIGdpdmVzIGEgZ29vZCBwb2ludCB0byBiZWdpbiB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTX1BPU0lYX0FDTCYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTX1NFQ1VSSVRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9wdXRfZWFfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9lYV9pbm9kZV93b3JrJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfZGVsZXRlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfYmxvY2tfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaWJvZHlfc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgZXh0NCB4YXR0ciBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBFQSBpbm9kZXMgYXJlIHRyYWNrZWQgYW5kIGZyZWVkLCBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIHZpYSBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgd2lkZWx5IHVzZWQgZmlsZXN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTX1BPU0lYX0FDTCYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTX1NFQ1VSSVRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9wdXRfZWFfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9lYV9pbm9kZV93b3JrJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfZGVsZXRlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfYmxvY2tfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaWJvZHlfc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgZXh0NCB4YXR0ciBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBFQSBpbm9kZXMgYXJlIHRyYWNrZWQgYW5kIGZyZWVkLCBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIHZpYSBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgd2lkZWx5IHVzZWQgZmlsZXN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAxOjA5OjI5LjY4NTA0MjI2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NzcxMDM1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiRVhUNF9GU19QT1NJWF9BQ0xcIixcbiAgICBcIkVYVDRfRlNfU0VDVVJJVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3B1dF9lYV9pbm9kZVwiLFxuICAgIFwiZXh0NF9lYV9pbm9kZV93b3JrXCIsXG4gICAgXCJleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZVwiLFxuICAgIFwiZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsXCIsXG4gICAgXCJleHQ0X3hhdHRyX2Jsb2NrX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9pYm9keV9zZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGV4dDQgeGF0dHIgbG9naWMsIHNwZWNpZmljYWxseSBob3cgRUEgaW5vZGVzIGFyZSB0cmFja2VkIGFuZCBmcmVlZCwgaW50cm9kdWNpbmcgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSB2aWEgYSB3b3JrcXVldWUgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHdpZGVseSB1c2VkIGZpbGVzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAxOjA5OjI5LjY4NTA0OTM4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTE1NDQ4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZDEyZmY0OGQxNTNhMGIxMTNiYzNjOTVkMmQ3ODQxOTEwNjZlZGNiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDExIDAxOjA5OjI4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxcbkBAIC0xMDcwLDggKzEwNzAsMTQgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XFxuIFxcdCAqIGJldHdlZW4gcmVhZGVycyBvZiBFQXMgYW5kIHdyaXRlcnMgb2YgcmVndWxhciBmaWxlIGRhdGEsIHNvXFxuIFxcdCAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZ1xcbiBcXHQgKiBFQXMuXFxuK1xcdCAqXFxuK1xcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcXG4rXFx0ICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuXFxuIFxcdCAqL1xcbi1cXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcXG4rXFx0XFx0c3RydWN0IGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGU7XFxuK1xcdH07XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBJbm9kZXMgd2l0aCBFWFQ0X1NUQVRFX09SUEhBTl9GSUxFIHVzZSBpX29ycGhhbl9pZHguIE90aGVyd2lzZVxcbkBAIC0xNzcwLDYgKzE3NzYsMTEgQEAgc3RydWN0IGV4dDRfc2JfaW5mbyB7XFxuIFxcdHN0cnVjdCBleHQ0X2VzX3N0YXRzIHNfZXNfc3RhdHM7XFxuIFxcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcXG4gXFx0c3RydWN0IG1iX2NhY2hlICpzX2VhX2lub2RlX2NhY2hlO1xcbitcXG4rXFx0LyogRGVmZXJyZWQgaXB1dCBmb3IgRUEgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzICovXFxuK1xcdHN0cnVjdCBsbGlzdF9oZWFkIHNfZWFfaW5vZGVfdG9fZnJlZTtcXG4rXFx0c3RydWN0IGRlbGF5ZWRfd29yayBzX2VhX2lub2RlX3dvcms7XFxuK1xcbiBcXHRzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbiBcXG4gXFx0LyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi9cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXFxuaW5kZXggY2U5OTgwN2M1ZjViMmMuLjc0N2M1MmMyMzJjYzAzIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xcbkBAIC0xNzYsNyArMTc2LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdCAqICh4YXR0ciBibG9jayBmcmVlaW5nKSwgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yIChpbm9kZSBmcmVlaW5nKVxcbiBcXHQgKi9cXG4gXFx0aW50IGV4dHJhX2NyZWRpdHMgPSA2O1xcbi1cXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xcbiBcXHRib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTtcXG4gXFxuIFxcdHRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpO1xcbkBAIC0yODEsOCArMjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFJlbW92ZSB4YXR0ciByZWZlcmVuY2VzLiAqL1xcbi1cXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBcXHUwMDI2ZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdFxcdFxcdCAgICAgIGV4dHJhX2NyZWRpdHMpO1xcbitcXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBleHRyYV9jcmVkaXRzKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRleHQ0X3dhcm5pbmcoaW5vZGUtXFx1MDAzZWlfc2IsIFxcXCJ4YXR0ciBkZWxldGUgKGVyciAlZClcXFwiLCBlcnIpO1xcbiBzdG9wX2hhbmRsZTpcXG5AQCAtMjkwLDcgKzI4OCw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xcbiBcXHRcXHRpZiAoZnJlZXplX3Byb3RlY3RlZClcXG4gXFx0XFx0XFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcXG4gXFx0XFx0Z290byBub19kZWxldGU7XFxuIFxcdH1cXG4gXFxuQEAgLTMyMCw3ICszMTcsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4gXFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXFxuIFxcdFxcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cXHUwMDNlaV9zYik7XFxuLVxcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuIFxcdHJldHVybjtcXG4gbm9fZGVsZXRlOlxcbiBcXHQvKlxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uODk4ZDhjNjQzMWJhZWEgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXFxuKysrIGIvZnMvZXh0NC9zdXBlci5jXFxuQEAgLTEzMDMsNiArMTMwMyw4IEBAIHN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdFxcdFxcdCBcXHUwMDI2c2ItXFx1MDAzZXNfdXVpZCk7XFxuIFxcbiBcXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XFxuK1xcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi9cXG4rXFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yayk7XFxuIFxcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xcbiBcXG4gXFx0ZGVzdHJveV93b3JrcXVldWUoc2JpLVxcdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XFxuQEAgLTE0MjMsNiArMTQyNSwxMyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdG1lbXNldChcXHUwMDI2ZWktXFx1MDAzZWlfZHF1b3QsIDAsIHNpemVvZihlaS1cXHUwMDNlaV9kcXVvdCkpO1xcbiAjZW5kaWZcXG4gXFx0ZWktXFx1MDAzZWppbm9kZSA9IE5VTEw7XFxuK1xcdC8qXFxuK1xcdCAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2Rlc1xcbitcXHQgKiBzaGFyZSB0aGlzIHNwYWNlIHdpdGggaV9lYV9pcHV0X25vZGUgKHZpYSB1bmlvbikgd2hpY2ggbWF5XFxuK1xcdCAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXNcXG4rXFx0ICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLlxcbitcXHQgKi9cXG4rXFx0aW5pdF9yd3NlbShcXHUwMDI2ZWktXFx1MDAzZXhhdHRyX3NlbSk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlaS1cXHUwMDNlaV9yc3ZfY29udmVyc2lvbl9saXN0KTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmVpLVxcdTAwM2VpX2NvbXBsZXRlZF9pb19sb2NrKTtcXG4gXFx0ZWktXFx1MDAzZWlfc3luY190aWQgPSAwO1xcbkBAIC0xNDg4LDcgKzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxcbiBcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGZvbztcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlaS1cXHUwMDNlaV9vcnBoYW4pO1xcbi1cXHRpbml0X3J3c2VtKFxcdTAwMjZlaS1cXHUwMDNleGF0dHJfc2VtKTtcXG4gXFx0aW5pdF9yd3NlbShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbiBcXHRpbm9kZV9pbml0X29uY2UoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbiBcXHRleHQ0X2ZjX2luaXRfaW5vZGUoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbkBAIC01NDk3LDYgKzU1MDUsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0XFx0XFx0ICBleHQ0X2hhc19mZWF0dXJlX29ycGhhbl9wcmVzZW50KHNiKSB8fFxcbiBcXHRcXHRcXHQgIGV4dDRfaGFzX2ZlYXR1cmVfam91cm5hbF9uZWVkc19yZWNvdmVyeShzYikpO1xcbiBcXG4rXFx0ZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc2JpKTtcXG4rXFxuIFxcdGlmIChleHQ0X2hhc19mZWF0dXJlX21tcChzYikgXFx1MDAyNlxcdTAwMjYgIXNiX3Jkb25seShzYikpIHtcXG4gXFx0XFx0ZXJyID0gZXh0NF9tdWx0aV9tb3VudF9wcm90ZWN0KHNiLCBsZTY0X3RvX2NwdShlcy1cXHUwMDNlc19tbXBfYmxvY2spKTtcXG4gXFx0XFx0aWYgKGVycilcXG5AQCAtNTc0Nyw2ICs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZmFpbGVkX21vdW50OTpcXG4rXFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIHF1b3RhIHNodXRkb3duICovXFxuK1xcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbiBcXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcXG4gZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4gXFx0ZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTtcXG5AQCAtNTc2Nyw2ICs1Nzc5LDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4gXFx0aWYgKEVYVDRfU0Ioc2IpLVxcdTAwM2Vyc3ZfY29udmVyc2lvbl93cSlcXG4gXFx0XFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXFx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcXG4gZmFpbGVkX21vdW50X3dxOlxcbitcXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgZnJlZWluZyBzdHJ1Y3R1cmVzICovXFxuK1xcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbiBcXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcXG4gXFx0c2JpLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gTlVMTDtcXG4gXFxuQEAgLTU3NzcsNiArNTc5MSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuIFxcdFxcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVxcdTAwM2VzX2pvdXJuYWwpO1xcbiBcXHR9XFxuIGZhaWxlZF9tb3VudDNhOlxcbitcXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBmcm9tIGpvdXJuYWwgcmVwbGF5ICovXFxuK1xcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbiBcXHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcXG4gZmFpbGVkX21vdW50MzpcXG4gXFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cXG5AQCAtNjQ0Nyw2ICs2NDYzLDcgQEAgc3RhdGljIGludCBleHQ0X3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpXFxuIFxcbiBcXHR0cmFjZV9leHQ0X3N5bmNfZnMoc2IsIHdhaXQpO1xcbiBcXHRmbHVzaF93b3JrcXVldWUoc2JpLVxcdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XFxuK1xcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbiBcXHQvKlxcbiBcXHQgKiBXcml0ZWJhY2sgcXVvdGEgaW4gbm9uLWpvdXJuYWxsZWQgcXVvdGEgY2FzZSAtIGpvdXJuYWxsZWQgcXVvdGEgaGFzXFxuIFxcdCAqIG5vIGRpcnR5IGRxdW90c1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmNcXG5pbmRleCA5ODJhMWY4MzFlMjI4Mi4uNGFlNmNlMTExNTY2MGUgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXFxuKysrIGIvZnMvZXh0NC94YXR0ci5jXFxuQEAgLTExNCwxMCArMTE0LDYgQEAgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7XFxuICNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXFx0KCgoc3RydWN0IGV4dDRfc2JfaW5mbyAqKSBcXFxcXFxuIFxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2ZzX2luZm8pLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlKVxcbiBcXG4tc3RhdGljIGludFxcbi1leHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbi1cXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4tXFxuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXFxuIHtcXG5AQCAtNTY3LDcgKzU2Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0XFx0XFx0XFx0ZWFfaW5vZGUtXFx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcXG4gXFx0fVxcbiBvdXQ6XFxuLVxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTExMDQsMTAgKzExMDAsMTAgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiaW5jIHJlZiBlcnJvciAlZFxcXCIsIGVycik7XFxuLVxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHR9XFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMTEzMyw3ICsxMTI5LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBlcnIpO1xcbi1cXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHR9XFxuIFxcdHJldHVybiBzYXZlZF9lcnI7XFxuIH1cXG5AQCAtMTE2MCw3ICsxMTU2LDYgQEAgc3RhdGljIHZvaWRcXG4gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICpmaXJzdCwgYm9vbCBibG9ja19jc3VtLFxcbi1cXHRcXHRcXHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdCAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xcbkBAIC0xMTk3LDE0ICsxMTkyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRlcnIgPSBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShlYV9pbm9kZV9hcnJheSwgZWFfaW5vZGUpO1xcbi1cXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFxcIkV4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWRcXFwiLCBlcnIpO1xcbi1cXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH1cXG4tXFxuIFxcdFxcdGVyciA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c19mbihoYW5kbGUsIGNyZWRpdHMsIGNyZWRpdHMsXFxuIFxcdFxcdFxcdGV4dDRfZnJlZV9tZXRhZGF0YV9yZXZva2VfY3JlZGl0cyhwYXJlbnQtXFx1MDAzZWlfc2IsIDEpLFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLFxcbkBAIC0xMjEyLDYgKzExOTksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJFbnN1cmUgY3JlZGl0cyBlcnI9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBlcnIpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChlcnIgXFx1MDAzZSAwKSB7XFxuQEAgLTEyMjEsNiArMTIwOSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFxcIlJlLWdldCB3cml0ZSBhY2Nlc3MgZXJyPSVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZXJyKTtcXG4rXFx0XFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuQEAgLTEyMjksNiArMTIxOCw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiZWFfaW5vZGUgZGVjIHJlZiBlcnI9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBlcnIpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xMjQ1LDYgKzEyMzUsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRlbnRyeS1cXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcXG4gXFx0XFx0ZW50cnktXFx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XFxuIFxcbitcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdFxcdGRpcnR5ID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG5AQCAtMTI3MSw3ICsxMjYyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gc3RhdGljIHZvaWRcXG4gZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi1cXHRcXHRcXHQgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0IGludCBleHRyYV9jcmVkaXRzKVxcbiB7XFxuIFxcdHN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7XFxuQEAgLTEzMTMsNyArMTMwMyw2IEBAIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEJGSVJTVChiaCksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdHJ1ZSAvKiBibG9ja19jc3VtICovLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGV4dHJhX2NyZWRpdHMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdHJ1ZSAvKiBza2lwX3F1b3RhICovKTtcXG4gXFx0XFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBiaCwgMCwgMSxcXG5AQCAtMTUwNSw3ICsxNDk0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0XFx0XFx0aWYgKGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsIGVhX2lub2RlKSlcXG4gXFx0XFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXFwiY2xlYW51cCBkZWMgcmVmIGVycm9yICVkXFxcIiwgZXJyKTtcXG4tXFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTU2NCw3ICsxNTUzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxcbiBcXHRcXHRcXHRrdmZyZWUoZWFfZGF0YSk7XFxuIFxcdFxcdFxcdHJldHVybiBlYV9pbm9kZTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRuZXh0X2VudHJ5OlxcbiBcXHRcXHRjZSA9IG1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChlYV9pbm9kZV9jYWNoZSwgY2UpO1xcbiBcXHR9XFxuQEAgLTE2MTUsNyArMTYwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxcbiBcXHRcXHRcXHRcXHQgICAgICBlYV9pbm9kZS1cXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xcbiBcXHRyZXR1cm4gZWFfaW5vZGU7XFxuIG91dF9lcnI6XFxuLVxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgdmFsdWVfbGVuKTtcXG4gXFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gfVxcbkBAIC0xODQ4LDcgKzE4MzcsNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksXFxuIFxcbiBcXHRyZXQgPSAwO1xcbiBvdXQ6XFxuLVxcdGlwdXQob2xkX2VhX2lub2RlKTtcXG4rXFx0ZXh0NF9wdXRfZWFfaW5vZGUob2xkX2VhX2lub2RlKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMjAxMCw3ICsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0b2xkX2VhX2lub2RlX3F1b3RhID0gbGUzMl90b19jcHUoXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSk7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aXB1dCh0bXBfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZSh0bXBfaW5vZGUpO1xcbiBcXG4gXFx0XFx0XFx0cy1cXHUwMDNlaGVyZS1cXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcXG4gXFx0XFx0XFx0cy1cXHUwMDNlaGVyZS1cXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcXG5AQCAtMjE1MCw3ICsyMTM5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwiZGVjIHJlZiBlcnJvcj0lZFxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGVycm9yKTtcXG4tXFx0XFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0XFx0ZWFfaW5vZGUgPSBOVUxMO1xcbiBcXHRcXHRcXHR9XFxuIFxcbkBAIC0yMTgyLDEyICsyMTcxLDggQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFxuIFxcdC8qIERyb3AgdGhlIHByZXZpb3VzIHhhdHRyIGJsb2NrLiAqL1xcbiBcXHRpZiAoYnMtXFx1MDAzZWJoIFxcdTAwMjZcXHUwMDI2IGJzLVxcdTAwM2ViaCAhPSBuZXdfYmgpIHtcXG4tXFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcXG4tXFxuIFxcdFxcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBicy1cXHUwMDNlYmgsXFxuLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdFxcdFxcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xcbi1cXHRcXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xcbiBcXHR9XFxuIFxcdGVycm9yID0gMDtcXG4gXFxuQEAgLTIyMDMsNyArMjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdH1cXG4gXFx0aWYgKGNlKVxcbiBcXHRcXHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIGNlKTtcXG5AQCAtMjI4NSw3ICsyMjcwLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcXG4tXFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcdH1cXG5AQCAtMjI5Nyw3ICsyMjgyLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdGhlYWRlci1cXHUwMDNlaF9tYWdpYyA9IGNwdV90b19sZTMyKDApO1xcbiBcXHRcXHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTtcXG4gXFx0fVxcbi1cXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMjg2Myw0NiArMjg0OCw2IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuLSNkZWZpbmUgRUlBX0lOQ1IgMTYgLyogbXVzdCBiZSAyXm4gKi9cXG4tI2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxcbi1cXG4tLyogQWRkIHRoZSBsYXJnZSB4YXR0ciBAaW5vZGUgaW50byBAZWFfaW5vZGVfYXJyYXkgZm9yIGRlZmVycmVkIGlwdXQoKS5cXG4tICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcXG4tICogY29udGVudHMgY29waWVkIG92ZXIuXFxuLSAqL1xcbi1zdGF0aWMgaW50XFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLXtcXG4tXFx0aWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFN0YXJ0IHdpdGggMTUgaW5vZGVzLCBzbyBpdCBmaXRzIGludG8gYSBwb3dlci1vZi10d28gc2l6ZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdCgqZWFfaW5vZGVfYXJyYXkpID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XFxuLVxcdFxcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdFxcdCgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCA9IDA7XFxuLVxcdH0gZWxzZSBpZiAoKCgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCBcXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xcbi1cXHRcXHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovXFxuLVxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICpuZXdfYXJyYXkgPSBOVUxMO1xcbi1cXG4tXFx0XFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4tXFx0XFx0XFx0XFx0XFx0ICgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCArIEVJQV9JTkNSLFxcbi1cXHRcXHRcXHRcXHRcXHQgR0ZQX05PRlMpO1xcbi1cXHRcXHRpZiAobmV3X2FycmF5ID09IE5VTEwpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRcXHRtZW1jcHkobmV3X2FycmF5LCAqZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4tXFx0XFx0XFx0XFx0ICAgKCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50KSk7XFxuLVxcdFxcdGtmcmVlKCplYV9pbm9kZV9hcnJheSk7XFxuLVxcdFxcdCplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTtcXG4tXFx0fVxcbi1cXHQoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQrKztcXG4tXFx0KCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWlub2Rlc1soKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQgLSAxXSA9IGlub2RlO1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gLypcXG4gICogZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoKVxcbiAgKlxcbkBAIC0yOTEzLDcgKzI4NTgsNiBAQCBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuXFxuICAqL1xcbiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdCAgICBpbnQgZXh0cmFfY3JlZGl0cylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcXG5AQCAtMjk1Miw3ICsyODk2LDYgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBJRklSU1QoaGVhZGVyKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmYWxzZSAvKiBibG9ja19jc3VtICovLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGV4dHJhX2NyZWRpdHMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZmFsc2UgLyogc2tpcF9xdW90YSAqLyk7XFxuIFxcdH1cXG5AQCAtMjk4NiwxMiArMjkyOSwxMiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVxcdTAwM2VlX3ZhbHVlX3NpemUpKTtcXG4tXFx0XFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBlYV9pbm9kZV9hcnJheSxcXG4rXFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxcbiBcXHRcXHRcXHRcXHRcXHQgZXh0cmFfY3JlZGl0cyk7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcXG5AQCAtMzAxMywxNiArMjk1Niw2MyBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIGVycm9yO1xcbiB9XFxuIFxcbi12b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkpXFxuKy8qXFxuKyAqIFdvcmtlciBmdW5jdGlvbiBmb3IgZGVmZXJyZWQgRUEgaW5vZGUgaXB1dC4gIFByb2Nlc3NlcyBhbGwgaW5vZGVzIHF1ZXVlZFxcbisgKiBvbiBzX2VhX2lub2RlX3RvX2ZyZWUgaW4gYSBjb250ZXh0IGZyZWUgb2YgeGF0dHJfc2VtL2piZDIgaGFuZGxlIGxvY2tzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZXh0NF9lYV9pbm9kZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbi1cXHRpbnQgaWR4O1xcbitcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzX2VhX2lub2RlX3dvcmspO1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcXG4gXFxuLVxcdGlmIChlYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxcbitcXHR3aGlsZSAobm9kZSkge1xcbitcXHRcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCBpX2VhX2lwdXRfbm9kZSk7XFxuK1xcdFxcdG5vZGUgPSBub2RlLVxcdTAwM2VuZXh0O1xcbitcXHRcXHRpcHV0KFxcdTAwMjZlaS1cXHUwMDNldmZzX2lub2RlKTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKlxcbisgKiBSZWxlYXNlIGEgVkZTIHJlZmVyZW5jZSBvbiBhbiBFQSBpbm9kZS4gIE11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGlwdXQoKVxcbisgKiBpbiBhbnkgY29udGV4dCB3aGVyZSB4YXR0cl9zZW0gb3IgYSBqYmQyIGhhbmRsZSBpcyBoZWxkLlxcbisgKlxcbisgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCByZWZlcmVuY2UsIGRyb3BzIGl0IGltbWVkaWF0ZWx5IHZpYVxcbisgKiBpcHV0X2lmX25vdF9sYXN0KCkgd2l0aCBubyBmdXJ0aGVyIGFjdGlvbiBuZWVkZWQuXFxuKyAqXFxuKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgaW5vZGUgaXMgbGlua2VkIG9udG8gYSBwZXItc2JcXG4rICogbGxpc3QgdmlhIGlfZWFfaXB1dF9ub2RlIChlbWJlZGRlZCBpbiBleHQ0X2lub2RlX2luZm8sIHNoYXJpbmcgc3BhY2VcXG4rICogd2l0aCB0aGUgdW51c2VkIHhhdHRyX3NlbSkgYW5kIGEgZGVsYXllZCB3b3JrZXIgcGVyZm9ybXMgdGhlIGZpbmFsXFxuKyAqIGlwdXQoKSBpbiBhIGNsZWFuIGNvbnRleHQuXFxuKyAqXFxuKyAqIE5vdGU6IHdoaWxlIGFuIGlub2RlIGlzIG9uIHNfZWFfaW5vZGVfdG9fZnJlZSwgdGhlIHVuY29uc3VtZWQgaV9jb3VudFxcbisgKiByZWZlcmVuY2UgKHN0aWxsIDEpIGtlZXBzIGl0IGluIHRoZSBpbm9kZSBjYWNoZSwgc28gYW55IGNvbmN1cnJlbnRcXG4rICogaWdldCgpIGJ1bXBzIGlfY291bnQgdG8gXFx1MDAzZT0gMiBhbmQgaXB1dF9pZl9ub3RfbGFzdCgpIHdpbGwgc3VjY2VlZC5cXG4rICogTm9ib2R5IHdpbGwgYWRkIHRoZSBpbm9kZSBhIHNlY29uZCB0aW1lIHVudGlsIGV4dDRfZWFfaW5vZGVfd29yaygpXFxuKyAqIGRyb3BzIHRoYXQgcmVmZXJlbmNlIHZpYSBpcHV0KCkuXFxuKyAqL1xcbit2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0aWYgKCFpbm9kZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpO1xcbitcXHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXFxuIFxcdFxcdHJldHVybjtcXG4rXFx0bGxpc3RfYWRkKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2VhX2lwdXRfbm9kZSxcXG4rXFx0XFx0ICBcXHUwMDI2RVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XFxuK1xcdC8qXFxuK1xcdCAqIFVzZSBhIHNob3J0IGRlbGF5IHRvIGFsbG93IG11bHRpcGxlIEVBIGlub2RlcyB0byBhY2N1bXVsYXRlLFxcbitcXHQgKiByZWR1Y2luZyB3b3JrcXVldWUgd2FrZXVwcyB3aGVuIHNldmVyYWwgYXJlIHJlbGVhc2VkIHRvZ2V0aGVyLlxcbitcXHQgKi9cXG4rXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19lYV9pbm9kZV93b3JrLCAxKTtcXG4rfVxcbiBcXG4tXFx0Zm9yIChpZHggPSAwOyBpZHggXFx1MDAzYyBlYV9pbm9kZV9hcnJheS1cXHUwMDNlY291bnQ7ICsraWR4KVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlX2FycmF5LVxcdTAwM2Vpbm9kZXNbaWR4XSk7XFxuLVxcdGtmcmVlKGVhX2lub2RlX2FycmF5KTtcXG4rdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXFxuK3tcXG4rXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XFxuK1xcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oXFxuaW5kZXggMWZlZGY0NGQ0ZmI2NWUuLjgyMWRjNmE1MGU1MWU3IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQveGF0dHIuaFxcbisrKyBiL2ZzL2V4dDQveGF0dHIuaFxcbkBAIC0xMzEsMTEgKzEzMSw2IEBAIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQge1xcbiBcXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XFxuIH07XFxuIFxcbi1zdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XFxuLVxcdHVuc2lnbmVkIGludCBjb3VudDtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZXNbXSBfX2NvdW50ZWRfYnkoY291bnQpO1xcbi19O1xcbi1cXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7XFxuQEAgLTE4Nyw5ICsxODIsOSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRib29sIGlzX2NyZWF0ZSk7XFxuIFxcbiBleHRlcm4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksXFxuIFxcdFxcdFxcdFxcdCAgIGludCBleHRyYV9jcmVkaXRzKTtcXG4tZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7XFxuK2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7XFxuK2V4dGVybiB2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBcXG4gZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxcbmluZGV4IDUwY2U3MzFhMmI3OGYxLi5hYTFkNTAxZDJiYjYyNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5AQCAtMjQxMyw2ICsyNDEzLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcl9zZXRfc3lzZnNfbmFtZV9nZW5lcmljKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoXFxuIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTtcXG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XFxuIHZvaWQgaXB1dF9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKik7XFxuK1xcbisvKipcXG4rICogaXB1dF9pZl9ub3RfbGFzdCAtIGRyb3AgYW4gaW5vZGUgcmVmZXJlbmNlIG9ubHkgaWYgaXQgaXMgbm90IHRoZSBsYXN0IG9uZVxcbisgKiBAaW5vZGU6IGlub2RlIHRvIHB1dFxcbisgKlxcbisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlZmVyZW5jZSB3YXMgZHJvcHBlZCwgZmFsc2UgaWYgdGhpcyB3YXMgdGhlIGxhc3RcXG4rICogcmVmZXJlbmNlIGFuZCB0aGUgY2FsbGVyIG11c3QgYXJyYW5nZSBmb3IgZmluYWwgaXB1dCgpIGluIGEgc2FmZSBjb250ZXh0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBpcHV0X2lmX25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0VkZTX0JVR19PTl9JTk9ERShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgKElfRlJFRUlORyB8IElfQ0xFQVIpLCBpbm9kZSk7XFxuK1xcdFZGU19CVUdfT05fSU5PREUoaWNvdW50X3JlYWRfb25jZShpbm9kZSkgXFx1MDAzYyAxLCBpbm9kZSk7XFxuK1xcdHJldHVybiBhdG9taWNfYWRkX3VubGVzcyhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfY291bnQsIC0xLCAxKTtcXG4rfVxcbitcXG4gaW50IGlub2RlX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcXG4gXFx0XFx0dW5zaWduZWQgaW50IGZsYWdzKTtcXG4gaW50IGdlbmVyaWNfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTozMC4yNzczMDY2NDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Mzg0ODI5MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkVYVDRfRlNfUE9TSVhfQUNMXCIsXG4gICAgXCJFWFQ0X0ZTX1NFQ1VSSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgICBcImV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICAgIFwiZXh0NF94YXR0cl9kZWxldGVfaW5vZGVcIixcbiAgICBcImV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja1wiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbFwiLFxuICAgIFwiZXh0NF94YXR0cl9ibG9ja19zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfaWJvZHlfc2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleHQ0IHhhdHRyIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IEVBIGlub2RlcyBhcmUgdHJhY2tlZCBhbmQgZnJlZWQsIGludHJvZHVjaW5nIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gdmlhIGEgd29ya3F1ZXVlIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSB3aWRlbHkgdXNlZCBmaWxlc3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFkMTJmZjQ4ZDE1M2EwYjExM2JjM2M5NWQyZDc4NDE5MTA2NmVkY2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAwMTowOToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IGIzN2MxMzZlYTNhYjMzLi5iOWIwYWRhNzc3NGJiNCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTEwNzAsOCArMTA3MCwxNCBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcbiBcdCAqIGJldHdlZW4gcmVhZGVycyBvZiBFQXMgYW5kIHdyaXRlcnMgb2YgcmVndWxhciBmaWxlIGRhdGEsIHNvXG4gXHQgKiBpbnN0ZWFkIHdlIHN5bmNocm9uaXplIG9uIHhhdHRyX3NlbSB3aGVuIHJlYWRpbmcgb3IgY2hhbmdpbmdcbiBcdCAqIEVBcy5cbitcdCAqXG4rXHQgKiBFQSBpbm9kZXMgKEVYVDRfRUFfSU5PREVfRkwpIGRvIG5vdCB1c2UgeGF0dHJfc2VtOyB0aGV5IHJldXNlXG4rXHQgKiB0aGUgc3BhY2UgZm9yIGRlZmVycmVkIGlwdXQgbGlua2FnZS5cbiBcdCAqL1xuLVx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XG4rXHR1bmlvbiB7XG4rXHRcdHN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtO1xuK1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSBpX2VhX2lwdXRfbm9kZTtcbitcdH07XG4gXG4gXHQvKlxuIFx0ICogSW5vZGVzIHdpdGggRVhUNF9TVEFURV9PUlBIQU5fRklMRSB1c2UgaV9vcnBoYW5faWR4LiBPdGhlcndpc2VcbkBAIC0xNzcwLDYgKzE3NzYsMTEgQEAgc3RydWN0IGV4dDRfc2JfaW5mbyB7XG4gXHRzdHJ1Y3QgZXh0NF9lc19zdGF0cyBzX2VzX3N0YXRzO1xuIFx0c3RydWN0IG1iX2NhY2hlICpzX2VhX2Jsb2NrX2NhY2hlO1xuIFx0c3RydWN0IG1iX2NhY2hlICpzX2VhX2lub2RlX2NhY2hlO1xuK1xuK1x0LyogRGVmZXJyZWQgaXB1dCBmb3IgRUEgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzICovXG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCBzX2VhX2lub2RlX3RvX2ZyZWU7XG4rXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHNfZWFfaW5vZGVfd29yaztcbitcbiBcdHNwaW5sb2NrX3Qgc19lc19sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gXG4gXHQvKiBKb3VybmFsIHRyaWdnZXJzIGZvciBjaGVja3N1bSBjb21wdXRhdGlvbiAqL1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggY2U5OTgwN2M1ZjViMmMuLjc0N2M1MmMyMzJjYzAzIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbm9kZS5jXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcbkBAIC0xNzYsNyArMTc2LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHQgKiAoeGF0dHIgYmxvY2sgZnJlZWluZyksIGJpdG1hcCwgZ3JvdXAgZGVzY3JpcHRvciAoaW5vZGUgZnJlZWluZylcbiBcdCAqL1xuIFx0aW50IGV4dHJhX2NyZWRpdHMgPSA2O1xuLVx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbiBcdGJvb2wgZnJlZXplX3Byb3RlY3RlZCA9IGZhbHNlO1xuIFxuIFx0dHJhY2VfZXh0NF9ldmljdF9pbm9kZShpbm9kZSk7XG5AQCAtMjgxLDggKzI4MCw3IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fVxuIFxuIFx0LyogUmVtb3ZlIHhhdHRyIHJlZmVyZW5jZXMuICovXG4tXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRcdCAgICAgIGV4dHJhX2NyZWRpdHMpO1xuK1x0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgZXh0cmFfY3JlZGl0cyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGV4dDRfd2FybmluZyhpbm9kZS1cdTAwM2VpX3NiLCBcInhhdHRyIGRlbGV0ZSAoZXJyICVkKVwiLCBlcnIpO1xuIHN0b3BfaGFuZGxlOlxuQEAgLTI5MCw3ICsyODgsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcbiBcdFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXG4gXHRcdFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0XHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0XHRnb3RvIG5vX2RlbGV0ZTtcbiBcdH1cbiBcbkBAIC0zMjAsNyArMzE3LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuIFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXG4gXHRcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XG4gXHRyZXR1cm47XG4gbm9fZGVsZXRlOlxuIFx0LypcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDI0NWY2N2QxMGRlZDM0Li44OThkOGM2NDMxYmFlYSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuKysrIGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtMTMwMyw2ICsxMzAzLDggQEAgc3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdFx0XHQgXHUwMDI2c2ItXHUwMDNlc191dWlkKTtcbiBcbiBcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi9cbitcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIFxuIFx0ZGVzdHJveV93b3JrcXVldWUoc2JpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcbkBAIC0xNDIzLDYgKzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0bWVtc2V0KFx1MDAyNmVpLVx1MDAzZWlfZHF1b3QsIDAsIHNpemVvZihlaS1cdTAwM2VpX2RxdW90KSk7XG4gI2VuZGlmXG4gXHRlaS1cdTAwM2VqaW5vZGUgPSBOVUxMO1xuK1x0LypcbitcdCAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2Rlc1xuK1x0ICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heVxuK1x0ICogaGF2ZSBvdmVyd3JpdHRlbiB0aGUgc2VtYXBob3JlIHdoZW4gdGhlIHNsYWIgb2JqZWN0IHdhc1xuK1x0ICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLlxuK1x0ICovXG4rXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZXhhdHRyX3NlbSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX3Jzdl9jb252ZXJzaW9uX2xpc3QpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZWktXHUwMDNlaV9jb21wbGV0ZWRfaW9fbG9jayk7XG4gXHRlaS1cdTAwM2VpX3N5bmNfdGlkID0gMDtcbkBAIC0xNDg4LDcgKzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuIFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBmb287XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX29ycGhhbik7XG4tXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZXhhdHRyX3NlbSk7XG4gXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuIFx0aW5vZGVfaW5pdF9vbmNlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4gXHRleHQ0X2ZjX2luaXRfaW5vZGUoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbkBAIC01NDk3LDYgKzU1MDUsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdFx0XHQgIGV4dDRfaGFzX2ZlYXR1cmVfb3JwaGFuX3ByZXNlbnQoc2IpIHx8XG4gXHRcdFx0ICBleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWxfbmVlZHNfcmVjb3Zlcnkoc2IpKTtcbiBcbitcdGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHNiaSk7XG4rXG4gXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9tbXAoc2IpIFx1MDAyNlx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xuIFx0XHRlcnIgPSBleHQ0X211bHRpX21vdW50X3Byb3RlY3Qoc2IsIGxlNjRfdG9fY3B1KGVzLVx1MDAzZXNfbW1wX2Jsb2NrKSk7XG4gXHRcdGlmIChlcnIpXG5AQCAtNTc0Nyw2ICs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRyZXR1cm4gMDtcbiBcbiBmYWlsZWRfbW91bnQ5OlxuK1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIHF1b3RhIHNodXRkb3duICovXG4rXHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcbiBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0ZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTtcbkBAIC01NzY3LDYgKzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0aWYgKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG4gZmFpbGVkX21vdW50X3dxOlxuK1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIGZyZWVpbmcgc3RydWN0dXJlcyAqL1xuK1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcbiBcdHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gTlVMTDtcbiBcbkBAIC01Nzc3LDYgKzU3OTEsOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuIFx0fVxuIGZhaWxlZF9tb3VudDNhOlxuK1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xuK1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG4gZmFpbGVkX21vdW50MzpcbiBcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXG5AQCAtNjQ0Nyw2ICs2NDYzLDcgQEAgc3RhdGljIGludCBleHQ0X3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpXG4gXG4gXHR0cmFjZV9leHQ0X3N5bmNfZnMoc2IsIHdhaXQpO1xuIFx0Zmx1c2hfd29ya3F1ZXVlKHNiaS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG4rXHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHQvKlxuIFx0ICogV3JpdGViYWNrIHF1b3RhIGluIG5vbi1qb3VybmFsbGVkIHF1b3RhIGNhc2UgLSBqb3VybmFsbGVkIHF1b3RhIGhhc1xuIFx0ICogbm8gZGlydHkgZHF1b3RzXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Mi4uNGFlNmNlMTExNTY2MGUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcbisrKyBiL2ZzL2V4dDQveGF0dHIuY1xuQEAgLTExNCwxMCArMTE0LDYgQEAgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7XG4gI2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSlcdCgoKHN0cnVjdCBleHQ0X3NiX2luZm8gKikgXFxcbiBcdFx0XHRcdGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19mc19pbmZvKS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKVxuIFxuLXN0YXRpYyBpbnRcbi1leHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuLVx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLVxuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3Moc3RydWN0IGlub2RlICplYV9pbm9kZSlcbiB7XG5AQCAtNTY3LDcgKzU2Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSxcbiBcdFx0XHRcdFx0ZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuIFx0fVxuIG91dDpcbi1cdGlwdXQoZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTEwNCwxMCArMTEwMCwxMCBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZihoYW5kbGUsIGVhX2lub2RlKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCJpbmMgcmVmIGVycm9yICVkXCIsIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdGdvdG8gY2xlYW51cDtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTEzMyw3ICsxMTI5LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCJjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcIixcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiBzYXZlZF9lcnI7XG4gfVxuQEAgLTExNjAsNyArMTE1Niw2IEBAIHN0YXRpYyB2b2lkXG4gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHQgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSxcbi1cdFx0XHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0ICAgICBpbnQgZXh0cmFfY3JlZGl0cywgYm9vbCBza2lwX3F1b3RhKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGU7XG5AQCAtMTE5NywxNCArMTE5Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGVyciA9IGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KGVhX2lub2RlX2FycmF5LCBlYV9pbm9kZSk7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4tXHRcdFx0XHRcdCAgIFwiRXhwYW5kIGlub2RlIGFycmF5IGVycj0lZFwiLCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4gXHRcdGVyciA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c19mbihoYW5kbGUsIGNyZWRpdHMsIGNyZWRpdHMsXG4gXHRcdFx0ZXh0NF9mcmVlX21ldGFkYXRhX3Jldm9rZV9jcmVkaXRzKHBhcmVudC1cdTAwM2VpX3NiLCAxKSxcbiBcdFx0XHRleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLFxuQEAgLTEyMTIsNiArMTE5OSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwiRW5zdXJlIGNyZWRpdHMgZXJyPSVkXCIsXG4gXHRcdFx0XHRcdCAgIGVycik7XG4rXHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbkBAIC0xMjIxLDYgKzEyMDksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdFwiUmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWRcIixcbiBcdFx0XHRcdFx0XHRlcnIpO1xuK1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuIFx0XHR9XG5AQCAtMTIyOSw2ICsxMjE4LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCJlYV9pbm9kZSBkZWMgcmVmIGVycj0lZFwiLFxuIFx0XHRcdFx0XHQgICBlcnIpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuQEAgLTEyNDUsNiArMTIzNSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGVudHJ5LVx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XG4gXHRcdGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XG4gXG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0ZGlydHkgPSB0cnVlO1xuIFx0fVxuIFxuQEAgLTEyNzEsNyArMTI2Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gc3RhdGljIHZvaWRcbiBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi1cdFx0XHQgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgaW50IGV4dHJhX2NyZWRpdHMpXG4ge1xuIFx0c3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTtcbkBAIC0xMzEzLDcgKzEzMDMsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHRcdCAgICAgQkZJUlNUKGJoKSxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XG4gXHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsXG5AQCAtMTUwNSw3ICsxNDk0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKVxuIFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcImNsZWFudXAgZGVjIHJlZiBlcnJvciAlZFwiLCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0XHR9XG4gXG5AQCAtMTU2NCw3ICsxNTUzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuIFx0XHRcdGt2ZnJlZShlYV9kYXRhKTtcbiBcdFx0XHRyZXR1cm4gZWFfaW5vZGU7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdG5leHRfZW50cnk6XG4gXHRcdGNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGVhX2lub2RlX2NhY2hlLCBjZSk7XG4gXHR9XG5AQCAtMTYxNSw3ICsxNjA0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0XHQgICAgICBlYV9pbm9kZS1cdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XG4gXHRyZXR1cm4gZWFfaW5vZGU7XG4gb3V0X2Vycjpcbi1cdGlwdXQoZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCB2YWx1ZV9sZW4pO1xuIFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG5AQCAtMTg0OCw3ICsxODM3LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuIFxuIFx0cmV0ID0gMDtcbiBvdXQ6XG4tXHRpcHV0KG9sZF9lYV9pbm9kZSk7XG4rXHRleHQ0X3B1dF9lYV9pbm9kZShvbGRfZWFfaW5vZGUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMjAxMCw3ICsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdG9sZF9lYV9pbm9kZV9xdW90YSA9IGxlMzJfdG9fY3B1KFxuIFx0XHRcdFx0XHRcdHMtXHUwMDNlaGVyZS1cdTAwM2VlX3ZhbHVlX3NpemUpO1xuIFx0XHRcdH1cbi1cdFx0XHRpcHV0KHRtcF9pbm9kZSk7XG4rXHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUodG1wX2lub2RlKTtcbiBcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbkBAIC0yMTUwLDcgKzIxMzksNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0XHQgICBcImRlYyByZWYgZXJyb3I9JWRcIixcbiBcdFx0XHRcdFx0XHRcdCAgIGVycm9yKTtcbi1cdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdFx0ZWFfaW5vZGUgPSBOVUxMO1xuIFx0XHRcdH1cbiBcbkBAIC0yMTgyLDEyICsyMTcxLDggQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdC8qIERyb3AgdGhlIHByZXZpb3VzIHhhdHRyIGJsb2NrLiAqL1xuIFx0aWYgKGJzLVx1MDAzZWJoIFx1MDAyNlx1MDAyNiBicy1cdTAwM2ViaCAhPSBuZXdfYmgpIHtcbi1cdFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbi1cbiBcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVx1MDAzZWJoLFxuLVx0XHRcdFx0XHQgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0XHRcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xuLVx0XHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0fVxuIFx0ZXJyb3IgPSAwO1xuIFxuQEAgLTIyMDMsNyArMjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0fVxuIFx0aWYgKGNlKVxuIFx0XHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIGNlKTtcbkBAIC0yMjg1LDcgKzIyNzAsNyBAQCBpbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdCAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG5AQCAtMjI5Nyw3ICsyMjgyLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdGhlYWRlci1cdTAwM2VoX21hZ2ljID0gY3B1X3RvX2xlMzIoMCk7XG4gXHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpO1xuIFx0fVxuLVx0aXB1dChlYV9pbm9kZSk7XG4rXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjg2Myw0NiArMjg0OCw2IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovXG4tI2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxuLVxuLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuXG4tICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcbi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cbi0gKi9cbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkge1xuLVx0XHQvKlxuLVx0XHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXG4tXHRcdCAqL1xuLVx0XHQoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHRcdFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XG4tXHRcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgPSAwO1xuLVx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xuLVx0XHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovXG4tXHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICpuZXdfYXJyYXkgPSBOVUxMO1xuLVxuLVx0XHRuZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0XHQgKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgKyBFSUFfSU5DUixcbi1cdFx0XHRcdFx0IEdGUF9OT0ZTKTtcbi1cdFx0aWYgKG5ld19hcnJheSA9PSBOVUxMKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHRtZW1jcHkobmV3X2FycmF5LCAqZWFfaW5vZGVfYXJyYXksXG4tXHRcdCAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdCAgICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50KSk7XG4tXHRcdGtmcmVlKCplYV9pbm9kZV9hcnJheSk7XG4tXHRcdCplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTtcbi1cdH1cbi1cdCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50Kys7XG4tXHQoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vpbm9kZXNbKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgLSAxXSA9IGlub2RlO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qXG4gICogZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoKVxuICAqXG5AQCAtMjkxMyw3ICsyODU4LDYgQEAgZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuXG4gICovXG4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0ICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0ICAgIGludCBleHRyYV9jcmVkaXRzKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xuQEAgLTI5NTIsNyArMjg5Niw2IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcbiBcdFx0XHRcdFx0XHQgICAgIElGSVJTVChoZWFkZXIpLFxuIFx0XHRcdFx0XHRcdCAgICAgZmFsc2UgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0fVxuQEAgLTI5ODYsMTIgKzI5MjksMTIgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0ICAgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV92YWx1ZV9zaXplKSk7XG4tXHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHR9XG4gXG4gXHRcdH1cbiBcbi1cdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBlYV9pbm9kZV9hcnJheSxcbitcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4gXHRcdC8qXG4gXHRcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcbkBAIC0zMDEzLDE2ICsyOTU2LDYzIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi12b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkpXG4rLypcbisgKiBXb3JrZXIgZnVuY3Rpb24gZm9yIGRlZmVycmVkIEVBIGlub2RlIGlwdXQuICBQcm9jZXNzZXMgYWxsIGlub2RlcyBxdWV1ZWRcbisgKiBvbiBzX2VhX2lub2RlX3RvX2ZyZWUgaW4gYSBjb250ZXh0IGZyZWUgb2YgeGF0dHJfc2VtL2piZDIgaGFuZGxlIGxvY2tzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0aW50IGlkeDtcbitcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksXG4rXHRcdFx0XHRcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyxcbitcdFx0XHRcdFx0XHRzX2VhX2lub2RlX3dvcmspO1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuIFxuLVx0aWYgKGVhX2lub2RlX2FycmF5ID09IE5VTEwpXG4rXHR3aGlsZSAobm9kZSkge1xuK1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCBpX2VhX2lwdXRfbm9kZSk7XG4rXHRcdG5vZGUgPSBub2RlLVx1MDAzZW5leHQ7XG4rXHRcdGlwdXQoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbitcdH1cbit9XG4rXG4rLypcbisgKiBSZWxlYXNlIGEgVkZTIHJlZmVyZW5jZSBvbiBhbiBFQSBpbm9kZS4gIE11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGlwdXQoKVxuKyAqIGluIGFueSBjb250ZXh0IHdoZXJlIHhhdHRyX3NlbSBvciBhIGpiZDIgaGFuZGxlIGlzIGhlbGQuXG4rICpcbisgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCByZWZlcmVuY2UsIGRyb3BzIGl0IGltbWVkaWF0ZWx5IHZpYVxuKyAqIGlwdXRfaWZfbm90X2xhc3QoKSB3aXRoIG5vIGZ1cnRoZXIgYWN0aW9uIG5lZWRlZC5cbisgKlxuKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgaW5vZGUgaXMgbGlua2VkIG9udG8gYSBwZXItc2JcbisgKiBsbGlzdCB2aWEgaV9lYV9pcHV0X25vZGUgKGVtYmVkZGVkIGluIGV4dDRfaW5vZGVfaW5mbywgc2hhcmluZyBzcGFjZVxuKyAqIHdpdGggdGhlIHVudXNlZCB4YXR0cl9zZW0pIGFuZCBhIGRlbGF5ZWQgd29ya2VyIHBlcmZvcm1zIHRoZSBmaW5hbFxuKyAqIGlwdXQoKSBpbiBhIGNsZWFuIGNvbnRleHQuXG4rICpcbisgKiBOb3RlOiB3aGlsZSBhbiBpbm9kZSBpcyBvbiBzX2VhX2lub2RlX3RvX2ZyZWUsIHRoZSB1bmNvbnN1bWVkIGlfY291bnRcbisgKiByZWZlcmVuY2UgKHN0aWxsIDEpIGtlZXBzIGl0IGluIHRoZSBpbm9kZSBjYWNoZSwgc28gYW55IGNvbmN1cnJlbnRcbisgKiBpZ2V0KCkgYnVtcHMgaV9jb3VudCB0byBcdTAwM2U9IDIgYW5kIGlwdXRfaWZfbm90X2xhc3QoKSB3aWxsIHN1Y2NlZWQuXG4rICogTm9ib2R5IHdpbGwgYWRkIHRoZSBpbm9kZSBhIHNlY29uZCB0aW1lIHVudGlsIGV4dDRfZWFfaW5vZGVfd29yaygpXG4rICogZHJvcHMgdGhhdCByZWZlcmVuY2UgdmlhIGlwdXQoKS5cbisgKi9cbit2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0aWYgKCFpbm9kZSlcbitcdFx0cmV0dXJuO1xuK1x0V0FSTl9PTl9PTkNFKCEoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSk7XG4rXHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXG4gXHRcdHJldHVybjtcbitcdGxsaXN0X2FkZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZWFfaXB1dF9ub2RlLFxuK1x0XHQgIFx1MDAyNkVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbitcdC8qXG4rXHQgKiBVc2UgYSBzaG9ydCBkZWxheSB0byBhbGxvdyBtdWx0aXBsZSBFQSBpbm9kZXMgdG8gYWNjdW11bGF0ZSxcbitcdCAqIHJlZHVjaW5nIHdvcmtxdWV1ZSB3YWtldXBzIHdoZW4gc2V2ZXJhbCBhcmUgcmVsZWFzZWQgdG9nZXRoZXIuXG4rXHQgKi9cbitcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfZWFfaW5vZGVfd29yaywgMSk7XG4rfVxuIFxuLVx0Zm9yIChpZHggPSAwOyBpZHggXHUwMDNjIGVhX2lub2RlX2FycmF5LVx1MDAzZWNvdW50OyArK2lkeClcbi1cdFx0aXB1dChlYV9pbm9kZV9hcnJheS1cdTAwM2Vpbm9kZXNbaWR4XSk7XG4tXHRrZnJlZShlYV9pbm9kZV9hcnJheSk7XG4rdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4re1xuK1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuK1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmggYi9mcy9leHQ0L3hhdHRyLmhcbmluZGV4IDFmZWRmNDRkNGZiNjVlLi44MjFkYzZhNTBlNTFlNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuaFxuKysrIGIvZnMvZXh0NC94YXR0ci5oXG5AQCAtMTMxLDExICsxMzEsNiBAQCBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIHtcbiBcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcbiB9O1xuIFxuLXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5IHtcbi1cdHVuc2lnbmVkIGludCBjb3VudDtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGVzW10gX19jb3VudGVkX2J5KGNvdW50KTtcbi19O1xuLVxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3VzZXJfaGFuZGxlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcjtcbkBAIC0xODcsOSArMTgyLDkgQEAgZXh0ZXJuIGludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdGJvb2wgaXNfY3JlYXRlKTtcbiBcbiBleHRlcm4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmFycmF5LFxuIFx0XHRcdFx0ICAgaW50IGV4dHJhX2NyZWRpdHMpO1xuLWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpO1xuK2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7XG4rZXh0ZXJuIHZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXG4gZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IDUwY2U3MzFhMmI3OGYxLi5hYTFkNTAxZDJiYjYyNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtMjQxMyw2ICsyNDEzLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcl9zZXRfc3lzZnNfbmFtZV9nZW5lcmljKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoXG4gZXh0ZXJuIHZvaWQgaWhvbGQoc3RydWN0IGlub2RlICogaW5vZGUpO1xuIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopO1xuIHZvaWQgaXB1dF9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKik7XG4rXG4rLyoqXG4rICogaXB1dF9pZl9ub3RfbGFzdCAtIGRyb3AgYW4gaW5vZGUgcmVmZXJlbmNlIG9ubHkgaWYgaXQgaXMgbm90IHRoZSBsYXN0IG9uZVxuKyAqIEBpbm9kZTogaW5vZGUgdG8gcHV0XG4rICpcbisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlZmVyZW5jZSB3YXMgZHJvcHBlZCwgZmFsc2UgaWYgdGhpcyB3YXMgdGhlIGxhc3RcbisgKiByZWZlcmVuY2UgYW5kIHRoZSBjYWxsZXIgbXVzdCBhcnJhbmdlIGZvciBmaW5hbCBpcHV0KCkgaW4gYSBzYWZlIGNvbnRleHQuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBpcHV0X2lmX25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0VkZTX0JVR19PTl9JTk9ERShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiAoSV9GUkVFSU5HIHwgSV9DTEVBUiksIGlub2RlKTtcbitcdFZGU19CVUdfT05fSU5PREUoaWNvdW50X3JlYWRfb25jZShpbm9kZSkgXHUwMDNjIDEsIGlub2RlKTtcbitcdHJldHVybiBhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZpbm9kZS1cdTAwM2VpX2NvdW50LCAtMSwgMSk7XG4rfVxuK1xuIGludCBpbm9kZV91cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsXG4gXHRcdHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IGdlbmVyaWNfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDE6MDk6MzAuMjc3MzA4MDk3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI1ODY4MDI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEV4dDQgWGF0dHIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBleHQ0LiBJdCdzIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyBFeHRlbmRlZCBBdHRyaWJ1dGVzIChFQXMpIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSB0cmFja2luZyBhbmQgZnJlZWluZyBvZiBFQSBpbm9kZXMuIFRoZXkndmUgYWRkZWQgdGhpcyBgZXh0NF9wdXRfZWFfaW5vZGVgIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVXNpbmcgYGlwdXRfaWZfbm90X2xhc3RgIGlzIGEgZ29vZCBhcHByb2FjaCB0byBhdm9pZCBwcmVtYXR1cmUgaW5vZGUgcmVsZWFzZSwgYW5kIGRlZmVycmluZyB0aGUgZmluYWwgYGlwdXRgIHRvIHRoYXQgd29ya3F1ZXVlLCBgc19lYV9pbm9kZV93b3JrYCwgbWFrZXMgc2Vuc2UgZm9yIGF2b2lkaW5nIHBvdGVudGlhbCBsb2NrIG9yZGVyaW5nIGlzc3Vlcywgd2hpY2ggaXMgYWx3YXlzIGEgY29uY2VybiBpbiBmaWxlc3lzdGVtIGNvZGUuIEdvb2QgdG8gc2VlIHRoZXkncmUgYmVpbmcgcHJvYWN0aXZlIGFib3V0IHRoYXQuXG5cbk5vdywgdGhlIHVuaW9uaW5nIG9mIGB4YXR0cl9zZW1gIHdpdGggYGlfZWFfaXB1dF9ub2RlYCB3aXRoaW4gYGV4dDRfaW5vZGVfaW5mb2Agc2VlbXMgbGlrZSBhIGNsZXZlciBvcHRpbWl6YXRpb24uIENvbnNvbGlkYXRpbmcgdGhvc2UgdHdvLCBlc3BlY2lhbGx5IGlmIGBpX2VhX2lwdXRfbm9kZWAgaXMgYW4gYGxsaXN0X25vZGVgLCBtYWtlcyBtZSB0aGluayB0aGV5J3JlIHRyeWluZyB0byByZWR1Y2UgbWVtb3J5IGZvb3RwcmludCwgYW5kIHBvc3NpYmx5IGltcHJvdmUgY2FjaGUgZWZmaWNpZW5jeS4gU21hcnQgbW92ZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBjb3JlIGV4dDQgZmlsZXN5c3RlbSwgc28gaXTigJlzIHdvcnRoIGEgZGVlcCBkaXZlLlxuXG5GaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSByZWFjaGFibGUsIHdoaWNoIGlzIGNydWNpYWwuIEV4dDQgaXMgdGhlIGZpbGVzeXN0ZW0sIG9mIGNvdXJzZS4gVGhlbiwgbGV0J3MgZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYEVYVDRfRlNgIGlzIHRoZSBvYnZpb3VzIG9uZSwgd2hpY2ggd2lsbCBicmluZyBpbiBtb3N0IG9mIHdoYXTigJlzIG5lZWRlZCwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGZvciBgRVhUNF9GU19YQVRUUmAgdG9vLCBqdXN0IGluIGNhc2UgdGhleSd2ZSBnb3Qgc29tZSBmaW5lci1ncmFpbmVkIGRlcGVuZGVuY2llcy4gTWF5YmUgYEVYVDRfRlNfUE9TSVhfQUNMYCBvciBgRVhUNF9GU19TRUNVUklUWWAgYXJlIGludm9sdmVkIHRvbywgdGhvdWdoIGxlc3MgbGlrZWx5LiBUaW1lIHRvIGNoZWNrIGBmcy9leHQ0L0tjb25maWdgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1OTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTozNi41MzU5OTA1MjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ0MzkwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTM0LVxcbmZzL2V4dDQvS2NvbmZpZzozNTpjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG5mcy9leHQ0L0tjb25maWctMzYtXFx0Ym9vbCBcXFwiVXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNjctXFxuZnMvZXh0NC9LY29uZmlnOjY4OmNvbmZpZyBFWFQ0X0RFQlVHXFxuZnMvZXh0NC9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkV4dDQgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNzYtXFxuZnMvZXh0NC9LY29uZmlnOjc3OmNvbmZpZyBFWFQ0X0tVTklUX1RFU1RTXFxuZnMvZXh0NC9LY29uZmlnLTc4LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgZXh0NFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTozNi42MDA0MzczOThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTU1MjU4OTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXh0NCBYYXR0ciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiBFeHQ0J3MgZXh0ZW5kZWQgYXR0cmlidXRlICh4YXR0cikgaGFuZGxpbmcuIEkgc2VlIGl0J3MgdG91Y2hpbmcgcXVpdGUgYSBmZXcga2V5IGZpbGVzOiBgZnMvZXh0NC94YXR0ci5jYCwgYGZzL2V4dDQvaW5vZGUuY2AsIGBmcy9leHQ0L3N1cGVyLmNgLCBhcyB3ZWxsIGFzIHRoZSByZWxhdGVkIGhlYWRlcnMsIGFuZCBldmVuIGBpbmNsdWRlL2xpbnV4L2ZzLmhgLiBUaGlzIHN1Z2dlc3RzIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZXMgYXJlIGhhcHBlbmluZywgcG90ZW50aWFsbHkgaW1wYWN0aW5nIGhvdyB4YXR0cnMgYXJlIHN0b3JlZCwgYWNjZXNzZWQsIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGUgZmlsZXN5c3RlbS5cblxuU3BlY2lmaWNhbGx5LCBJJ20gbm90aWNpbmcgYSBjbHVzdGVyIG9mIG5ld2x5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgZnVuY3Rpb25zOiBgZXh0NF9wdXRfZWFfaW5vZGVgLCBgZXh0NF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrYCwgYGlwdXRfaWZfbm90X2xhc3RgLCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCwgYW5kIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYC4gVGhlIG5hbWVzIGFsb25lIGdpdmUgbWUgYSBwcmV0dHkgZ29vZCBpZGVhIG9mIHdoYXQncyBnb2luZyBvbiwgYnV0IEknbGwgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgY29kZS4gSXQgbG9va3MgbGlrZSB0aGV5IGFyZSBoYW5kbGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZXMsIGxpa2VseSBhcm91bmQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgaW5vZGVzIGFuZCBhc3NvY2lhdGVkIGJsb2Nrcy4gSXQgbWlnaHQgYmUgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcgb3IgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhlIHhhdHRyIHNwYWNlLCBhbmQgcG90ZW50aWFsbHkgaG93IHRoZXkgYXJlIGNsZWFuZWQgdXAgb3IgcmVtb3ZlZC4gVGhlIGBpcHV0X2lmX25vdF9sYXN0YCBmdW5jdGlvbiBzZWVtcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgYSBmb2N1cyBvbiBpbm9kZSBoYW5kbGluZyBhbmQgcmVmZXJlbmNlIGNvdW50cy5cblxuQmVmb3JlIEkgZ28gdG9vIGZhciwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBiYXNpYzogaXMgeGF0dHIgZnVuY3Rpb25hbGl0eSBjb25kaXRpb25hbCBvbiB0aGUgYEVYVDRfRlNfWEFUVFJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBpcyBpdCBhbHdheXMgYnVpbHQgaW4gZm9yIEV4dDQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgZXhwYW5kaW5nIGV4aXN0aW5nIGZlYXR1cmVzLCBvciBjaGFuZ2luZyB0aGUgc3RhbmRhcmQgYmVoYXZpb3IgZm9yIG1vc3QgRXh0NCBpbnN0YWxsYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYwNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTo0MS41NTU2OTg0MjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5Mjk1OTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYVDRfRlNfWEFUVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAxOjA5OjQxLjYxNDYzNDg0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MDU4MjU3MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBFWFQ0IFhhdHRyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCB0aGVyZSdzIG5vIGV4cGxpY2l0bHkgZGVmaW5lZCBgRVhUNF9GU19YQVRUUmAgb3B0aW9uIGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0J3MgYSBiaXQgb2RkLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBzdXBwb3J0IGZvciBleHQ0IGlzIGVpdGhlciBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBmaWxlc3lzdGVtIGl0c2VsZiwgb3IgcGVyaGFwcyBpdCdzIGdhdGVkIGJlaGluZCB0aGUgZ2VuZXJhbCBgRVhUNF9GU2AgY29uZmlndXJhdGlvbiBvcHRpb24uIExldCdzIGRpZyBpbiBhIGJpdCBkZWVwZXIgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaGFzIHRvIHNheS4gVGhlIGBmcy9leHQ0L01ha2VmaWxlYCBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaG93IHRoZSB2YXJpb3VzIGZlYXR1cmVzIGFyZSBlbmFibGVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgc2VlIGlmIEkgY2FuIHVuZGVyc3RhbmQgaG93IHhhdHRyIHN1cHBvcnQgaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMzYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTo0NC40MjA0NjQ2MDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5OTQwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGF0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XFx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcXFxcbi0tXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cXHRcXHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTI6XFx0XFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTM6XFx0XFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cXG5mcy9leHQ0L01ha2VmaWxlLTE0LVxcbmZzL2V4dDQvTWFrZWZpbGU9MTU9ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTClcXHQrPSBhY2wub1xcbmZzL2V4dDQvTWFrZWZpbGU6MTY6ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVxcdFxcdCs9IHhhdHRyX3NlY3VyaXR5Lm9cXG5mcy9leHQ0L01ha2VmaWxlLTE3LWV4dDQtdGVzdC1vYmpzXFx0XFx0XFx0XFx0Kz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDE6MDk6NDQuNDgwNDYzNjM4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk1MDA2NTMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRVhUNCBFeHRlbmRlZCBBdHRyaWJ1dGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIHRoYXQgdGhlIGB4YXR0ci5vYCBvYmplY3QgZmlsZSBpcyAqYWx3YXlzKiBidWlsdCB3aGVuIHRoZSBgRVhUNF9GU2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IHRvIG1ha2Ugc3VyZSB3ZSdyZSB0aG9yb3VnaGx5IHRlc3RpbmcgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBjb2RlLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGVuYWJsZSBgRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgRVhUNF9GU19TRUNVUklUWWAuIFRoYXQgc2hvdWxkIHByb3ZpZGUgY29tcGxldGUgY292ZXJhZ2UuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHNvbWUga2V5IHN5bWJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5vZGUtcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQuIEknbSBmb2N1c2luZyBvbiBgZXh0NF9wdXRfZWFfaW5vZGVgLCBgZXh0NF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCwgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AsIGFuZCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAuXG5cbmBleHQ0X3B1dF9lYV9pbm9kZWAsIGFoLCB0aGF0J3MgZGVmaW5lZCBpbiBgZnMvZXh0NC94YXR0ci5jYCBhbmQgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFNvIG90aGVyIEVYVDQgY29tcG9uZW50cyBhcmUgdXNpbmcgaXQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gTm93IGBleHQ0X2VhX2lub2RlX3dvcmtgIGlzIHN0YXRpYyB0byB0aGUgZmlsZSBhbmQgdGhlcmVmb3JlIG5vdCBleHBvc2VkIHRvIG90aGVyIGV4dDQgZmlsZXMuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAgaXMgaW4gdGhhdCBzYW1lIGZpbGUsIGBmcy9leHQ0L3hhdHRyLmNgLlxuXG5JIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhvc2UgZnVuY3Rpb24gbmFtZXMsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZSB0aGUgY29ycmVjdCBzeW1ib2xzLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTczMywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTo0OS40MzA1MzEwMDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMjcyNzU4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyh2b2lkfGludCkgZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0yOTYzPXN0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjk5NS0gKi9cXG5mcy9leHQ0L3hhdHRyLmM6Mjk5Njp2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC94YXR0ci5jLTI5OTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTo0OS43NjMyNjUxMjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4MTg5MTUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRXh0ZW5kZWQgQXR0cmlidXRlIFJlbGVhc2UgYW5kIFJlZmVyZW5jZSBDb3VudGluZyBpbiBleHQ0KipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZCBhcyBJIGxvb2sgYXQgdGhpczogSSBuZWVkIHRvIHplcm8gaW4gb24gYSBmZXcgY3JpdGljYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGUgKHhhdHRyKSBoYW5kbGluZyBjb2RlLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSBzdXNwZWN0IHRoZXNlIGFyZSBrZXkgYXJlYXMgZm9yIHJldmlldyBhbmQgbGlrZWx5IHdoZXJlIHJlbGF0ZWQgaXNzdWVzIGNvdWxkIGJlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dDogYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBhbmQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLlxuXG5NeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBibG9jayByZWxlYXNlIGFuZCByZWZlcmVuY2UgY291bnRpbmcuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgYXJlIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgIGFuZCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAg4oCTIHBhcnRpY3VsYXJseSBob3cgdGhleSBtYW5hZ2UgdGhlIHJlbGVhc2Ugb2YgeGF0dHIgYmxvY2tzIGFuZCByZWR1Y2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgYXNzb2NpYXRlZCBpbm9kZSwgcmVzcGVjdGl2ZWx5LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYGZzL2V4dDQveGF0dHIuY2AgYW5kIGZpZ3VyZSBvdXQgdGhlaXIgZXhhY3QgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDU1LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAxOjA5OjU0LjI0NTE1OTczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTc2OTI4OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8odm9pZHxpbnQpIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3hhdHRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAxOjA5OjU0LjMxMDkzNjU1OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjgxNjI5OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYSBLZXJuZWwgSXNzdWU6IGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgKipcblxuT2theSwgc28gSSdtIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AuIEltbWVkaWF0ZWx5LCBteSBicmFpbiB6ZXJvZXMgaW4gb24gdGhhdCBmdW5jdGlvbiBuYW1lLiBJdCBzY3JlYW1zIFwiZXh0NCBmaWxlc3lzdGVtXCIgYW5kIFwiZXh0ZW5kZWQgYXR0cmlidXRlc1wiIOKAkyBzcGVjaWZpY2FsbHksIHRoZSByZWxlYXNlIG9mIGEgYmxvY2sgaW52b2x2ZWQgaW4gbWFuYWdpbmcgeGF0dHJzLiBUaGlzIGxpa2VseSBwb2ludHMgdG8gYW4gaXNzdWUgcmVsYXRlZCB0byBob3cgdGhlIGZpbGVzeXN0ZW0gaXMgaGFuZGxpbmcgdGhlIGZyZWVpbmcgdXAgb2YgZGlzayBzcGFjZSB0aWVkIHRvIHRob3NlIGV4dGVuZGVkIGF0dHJpYnV0ZSBlbnRyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUga2luZCBvZiB3cml0ZSBwYXRoIG9yIHBlcmhhcHMgYSBkZWxldGlvbiBzY2VuYXJpbywgcG9zc2libHkgaW52b2x2aW5nIGNvcnJ1cHRlZCBtZXRhZGF0YSBvciBhIHJhY2UgY29uZGl0aW9uLiBJJ20gaW1hZ2luaW5nIHBvdGVudGlhbGx5IGFuIGlzc3VlIHdoZXJlIHRoZSBibG9jayBpcyBiZWluZyBwcmVtYXR1cmVseSByZWxlYXNlZCwgb3IgcGVyaGFwcyBpcyBub3QgZ2V0dGluZyBmcmVlZCB1cCBjb3JyZWN0bHkgYXQgYWxsLiBOZWVkIHRvIGRpdmUgZGVlcGVyISBJ4oCZZCBzdGFydCBieSBsb29raW5nIGZvciBhbnkgcmVjZW50IHBhdGNoZXMsIGJ1Z3Mgb3IgcmVncmVzc2lvbnMgYXJvdW5kIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoZSBsYXN0IGZldyBrZXJuZWwgcmVsZWFzZXMuIExldOKAmXMgZ3JlcCB0aGUgY29kZWJhc2UgZm9yIHRoYXQgZXhhY3QgZnVuY3Rpb24gbmFtZSBhbmQgc2VlIHdoYXQgY29tZXMgdXAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiBjYWxsIOKAkyB3aGF0IGNhbGxzIGl0PyB3aGF0IGlzIGNhbGxlZCBieSBpdD8gV2hhdCBzdHJ1Y3R1cmVzIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aD8gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTo1OC41OTI1Njg4OTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MDg2MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3hhdHRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC94YXR0ci5jPTEyNjI9c3RhdGljIHZvaWRcXG5mcy9leHQ0L3hhdHRyLmM6MTI2MzpleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmMtMTI2NC1cXHRcXHRcXHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xODg4PWV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjE3My1cXHRpZiAoYnMtXFx1MDAzZWJoIFxcdTAwMjZcXHUwMDI2IGJzLVxcdTAwM2ViaCAhPSBuZXdfYmgpIHtcXG5mcy9leHQ0L3hhdHRyLmM6MjE3NDpcXHRcXHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtXFx1MDAzZWJoLFxcbmZzL2V4dDQveGF0dHIuYy0yMTc1LVxcdFxcdFxcdFxcdFxcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI4NjA9aW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjkzNi1cXG5mcy9leHQ0L3hhdHRyLmM6MjkzNzpcXHRcXHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsXFxuZnMvZXh0NC94YXR0ci5jLTI5MzgtXFx0XFx0XFx0XFx0XFx0IGV4dHJhX2NyZWRpdHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMTowOTo1OC42NTY2NTk3NDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzNDM3MzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIEV4dDQgWGF0dHIgRGVsZXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhpcyBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgIGZ1bmN0aW9uLiBHb29kIHRvIHNlZSB0aGF0IGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgIGFuZCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAgYXJlIGJvdGggc3RhdGljLCB3aGljaCBoZWxwcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGVpciB1c2Ugd2l0aGluIHRoZSB4YXR0ciBoYW5kbGluZy4gTm93LCB0aGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgd2hhdCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgICpkb2VzKiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZWxhdGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBmbG93IGZyb20gdGhlcmUuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzPyBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUyMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAxOjEwOjAxLjU5MTAzNTQ1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ2NzQ1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF94YXR0cl9kZWxldGVfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0yNzQ4PWludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI4NTEtLypcXG5mcy9leHQ0L3hhdHRyLmM6Mjg1MjogKiBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSgpXFxuZnMvZXh0NC94YXR0ci5jLTI4NTMtICpcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yODU5LSAqL1xcbmZzL2V4dDQveGF0dHIuYzoyODYwOmludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQveGF0dHIuYy0yODYxLVxcdFxcdFxcdCAgICBpbnQgZXh0cmFfY3JlZGl0cylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDE6MTA6MDEuNjU1NzE0NDgxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNjcxMTAyMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBFWFQ0IFhhdHRyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGl0J3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgd2UgaGFuZGxlIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgZm9yIEVBIGlub2RlcyB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gR2l2ZW4gdGhlIHNjb3BlLCB0aGlzIHNjcmVhbXMgXCJwb3RlbnRpYWwgZm9yIGZ1enppbmcgb3Bwb3J0dW5pdGllcy5cIiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBjb25jZW50cmF0ZWQgYXJvdW5kIHRoZSBoYW5kbGluZyBvZiBFQSBpbm9kZXMuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zLCBqdXN0IHRvIGJlIHN1cmUgd2UgYXJlIGNvdmVyaW5nIGFsbCBwb3RlbnRpYWwgYmFzZXM6IGBFWFQ0X0ZTYCwgYEVYVDRfRlNfUE9TSVhfQUNMYCwgYW5kIGBFWFQ0X0ZTX1NFQ1VSSVRZYCBhcmUgZGVmaW5pdGVseSByZWxldmFudCBoZXJlLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkLiBUaGUgaW5pdGlhbCBsaXN0IGluY2x1ZGVzIGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X2VhX2lub2RlX3dvcmtgLCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCwgYW5kIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgc28gSSB3aWxsIGdpdmUgdGhlbSB0aGUgcHJpb3JpdHkuXG5cbkhvd2V2ZXIsIEkgc2hvdWxkIGJlIHRob3JvdWdoIGFuZCBjaGVjayBmb3Igb3RoZXIgY2hhbmdlcy4gT2theSwgbGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBJIGZpbmQgYGV4dDRfYWxsb2NfaW5vZGVgIGluIGBmcy9leHQ0L3N1cGVyLmNgLCBgZXh0NF9ldmljdF9pbm9kZWAgaW4gYGZzL2V4dDQvaW5vZGUuY2AsIGBleHQ0X3B1dF9zdXBlcmAgaW4gYGZzL2V4dDQvc3VwZXIuY2AsIGBfX2V4dDRfZmlsbF9zdXBlcmAgaW4gYGZzL2V4dDQvc3VwZXIuY2AsIGBleHQ0X3N5bmNfZnNgIGluIGBmcy9leHQ0L3N1cGVyLmNgLCBgZXh0NF94YXR0cl9pbm9kZV9nZXRgIGluIGBmcy9leHQ0L3hhdHRyLmNgLCBgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbGAgaW4gYGZzL2V4dDQveGF0dHIuY2AsIGBleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZWAgaW4gYGZzL2V4dDQveGF0dHIuY2AsIGBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmRgIGluIGBmcy9leHQ0L3hhdHRyLmNgLCBgZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlYCBpbiBgZnMvZXh0NC94YXR0ci5jYCwgYGV4dDRfeGF0dHJfc2V0X2VudHJ5YCBpbiBgZnMvZXh0NC94YXR0ci5jYCwgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBpbiBgZnMvZXh0NC94YXR0ci5jYCwgYW5kIGBleHQ0X3hhdHRyX2lib2R5X3NldGAgaW4gYGZzL2V4dDQveGF0dHIuY2AuXG5cbk9rYXksIGFmdGVyIHJldmlld2luZyB0aGUgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zLCBJIGNhbiBzZWUgdGhhdCBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGFuZCBgZXh0NF94YXR0cl9pYm9keV9zZXRgIGFyZSBhbHNvIHF1aXRlIHJlbGV2YW50IGFuZCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGZ1enppbmcgZm9jdXMuIEknbGwgaW5jbHVkZSB0aG9zZSBpbiBteSBsaXN0IG9mIGBGb2N1c1N5bWJvbHNgLlxuXG5Ob3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCB0aGUgYWN0dWFsIGZ1enppbmcsIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYGlwdXRfaWZfbm90X2xhc3RgLiBUaGF0IHNlZW1zIGxpa2UgYW4gaW1wb3J0YW50IGZ1bmN0aW9uIHRvIGtlZXAgaW4gbWluZCwgaW4gcmVnYXJkcyB0byB0aGUgY29kZS1wYXRoIHRha2VuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMToxMDowOS43MjI4MjY2MzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjI0MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdXRfaWZfbm90X2xhc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9mcy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZnMuaD0yNDE1PXZvaWQgaXB1dF9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjQxNy0vKipcXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjQxODogKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lXFxuaW5jbHVkZS9saW51eC9mcy5oLTI0MTktICogQGlub2RlOiBpbm9kZSB0byBwdXRcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaC0yNDIzLSAqL1xcbmluY2x1ZGUvbGludXgvZnMuaDoyNDI0OnN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmluY2x1ZGUvbGludXgvZnMuaC0yNDI1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDE6MTA6MDkuNzk0NDU2MDk2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3ODIyMTk0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSBhbmQgSSdtIHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBGaXJzdCBvZmYsIHRoaXMgZnVuY3Rpb24gaXMgYHN0YXRpYyBpbmxpbmVgLCB3aGljaCBpcyBnb29kIHRvIGtub3cgYmVjYXVzZSBpdCBtZWFucyBpdCB3b24ndCBjbHV0dGVyIHRoZSBrZXJuZWwgc3ltYm9sIHRhYmxlLiBJIGNhbiBza2lwIGluY2x1ZGluZyBpdCBpbiBgRm9jdXNTeW1ib2xzYC4gVGhhdCdsbCBrZWVwIHRoaW5ncyBjbGVhbmVyLlxuXG5Ob3csIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBwcmVwYXJlIHRoZSBmaW5hbCBkZWNpc2lvbi5cblxuYFdvcnRoRnV6emluZ2Agc2hvdWxkIGRlZmluaXRlbHkgYmUgYHRydWVgLiBUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBjb21wZWxsaW5nIGhlcmU6IHRoaXMgcGF0Y2ggaXMgbWVzc2luZyB3aXRoICpjb3JlKiBleHQ0IHhhdHRyIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIGlub2RlcyBhcmUgbWFuYWdlZC4gSXQncyBtYWtpbmcgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBob3cgdGhvc2UgaW5vZGVzIGFyZSB0cmFja2VkIGFuZCBmcmVlZCwgYW5kIGl0J3MgZG9pbmcgc28gd2l0aCBhIG5ldyBkZWZlcnJlZCBgaXB1dGAgbWVjaGFuaXNtIGltcGxlbWVudGVkIHZpYSBhIHdvcmtxdWV1ZS4gVGhpcyBpcyBkZXNpZ25lZCB0byBzaWRlc3RlcCB0aG9zZSBuYXN0eSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gV2UncmUgdGFsa2luZyBhYm91dCBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZmlsZXN5c3RlbSB0aGF0J3MgdXNlZCAqZXZlcnl3aGVyZSouIFRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzIGlzIGhpZ2gsIGFuZCB0aGUgaW1wYWN0IGNvdWxkIGJlIHdpZGVzcHJlYWQuXG5cbkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGxvb2sgbGlrZSBgRVhUNF9GU2AsIGBFWFQ0X0ZTX1BPU0lYX0FDTGAsIGFuZCBgRVhUNF9GU19TRUNVUklUWWAuXG5cbkZpbmFsbHksIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IGlzIGxvb2tpbmcgc29saWQuIEkgc2hvdWxkIGtlZXAgYW4gZXllIG9uIHRoZXNlIGZ1bmN0aW9uczogYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIGFuZCBgZXh0NF94YXR0cl9pYm9keV9zZXRgLiBUaGV5J3JlIGFsbCBrZXkgdG8gdGhpcyBuZXcgRUEgaW5vZGUgbWFuYWdlbWVudCBhbmQgZGVmZXJyZWQgYGlwdXRgIHByb2Nlc3MuIEl0J3MgYSBjb21wbGV0ZSB2aWV3IG9mIGhvdyB0aGUgZnVuY3Rpb25hbGl0eSBpcyBjaGFuZ2VkIGFuZCBnaXZlcyBhIGdvb2QgcG9pbnQgdG8gYmVnaW4gdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MTUsIk91dHB1dFRva2VucyI6MTg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAxOjEwOjE1LjU3NjY3OTgyMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NDUwODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJFWFQ0X0ZTX1BPU0lYX0FDTFwiLFxuICAgIFwiRVhUNF9GU19TRUNVUklUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfcHV0X2VhX2lub2RlXCIsXG4gICAgXCJleHQ0X2VhX2lub2RlX3dvcmtcIixcbiAgICBcImV4dDRfeGF0dHJfZGVsZXRlX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxcIixcbiAgICBcImV4dDRfeGF0dHJfYmxvY2tfc2V0XCIsXG4gICAgXCJleHQ0X3hhdHRyX2lib2R5X3NldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgZXh0NCB4YXR0ciBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBFQSBpbm9kZXMgYXJlIHRyYWNrZWQgYW5kIGZyZWVkLCBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIHZpYSBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgd2lkZWx5IHVzZWQgZmlsZXN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJFWFQ0X0ZTX1BPU0lYX0FDTFwiLFxuICAgIFwiRVhUNF9GU19TRUNVUklUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfcHV0X2VhX2lub2RlXCIsXG4gICAgXCJleHQ0X2VhX2lub2RlX3dvcmtcIixcbiAgICBcImV4dDRfeGF0dHJfZGVsZXRlX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxcIixcbiAgICBcImV4dDRfeGF0dHJfYmxvY2tfc2V0XCIsXG4gICAgXCJleHQ0X3hhdHRyX2lib2R5X3NldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgZXh0NCB4YXR0ciBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBFQSBpbm9kZXMgYXJlIHRyYWNrZWQgYW5kIGZyZWVkLCBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIHZpYSBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgd2lkZWx5IHVzZWQgZmlsZXN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgqm8[1] Phase: Succeeded StartedAt: 2026-07-11 01:10:27 +0000 UTC FinishedAt: 2026-07-11 01:10:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 01:10:27 +0000 UTC FinishedAt: 2026-07-11 01:10:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2] Phase: Succeeded StartedAt: 2026-07-11 01:10:27 +0000 UTC FinishedAt: 2026-07-11 05:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN) Phase: Failed StartedAt: 2026-07-11 01:10:27 +0000 UTC FinishedAt: 2026-07-11 05:51:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-11 01:10:27 +0000 UTC FinishedAt: 2026-07-11 01:10:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-11 01:10:27 +0000 UTC FinishedAt: 2026-07-11 01:10:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowrgqm8/series-workflowrgqm8-convert-artifact-856643259/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-11 01:10:37 +0000 UTC FinishedAt: 2026-07-11 01:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-11 01:10:37 +0000 UTC FinishedAt: 2026-07-11 01:53:30 +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:*bca61773-4ccf-40f5-b070-ec3fb02bb21c,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-workflowrgqm8/series-workflowrgqm8-convert-artifact-856643259/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": "ed68a8d8-0207-4226-9171-9fe68b6b627f", "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-workflowrgqm8/series-workflowrgqm8-build-action-48522489/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-11 01:10:37 +0000 UTC FinishedAt: 2026-07-11 01:53:20 +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:*bca61773-4ccf-40f5-b070-ec3fb02bb21c,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-workflowrgqm8/series-workflowrgqm8-convert-artifact-856643259/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": "ed68a8d8-0207-4226-9171-9fe68b6b627f", "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-workflowrgqm8/series-workflowrgqm8-build-action-48522489/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-11 01:53:30 +0000 UTC FinishedAt: 2026-07-11 01:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-11 01:53:30 +0000 UTC FinishedAt: 2026-07-11 01:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-11 01:53:30 +0000 UTC FinishedAt: 2026-07-11 01:53:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-11 01:53:30 +0000 UTC FinishedAt: 2026-07-11 01:53:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowrgqm8/series-workflowrgqm8-convert-artifact-36914194/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-11 01:53:40 +0000 UTC FinishedAt: 2026-07-11 01:55:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-11 01:53:40 +0000 UTC FinishedAt: 2026-07-11 01:55:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ed68a8d8-0207-4226-9171-9fe68b6b627f,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-workflowrgqm8/series-workflowrgqm8-build-action-48522489/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-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-11 01:55:56 +0000 UTC FinishedAt: 2026-07-11 01:55:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-11 01:55:56 +0000 UTC FinishedAt: 2026-07-11 01:55:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-11 01:55:56 +0000 UTC FinishedAt: 2026-07-11 02:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-11 01:55:56 +0000 UTC FinishedAt: 2026-07-11 02:45:14 +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:*bca61773-4ccf-40f5-b070-ec3fb02bb21c,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-workflowrgqm8/series-workflowrgqm8-convert-artifact-36914194/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": "ae0cb3b1-3e48-42c6-b0f0-073358492382", "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-workflowrgqm8/series-workflowrgqm8-build-action-2508964006/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-11 01:55:56 +0000 UTC FinishedAt: 2026-07-11 02:45:04 +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:*bca61773-4ccf-40f5-b070-ec3fb02bb21c,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-workflowrgqm8/series-workflowrgqm8-convert-artifact-36914194/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": "ae0cb3b1-3e48-42c6-b0f0-073358492382", "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-workflowrgqm8/series-workflowrgqm8-build-action-2508964006/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-11 02:45:14 +0000 UTC FinishedAt: 2026-07-11 02:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-11 02:45:14 +0000 UTC FinishedAt: 2026-07-11 02:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-11 02:45:14 +0000 UTC FinishedAt: 2026-07-11 02:47:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-11 02:45:14 +0000 UTC FinishedAt: 2026-07-11 02:47:18 +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:*ae0cb3b1-3e48-42c6-b0f0-073358492382,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-workflowrgqm8/series-workflowrgqm8-build-action-2508964006/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-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10] Phase: Failed StartedAt: 2026-07-11 02:47:29 +0000 UTC FinishedAt: 2026-07-11 05:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-11 02:47:29 +0000 UTC FinishedAt: 2026-07-11 05:51:47 +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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"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:*ed68a8d8-0207-4226-9171-9fe68b6b627f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ae0cb3b1-3e48-42c6-b0f0-073358492382,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-workflowrgqm8/series-workflowrgqm8-build-action-48522489/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-workflowrgqm8/series-workflowrgqm8-build-action-2508964006/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-11 02:47:29 +0000 UTC FinishedAt: 2026-07-11 02:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-11 02:47:29 +0000 UTC FinishedAt: 2026-07-11 02:48:07 +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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"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-workflowrgqm8/series-workflowrgqm8-convert-artifact-2600280423/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-retest Phase: Failed StartedAt: 2026-07-11 02:47:29 +0000 UTC FinishedAt: 2026-07-11 02:50:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:retest-data,Default:nil,Value:*{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*{{=steps['base-build'].outputs.parameters.result ? jsonpath(steps['base-build'].outputs.parameters.result, '$.build_id') : ''}},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ae0cb3b1-3e48-42c6-b0f0-073358492382,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,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-workflowrgqm8/series-workflowrgqm8-build-action-48522489/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-workflowrgqm8/series-workflowrgqm8-build-action-2508964006/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-retest[0] Phase: Succeeded StartedAt: 2026-07-11 02:47:29 +0000 UTC FinishedAt: 2026-07-11 02:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-retest[0].save-retest-task Phase: Succeeded StartedAt: 2026-07-11 02:47:29 +0000 UTC FinishedAt: 2026-07-11 02:48:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},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-workflowrgqm8/series-workflowrgqm8-convert-artifact-88076624/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-11 02:47:29 +0000 UTC FinishedAt: 2026-07-11 02:47:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-11 02:47:29 +0000 UTC FinishedAt: 2026-07-11 02:47:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-11 02:49:12 +0000 UTC FinishedAt: 2026-07-11 05:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-11 02:49:12 +0000 UTC FinishedAt: 2026-07-11 05:51:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ed68a8d8-0207-4226-9171-9fe68b6b627f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ae0cb3b1-3e48-42c6-b0f0-073358492382,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-workflowrgqm8/series-workflowrgqm8-build-action-48522489/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-workflowrgqm8/series-workflowrgqm8-build-action-2508964006/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-workflowrgqm8/series-workflowrgqm8-convert-artifact-2600280423/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,} --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-retest[1] Phase: Failed StartedAt: 2026-07-11 02:49:12 +0000 UTC FinishedAt: 2026-07-11 02:50:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgqm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"2e06603c-8787-4415-8d45-101104a45a9b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["e7cd69b7-8bb9-4554-bd84-b5ebcd7a8089","9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-retest[1].retest Phase: Failed StartedAt: 2026-07-11 02:49:12 +0000 UTC FinishedAt: 2026-07-11 02:50:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*{{=steps['base-build'].outputs.parameters.result ? jsonpath(steps['base-build'].outputs.parameters.result, '$.build_id') : ''}},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ae0cb3b1-3e48-42c6-b0f0-073358492382,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Previous reproducers,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-workflowrgqm8/series-workflowrgqm8-build-action-48522489/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-workflowrgqm8/series-workflowrgqm8-build-action-2508964006/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:retest-task,Path:/data/retest.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-workflowrgqm8/series-workflowrgqm8-convert-artifact-88076624/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:*1,}