Name: series-workflow8zfxb Phase: Succeeded StartedAt: 2026-07-24 16:05:36 +0000 UTC FinishedAt: 2026-07-24 20:40:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[0] Phase: Succeeded StartedAt: 2026-07-24 16:05:36 +0000 UTC FinishedAt: 2026-07-24 16:32:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 16:05:36 +0000 UTC FinishedAt: 2026-07-24 16:32:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "091addcd-618d-4e95-a34a-4a32a4d6a0a2" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "vfs_inode_is_owned_by_me", "vfs_inode_and_dir_have_same_owner", "vfs_inodes_have_same_owner", "afs_is_owned_by_me", "afs_have_same_owner", "chown_ok", "chgrp_ok", "may_create_in_sticky", "__check_sticky", "may_dedupe_file" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE2OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDt2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXImIzM0OywKICAgICYjMzQ7dmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXImIzM0OywKICAgICYjMzQ7YWZzX2lzX293bmVkX2J5X21lJiMzNDssCiAgICAmIzM0O2Fmc19oYXZlX3NhbWVfb3duZXImIzM0OywKICAgICYjMzQ7Y2hvd25fb2smIzM0OywKICAgICYjMzQ7Y2hncnBfb2smIzM0OywKICAgICYjMzQ7bWF5X2NyZWF0ZV9pbl9zdGlja3kmIzM0OywKICAgICYjMzQ7X19jaGVja19zdGlja3kmIzM0OywKICAgICYjMzQ7bWF5X2RlZHVwZV9maWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIG5ldyBpbm9kZSBvcGVyYXRpb25zIGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IFZGUyBvd25lcnNoaXAgY2hlY2tzLiBJdCBpbXBsZW1lbnRzIHRoZXNlIG9wZXJhdGlvbnMgaW4gdGhlIEFGUyBmaWxlc3lzdGVtIGFuZCBtb2RpZmllcyBjb3JlIFZGUyBmdW5jdGlvbnMgKGxpa2UgYGNob3duX29rYCwgYGNoZ3JwX29rYCwgYG1heV9jcmVhdGVfaW5fc3RpY2t5YCwgYG1heV9kZWR1cGVfZmlsZWAsIGV0Yy4pIHRvIHVzZSB0aGVtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMgYW5kIEFGUyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTY6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMzQwNTQzYzJiZGMzNDEwMGUyMDM1YWU2NDRmMzU5OGVmZWQ1NTFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTY6MzE6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG5pbmRleCA3Yzc1MzE0OGFmODg4My4uODkzNDE5ZTAwM2VhZjcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuQEAgLTQ0NSw2ICYjNDM7NDQ1LDkgQEAgQXMgb2Yga2VybmVsIDIuNi4yMiwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOlxuIFx0XHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdFx0aW50ICgqZmlsZWF0dHJfZ2V0KShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHQgICAgICAgIHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7XHRcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1x0XHRpbnQgKCpoYXZlX3NhbWVfb3duZXIpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIFx0fTtcbiBcbiBBZ2FpbiwgYWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3NcbkBAIC02MzQsNiAmIzQzOzYzNywyNCBAQCBvdGhlcndpc2Ugbm90ZWQuXG4gICAgICAgICBmaWxlc3lzdGVtIG11c3QgZGVmaW5lIHRoaXMgb3BlcmF0aW9uIHRvIHVzZVxuICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy5cbiBcbiYjNDM7YGBpc19vd25lZF9ieV9tZWBgXG4mIzQzO1x0Y2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgZmlsZSBjYW4gYmUgY29uc2lkZXJlZCB0byBiZSAmIzM5O293bmVkJiMzOTsgYnlcbiYjNDM7XHR0aGUgb3duZXIgb2YgdGhlIHByb2Nlc3Mgb3IgaWYgdGhlIHByb2Nlc3MgaGFzIGEgdG9rZW4gdGhhdCBncmFudHNcbiYjNDM7XHRpdCBvd25lcnNoaXAgcHJpdmlsZWdlcy4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBjb21wYXJlIGlfdWlkXG4mIzQzO1x0dG8gY3VycmVudF9mc3VpZCgpIC0gYnV0IHRoaXMgbWF5IGdpdmUgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHNvbWVcbiYjNDM7XHRuZXR3b3JrIG9yIHBsdWctaW4gYmxvY2sgZmlsZXN5c3RlbXMuICBGb3IgZXhhbXBsZSwgQUZTIGRldGVybWluZXNcbiYjNDM7XHRvd25lcnNoaXAgZW50aXJlbHkgYWNjb3JkaW5nIHRvIGFuIG9idGFpbmVkIHRva2VuIGFuZCBpX3VpZCBtYXkgbm90XG4mIzQzO1x0ZXZlbiBiZSBmcm9tIHRoZSBzYW1lIElEIHNwYWNlIGFzIGN1cnJlbnRfdWlkKCkuXG4mIzQzO1xuJiM0MztgYGhhdmVfc2FtZV9vd25lcmBgXG4mIzQzO1x0Y2FsbGVkIHRvIGRldGVybWluZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIGltbWVkaWF0ZVxuJiM0MztcdHBhcmVudCBvbiB0aGUgcGF0aCB3YWxrZWQuICBJZiB1bnNldCwgdGhlIGRlZmF1bHQgaXMgdG8gc2ltcGx5XG4mIzQzO1x0Y29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEc1xuJiM0MztcdG9mIGJvdGggLSBidXQgdGhlc2UgYXJlIGEgNjQtYml0IHZhbHVlcyBvbiBzb21lIHZhcmlhbnRzIHRoYXQgbWlnaHRcbiYjNDM7XHRub3QgZml0IGludG8gYSBrdWlkX3QgYW5kIGNpZnMgaGFzIEdVSURzIHRoYXQgY2Fubm90IGJlIGNvbXBhcmVkIHRvXG4mIzQzO1x0a3VpZF90LlxuJiM0MztcbiYjNDM7XG4gVGhlIEFkZHJlc3MgU3BhY2UgT2JqZWN0XG4gPT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jXG5pbmRleCA2ZGY1NmZlOTE2M2ZkNy4uZWUyZjVlYzBiMmM2N2QgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9kaXIuY1xuQEAgLTY5LDYgJiM0Mzs2OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5wZXJtaXNzaW9uXHQ9IGFmc19wZXJtaXNzaW9uLFxuIFx0LmdldGF0dHJcdD0gYWZzX2dldGF0dHIsXG4gXHQuc2V0YXR0clx0PSBhZnNfc2V0YXR0cixcbiYjNDM7XHQuaXNfb3duZWRfYnlfbWVcdD0gYWZzX2lzX293bmVkX2J5X21lLFxuJiM0MztcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZGlyX2FvcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZpbGUuYyBiL2ZzL2Fmcy9maWxlLmNcbmluZGV4IDA0Njc3NDJiZmVlZTM0Li5iYTQ0NDkzY2NhZjZlZSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9maWxlLmNcbkBAIC00OSw2ICYjNDM7NDksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LmdldGF0dHJcdD0gYWZzX2dldGF0dHIsXG4gXHQuc2V0YXR0clx0PSBhZnNfc2V0YXR0cixcbiBcdC5wZXJtaXNzaW9uXHQ9IGFmc19wZXJtaXNzaW9uLFxuJiM0MztcdC5pc19vd25lZF9ieV9tZVx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXG4mIzQzO1x0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXG4gfTtcbiBcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19maWxlX2FvcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuY1xuaW5kZXggMTRmMzlhOWJlYTZjZmUuLmFmODVhODhkOTQzZGQxIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbm9kZS5jXG5AQCAtOTEsNiAmIzQzOzkxLDcgQEAgc3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsXG4gXHRpbm9kZS1cdTAwM2VpX2ZsYWdzIHw9IFNfTk9BVElNRTtcbiBcdGlub2RlLVx1MDAzZWlfdWlkID0gbWFrZV9rdWlkKFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVx1MDAzZW93bmVyKTtcbiBcdGlub2RlLVx1MDAzZWlfZ2lkID0gbWFrZV9rZ2lkKFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVx1MDAzZWdyb3VwKTtcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX29wZmxhZ3MgfD0gSU9QX09XTkVSU0hJUF9PVkVSUklERTtcbiBcdHNldF9ubGluayhcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSwgc3RhdHVzLVx1MDAzZW5saW5rKTtcbiBcbiBcdGlfc2l6ZV93cml0ZShpbm9kZSwgc3RhdHVzLVx1MDAzZXNpemUpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDYwMWYwMWU1YzE1ZmNjLi5lMTBjZjc2MzZmNjViNiAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvaW50ZXJuYWwuaFxuQEAgLTE1MzAsNiAmIzQzOzE1MzAsOSBAQCBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5KHN0cnVjdCBhZnNfY2VsbCAqKTtcbiBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5X3JjdShzdHJ1Y3QgYWZzX2NlbGwgKik7XG4gZXh0ZXJuIGludCBhZnNfY2hlY2tfcGVybWl0KHN0cnVjdCBhZnNfdm5vZGUgKiwgc3RydWN0IGtleSAqLCBhZnNfYWNjZXNzX3QgKik7XG4gZXh0ZXJuIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xuJiM0MztpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7aW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuJiM0MztcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlMik7XG4gZXh0ZXJuIHZvaWQgX19leGl0IGFmc19jbGVhbl91cF9wZXJtaXRfY2FjaGUodm9pZCk7XG4gXG4gLypcbmRpZmYgLS1naXQgYS9mcy9hZnMvc2VjdXJpdHkuYyBiL2ZzL2Fmcy9zZWN1cml0eS5jXG5pbmRleCA2ZDAwZDYyYTY1ZWRmNi4uNzA5MmY1YWNkY2Q2YWMgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc2VjdXJpdHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL3NlY3VyaXR5LmNcbkBAIC01MTAsNiAmIzQzOzUxMCw1MiBAQCBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5ICYjMzk7bWUmIzM5OyAtIHdoYXRldmVyIHRoYXQgbWVhbnMgZm9yIHRoZVxuJiM0MzsgKiBmaWxlc3lzdGVtLiAgSW4gdGhlIGNhc2Ugb2YgQUZTLCB0aGlzIG1lYW5zIHRoYXQgdGhlIGZpbGUgaXMgb3duZWQgYnkgdGhlXG4mIzQzOyAqIEFGUyB1c2VyIHJlcHJlc2VudGVkIGJ5IHRoZSBSeCBTZWN1cml0eSBDbGFzcyB0b2tlbiBoZWxkIGluIGEga2V5LiAgUmV0dXJuc1xuJiM0MzsgKiAwIGlmIG93bmVkIGJ5IG1lLCAxIGlmIG5vdDsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLlxuJiM0MzsgKi9cbiYjNDM7aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpO1xuJiM0MztcdGFmc19hY2Nlc3NfdCBhY2Nlc3M7XG4mIzQzO1x0c3RydWN0IGtleSAqa2V5O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4mIzQzO1x0XHRyZXR1cm4gMTsgLyogVGhlIEFETUlOIHJpZ2h0IGNoZWNrIGRvZXNuJiMzOTt0IHdvcmsgZm9yIGRpcmVjdG9yaWVzLiAqL1xuJiM0MztcbiYjNDM7XHRrZXkgPSBhZnNfcmVxdWVzdF9rZXkodm5vZGUtXHUwMDNldm9sdW1lLVx1MDAzZWNlbGwpO1xuJiM0MztcdGlmIChJU19FUlIoa2V5KSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGtleSk7XG4mIzQzO1xuJiM0MztcdC8qIEdldCB0aGUgYWNjZXNzIHJpZ2h0cyBmb3IgdGhlIGtleSBvbiB0aGlzIGZpbGUuICovXG4mIzQzO1x0cmV0ID0gYWZzX2NoZWNrX3Blcm1pdCh2bm9kZSwga2V5LCBcdTAwMjZhY2Nlc3MpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuJiM0MztcbiYjNDM7XHQvKiBXZSBnZXQgdGhlIEFETUlOSVNURVIgYml0IGlmIHdlIG93biB0aGUgZmlsZS4gKi9cbiYjNDM7XHRyZXQgPSAoYWNjZXNzIFx1MDAyNiBBRlNfQUNFX0FETUlOSVNURVIpID8gMCA6IDE7XG4mIzQzO2Vycm9yOlxuJiM0MztcdGtleV9wdXQoa2V5KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZXRlcm1pbmUgaWYgYSBmaWxlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IC0gd2hhdGV2ZXIgdGhhdCBtZWFuc1xuJiM0MzsgKiBmb3IgdGhlIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgY29tcGFyaW5nIHRoZWlyIEFGU1xuJiM0MzsgKiBVSURzLiAgUmV0dXJucyAwIGlmIHNhbWUsIDEgaWYgbm90IHNhbWU7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci5cbiYjNDM7ICovXG4mIzQzO2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbiYjNDM7XHRcdFx0c3RydWN0IGlub2RlICppbm9kZTIpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTEgPSBBRlNfRlNfSShpbm9kZTEpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlMiA9IEFGU19GU19JKGlub2RlMik7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2bm9kZTEtXHUwMDNlc3RhdHVzLm93bmVyICE9IHZub2RlMi1cdTAwM2VzdGF0dXMub3duZXI7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBfX2V4aXQgYWZzX2NsZWFuX3VwX3Blcm1pdF9jYWNoZSh2b2lkKVxuIHtcbiBcdGludCBpO1xuZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuY1xuaW5kZXggNGY0MzdmYWJiN2YwZjUuLmI3ZThiNWQ0OWE5ZmU2IDEwMDY0NFxuLS0tIGEvZnMvYXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hdHRyLmNcbkBAIC0xNiw2ICYjNDM7MTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG4gLyoqXG4gICogc2V0YXR0cl9zaG91bGRfZHJvcF9zZ2lkIC0gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNldGdpZCBiaXQgbmVlZHMgdG8gYmVcbkBAIC05MSwxOSAmIzQzOzkyLDIxIEBAIEVYUE9SVF9TWU1CT0woc2V0YXR0cl9zaG91bGRfZHJvcF9zdWlkZ2lkKTtcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXG4gICogcGVyZm9ybWVkIG9uIHRoZSByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuXG4gICovXG4tc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tXHRcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxuJiM0MztzdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc3VpZF90IGlhX3Zmc3VpZClcbiB7XG4gXHR2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICB2ZnN1aWRfZXEoaWFfdmZzdWlkLCB2ZnN1aWQpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHRpZiAoY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdGlmICghdmZzdWlkX3ZhbGlkKHZmc3VpZCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfdXNlcl9ucywgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gLUVQRVJNO1xuIH1cbiBcbiAvKipcbkBAIC0xMTgsMjMgJiM0MzsxMjEsMjcgQEAgc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gICogcGVybWlzc2lvbnMuIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZVxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqL1xuLXN0YXRpYyBib29sIGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHQgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc2dpZF90IGlhX3Zmc2dpZClcbiYjNDM7c3RhdGljIGludCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnNnaWRfdCBpYV92ZnNnaWQpXG4ge1xuIFx0dmZzZ2lkX3QgdmZzZ2lkID0gaV9naWRfaW50b192ZnNnaWQoaWRtYXAsIGlub2RlKTtcbi1cdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKSB7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJldCA9PSAwKSB7XG4gXHRcdGlmICh2ZnNnaWRfZXEoaWFfdmZzZ2lkLCB2ZnNnaWQpKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcdFx0aWYgKHZmc2dpZF9pbl9ncm91cF9wKGlhX3Zmc2dpZCkpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXG4tXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHRpZiAoIXZmc2dpZF92YWxpZCh2ZnNnaWQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG5zX2NhcGFibGUoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX3VzZXJfbnMsIENBUF9DSE9XTikpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIC1FUEVSTTtcbiB9XG4gXG4gLyoqXG5AQCAtMTYzLDYgJiM0MzsxNzAsNyBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcbiBcdHVuc2lnbmVkIGludCBpYV92YWxpZCA9IGF0dHItXHUwMDNlaWFfdmFsaWQ7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdC8qXG4gXHQgKiBGaXJzdCBjaGVjayBzaXplIGNvbnN0cmFpbnRzLiAgVGhlc2UgY2FuJiMzOTt0IGJlIG92ZXJyaWRkZW4gdXNpbmdcbkBAIC0xODksMTQgJiM0MzsxOTcsMTggQEAgaW50IHNldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHRnb3RvIGtpbGxfcHJpdjtcbiBcbiBcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2hvd24uICovXG4tXHRpZiAoKGlhX3ZhbGlkIFx1MDAyNiBBVFRSX1VJRCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIWNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cdTAwM2VpYV92ZnN1aWQpKVxuLVx0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9VSUQpIHtcbiYjNDM7XHRcdHJldCA9IGNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cdTAwM2VpYV92ZnN1aWQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4gXG4gXHQvKiBNYWtlIHN1cmUgY2FsbGVyIGNhbiBjaGdycC4gKi9cbi1cdGlmICgoaWFfdmFsaWQgXHUwMDI2IEFUVFJfR0lEKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc2dpZCkpXG4tXHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0aWYgKGlhX3ZhbGlkIFx1MDAyNiBBVFRSX0dJRCkge1xuJiM0MztcdFx0cmV0ID0gY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc2dpZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovXG4gXHRpZiAoaWFfdmFsaWQgXHUwMDI2IEFUVFJfTU9ERSkge1xuZGlmZiAtLWdpdCBhL2ZzL2NvcmVkdW1wLmMgYi9mcy9jb3JlZHVtcC5jXG5pbmRleCBlNjhhNzZmZjkyYTM4Ni4uM2YzMmU3M2FhZWRhMjggMTAwNjQ0XG4tLS0gYS9mcy9jb3JlZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jb3JlZHVtcC5jXG5AQCAtOTU0LDcgJiM0Mzs5NTQsNyBAQCBzdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuIFx0ICogZmlsZXN5c3RlbS5cbiBcdCAqL1xuIFx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcbi1cdGlmICghdmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkge1xuJiM0MztcdGlmICh2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKSAhPSAwKSB7XG4gXHRcdGNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKFwmIzM0O0NvcmUgZHVtcCB0byAlcyBhYm9ydGVkOiBjYW5ub3QgcHJlc2VydmUgZmlsZSBvd25lclwmIzM0OywgY24tXHUwMDNlY29yZW5hbWUpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmNcbmluZGV4IDMxYzViOWVlM2E4MWRmLi5hN2VjODMwYWI2ODNmMCAxMDA2NDRcbi0tLSBhL2ZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lub2RlLmNcbkBAIC0yNzUwLDE2ICYjNDM7Mjc1MCwxOSBAQCBFWFBPUlRfU1lNQk9MKGlub2RlX2luaXRfb3duZXIpO1xuICAqIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqL1xuLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7Ym9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHZmc3VpZF90IHZmc3VpZDtcbiBcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7XG4mIzQzO1x0aW50IHJldDtcbiBcbi1cdHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKVxuJiM0MztcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmIChyZXQgPT0gMClcbiBcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHR2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuIFx0bnMgPSBjdXJyZW50X3VzZXJfbnMoKTtcbiBcdGlmICh2ZnN1aWRfaGFzX21hcHBpbmcobnMsIHZmc3VpZCkgXHUwMDI2XHUwMDI2IG5zX2NhcGFibGUobnMsIENBUF9GT1dORVIpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaFxuaW5kZXggMzU1ZDkzZjkyMjA4NjEuLmJlNDVjYzYzODg2MTkyIDEwMDY0NFxuLS0tIGEvZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW50ZXJuYWwuaFxuQEAgLTUxLDYgJiM0Mzs1MSw3IEBAIGV4dGVybiBpbnQgZmluaXNoX2NsZWFuX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbiAvKlxuICAqIG5hbWVpLmNcbiAgKi9cbiYjNDM7aW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4gZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcbiBcdFx0XHQgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QpO1xuIGludCBmaWxlbmFtZV9ybWRpcihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpO1xuZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jXG5pbmRleCA2ZTRmZjdmY2VjMDUzZS4uMDJmODEwZGM5ZTdlN2EgMTAwNjQ0XG4tLS0gYS9mcy9sb2Nrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9sb2Nrcy5jXG5AQCAtNjgsNiAmIzQzOzY4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvZmlsZWxvY2suaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG4gc3RhdGljIHN0cnVjdCBmaWxlX2xvY2sgKmZpbGVfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYylcbiB7XG5AQCAtMjEzNiwxMCAmIzQzOzIxMzcsMTIgQEAgaW50XG4gdmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbi1cdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG4gXHRpbnQgZXJyb3I7XG4gXG4tXHRpZiAoKCF2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxuJiM0MztcdGVycm9yID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG4mIzQzO1x0aWYgKGVycm9yIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcdGlmIChlcnJvciAhPSAwIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdGVycm9yID0gc2VjdXJpdHlfZmlsZV9sb2NrKGZpbHAsIGFyZyk7XG4gXHRpZiAoZXJyb3IpXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDE5Y2U0M2M5YTZlNjYyLi43MmY5NGQyMDRmOTNmNCAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmNcbkBAIC01NSw4ICYjNDM7NTUsOCBAQFxuICAqIFRoZSBuZXcgY29kZSByZXBsYWNlcyB0aGUgb2xkIHJlY3Vyc2l2ZSBzeW1saW5rIHJlc29sdXRpb24gd2l0aFxuICAqIGFuIGl0ZXJhdGl2ZSBvbmUgKGluIGNhc2Ugb2Ygbm9uLW5lc3RlZCBzeW1saW5rIGNoYWlucykuICBJdCBkb2VzXG4gICogdGhpcyB3aXRoIGNhbGxzIHRvIFx1MDAzY2ZzXHUwMDNlX2ZvbGxvd19saW5rKCkuXG4tICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3cgXG4tICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbCBcbiYjNDM7ICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3dcbiYjNDM7ICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbFxuICAqIHRoZSBzcGVjaWFsIGNhc2VzIG9mIHRoZSBmb3JtZXIgY29kZS5cbiAgKlxuICAqIFdpdGggdGhlIG5ldyBkY2FjaGUsIHRoZSBwYXRobmFtZSBpcyBzdG9yZWQgYXQgZWFjaCBpbm9kZSwgYXQgbGVhc3QgYXNcbkBAIC0xMjU1LDYgJiM0MzsxMjU1LDcyIEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XG4gXG4gI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi9cbiBcbiYjNDM7LypcbiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5IHRoZSBwcm9jZXNzIChhbGxvd2luZyBmb3IgZnN1aWQgb3ZlcnJpZGUpLFxuJiM0MzsgKiByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtXG4mIzQzOyAqIG1ha2luZyB0aGUgZGV0ZXJtaW5hdGlvbi5cbiYjNDM7ICovXG4mIzQzO2ludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAodW5saWtlbHkoaW5vZGUtXHUwMDNlaV9vcGZsYWdzIFx1MDAyNiBJT1BfT1dORVJTSElQX09WRVJSSURFKSlcbiYjNDM7XHRcdHJldHVybiBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWlzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4mIzQzO1x0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGN1cnJlbnRfZnN1aWQoKSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gMTsgLyogTm90IHNhbWUuICovXG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERldGVybWluZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIHBhcmVudCBkaXJlY3RvcnksIHJldHVybmluZ1xuJiM0MzsgKiAwIGlmIHNvLCAxIGlmIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gbWFraW5nXG4mIzQzOyAqIHRoZSBkZXRlcm1pbmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGlub2RlLVx1MDAzZWlfb3BmbGFncyBcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpIHtcbiYjNDM7XHRcdHN0cnVjdCBkZW50cnkgKnBhcmVudDtcbiYjNDM7XHRcdHN0cnVjdCBpbm9kZSAqZGlyO1xuJiM0MztcdFx0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5vZGUgIT0gbmQtXHUwMDNlaW5vZGUpIHtcbiYjNDM7XHRcdFx0ZGlyID0gbmQtXHUwMDNlaW5vZGU7XG4mIzQzO1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpIHtcbiYjNDM7XHRcdFx0cGFyZW50ID0gUkVBRF9PTkNFKG5kLVx1MDAzZXBhdGguZGVudHJ5KTtcbiYjNDM7XHRcdFx0ZGlyID0gUkVBRF9PTkNFKHBhcmVudC1cdTAwM2VkX2lub2RlKTtcbiYjNDM7XHRcdFx0aWYgKCFkaXIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FQ0hJTEQ7XG4mIzQzO1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHBhcmVudCA9IGRnZXRfcGFyZW50KG5kLVx1MDAzZXBhdGguZGVudHJ5KTtcbiYjNDM7XHRcdFx0ZGlyID0gcGFyZW50LVx1MDAzZWRfaW5vZGU7XG4mIzQzO1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbiYjNDM7XHRcdFx0ZHB1dChwYXJlbnQpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh2ZnN1aWRfdmFsaWQobmQtXHUwMDNlZGlyX3Zmc3VpZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHZmc3VpZF9lcShpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBuZC1cdTAwM2VkaXJfdmZzdWlkKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRGV0ZXJtaW5lIGlmIHR3byBpbm9kZXMgaGF2ZSB0aGUgc2FtZSBvd25lciwgcmV0dXJuaW5nIDAgaWYgc28sIDEgaWYgbm90IGFuZFxuJiM0MzsgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGlub2RlLVx1MDAzZWlfb3BmbGFncyBcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpXG4mIzQzO1x0XHRyZXR1cm4gaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuJiM0MztcdGlmICh2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSxcbiYjNDM7XHRcdCAgICAgIGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBtYXlfZm9sbG93X2xpbmsgLSBDaGVjayBzeW1saW5rIGZvbGxvd2luZyBmb3IgdW5zYWZlIHNpdHVhdGlvbnNcbiAgKiBAbmQ6IG5hbWVpZGF0YSBwYXRod2FsayBkYXRhXG5AQCAtMTI3MSwyNyAmIzQzOzEzMzcsMjggQEAgZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTtcbiAgKlxuICAqIFJldHVybnMgMCBpZiBmb2xsb3dpbmcgdGhlIHN5bWxpbmsgaXMgYWxsb3dlZCwgLXZlIG9uIGVycm9yLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xuLVx0dmZzdWlkX3QgdmZzdWlkO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRpZiAoIXN5c2N0bF9wcm90ZWN0ZWRfc3ltbGlua3MpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWRtYXAgPSBtbnRfaWRtYXAobmQtXHUwMDNlcGF0aC5tbnQpO1xuLVx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cdC8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqL1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4gXHQvKiBBbGxvd2VkIGlmIHBhcmVudCBkaXJlY3Rvcnkgbm90IHN0aWNreSBhbmQgd29ybGQtd3JpdGFibGUuICovXG4gXHRpZiAoKG5kLVx1MDAzZWRpcl9tb2RlIFx1MDAyNiAoU19JU1ZUWHxTX0lXT1RIKSkgIT0gKFNfSVNWVFh8U19JV09USCkpXG4gXHRcdHJldHVybiAwO1xuIFxuJiM0MztcdGlkbWFwID0gbW50X2lkbWFwKG5kLVx1MDAzZXBhdGgubW50KTtcbiYjNDM7XHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuIFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IGFuZCBsaW5rIG93bmVyIG1hdGNoLiAqL1xuLVx0aWYgKHZmc3VpZF92YWxpZChuZC1cdTAwM2VkaXJfdmZzdWlkKSBcdTAwMjZcdTAwMjYgdmZzdWlkX2VxKG5kLVx1MDAzZWRpcl92ZnN1aWQsIHZmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpXG4gXHRcdHJldHVybiAtRUNISUxEO1xuQEAgLTEzODksMTIgJiM0MzsxNDU2LDEyIEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXG4gICpcbiAgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjpcbi0gKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkXG4tICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzXG4tICogICAtIHdlIGFyZSBpbiBhIHN0aWNreSBkaXJlY3Rvcnlcbi0gKiAgIC0gd2UgZG9uJiMzOTt0IG93biB0aGUgZmlsZVxuJiM0MzsgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkLFxuJiM0MzsgKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsXG4mIzQzOyAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5LFxuJiM0MzsgKiAgIC0gdGhlIGRpcmVjdG9yeSBpcyB3b3JsZCB3cml0YWJsZSxcbiYjNDM7ICogICAtIHdlIGRvbiYjMzk7dCBvd24gdGhlIGZpbGUgYW5kXG4gICogICAtIHRoZSBvd25lciBvZiB0aGUgZGlyZWN0b3J5IGRvZXNuJiMzOTt0IG93biB0aGUgZmlsZVxuLSAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlXG4gICogSWYgdGhlIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgc2V0IHRvIDJcbiAgKiB0aGUgZGlyZWN0b3J5IGRvZXNuJiMzOTt0IGhhdmUgdG8gYmUgd29ybGQgd3JpdGFibGU6IGJlaW5nIGdyb3VwIHdyaXRhYmxlIHdpbGxcbiAgKiBiZSBlbm91Z2guXG5AQCAtMTQwNSwxMyAmIzQzOzE0NzIsNDUgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuICAqIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqXG4mIzQzOyAqIEZvciBhIGZpbGVzeXN0ZW0gKGUuZy4gYSBuZXR3b3JrIGZpbGVzeXN0ZW0pIHRoYXQgaGFzIGEgc2VwYXJhdGUgSUQgc3BhY2VcbiYjNDM7ICogYW5kIGhhcyBmb3JlaWduIElEcyAobWF5YmUgZXZlbiBub24taW50ZWdlciBJRHMpLCBpX3VpZCBjYW5ub3QgYmUgY29tcGFyZWRcbiYjNDM7ICogdG8gY3VycmVudF9mc3VpZCgpIGFuZCBtYXkgbm90IGJlIGRpcmVjdGx5IGNvbXBhcmFibGUgdG8gYW5vdGhlciBpX3VpZC5cbiYjNDM7ICogSW5zdGVhZCwgdGhlIGZpbGVzeXN0ZW0gaXMgYXNrZWQgdG8gcGVyZm9ybSB0aGUgY29tcGFyaXNvbnMuICBXaXRoIG5ldHdvcmtcbiYjNDM7ICogZmlsZXN5c3RlbXMsIHRoZXJlIGFsc28gZXhpc3RzIHRoZSBwb3NzaWJpbGl0eSBvZiBkb2luZyBhbm9ueW1vdXNcbiYjNDM7ICogb3BlcmF0aW9ucyBhbmQgaGF2aW5nIGFub255bW91c2x5LW93bmVkIG9iamVjdHMuXG4mIzQzOyAqXG4mIzQzOyAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6XG4mIzQzOyAqXG4mIzQzOyAqXHRVU0VSXHRESVJcdEZJTEVcdEZJTEVcdEFMTE9XRURcbiYjNDM7ICpcdFx0T1dORVJcdE9XTkVSXHRTVEFURVxuJiM0MzsgKlx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVxuJiM0MzsgKlx0QVx0QVx0LVx0TmV3XHRZZXNcbiYjNDM7ICpcdEFcdEFcdEFcdEV4aXN0c1x0WWVzXG4mIzQzOyAqXHRBXHRBXHRDXHRFeGlzdHNcdE5vXG4mIzQzOyAqXHRBXHRCXHQtXHROZXdcdFllc1xuJiM0MzsgKlx0QVx0Qlx0QVx0RXhpc3RzXHRZZXMsIEZPPT1VXG4mIzQzOyAqXHRBXHRCXHRCXHRFeGlzdHNcdFllcywgRk89PURPXG4mIzQzOyAqXHRBXHRCXHRDXHRFeGlzdHNcdE5vXG4mIzQzOyAqXHRBXHRhbm9uWzFdXHQtXHROZXdcdFllc1xuJiM0MzsgKlx0QVx0YW5vblsxXVx0QVx0RXhpc3RzXHRZZXNcbiYjNDM7ICpcdEFcdGFub25bMV1cdENcdEV4aXN0c1x0Tm9cbiYjNDM7ICpcdGFub25cdEFcdC1cdE5ld1x0WWVzXG4mIzQzOyAqXHRhbm9uXHRBXHRBXHRFeGlzdHNcdFllcywgRk89PURPXG4mIzQzOyAqXHRhbm9uXHRhbm9uWzFdXHQtXHROZXdcdFllc1xuJiM0MzsgKlx0YW5vblx0YW5vblsxXVx0LVx0RXhpc3RzXHROb1xuJiM0MzsgKlx0YW5vblx0QVx0QVx0RXhpc3RzXHRZZXMsIEZPPT1ET1xuJiM0MzsgKlx0YW5vblx0QVx0Q1x0RXhpc3RzXHROb1xuJiM0MzsgKlx0YW5vblx0QVx0YW5vblx0RXhpc3RzXHROb1xuJiM0MzsgKlxuJiM0MzsgKiBbMV0gQ2FuIGFub255bW91c2x5LW93bmVkIGRpcnMgYmUgc3RpY2t5P1xuJiM0MzsgKlxuICAqIFJldHVybnMgMCBpZiB0aGUgb3BlbiBpcyBhbGxvd2VkLCAtdmUgb24gZXJyb3IuXG4gICovXG4gc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4tXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmNvbnN0IGlub2RlKVxuJiM0MztcdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0dW1vZGVfdCBkaXJfbW9kZSA9IG5kLVx1MDAzZWRpcl9tb2RlO1xuLVx0dmZzdWlkX3QgZGlyX3Zmc3VpZCA9IG5kLVx1MDAzZWRpcl92ZnN1aWQsIGlfdmZzdWlkO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRpZiAobGlrZWx5KCEoZGlyX21vZGUgXHUwMDI2IFNfSVNWVFgpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTQyMiwxMyAmIzQzOzE1MjEsMTMgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAoU19JU0ZJRk8oaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aV92ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVxuLVx0aWYgKHZmc3VpZF9lcShpX3Zmc3VpZCwgZGlyX3Zmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV92ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGlmIChsaWtlbHkoZGlyX21vZGUgXHUwMDI2IDAwMDIpKSB7XG4gXHRcdGF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULCBcJiMzNDtzdGlja3lfY3JlYXRlXCYjMzQ7KTtcbkBAIC0zNjQ1LDEyICYjNDM7Mzc0NCwxNCBAQCBFWFBPUlRfU1lNQk9MKHVzZXJfcGF0aF9hdCk7XG4gaW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4tXHRrdWlkX3QgZnN1aWQgPSBjdXJyZW50X2ZzdWlkKCk7XG4mIzQzO1x0aW50IHJldDtcbiBcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpLCBmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0cmV0dXJuICFjYXBhYmxlX3dydF9pbm9kZV91aWRnaWQoaWRtYXAsIGlub2RlLCBDQVBfRk9XTkVSKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChfX2NoZWNrX3N0aWNreSk7XG5kaWZmIC0tZ2l0IGEvZnMvcmVtYXBfcmFuZ2UuYyBiL2ZzL3JlbWFwX3JhbmdlLmNcbmluZGV4IDI2YWZiYmJmYjEwYzJlLi45ZWVlOTNjMjcwMDEyNSAxMDA2NDRcbi0tLSBhL2ZzL3JlbWFwX3JhbmdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3JlbWFwX3JhbmdlLmNcbkBAIC00MTMsMjAgJiM0Mzs0MTMsMjIgQEAgbG9mZl90IHZmc19jbG9uZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxuIEVYUE9SVF9TWU1CT0wodmZzX2Nsb25lX2ZpbGVfcmFuZ2UpO1xuIFxuIC8qIENoZWNrIHdoZXRoZXIgd2UgYXJlIGFsbG93ZWQgdG8gZGVkdXBlIHRoZSBkZXN0aW5hdGlvbiBmaWxlICovXG4tc3RhdGljIGJvb2wgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0MztzdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHRpZiAoIWlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBNQVlfV1JJVEUpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAtRVBFUk07XG4gfVxuIFxuIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG5AQCAtNDU5LDggJiM0Mzs0NjEsOCBAQCBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IC1FUEVSTTtcbi1cdGlmICghbWF5X2RlZHVwZV9maWxlKGRzdF9maWxlKSlcbiYjNDM7XHRyZXQgPSBtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X2Ryb3Bfd3JpdGU7XG4gXG4gXHRyZXQgPSAtRVhERVY7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCA1MGNlNzMxYTJiNzhmMS4uODAxM2MxM2EzNTNkNjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTYyOCw2ICYjNDM7NjI4LDcgQEAgaXNfdW5jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKmFjbClcbiAjZGVmaW5lIElPUF9DQUNIRURfTElOS1x0XHQweDAwNDBcbiAjZGVmaW5lIElPUF9GQVNUUEVSTV9NQVlfRVhFQ1x0MHgwMDgwXG4gI2RlZmluZSBJT1BfRkxDVFhcdFx0MHgwMTAwXG4mIzQzOyNkZWZpbmUgSU9QX09XTkVSU0hJUF9PVkVSUklERVx0MHgwMjAwXHQvKiBVc2UgLVx1MDAzZWlzX293bmVkX2J5X21lKCkgYW5kIC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoKSAqL1xuIFxuIC8qXG4gICogSW5vZGUgc3RhdGUgYml0cy4gIFByb3RlY3RlZCBieSBpbm9kZS1cdTAwM2VpX2xvY2tcbkBAIC0xNzU1LDggJiM0MzsxNzU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfd3JpdGVfbm90X3N0YXJ0ZWQoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gc2Jfd3JpdGVfbm90X3N0YXJ0ZWQoZmlsZV9pbm9kZShmaWxlKS1cdTAwM2VpX3NiKTtcbiB9XG4gXG4tYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7Ym9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKlxuICAqIFZGUyBoZWxwZXIgZnVuY3Rpb25zLi5cbkBAIC0yMDM2LDYgJiM0MzsyMDM2LDkgQEAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMge1xuIFx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHRpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7XHRpbnQgKCppc19vd25lZF9ieV9tZSkoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuJiM0MztcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICppbm9kZTIpO1xuIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkO1xuIFxuIC8qIERpZCB0aGUgZHJpdmVyIHByb3ZpZGUgdmFsaWQgbW1hcCBob29rIGNvbmZpZ3VyYXRpb24/ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTY6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDt2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXImIzM0OywKICAgICYjMzQ7dmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXImIzM0OywKICAgICYjMzQ7YWZzX2lzX293bmVkX2J5X21lJiMzNDssCiAgICAmIzM0O2Fmc19oYXZlX3NhbWVfb3duZXImIzM0OywKICAgICYjMzQ7Y2hvd25fb2smIzM0OywKICAgICYjMzQ7Y2hncnBfb2smIzM0OywKICAgICYjMzQ7bWF5X2NyZWF0ZV9pbl9zdGlja3kmIzM0OywKICAgICYjMzQ7X19jaGVja19zdGlja3kmIzM0OywKICAgICYjMzQ7bWF5X2RlZHVwZV9maWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIG5ldyBpbm9kZSBvcGVyYXRpb25zIGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IFZGUyBvd25lcnNoaXAgY2hlY2tzLiBJdCBpbXBsZW1lbnRzIHRoZXNlIG9wZXJhdGlvbnMgaW4gdGhlIEFGUyBmaWxlc3lzdGVtIGFuZCBtb2RpZmllcyBjb3JlIFZGUyBmdW5jdGlvbnMgKGxpa2UgYGNob3duX29rYCwgYGNoZ3JwX29rYCwgYG1heV9jcmVhdGVfaW5fc3RpY2t5YCwgYG1heV9kZWR1cGVfZmlsZWAsIGV0Yy4pIHRvIHVzZSB0aGVtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMgYW5kIEFGUyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQzNDA1NDNjMmJkYzM0MTAwZTIwMzVhZTY0NGYzNTk4ZWZlZDU1MWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAyNCAxNjozMTowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdAppbmRleCA3Yzc1MzE0OGFmODg4My4uODkzNDE5ZTAwM2VhZjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QKQEAgLTQ0NSw2ICYjNDM7NDQ1LDkgQEAgQXMgb2Yga2VybmVsIDIuNi4yMiwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOgogCQkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7CiAJCWludCAoKmZpbGVhdHRyX2dldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpOwogCSAgICAgICAgc3RydWN0IG9mZnNldF9jdHggKigqZ2V0X29mZnNldF9jdHgpKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwomIzQzOwkJaW50ICgqaXNfb3duZWRfYnlfbWUpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MzsJCWludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogCX07CiAKIEFnYWluLCBhbGwgbWV0aG9kcyBhcmUgY2FsbGVkIHdpdGhvdXQgYW55IGxvY2tzIGJlaW5nIGhlbGQsIHVubGVzcwpAQCAtNjM0LDYgJiM0Mzs2MzcsMjQgQEAgb3RoZXJ3aXNlIG5vdGVkLgogICAgICAgICBmaWxlc3lzdGVtIG11c3QgZGVmaW5lIHRoaXMgb3BlcmF0aW9uIHRvIHVzZQogICAgICAgICBzaW1wbGVfb2Zmc2V0X2Rpcl9vcGVyYXRpb25zLgogCiYjNDM7YGBpc19vd25lZF9ieV9tZWBgCiYjNDM7CWNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGZpbGUgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgJiMzOTtvd25lZCYjMzk7IGJ5CiYjNDM7CXRoZSBvd25lciBvZiB0aGUgcHJvY2VzcyBvciBpZiB0aGUgcHJvY2VzcyBoYXMgYSB0b2tlbiB0aGF0IGdyYW50cwomIzQzOwlpdCBvd25lcnNoaXAgcHJpdmlsZWdlcy4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBjb21wYXJlIGlfdWlkCiYjNDM7CXRvIGN1cnJlbnRfZnN1aWQoKSAtIGJ1dCB0aGlzIG1heSBnaXZlIGluY29ycmVjdCByZXN1bHRzIGZvciBzb21lCiYjNDM7CW5ldHdvcmsgb3IgcGx1Zy1pbiBibG9jayBmaWxlc3lzdGVtcy4gIEZvciBleGFtcGxlLCBBRlMgZGV0ZXJtaW5lcwomIzQzOwlvd25lcnNoaXAgZW50aXJlbHkgYWNjb3JkaW5nIHRvIGFuIG9idGFpbmVkIHRva2VuIGFuZCBpX3VpZCBtYXkgbm90CiYjNDM7CWV2ZW4gYmUgZnJvbSB0aGUgc2FtZSBJRCBzcGFjZSBhcyBjdXJyZW50X3VpZCgpLgomIzQzOwomIzQzO2BgaGF2ZV9zYW1lX293bmVyYGAKJiM0MzsJY2FsbGVkIHRvIGRldGVybWluZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIGltbWVkaWF0ZQomIzQzOwlwYXJlbnQgb24gdGhlIHBhdGggd2Fsa2VkLiAgSWYgdW5zZXQsIHRoZSBkZWZhdWx0IGlzIHRvIHNpbXBseQomIzQzOwljb21wYXJlIHRoZSBpX3VpZCBvZiBib3RoLiAgRm9yIGV4YW1wbGUsIEFGUyBjb21wYXJlcyB0aGUgb3duZXIgSURzCiYjNDM7CW9mIGJvdGggLSBidXQgdGhlc2UgYXJlIGEgNjQtYml0IHZhbHVlcyBvbiBzb21lIHZhcmlhbnRzIHRoYXQgbWlnaHQKJiM0MzsJbm90IGZpdCBpbnRvIGEga3VpZF90IGFuZCBjaWZzIGhhcyBHVUlEcyB0aGF0IGNhbm5vdCBiZSBjb21wYXJlZCB0bwomIzQzOwlrdWlkX3QuCiYjNDM7CiYjNDM7CiBUaGUgQWRkcmVzcyBTcGFjZSBPYmplY3QKID09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyLmMgYi9mcy9hZnMvZGlyLmMKaW5kZXggNmRmNTZmZTkxNjNmZDcuLmVlMmY1ZWMwYjJjNjdkIDEwMDY0NAotLS0gYS9mcy9hZnMvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Rpci5jCkBAIC02OSw2ICYjNDM7NjksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLnBlcm1pc3Npb24JPSBhZnNfcGVybWlzc2lvbiwKIAkuZ2V0YXR0cgk9IGFmc19nZXRhdHRyLAogCS5zZXRhdHRyCT0gYWZzX3NldGF0dHIsCiYjNDM7CS5pc19vd25lZF9ieV9tZQk9IGFmc19pc19vd25lZF9ieV9tZSwKJiM0MzsJLmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsCiB9OwogCiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19kaXJfYW9wcyA9IHsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9maWxlLmMgYi9mcy9hZnMvZmlsZS5jCmluZGV4IDA0Njc3NDJiZmVlZTM0Li5iYTQ0NDkzY2NhZjZlZSAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZmlsZS5jCkBAIC00OSw2ICYjNDM7NDksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewogCS5nZXRhdHRyCT0gYWZzX2dldGF0dHIsCiAJLnNldGF0dHIJPSBhZnNfc2V0YXR0ciwKIAkucGVybWlzc2lvbgk9IGFmc19wZXJtaXNzaW9uLAomIzQzOwkuaXNfb3duZWRfYnlfbWUJPSBhZnNfaXNfb3duZWRfYnlfbWUsCiYjNDM7CS5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLAogfTsKIAogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZmlsZV9hb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuYwppbmRleCAxNGYzOWE5YmVhNmNmZS4uYWY4NWE4OGQ5NDNkZDEgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbm9kZS5jCkBAIC05MSw2ICYjNDM7OTEsNyBAQCBzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwKIAlpbm9kZS0mZ3Q7aV9mbGFncyB8PSBTX05PQVRJTUU7CiAJaW5vZGUtJmd0O2lfdWlkID0gbWFrZV9rdWlkKCZhbXA7aW5pdF91c2VyX25zLCBzdGF0dXMtJmd0O293bmVyKTsKIAlpbm9kZS0mZ3Q7aV9naWQgPSBtYWtlX2tnaWQoJmFtcDtpbml0X3VzZXJfbnMsIHN0YXR1cy0mZ3Q7Z3JvdXApOwomIzQzOwlpbm9kZS0mZ3Q7aV9vcGZsYWdzIHw9IElPUF9PV05FUlNISVBfT1ZFUlJJREU7CiAJc2V0X25saW5rKCZhbXA7dm5vZGUtJmd0O25ldGZzLmlub2RlLCBzdGF0dXMtJmd0O25saW5rKTsKIAogCWlfc2l6ZV93cml0ZShpbm9kZSwgc3RhdHVzLSZndDtzaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmgKaW5kZXggNjAxZjAxZTVjMTVmY2MuLmUxMGNmNzYzNmY2NWI2IDEwMDY0NAotLS0gYS9mcy9hZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvaW50ZXJuYWwuaApAQCAtMTUzMCw2ICYjNDM7MTUzMCw5IEBAIGV4dGVybiBzdHJ1Y3Qga2V5ICphZnNfcmVxdWVzdF9rZXkoc3RydWN0IGFmc19jZWxsICopOwogZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleV9yY3Uoc3RydWN0IGFmc19jZWxsICopOwogZXh0ZXJuIGludCBhZnNfY2hlY2tfcGVybWl0KHN0cnVjdCBhZnNfdm5vZGUgKiwgc3RydWN0IGtleSAqLCBhZnNfYWNjZXNzX3QgKik7CiBleHRlcm4gaW50IGFmc19wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIGludCk7CiYjNDM7aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7aW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLAomIzQzOwkJCXN0cnVjdCBpbm9kZSAqaW5vZGUyKTsKIGV4dGVybiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpOwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvYWZzL3NlY3VyaXR5LmMgYi9mcy9hZnMvc2VjdXJpdHkuYwppbmRleCA2ZDAwZDYyYTY1ZWRmNi4uNzA5MmY1YWNkY2Q2YWMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9zZWN1cml0eS5jCkBAIC01MTAsNiAmIzQzOzUxMCw1MiBAQCBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5ICYjMzk7bWUmIzM5OyAtIHdoYXRldmVyIHRoYXQgbWVhbnMgZm9yIHRoZQomIzQzOyAqIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgdGhhdCB0aGUgZmlsZSBpcyBvd25lZCBieSB0aGUKJiM0MzsgKiBBRlMgdXNlciByZXByZXNlbnRlZCBieSB0aGUgUnggU2VjdXJpdHkgQ2xhc3MgdG9rZW4gaGVsZCBpbiBhIGtleS4gIFJldHVybnMKJiM0MzsgKiAwIGlmIG93bmVkIGJ5IG1lLCAxIGlmIG5vdDsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLgomIzQzOyAqLwomIzQzO2ludCBhZnNfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGlub2RlKTsKJiM0MzsJYWZzX2FjY2Vzc190IGFjY2VzczsKJiM0MzsJc3RydWN0IGtleSAqa2V5OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkKJiM0MzsJCXJldHVybiAxOyAvKiBUaGUgQURNSU4gcmlnaHQgY2hlY2sgZG9lc24mIzM5O3Qgd29yayBmb3IgZGlyZWN0b3JpZXMuICovCiYjNDM7CiYjNDM7CWtleSA9IGFmc19yZXF1ZXN0X2tleSh2bm9kZS0mZ3Q7dm9sdW1lLSZndDtjZWxsKTsKJiM0MzsJaWYgKElTX0VSUihrZXkpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoa2V5KTsKJiM0MzsKJiM0MzsJLyogR2V0IHRoZSBhY2Nlc3MgcmlnaHRzIGZvciB0aGUga2V5IG9uIHRoaXMgZmlsZS4gKi8KJiM0MzsJcmV0ID0gYWZzX2NoZWNrX3Blcm1pdCh2bm9kZSwga2V5LCAmYW1wO2FjY2Vzcyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsKJiM0MzsJLyogV2UgZ2V0IHRoZSBBRE1JTklTVEVSIGJpdCBpZiB3ZSBvd24gdGhlIGZpbGUuICovCiYjNDM7CXJldCA9IChhY2Nlc3MgJmFtcDsgQUZTX0FDRV9BRE1JTklTVEVSKSA/IDAgOiAxOwomIzQzO2Vycm9yOgomIzQzOwlrZXlfcHV0KGtleSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGEgZmlsZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIHBhcmVudCAtIHdoYXRldmVyIHRoYXQgbWVhbnMKJiM0MzsgKiBmb3IgdGhlIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgY29tcGFyaW5nIHRoZWlyIEFGUwomIzQzOyAqIFVJRHMuICBSZXR1cm5zIDAgaWYgc2FtZSwgMSBpZiBub3Qgc2FtZTsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLgomIzQzOyAqLwomIzQzO2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSwKJiM0MzsJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlMikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlMSA9IEFGU19GU19JKGlub2RlMSk7CiYjNDM7CWNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlMiA9IEFGU19GU19JKGlub2RlMik7CiYjNDM7CiYjNDM7CXJldHVybiB2bm9kZTEtJmd0O3N0YXR1cy5vd25lciAhPSB2bm9kZTItJmd0O3N0YXR1cy5vd25lcjsKJiM0Mzt9CiYjNDM7CiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9mcy9hdHRyLmMgYi9mcy9hdHRyLmMKaW5kZXggNGY0MzdmYWJiN2YwZjUuLmI3ZThiNWQ0OWE5ZmU2IDEwMDY0NAotLS0gYS9mcy9hdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYXR0ci5jCkBAIC0xNiw2ICYjNDM7MTYsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZjbnRsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZmlsZWxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zZWN1cml0eS5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiAKIC8qKgogICogc2V0YXR0cl9zaG91bGRfZHJvcF9zZ2lkIC0gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNldGdpZCBiaXQgbmVlZHMgdG8gYmUKQEAgLTkxLDE5ICYjNDM7OTIsMjEgQEAgRVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpOwogICogcGVybWlzc2lvbnMuIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZQogICogcGVyZm9ybWVkIG9uIHRoZSByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuCiAgKi8KLXN0YXRpYyBib29sIGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAotCQkgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc3VpZF90IGlhX3Zmc3VpZCkKJiM0MztzdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc3VpZF90IGlhX3Zmc3VpZCkKIHsKIAl2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpOwotCWlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkgJmFtcDsmYW1wOwotCSAgICB2ZnN1aWRfZXEoaWFfdmZzdWlkLCB2ZnN1aWQpKQotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiAJaWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpCi0JCXJldHVybiB0cnVlOwomIzQzOwkJcmV0dXJuIDA7CiAJaWYgKCF2ZnN1aWRfdmFsaWQodmZzdWlkKSAmYW1wOyZhbXA7CiAJICAgIG5zX2NhcGFibGUoaW5vZGUtJmd0O2lfc2ItJmd0O3NfdXNlcl9ucywgQ0FQX0NIT1dOKSkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZhbHNlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAtRVBFUk07CiB9CiAKIC8qKgpAQCAtMTE4LDIzICYjNDM7MTIxLDI3IEBAIHN0YXRpYyBib29sIGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogICogcGVybWlzc2lvbnMuIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZQogICogcGVyZm9ybWVkIG9uIHRoZSByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuCiAgKi8KLXN0YXRpYyBib29sIGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAotCQkgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc2dpZF90IGlhX3Zmc2dpZCkKJiM0MztzdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc2dpZF90IGlhX3Zmc2dpZCkKIHsKIAl2ZnNnaWRfdCB2ZnNnaWQgPSBpX2dpZF9pbnRvX3Zmc2dpZChpZG1hcCwgaW5vZGUpOwotCXZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7Ci0JaWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSkgewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmV0ID09IDApIHsKIAkJaWYgKHZmc2dpZF9lcShpYV92ZnNnaWQsIHZmc2dpZCkpCi0JCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCQlyZXR1cm4gMDsKIAkJaWYgKHZmc2dpZF9pbl9ncm91cF9wKGlhX3Zmc2dpZCkpCi0JCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpCi0JCXJldHVybiB0cnVlOwomIzQzOwkJcmV0dXJuIDA7CiAJaWYgKCF2ZnNnaWRfdmFsaWQodmZzZ2lkKSAmYW1wOyZhbXA7CiAJICAgIG5zX2NhcGFibGUoaW5vZGUtJmd0O2lfc2ItJmd0O3NfdXNlcl9ucywgQ0FQX0NIT1dOKSkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZhbHNlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAtRVBFUk07CiB9CiAKIC8qKgpAQCAtMTYzLDYgJiM0MzsxNzAsNyBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTsKIAl1bnNpZ25lZCBpbnQgaWFfdmFsaWQgPSBhdHRyLSZndDtpYV92YWxpZDsKJiM0MzsJaW50IHJldDsKIAogCS8qCiAJICogRmlyc3QgY2hlY2sgc2l6ZSBjb25zdHJhaW50cy4gIFRoZXNlIGNhbiYjMzk7dCBiZSBvdmVycmlkZGVuIHVzaW5nCkBAIC0xODksMTQgJiM0MzsxOTcsMTggQEAgaW50IHNldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQlnb3RvIGtpbGxfcHJpdjsKIAogCS8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2hvd24uICovCi0JaWYgKChpYV92YWxpZCAmYW1wOyBBVFRSX1VJRCkgJmFtcDsmYW1wOwotCSAgICAhY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLSZndDtpYV92ZnN1aWQpKQotCQlyZXR1cm4gLUVQRVJNOwomIzQzOwlpZiAoaWFfdmFsaWQgJmFtcDsgQVRUUl9VSUQpIHsKJiM0MzsJCXJldCA9IGNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci0mZ3Q7aWFfdmZzdWlkKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KIAogCS8qIE1ha2Ugc3VyZSBjYWxsZXIgY2FuIGNoZ3JwLiAqLwotCWlmICgoaWFfdmFsaWQgJmFtcDsgQVRUUl9HSUQpICZhbXA7JmFtcDsKLQkgICAgIWNoZ3JwX29rKGlkbWFwLCBpbm9kZSwgYXR0ci0mZ3Q7aWFfdmZzZ2lkKSkKLQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJaWYgKGlhX3ZhbGlkICZhbXA7IEFUVFJfR0lEKSB7CiYjNDM7CQlyZXQgPSBjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItJmd0O2lhX3Zmc2dpZCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKIAkvKiBNYWtlIHN1cmUgYSBjYWxsZXIgY2FuIGNobW9kLiAqLwogCWlmIChpYV92YWxpZCAmYW1wOyBBVFRSX01PREUpIHsKZGlmZiAtLWdpdCBhL2ZzL2NvcmVkdW1wLmMgYi9mcy9jb3JlZHVtcC5jCmluZGV4IGU2OGE3NmZmOTJhMzg2Li4zZjMyZTczYWFlZGEyOCAxMDA2NDQKLS0tIGEvZnMvY29yZWR1bXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb3JlZHVtcC5jCkBAIC05NTQsNyAmIzQzOzk1NCw3IEBAIHN0YXRpYyBib29sIGNvcmVkdW1wX2ZpbGUoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sCiAJICogZmlsZXN5c3RlbS4KIAkgKi8KIAlpZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpOwotCWlmICghdmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkgewomIzQzOwlpZiAodmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSkgIT0gMCkgewogCQljb3JlZHVtcF9yZXBvcnRfZmFpbHVyZSgmIzM0O0NvcmUgZHVtcCB0byAlcyBhYm9ydGVkOiBjYW5ub3QgcHJlc2VydmUgZmlsZSBvd25lciYjMzQ7LCBjbi0mZ3Q7Y29yZW5hbWUpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmMKaW5kZXggMzFjNWI5ZWUzYTgxZGYuLmE3ZWM4MzBhYjY4M2YwIDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lub2RlLmMKQEAgLTI3NTAsMTYgJiM0MzsyNzUwLDE5IEBAIEVYUE9SVF9TWU1CT0woaW5vZGVfaW5pdF9vd25lcik7CiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZQogICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLgogICovCi1ib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCi0JCQkgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mztib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJdmZzdWlkX3QgdmZzdWlkOwogCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7CiYjNDM7CWludCByZXQ7CiAKLQl2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpOwotCWlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpCiYjNDM7CXJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpOwomIzQzOwlpZiAocmV0ID09IDApCiAJCXJldHVybiB0cnVlOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBmYWxzZTsKIAomIzQzOwl2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpOwogCW5zID0gY3VycmVudF91c2VyX25zKCk7CiAJaWYgKHZmc3VpZF9oYXNfbWFwcGluZyhucywgdmZzdWlkKSAmYW1wOyZhbXA7IG5zX2NhcGFibGUobnMsIENBUF9GT1dORVIpKQogCQlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oCmluZGV4IDM1NWQ5M2Y5MjIwODYxLi5iZTQ1Y2M2Mzg4NjE5MiAxMDA2NDQKLS0tIGEvZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9pbnRlcm5hbC5oCkBAIC01MSw2ICYjNDM7NTEsNyBAQCBleHRlcm4gaW50IGZpbmlzaF9jbGVhbl9jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYyk7CiAvKgogICogbmFtZWkuYwogICovCiYjNDM7aW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gaW50IGZpbGVuYW1lX2xvb2t1cChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIHVuc2lnbmVkIGZsYWdzLAogCQkJICAgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KTsKIGludCBmaWxlbmFtZV9ybWRpcihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmMKaW5kZXggNmU0ZmY3ZmNlYzA1M2UuLjAyZjgxMGRjOWU3ZTdhIDEwMDY0NAotLS0gYS9mcy9sb2Nrcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2xvY2tzLmMKQEAgLTY4LDYgJiM0Mzs2OCw3IEBACiAjaW5jbHVkZSAmbHQ7dHJhY2UvZXZlbnRzL2ZpbGVsb2NrLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtsaW51eC91YWNjZXNzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIAogc3RhdGljIHN0cnVjdCBmaWxlX2xvY2sgKmZpbGVfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYykKIHsKQEAgLTIxMzYsMTAgJiM0MzsyMTM3LDEyIEBAIGludAogdmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdikKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTsKLQl2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpOwogCWludCBlcnJvcjsKIAotCWlmICgoIXZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSkgJmFtcDsmYW1wOyAhY2FwYWJsZShDQVBfTEVBU0UpKQomIzQzOwllcnJvciA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpOwomIzQzOwlpZiAoZXJyb3IgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwlpZiAoZXJyb3IgIT0gMCAmYW1wOyZhbXA7ICFjYXBhYmxlKENBUF9MRUFTRSkpCiAJCXJldHVybiAtRUFDQ0VTOwogCWVycm9yID0gc2VjdXJpdHlfZmlsZV9sb2NrKGZpbHAsIGFyZyk7CiAJaWYgKGVycm9yKQpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggMTljZTQzYzlhNmU2NjIuLjcyZjk0ZDIwNGY5M2Y0IDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTU1LDggJiM0Mzs1NSw4IEBACiAgKiBUaGUgbmV3IGNvZGUgcmVwbGFjZXMgdGhlIG9sZCByZWN1cnNpdmUgc3ltbGluayByZXNvbHV0aW9uIHdpdGgKICAqIGFuIGl0ZXJhdGl2ZSBvbmUgKGluIGNhc2Ugb2Ygbm9uLW5lc3RlZCBzeW1saW5rIGNoYWlucykuICBJdCBkb2VzCiAgKiB0aGlzIHdpdGggY2FsbHMgdG8gJmx0O2ZzJmd0O19mb2xsb3dfbGluaygpLgotICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3cgCi0gKiByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGxvb2t1cF9kZW50cnkoKSB0aGF0IGNhbiBoYW5kbGUgYWxsIAomIzQzOyAqIEFzIGEgc2lkZSBlZmZlY3QsIGRpcl9uYW1laSgpLCBfbmFtZWkoKSBhbmQgZm9sbG93X2xpbmsoKSBhcmUgbm93CiYjNDM7ICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbAogICogdGhlIHNwZWNpYWwgY2FzZXMgb2YgdGhlIGZvcm1lciBjb2RlLgogICoKICAqIFdpdGggdGhlIG5ldyBkY2FjaGUsIHRoZSBwYXRobmFtZSBpcyBzdG9yZWQgYXQgZWFjaCBpbm9kZSwgYXQgbGVhc3QgYXMKQEAgLTEyNTUsNiAmIzQzOzEyNTUsNzIgQEAgZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTsKIAogI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KIAomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5IHRoZSBwcm9jZXNzIChhbGxvd2luZyBmb3IgZnN1aWQgb3ZlcnJpZGUpLAomIzQzOyAqIHJldHVybmluZyAwIGlmIHNvLCAxIGlmIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0KJiM0MzsgKiBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uCiYjNDM7ICovCiYjNDM7aW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseShpbm9kZS0mZ3Q7aV9vcGZsYWdzICZhbXA7IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKQomIzQzOwkJcmV0dXJuIGlub2RlLSZndDtpX29wLSZndDtpc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpOwomIzQzOwlpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gMTsgLyogTm90IHNhbWUuICovCiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IGRpcmVjdG9yeSwgcmV0dXJuaW5nCiYjNDM7ICogMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIG1ha2luZwomIzQzOyAqIHRoZSBkZXRlcm1pbmF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseShpbm9kZS0mZ3Q7aV9vcGZsYWdzICZhbXA7IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKSB7CiYjNDM7CQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CiYjNDM7CQlzdHJ1Y3QgaW5vZGUgKmRpcjsKJiM0MzsJCWludCByZXQ7CiYjNDM7CiYjNDM7CQlpZiAoaW5vZGUgIT0gbmQtJmd0O2lub2RlKSB7CiYjNDM7CQkJZGlyID0gbmQtJmd0O2lub2RlOwomIzQzOwkJCXJldCA9IGlub2RlLSZndDtpX29wLSZndDtoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpOwomIzQzOwkJfSBlbHNlIGlmIChuZC0mZ3Q7ZmxhZ3MgJmFtcDsgTE9PS1VQX1JDVSkgewomIzQzOwkJCXBhcmVudCA9IFJFQURfT05DRShuZC0mZ3Q7cGF0aC5kZW50cnkpOwomIzQzOwkJCWRpciA9IFJFQURfT05DRShwYXJlbnQtJmd0O2RfaW5vZGUpOwomIzQzOwkJCWlmICghZGlyKQomIzQzOwkJCQlyZXR1cm4gLUVDSElMRDsKJiM0MzsJCQlyZXQgPSBpbm9kZS0mZ3Q7aV9vcC0mZ3Q7aGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcGFyZW50ID0gZGdldF9wYXJlbnQobmQtJmd0O3BhdGguZGVudHJ5KTsKJiM0MzsJCQlkaXIgPSBwYXJlbnQtJmd0O2RfaW5vZGU7CiYjNDM7CQkJcmV0ID0gaW5vZGUtJmd0O2lfb3AtJmd0O2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7CiYjNDM7CQkJZHB1dChwYXJlbnQpOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmZzdWlkX3ZhbGlkKG5kLSZndDtkaXJfdmZzdWlkKSAmYW1wOyZhbXA7CiYjNDM7CSAgICB2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgbmQtJmd0O2Rpcl92ZnN1aWQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi8KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEZXRlcm1pbmUgaWYgdHdvIGlub2RlcyBoYXZlIHRoZSBzYW1lIG93bmVyLCByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kCiYjNDM7ICogYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gbWFraW5nIHRoZSBkZXRlcm1pbmF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyKQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KGlub2RlLSZndDtpX29wZmxhZ3MgJmFtcDsgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpCiYjNDM7CQlyZXR1cm4gaW5vZGUtJmd0O2lfb3AtJmd0O2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7CiYjNDM7CWlmICh2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwKJiM0MzsJCSAgICAgIGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gMTsgLyogTm90IHNhbWUuICovCiYjNDM7fQomIzQzOwogLyoqCiAgKiBtYXlfZm9sbG93X2xpbmsgLSBDaGVjayBzeW1saW5rIGZvbGxvd2luZyBmb3IgdW5zYWZlIHNpdHVhdGlvbnMKICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGEKQEAgLTEyNzEsMjcgJiM0MzsxMzM3LDI4IEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7CiAgKgogICogUmV0dXJucyAwIGlmIGZvbGxvd2luZyB0aGUgc3ltbGluayBpcyBhbGxvd2VkLCAtdmUgb24gZXJyb3IuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IG1udF9pZG1hcCAqaWRtYXA7Ci0JdmZzdWlkX3QgdmZzdWlkOwomIzQzOwlpbnQgcmV0OwogCiAJaWYgKCFzeXNjdGxfcHJvdGVjdGVkX3N5bWxpbmtzKQogCQlyZXR1cm4gMDsKIAotCWlkbWFwID0gbW50X2lkbWFwKG5kLSZndDtwYXRoLm1udCk7Ci0JdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTsKLQkvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi8KLQlpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKQotCQlyZXR1cm4gMDsKLQogCS8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBub3Qgc3RpY2t5IGFuZCB3b3JsZC13cml0YWJsZS4gKi8KIAlpZiAoKG5kLSZndDtkaXJfbW9kZSAmYW1wOyAoU19JU1ZUWHxTX0lXT1RIKSkgIT0gKFNfSVNWVFh8U19JV09USCkpCiAJCXJldHVybiAwOwogCiYjNDM7CWlkbWFwID0gbW50X2lkbWFwKG5kLSZndDtwYXRoLm1udCk7CiYjNDM7CS8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqLwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAkvKiBBbGxvd2VkIGlmIHBhcmVudCBkaXJlY3RvcnkgYW5kIGxpbmsgb3duZXIgbWF0Y2guICovCi0JaWYgKHZmc3VpZF92YWxpZChuZC0mZ3Q7ZGlyX3Zmc3VpZCkgJmFtcDsmYW1wOyB2ZnN1aWRfZXEobmQtJmd0O2Rpcl92ZnN1aWQsIHZmc3VpZCkpCi0JCXJldHVybiAwOwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlpZiAobmQtJmd0O2ZsYWdzICZhbXA7IExPT0tVUF9SQ1UpCiAJCXJldHVybiAtRUNISUxEOwpAQCAtMTM4OSwxMiAmIzQzOzE0NTYsMTIgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKQogICogQGlub2RlOiB0aGUgaW5vZGUgb2YgdGhlIGZpbGUgdG8gb3BlbgogICoKICAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOgotICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZAotICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzCi0gKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeQotICogICAtIHdlIGRvbiYjMzk7dCBvd24gdGhlIGZpbGUKJiM0MzsgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkLAomIzQzOyAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywKJiM0MzsgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeSwKJiM0MzsgKiAgIC0gdGhlIGRpcmVjdG9yeSBpcyB3b3JsZCB3cml0YWJsZSwKJiM0MzsgKiAgIC0gd2UgZG9uJiMzOTt0IG93biB0aGUgZmlsZSBhbmQKICAqICAgLSB0aGUgb3duZXIgb2YgdGhlIGRpcmVjdG9yeSBkb2VzbiYjMzk7dCBvd24gdGhlIGZpbGUKLSAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlCiAgKiBJZiB0aGUgc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBzZXQgdG8gMgogICogdGhlIGRpcmVjdG9yeSBkb2VzbiYjMzk7dCBoYXZlIHRvIGJlIHdvcmxkIHdyaXRhYmxlOiBiZWluZyBncm91cCB3cml0YWJsZSB3aWxsCiAgKiBiZSBlbm91Z2guCkBAIC0xNDA1LDEzICYjNDM7MTQ3Miw0NSBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspCiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZQogICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLgogICoKJiM0MzsgKiBGb3IgYSBmaWxlc3lzdGVtIChlLmcuIGEgbmV0d29yayBmaWxlc3lzdGVtKSB0aGF0IGhhcyBhIHNlcGFyYXRlIElEIHNwYWNlCiYjNDM7ICogYW5kIGhhcyBmb3JlaWduIElEcyAobWF5YmUgZXZlbiBub24taW50ZWdlciBJRHMpLCBpX3VpZCBjYW5ub3QgYmUgY29tcGFyZWQKJiM0MzsgKiB0byBjdXJyZW50X2ZzdWlkKCkgYW5kIG1heSBub3QgYmUgZGlyZWN0bHkgY29tcGFyYWJsZSB0byBhbm90aGVyIGlfdWlkLgomIzQzOyAqIEluc3RlYWQsIHRoZSBmaWxlc3lzdGVtIGlzIGFza2VkIHRvIHBlcmZvcm0gdGhlIGNvbXBhcmlzb25zLiAgV2l0aCBuZXR3b3JrCiYjNDM7ICogZmlsZXN5c3RlbXMsIHRoZXJlIGFsc28gZXhpc3RzIHRoZSBwb3NzaWJpbGl0eSBvZiBkb2luZyBhbm9ueW1vdXMKJiM0MzsgKiBvcGVyYXRpb25zIGFuZCBoYXZpbmcgYW5vbnltb3VzbHktb3duZWQgb2JqZWN0cy4KJiM0MzsgKgomIzQzOyAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6CiYjNDM7ICoKJiM0MzsgKglVU0VSCURJUglGSUxFCUZJTEUJQUxMT1dFRAomIzQzOyAqCQlPV05FUglPV05FUglTVEFURQomIzQzOyAqCT09PT09PT0JPT09PT09PQk9PT09PT09CT09PT09PT0JPT09PT09PQomIzQzOyAqCUEJQQktCU5ldwlZZXMKJiM0MzsgKglBCUEJQQlFeGlzdHMJWWVzCiYjNDM7ICoJQQlBCUMJRXhpc3RzCU5vCiYjNDM7ICoJQQlCCS0JTmV3CVllcwomIzQzOyAqCUEJQglBCUV4aXN0cwlZZXMsIEZPPT1VCiYjNDM7ICoJQQlCCUIJRXhpc3RzCVllcywgRk89PURPCiYjNDM7ICoJQQlCCUMJRXhpc3RzCU5vCiYjNDM7ICoJQQlhbm9uWzFdCS0JTmV3CVllcwomIzQzOyAqCUEJYW5vblsxXQlBCUV4aXN0cwlZZXMKJiM0MzsgKglBCWFub25bMV0JQwlFeGlzdHMJTm8KJiM0MzsgKglhbm9uCUEJLQlOZXcJWWVzCiYjNDM7ICoJYW5vbglBCUEJRXhpc3RzCVllcywgRk89PURPCiYjNDM7ICoJYW5vbglhbm9uWzFdCS0JTmV3CVllcwomIzQzOyAqCWFub24JYW5vblsxXQktCUV4aXN0cwlObwomIzQzOyAqCWFub24JQQlBCUV4aXN0cwlZZXMsIEZPPT1ETwomIzQzOyAqCWFub24JQQlDCUV4aXN0cwlObwomIzQzOyAqCWFub24JQQlhbm9uCUV4aXN0cwlObwomIzQzOyAqCiYjNDM7ICogWzFdIENhbiBhbm9ueW1vdXNseS1vd25lZCBkaXJzIGJlIHN0aWNreT8KJiM0MzsgKgogICogUmV0dXJucyAwIGlmIHRoZSBvcGVuIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci4KICAqLwogc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsCi0JCQkJc3RydWN0IGlub2RlICpjb25zdCBpbm9kZSkKJiM0MzsJCQkJc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAl1bW9kZV90IGRpcl9tb2RlID0gbmQtJmd0O2Rpcl9tb2RlOwotCXZmc3VpZF90IGRpcl92ZnN1aWQgPSBuZC0mZ3Q7ZGlyX3Zmc3VpZCwgaV92ZnN1aWQ7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAobGlrZWx5KCEoZGlyX21vZGUgJmFtcDsgU19JU1ZUWCkpKQogCQlyZXR1cm4gMDsKQEAgLTE0MjIsMTMgJiM0MzsxNTIxLDEzIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLAogCWlmIChTX0lTRklGTyhpbm9kZS0mZ3Q7aV9tb2RlKSAmYW1wOyZhbXA7ICFzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zKQogCQlyZXR1cm4gMDsKIAotCWlfdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTsKLQotCWlmICh2ZnN1aWRfZXEoaV92ZnN1aWQsIGRpcl92ZnN1aWQpKQotCQlyZXR1cm4gMDsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwogCi0JaWYgKHZmc3VpZF9lcV9rdWlkKGlfdmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKQotCQlyZXR1cm4gMDsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlpZiAobGlrZWx5KGRpcl9tb2RlICZhbXA7IDAwMDIpKSB7CiAJCWF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULCAmIzM0O3N0aWNreV9jcmVhdGUmIzM0Oyk7CkBAIC0zNjQ1LDEyICYjNDM7Mzc0NCwxNCBAQCBFWFBPUlRfU1lNQk9MKHVzZXJfcGF0aF9hdCk7CiBpbnQgX19jaGVja19zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWt1aWRfdCBmc3VpZCA9IGN1cnJlbnRfZnN1aWQoKTsKJiM0MzsJaW50IHJldDsKIAotCWlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBmc3VpZCkpCi0JCXJldHVybiAwOwotCWlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgZGlyKSwgZnN1aWQpKQotCQlyZXR1cm4gMDsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKIAlyZXR1cm4gIWNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9GT1dORVIpOwogfQogRVhQT1JUX1NZTUJPTChfX2NoZWNrX3N0aWNreSk7CmRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5jIGIvZnMvcmVtYXBfcmFuZ2UuYwppbmRleCAyNmFmYmJiZmIxMGMyZS4uOWVlZTkzYzI3MDAxMjUgMTAwNjQ0Ci0tLSBhL2ZzL3JlbWFwX3JhbmdlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcmVtYXBfcmFuZ2UuYwpAQCAtNDEzLDIwICYjNDM7NDEzLDIyIEBAIGxvZmZfdCB2ZnNfY2xvbmVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19pbiwKIEVYUE9SVF9TWU1CT0wodmZzX2Nsb25lX2ZpbGVfcmFuZ2UpOwogCiAvKiBDaGVjayB3aGV0aGVyIHdlIGFyZSBhbGxvd2VkIHRvIGRlZHVwZSB0aGUgZGVzdGluYXRpb24gZmlsZSAqLwotc3RhdGljIGJvb2wgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3N0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIHRydWU7CiYjNDM7CQlyZXR1cm4gMDsKIAlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX1dSSVRFKQotCQlyZXR1cm4gdHJ1ZTsKLQlpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkKLQkJcmV0dXJuIHRydWU7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiAJaWYgKCFpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgTUFZX1dSSVRFKSkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZhbHNlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAtRVBFUk07CiB9CiAKIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsCkBAIC00NTksOCAmIzQzOzQ2MSw4IEBAIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IC1FUEVSTTsKLQlpZiAoIW1heV9kZWR1cGVfZmlsZShkc3RfZmlsZSkpCiYjNDM7CXJldCA9IG1heV9kZWR1cGVfZmlsZShkc3RfZmlsZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIG91dF9kcm9wX3dyaXRlOwogCiAJcmV0ID0gLUVYREVWOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDUwY2U3MzFhMmI3OGYxLi44MDEzYzEzYTM1M2Q2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtNjI4LDYgJiM0Mzs2MjgsNyBAQCBpc191bmNhY2hlZF9hY2woc3RydWN0IHBvc2l4X2FjbCAqYWNsKQogI2RlZmluZSBJT1BfQ0FDSEVEX0xJTksJCTB4MDA0MAogI2RlZmluZSBJT1BfRkFTVFBFUk1fTUFZX0VYRUMJMHgwMDgwCiAjZGVmaW5lIElPUF9GTENUWAkJMHgwMTAwCiYjNDM7I2RlZmluZSBJT1BfT1dORVJTSElQX09WRVJSSURFCTB4MDIwMAkvKiBVc2UgLSZndDtpc19vd25lZF9ieV9tZSgpIGFuZCAtJmd0O2hhdmVfc2FtZV9vd25lcigpICovCiAKIC8qCiAgKiBJbm9kZSBzdGF0ZSBiaXRzLiAgUHJvdGVjdGVkIGJ5IGlub2RlLSZndDtpX2xvY2sKQEAgLTE3NTUsOCAmIzQzOzE3NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV93cml0ZV9ub3Rfc3RhcnRlZChjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gc2Jfd3JpdGVfbm90X3N0YXJ0ZWQoZmlsZV9pbm9kZShmaWxlKS0mZ3Q7aV9zYik7CiB9CiAKLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0Mztib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiAvKgogICogVkZTIGhlbHBlciBmdW5jdGlvbnMuLgpAQCAtMjAzNiw2ICYjNDM7MjAzNiw5IEBAIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHsKIAkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7CiAJaW50ICgqZmlsZWF0dHJfZ2V0KShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7CiAJc3RydWN0IG9mZnNldF9jdHggKigqZ2V0X29mZnNldF9jdHgpKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwomIzQzOwlpbnQgKCppc19vd25lZF9ieV9tZSkoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwomIzQzOwlpbnQgKCpoYXZlX3NhbWVfb3duZXIpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSwKJiM0MzsJCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZTIpOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKIC8qIERpZCB0aGUgZHJpdmVyIHByb3ZpZGUgdmFsaWQgbW1hcCBob29rIGNvbmZpZ3VyYXRpb24/ICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODE1CgkJCQkJCQlvdXRwdXQ6IDcyCgkJCQkJCQl0aG91Z2h0czogNTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIEludHJvZHVjaW5nIE5ldyBWRlMgSW5vZGUgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgc29tZSBuZXcgaW5vZGUgb3BlcmF0aW9uczogYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAuIFRoZXNlIGFyZSBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZXkmIzM5O3JlIGRlc2lnbmVkIHRvICpvdmVycmlkZSogdGhlIHN0YW5kYXJkIFZGUyBvd25lcnNoaXAgY2hlY2tzLCB3aGljaCBjdXJyZW50bHkganVzdCBjb21wYXJlIHRoZSBgaV91aWRgIHRvIGBjdXJyZW50X2ZzdWlkKClgLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGNvcmUgVkZTIGNvbXBvbmVudHM6IGBmcy9uYW1laS5jYCwgYGZzL2F0dHIuY2AsIGBmcy9jb3JlZHVtcC5jYCwgYGZzL2lub2RlLmNgLCBgZnMvbG9ja3MuY2AsIGFuZCBgZnMvcmVtYXBfcmFuZ2UuY2AuIEl0JiMzOTtzIGFsc28gaW1wbGVtZW50aW5nIHRoZXNlIGZvciB0aGUgQUZTIGZpbGVzeXN0ZW0gaW4gYGZzL2Fmcy9gLgoKVGhpcyBjbGVhcmx5IHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBib3RoIHRoZSBWRlMgbGF5ZXIgYW5kIHRoZSBBRlMgZmlsZXN5c3RlbSwgYW5kIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMuIEdpdmVuIHRoZSBpbXBhY3Qgb24gY29yZSBmdW5jdGlvbmFsaXR5LCBgV29ydGhGdXp6aW5nPXRydWVgIGlzIGEgcmVhc29uYWJsZSBhc3Nlc3NtZW50LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgZnVydGhlciB0byBzZWUgd2hlcmUgdGhlIHJlYWwgY29tcGxleGl0aWVzIGxpZS4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIGxpc3Qgb2YgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZmZlY3RlZCBhbmQgd2hlcmUgdGhleSYjMzk7cmUgbG9jYXRlZC4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlOgoKKiAgIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgCiogICBgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyYAoqICAgYHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyYAoqICAgYGFmc19pc19vd25lZF9ieV9tZWAKKiAgIGBhZnNfaGF2ZV9zYW1lX293bmVyYAoqICAgYGNob3duX29rYAoqICAgYGNoZ3JwX29rYAoqICAgYG1heV9jcmVhdGVfaW5fc3RpY2t5YAoqICAgYG1heV9mb2xsb3dfbGlua2AKKiAgIGBfX2NoZWNrX3N0aWNreWAKKiAgIGBtYXlfZGVkdXBlX2ZpbGVgCgpPa2F5LCBub3cgbGV0JiMzOTtzIHNlZSBob3cgdGhlc2UgYXJlIGV4cG9zZWQuIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgIGlzIGluIGBmcy9uYW1laS5jYCBhbmQgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgaW4gYGZzL2ludGVybmFsLmhgLiBUaGUgb3RoZXIgdHdvIFZGUyBmdW5jdGlvbnMsIGB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXJgIGFuZCBgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXJgIGFyZSBzdGF0aWMgaW5zaWRlIGBmcy9uYW1laS5jYC4gQm90aCBBRlMgZnVuY3Rpb25zIGFyZSBpbiBgZnMvYWZzL3NlY3VyaXR5LmNgLgoKSSBhbHNvIHNlZSB0aGF0IHRvIGVmZmVjdGl2ZWx5IHRlc3QgdGhlIEFGUyBpbnRlZ3JhdGlvbiwgSSYjMzk7bGwgbmVlZCBgQ09ORklHX0FGU19GU2AgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4KClJpZ2h0LCB0aW1lIHRvIG1vdmUgYmV5b25kIHRoaXMgY3Vyc29yeSBpbnNwZWN0aW9uIGFuZCBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIG5hbWVzIGFyZSBjb3JyZWN0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oyh2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWV8dmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyfHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyfGFmc19pc19vd25lZF9ieV9tZXxhZnNfaGF2ZV9zYW1lX293bmVyKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvZGlyLmM9NjA9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2Fmcy9kaXIuYy03MS1cdC5zZXRhdHRyXHQ9IGFmc19zZXRhdHRyLFxuZnMvYWZzL2Rpci5jOjcyOlx0LmlzX293bmVkX2J5X21lXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcbmZzL2Fmcy9kaXIuYzo3MzpcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxuZnMvYWZzL2Rpci5jLTc0LX07XG4tLVxuZnMvYWZzL2ZpbGUuYz00OD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2Fmcy9maWxlLmMtNTEtXHQucGVybWlzc2lvblx0PSBhZnNfcGVybWlzc2lvbixcbmZzL2Fmcy9maWxlLmM6NTI6XHQuaXNfb3duZWRfYnlfbWVcdD0gYWZzX2lzX293bmVkX2J5X21lLFxuZnMvYWZzL2ZpbGUuYzo1MzpcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxuZnMvYWZzL2ZpbGUuYy01NC19O1xuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oPTE1MzI9ZXh0ZXJuIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xuZnMvYWZzL2ludGVybmFsLmg6MTUzMzppbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjE1MzQ6aW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuZnMvYWZzL2ludGVybmFsLmgtMTUzNS1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlMik7XG4tLVxuZnMvYWZzL3NlY3VyaXR5LmM9NDMxPWludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9hZnMvc2VjdXJpdHkuYy01MTgtICovXG5mcy9hZnMvc2VjdXJpdHkuYzo1MTk6aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2Fmcy9zZWN1cml0eS5jLTUyMC17XG4tLVxuZnMvYWZzL3NlY3VyaXR5LmMtNTQ5LSAqL1xuZnMvYWZzL3NlY3VyaXR5LmM6NTUwOmludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbmZzL2Fmcy9zZWN1cml0eS5jLTU1MS1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlMilcbi0tXG5mcy9hdHRyLmM9OTU9c3RhdGljIGludCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9hdHRyLmMtMTAwLVxuZnMvYXR0ci5jOjEwMTpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvYXR0ci5jLTEwMi1cdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbmZzL2F0dHIuYz0xMjQ9c3RhdGljIGludCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9hdHRyLmMtMTI5LVxuZnMvYXR0ci5jOjEzMDpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvYXR0ci5jLTEzMS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZnMvY29yZWR1bXAuYz04Nzg9c3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcbi0tXG5mcy9jb3JlZHVtcC5jLTk1Ni1cdGlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XG5mcy9jb3JlZHVtcC5jOjk1NzpcdGlmICh2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKSAhPSAwKSB7XG5mcy9jb3JlZHVtcC5jLTk1OC1cdFx0Y29yZWR1bXBfcmVwb3J0X2ZhaWx1cmUoXCYjMzQ7Q29yZSBkdW1wIHRvICVzIGFib3J0ZWQ6IGNhbm5vdCBwcmVzZXJ2ZSBmaWxlIG93bmVyXCYjMzQ7LCBjbi1cdTAwM2Vjb3JlbmFtZSk7XG4tLVxuZnMvaW5vZGUuYz0yNzUzPWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9pbm9kZS5jLTI3NTgtXG5mcy9pbm9kZS5jOjI3NTk6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL2lub2RlLmMtMjc2MC1cdGlmIChyZXQgPT0gMClcbi0tXG5mcy9pbnRlcm5hbC5oPTQ5PWV4dGVybiBpbnQgZmluaXNoX2NsZWFuX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbi0tXG5mcy9pbnRlcm5hbC5oLTUzLSAqL1xuZnMvaW50ZXJuYWwuaDo1NDppbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2ludGVybmFsLmgtNTUtZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcbi0tXG5mcy9sb2Nrcy5jPTIxMzc9dmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcbi0tXG5mcy9sb2Nrcy5jLTIxNDEtXG5mcy9sb2Nrcy5jOjIxNDI6XHRlcnJvciA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpO1xuZnMvbG9ja3MuYy0yMTQzLVx0aWYgKGVycm9yIFx1MDAzYyAwKVxuLS1cbmZzL25hbWVpLmM9MTI1ND1mc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpO1xuLS1cbmZzL25hbWVpLmMtMTI2Mi0gKi9cbmZzL25hbWVpLmM6MTI2MzppbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvbmFtZWkuYy0xMjY0LXtcbi0tXG5mcy9uYW1laS5jLTEyNzYtICovXG5mcy9uYW1laS5jOjEyNzc6c3RhdGljIGludCB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9uYW1laS5jLTEyNzgtXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4tLVxuZnMvbmFtZWkuYy0xMzEyLSAqL1xuZnMvbmFtZWkuYzoxMzEzOnN0YXRpYyBpbnQgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9uYW1laS5jLTEzMTQtXHRcdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcilcbi0tXG5mcy9uYW1laS5jPTEzNDA9c3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL25hbWVpLmMtMTM1My1cdC8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqL1xuZnMvbmFtZWkuYzoxMzU0Olx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9uYW1laS5jLTEzNTUtXHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5mcy9uYW1laS5jLTEzNTgtXHQvKiBBbGxvd2VkIGlmIHBhcmVudCBkaXJlY3RvcnkgYW5kIGxpbmsgb3duZXIgbWF0Y2guICovXG5mcy9uYW1laS5jOjEzNTk6XHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XG5mcy9uYW1laS5jLTEzNjAtXHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5mcy9uYW1laS5jPTE1MDk9c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4tLVxuZnMvbmFtZWkuYy0xNTIzLVxuZnMvbmFtZWkuYzoxNTI0Olx0cmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpO1xuZnMvbmFtZWkuYy0xNTI1LVx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxuZnMvbmFtZWkuYy0xNTI3LVxuZnMvbmFtZWkuYzoxNTI4Olx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9uYW1laS5jLTE1MjktXHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5mcy9uYW1laS5jPTM3NDQ9aW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9uYW1laS5jLTM3NDgtXG5mcy9uYW1laS5jOjM3NDk6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL25hbWVpLmMtMzc1MC1cdGlmIChyZXQgXHUwMDNjPSAwKVxuZnMvbmFtZWkuYy0zNzUxLVx0XHRyZXR1cm4gcmV0O1xuZnMvbmFtZWkuYzozNzUyOlx0cmV0ID0gdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuZnMvbmFtZWkuYy0zNzUzLVx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYz00MTY9c3RhdGljIGludCBtYXlfZGVkdXBlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYy00MjUtXHRcdHJldHVybiAwO1xuZnMvcmVtYXBfcmFuZ2UuYzo0MjY6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL3JlbWFwX3JhbmdlLmMtNDI3LVx0aWYgKHJldCBcdTAwM2M9IDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNDIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIE93bmVyc2hpcCBhbmQgQWNjZXNzIENvbnRyb2wgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiByaWdodCBub3cgYXJlIHRoZXNlOiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAsIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgLCBhbmQgYG1heV9mb2xsb3dfbGlua2AuIFNlZW1zIGxpa2UgYSBwcmV0dHkgY29tcHJlaGVuc2l2ZSBsaXN0IGZvciBkZWFsaW5nIHdpdGggZmlsZSBvd25lcnNoaXAsIGdyb3VwIG1lbWJlcnNoaXAsIGFuZCBwZXJtaXNzaW9ucyBjaGVja3MsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHJhbmdlIG9mIFZGUyBhbmQgQUZTIGltcGxlbWVudGF0aW9ucyBpbiBwbGF5IGhlcmUuIEkgd2FudCB0byBjaGVjayBgQ09ORklHX0FGU19GU2AgaXMgdGhlIGNvcnJlY3QgY29uZmlnIHRvIGFkZHJlc3MgdGhlIGFyY2hpdGVjdHVyZSwgYnV0IG1vcmUgZ2VuZXJhbGx5IHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyB1c2VyIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUZTX0ZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9hZnMvS2NvbmZpZzoyOmNvbmZpZyBBRlNfRlNcbmZzL2Fmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKVwmIzM0O1xuLS1cbmZzL2Fmcy9LY29uZmlnPTE3PWNvbmZpZyBBRlNfREVCVUdcbi0tXG5mcy9hZnMvS2NvbmZpZy0yNi1cbmZzL2Fmcy9LY29uZmlnOjI3OmNvbmZpZyBBRlNfRlNDQUNIRVxuZnMvYWZzL0tjb25maWctMjgtXHRib29sIFwmIzM0O1Byb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY3MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgT3duZXJzaGlwIGFuZCBQZXJtaXNzaW9ucyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBlbmFibGluZyBgQUZTX0ZTYCBpcyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBmb3IgdGhpcy4gTm93LCBiZWZvcmUgSSBtb3ZlIG9uLCBJJiMzOTtkIGxpa2UgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBvYnNjdXJlIGNvbmZpZ3VyYXRpb25zIGx1cmtpbmcgYXJvdW5kIHRoYXQgSSYjMzk7dmUgbWlzc2VkLiBJIGtub3cgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJlbGF0ZSB0byB0aGUgVmlydHVhbCBGaWxlIFN5c3RlbSAoVkZTKSBhbmQgdGhlIEFGUyBsYXllcnMuIFRoZSBWRlMgaXMgYWx3YXlzIGVuYWJsZWQsIHNvIEFGUyBpcyB0aGUga2V5LCBhbmQgdGhhdCByZWxpZXMgb24gYEFGU19GU2AuIEdvdCBpdC4KCk5vdywgbGV0JiMzOTtzIGdldCBiYWNrIHRvIHJlZmluaW5nIHRoaXMgYEZvY3VzU3ltYm9sc2AgbGlzdC4gSSBuZWVkIHRvIG1ha2UgdGhpcyBhcyBhY2N1cmF0ZSBhbmQgY29tcGxldGUgYXMgcG9zc2libGUuIFNvLCBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHRoaXMgbGlzdDoKKiAgIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgCiogICBgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyYAoqICAgYHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyYAoqICAgYGFmc19pc19vd25lZF9ieV9tZWAKKiAgIGBhZnNfaGF2ZV9zYW1lX293bmVyYAoqICAgYGNob3duX29rYAoqICAgYGNoZ3JwX29rYAoqICAgYG1heV9jcmVhdGVfaW5fc3RpY2t5YAoqICAgYF9fY2hlY2tfc3RpY2t5YAoqICAgYG1heV9kZWR1cGVfZmlsZWAKKiAgIGBtYXlfZm9sbG93X2xpbmtgCgpIYW5nIG9uIGEgc2Vjb25k4oCmIGlzbiYjMzk7dCBgbWF5X2ZvbGxvd19saW5rYCBpbXBsZW1lbnRlZCBpbmxpbmU/IFllcywgaXQgaXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYGZzL25hbWVpLmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgaGFuZGxlZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXlfZm9sbG93X2xpbmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC5yc3Q9MTEzMD1jb21wb25lbnQgb2YgdGhlIGxvb2t1cCwgc28gd2Ugd2lsbCBjaGVjayB1c2Vyc3BhY2UgZmxhZyBgYExPT0tVUF9GT0xMT1dgYCB0b1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC5yc3Q6MTEzMTpkZWNpZGUgd2hldGhlciBmb2xsb3cgaXQgd2hlbiBpdCBpcyBhIHN5bWxpbmsgYW5kIGNhbGwgYGBtYXlfZm9sbG93X2xpbmsoKWBgIHRvXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtbG9va3VwLnJzdC0xMTMyLWNoZWNrIGlmIHdlIGhhdmUgcHJpdmlsZWdlIHRvIGZvbGxvdyBpdC5cbi0tXG5mcy9uYW1laS5jPTEzMTM9c3RhdGljIGludCB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9uYW1laS5jLTEzMjQtLyoqXG5mcy9uYW1laS5jOjEzMjU6ICogbWF5X2ZvbGxvd19saW5rIC0gQ2hlY2sgc3ltbGluayBmb2xsb3dpbmcgZm9yIHVuc2FmZSBzaXR1YXRpb25zXG5mcy9uYW1laS5jLTEzMjYtICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxuLS1cbmZzL25hbWVpLmMtMTMzOS0gKi9cbmZzL25hbWVpLmM6MTM0MDpzdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9uYW1laS5jLTEzNDEte1xuLS1cbmZzL25hbWVpLmM9MjEwNj1zdGF0aWMgbm9pbmxpbmUgY29uc3QgY2hhciAqcGlja19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgcGF0aCAqbGluayxcbi0tXG5mcy9uYW1laS5jLTIxMzMtXHRpZiAoZmxhZ3MgXHUwMDI2IFdBTEtfVFJBSUxJTkcpIHtcbmZzL25hbWVpLmM6MjEzNDpcdFx0ZXJyb3IgPSBtYXlfZm9sbG93X2xpbmsobmQsIGlub2RlKTtcbmZzL25hbWVpLmMtMjEzNS1cdFx0aWYgKHVubGlrZWx5KGVycm9yKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYzMgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRmlsZSBTeXN0ZW0gUGVybWlzc2lvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc2NvcGVzIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gY29kZS4gSSBzZWUgdGhhdCBgbWF5X2ZvbGxvd19saW5rYCBpcyAqaW5saW5lKiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgcHJvYmFibHkgbm90IGEgZ29vZCBjYW5kaWRhdGUgdG8gZm9jdXMgb24gZGlyZWN0bHkuIEl0JiMzOTtzIGludGVncmF0ZWQgaW50byBvdGhlciBmdW5jdGlvbnMuIE9uIHRoZSBvdGhlciBoYW5kLCBgY2hvd25fb2tgIGFuZCBgY2hncnBfb2tgIGFyZSBjbGVhcmx5IGRlZmluZWQgYXMgKnN0YXRpYyogdmFyaWFibGVzIHdpdGhpbiBgZnMvYXR0ci5jYC4gVGhhdCBnaXZlcyBtZSBhIGRlZmluaXRlIHBsYWNlIHRvIHN0YXJ0IGlmIEkgd2FudCB0byBleGFtaW5lIHRob3NlIGFjY2VzcyBjb250cm9sIGNoZWNrcy4gU2ltaWxhcmx5LCBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgIGlzIHN0YXRpYyBpbiBgZnMvbmFtZWkuY2AuIEl0IGlzIHVzZWZ1bCB0byBrbm93IHdoZXJlIHRoZXNlIGZsYWdzIGxpdmUuCgpOb3csIGBfX2NoZWNrX3N0aWNreWAgaXMgKmV4cG9ydGVkKiBmcm9tIGBmcy9uYW1laS5jYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBhdmFpbGFibGUgZm9yIHVzZSBvdXRzaWRlIG9mIHRoYXQgZmlsZS4gT2theSwgZ29vZCB0byBrbm93LiBJdCBpcyBnb29kIGluZm9ybWF0aW9uLCBidXQgbm90IGltbWVkaWF0ZWx5IHVzZWZ1bC4KCkZpbmFsbHksIGBtYXlfZGVkdXBlX2ZpbGVgIGlzIHN0YXRpYyBpbiBgZnMvcmVtYXBfcmFuZ2UuY2AuIFNvIEkga25vdyB3aGVyZSAqdGhhdCogZnVuY3Rpb24gcmVzaWRlcy4KCkFscmlnaHQsIG5vdyBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gYGNob3duX29rYC4uLiBsZXQmIzM5O3MgY2hlY2sgaXQmIzM5O3MgZGVmaW5pdGlvbiB0byBzZWUgaWYgaXQgaXMgaW5saW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaG93bl9vayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hdHRyLmM9ODE9RVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpO1xuLS1cbmZzL2F0dHIuYy04My0vKipcbmZzL2F0dHIuYzo4NDogKiBjaG93bl9vayAtIHZlcmlmeSBwZXJtaXNzaW9ucyB0byBjaG93biBpbm9kZVxuZnMvYXR0ci5jLTg1LSAqIEBpZG1hcDpcdGlkbWFwIG9mIHRoZSBtb3VudCBAaW5vZGUgd2FzIGZvdW5kIGZyb21cbi0tXG5mcy9hdHRyLmMtOTQtICovXG5mcy9hdHRyLmM6OTU6c3RhdGljIGludCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL2F0dHIuYy05Ni1cdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc3VpZF90IGlhX3Zmc3VpZClcbi0tXG5mcy9hdHRyLmM9MTY4PWludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9hdHRyLmMtMjAwLVx0aWYgKGlhX3ZhbGlkIFx1MDAyNiBBVFRSX1VJRCkge1xuZnMvYXR0ci5jOjIwMTpcdFx0cmV0ID0gY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc3VpZCk7XG5mcy9hdHRyLmMtMjAyLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMxNAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipBbmFseXppbmcgdGhlIFNpdHVhdGlvbioqCgpBbHJpZ2h0LCBzbyBpdCYjMzk7cyBub3Qgc3RyYWlnaHRmb3J3YXJkLCBub3QgYW4gJiMzNDtpbmxpbmUmIzM0OyBzb2x1dGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgd2UgbmVlZCB0byBkaWcgYSBiaXQgZGVlcGVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgZWxlbWVudC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYGNoZ3JwX29rYCBzZXR0aW5nLiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBJdCBsaWtlbHkgcmVsYXRlcyB0byBob3cgd2UgY2FuIHByb2NlZWQuIFRpbWUgdG8gbG9vayBpbnRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGdycF9vayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hdHRyLmM9OTU9c3RhdGljIGludCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9hdHRyLmMtMTEyLS8qKlxuZnMvYXR0ci5jOjExMzogKiBjaGdycF9vayAtIHZlcmlmeSBwZXJtaXNzaW9ucyB0byBjaGdycCBpbm9kZVxuZnMvYXR0ci5jLTExNC0gKiBAaWRtYXA6XHRpZG1hcCBvZiB0aGUgbW91bnQgQGlub2RlIHdhcyBmb3VuZCBmcm9tXG4tLVxuZnMvYXR0ci5jLTEyMy0gKi9cbmZzL2F0dHIuYzoxMjQ6c3RhdGljIGludCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL2F0dHIuYy0xMjUtXHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnNnaWRfdCBpYV92ZnNnaWQpXG4tLVxuZnMvYXR0ci5jPTE2OD1pbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvYXR0ci5jLTIwNy1cdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9HSUQpIHtcbmZzL2F0dHIuYzoyMDg6XHRcdHJldCA9IGNoZ3JwX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cdTAwM2VpYV92ZnNnaWQpO1xuZnMvYXR0ci5jLTIwOS1cdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MzkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqTmF2aWdhdGluZyB0aGUgYG1heV9jcmVhdGVfaW5fc3RpY2t5YCBMb2dpYyoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyBpbmNvcnJlY3Qg4oCTIGl0JiMzOTtzIG5vdCBhbiBpbmxpbmUgc2NlbmFyaW8uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBuYXJyb3dzIGRvd24gdGhlIHBvc3NpYmxlIGNhdXNlcy4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGl0cyBjb25kaXRpb25zLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBpdHMgaW1wbGVtZW50YXRpb24gdG8gc2VlIGlmIGl0JiMzOTtzIG9wZXJhdGluZyBhcyBleHBlY3RlZCBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgaXQgY29udGFpbnMgYW55IGZsYXdzLiBUaGlzIGlzIHdoZXJlIHRoZSByb290IGNhdXNlIHByb2JhYmx5IGxpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21heV9jcmVhdGVfaW5fc3RpY2t5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmM9MTQyNz1pbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXG4tLVxuZnMvbmFtZWkuYy0xNDUwLS8qKlxuZnMvbmFtZWkuYzoxNDUxOiAqIG1heV9jcmVhdGVfaW5fc3RpY2t5IC0gQ2hlY2sgd2hldGhlciBhbiBPX0NSRUFUIG9wZW4gaW4gYSBzdGlja3kgZGlyZWN0b3J5XG5mcy9uYW1laS5jLTE0NTItICpcdFx0XHQgIHNob3VsZCBiZSBhbGxvd2VkLCBvciBub3QsIG9uIGZpbGVzIHRoYXQgYWxyZWFkeVxuLS1cbmZzL25hbWVpLmMtMTUwOC0gKi9cbmZzL25hbWVpLmM6MTUwOTpzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbmZzL25hbWVpLmMtMTUxMC1cdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvbmFtZWkuYz00NzUzPXN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbi0tXG5mcy9uYW1laS5jLTQ3NzQtXHRcdFx0cmV0dXJuIC1FSVNESVI7XG5mcy9uYW1laS5jOjQ3NzU6XHRcdGVycm9yID0gbWF5X2NyZWF0ZV9pbl9zdGlja3koaWRtYXAsIG5kLFxuZnMvbmFtZWkuYy00Nzc2LVx0XHRcdFx0XHQgICAgIGRfYmFja2luZ19pbm9kZShuZC1cdTAwM2VwYXRoLmRlbnRyeSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIzMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBwcm9mZXNzaW9uYWwgc3RhbmRwb2ludDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIFByb2JsZW06IEEgUXVpY2sgRGlhZ25vc3RpYyoqCgpIbW0sIHRoaXMgaXNuJiMzOTt0IGFuIGluLWxpbmUgc2l0dWF0aW9uLiBUaGF0JiMzOTtzIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgZXhhbWluZSB0aGUgZnVuY3Rpb24gYG1heV9kZWR1cGVfZmlsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgbG9naWMgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHRoYXQgZnVuY3Rpb24gYXMgYSBrZXkgZWxlbWVudCB0byB1bmRlcnN0YW5kaW5nIHdoYXQmIzM5O3Mgb2ZmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXlfZGVkdXBlX2ZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcmVtYXBfcmFuZ2UuYz00MTM9RVhQT1JUX1NZTUJPTCh2ZnNfY2xvbmVfZmlsZV9yYW5nZSk7XG4tLVxuZnMvcmVtYXBfcmFuZ2UuYy00MTUtLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgYWxsb3dlZCB0byBkZWR1cGUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgKi9cbmZzL3JlbWFwX3JhbmdlLmM6NDE2OnN0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvcmVtYXBfcmFuZ2UuYy00MTcte1xuLS1cbmZzL3JlbWFwX3JhbmdlLmM9NDM0PWxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYy00NTYtXHQgKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciByZW1hcF92ZXJpZnlfYXJlYSgpIGJlY2F1c2Ugb2ZcbmZzL3JlbWFwX3JhbmdlLmM6NDU3Olx0ICogc2Jfc3RhcnRfd3JpdGUoKSBhbmQgYmVmb3JlIG1heV9kZWR1cGVfZmlsZSgpIGJlY2F1c2UgdGhlIG1vdW50JiMzOTtzXG5mcy9yZW1hcF9yYW5nZS5jLTQ1OC1cdCAqIE1BWV9XUklURSBuZWVkIHRvIGJlIGNoZWNrZWQgd2l0aCBtbnRfZ2V0X3dyaXRlX2FjY2Vzc19maWxlKCkgaGVsZC5cbi0tXG5mcy9yZW1hcF9yYW5nZS5jLTQ2My1cbmZzL3JlbWFwX3JhbmdlLmM6NDY0Olx0cmV0ID0gbWF5X2RlZHVwZV9maWxlKGRzdF9maWxlKTtcbmZzL3JlbWFwX3JhbmdlLmMtNDY1LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTY6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3MDQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgUG90ZW50aWFsIE93bmVyc2hpcCBhbmQgQ29udGV4dCoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpc24mIzM5O3QgY29taW5nIHRocm91Z2ggZGlyZWN0bHkgaW4gdGhlIGlubGluZSBlbGVtZW50cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIG93bmVyc2hpcCBpbmZvcm1hdGlvbiBpcyBoZWxkLiBMZXQmIzM5O3Mgc2VlLi4uSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHdoZXRoZXIgdGhpcyBpcyBhIG1hdHRlciBvZiBwb3NzZXNzaW9uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTY6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZzX2lub2RlX2lzX293bmVkX2J5X21lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2F0dHIuYz05NT1zdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2F0dHIuYy0xMDAtXG5mcy9hdHRyLmM6MTAxOlx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9hdHRyLmMtMTAyLVx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxuZnMvYXR0ci5jPTEyND1zdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2F0dHIuYy0xMjktXG5mcy9hdHRyLmM6MTMwOlx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9hdHRyLmMtMTMxLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5mcy9jb3JlZHVtcC5jPTg3OD1zdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuLS1cbmZzL2NvcmVkdW1wLmMtOTU2LVx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcbmZzL2NvcmVkdW1wLmM6OTU3Olx0aWYgKHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpICE9IDApIHtcbmZzL2NvcmVkdW1wLmMtOTU4LVx0XHRjb3JlZHVtcF9yZXBvcnRfZmFpbHVyZShcJiMzNDtDb3JlIGR1bXAgdG8gJXMgYWJvcnRlZDogY2Fubm90IHByZXNlcnZlIGZpbGUgb3duZXJcJiMzNDssIGNuLVx1MDAzZWNvcmVuYW1lKTtcbi0tXG5mcy9pbm9kZS5jPTI3NTM9Ym9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2lub2RlLmMtMjc1OC1cbmZzL2lub2RlLmM6Mjc1OTpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvaW5vZGUuYy0yNzYwLVx0aWYgKHJldCA9PSAwKVxuLS1cbmZzL2ludGVybmFsLmg9NDk9ZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuLS1cbmZzL2ludGVybmFsLmgtNTMtICovXG5mcy9pbnRlcm5hbC5oOjU0OmludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvaW50ZXJuYWwuaC01NS1leHRlcm4gaW50IGZpbGVuYW1lX2xvb2t1cChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIHVuc2lnbmVkIGZsYWdzLFxuLS1cbmZzL2xvY2tzLmM9MjEzNz12ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KVxuLS1cbmZzL2xvY2tzLmMtMjE0MS1cbmZzL2xvY2tzLmM6MjE0MjpcdGVycm9yID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG5mcy9sb2Nrcy5jLTIxNDMtXHRpZiAoZXJyb3IgXHUwMDNjIDApXG4tLVxuZnMvbmFtZWkuYz0xMjU0PWZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XG4tLVxuZnMvbmFtZWkuYy0xMjYyLSAqL1xuZnMvbmFtZWkuYzoxMjYzOmludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9uYW1laS5jLTEyNjQte1xuLS1cbmZzL25hbWVpLmM9MTM0MD1zdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvbmFtZWkuYy0xMzUzLVx0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXG5mcy9uYW1laS5jOjEzNTQ6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL25hbWVpLmMtMTM1NS1cdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbmZzL25hbWVpLmM9MTUwOT1zdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbi0tXG5mcy9uYW1laS5jLTE1MjctXG5mcy9uYW1laS5jOjE1Mjg6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL25hbWVpLmMtMTUyOS1cdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbmZzL25hbWVpLmM9Mzc0ND1pbnQgX19jaGVja19zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL25hbWVpLmMtMzc0OC1cbmZzL25hbWVpLmM6Mzc0OTpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvbmFtZWkuYy0zNzUwLVx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYz00MTY9c3RhdGljIGludCBtYXlfZGVkdXBlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYy00MjUtXHRcdHJldHVybiAwO1xuZnMvcmVtYXBfcmFuZ2UuYzo0MjY6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL3JlbWFwX3JhbmdlLmMtNDI3LVx0aWYgKHJldCBcdTAwM2M9IDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE2OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDY1CgkJCQkJCQlvdXRwdXQ6IDI0NgoJCQkJCQkJdGhvdWdodHM6IDQ4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE93bmVyc2hpcCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoZXNlIG93bmVyc2hpcCBjaGVja3MgYXJlIGNvcmUgdG8gdGhlIGZpbGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkgZGVmaW5lZCB3aXRoaW4gYGZzL2ludGVybmFsLmhgIGFuZCBpbXBsZW1lbnRlZCBpbiBgZnMvbmFtZWkuY2AuIFNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgZmV3IGtleSBmdW5jdGlvbnM6IGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyYCwgYHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyYCwgYWxvbmcgd2l0aCBzb21lIG90aGVycyBsaWtlIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGFuZCBzb21lIHBlcm1pc3Npb24tcmVsYXRlZCBjaGVja3M6IGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGFuZCBgbWF5X2RlZHVwZV9maWxlYC4KClRoZSBmYWN0IHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzIGBmcy9hZnMvYCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGF0IGBBRlNfRlNgIGlzIGltcGxpY2F0ZWQuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgd2Ugc2hvdWxkIGtlZXAgYW4gZXllIG9uPyBCdXQgdGhlIGNvcmUgb2YgdGhlIG1hdHRlciBzZWVtcyB0byBiZSBpbiBWRlMuCgpBbHJpZ2h0LCB0aGUgcGF0Y2ggYWRkcyB0d28gKm5ldyogaW5vZGUgb3BlcmF0aW9uczogYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAuIFRoZXNlIGFyZSBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIEFGUyBzdWJzeXN0ZW0gYW5kIHRoZW4sIGNydWNpYWxseSwgbW9kaWZpZWQgdG8gYmUgdXNlZCAqd2l0aGluKiB0aGUgVkZTLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBob3cgb3duZXJzaGlwIGlzIGRldGVybWluZWQsIGF0IGxlYXN0IGluIHNvbWUgY2FzZXMuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IHRoZSBWRlMgaW50ZXJhY3RzIHdpdGggb3duZXJzaGlwIGNoZWNrcywgcG90ZW50aWFsbHkgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVGhlIGZhY3QgdGhhdCB0aGUgVkZTIGl0c2VsZiBpcyBiZWluZyBtb2RpZmllZCBpcyBhIGJpZyBmbGFnIGZvciBmdXp6aW5nLCB3aGljaCB3aWxsIGJlIGVzc2VudGlhbCBoZXJlLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcsIGFuZCB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJJiMzOTtsbCBrZWVwIHRvcCBvZiBtaW5kOiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAsIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGFuZCBgbWF5X2RlZHVwZV9maWxlYC4KCkFuZCwgYXMgYSBmaW5hbCBjb25zaWRlcmF0aW9uLCBlbmFibGluZyBgQUZTX0ZTYCBzZWVtcyBlc3NlbnRpYWwgdG8gcHJvcGVyIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE2OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUmIzM0OywKICAgICYjMzQ7dmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O3Zmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O2Fmc19pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDthZnNfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O2Nob3duX29rJiMzNDssCiAgICAmIzM0O2NoZ3JwX29rJiMzNDssCiAgICAmIzM0O21heV9jcmVhdGVfaW5fc3RpY2t5JiMzNDssCiAgICAmIzM0O19fY2hlY2tfc3RpY2t5JiMzNDssCiAgICAmIzM0O21heV9kZWR1cGVfZmlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBhbmQgbW9kaWZpZXMgY29yZSBWRlMgZnVuY3Rpb25zIChsaWtlIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgLCBldGMuKSB0byB1c2UgdGhlbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTIGFuZCBBRlMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUmIzM0OywKICAgICYjMzQ7dmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O3Zmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O2Fmc19pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDthZnNfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O2Nob3duX29rJiMzNDssCiAgICAmIzM0O2NoZ3JwX29rJiMzNDssCiAgICAmIzM0O21heV9jcmVhdGVfaW5fc3RpY2t5JiMzNDssCiAgICAmIzM0O19fY2hlY2tfc3RpY2t5JiMzNDssCiAgICAmIzM0O21heV9kZWR1cGVfZmlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBhbmQgbW9kaWZpZXMgY29yZSBWRlMgZnVuY3Rpb25zIChsaWtlIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgLCBldGMuKSB0byB1c2UgdGhlbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTIGFuZCBBRlMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjRUMTY6MzE6MTEuNDI3MDg0NDgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU1MTY5MzU2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX2lub2RlX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJ2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXJcIixcbiAgICBcInZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJhZnNfaXNfb3duZWRfYnlfbWVcIixcbiAgICBcImFmc19oYXZlX3NhbWVfb3duZXJcIixcbiAgICBcImNob3duX29rXCIsXG4gICAgXCJjaGdycF9va1wiLFxuICAgIFwibWF5X2NyZWF0ZV9pbl9zdGlja3lcIixcbiAgICBcIl9fY2hlY2tfc3RpY2t5XCIsXG4gICAgXCJtYXlfZGVkdXBlX2ZpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBhbmQgbW9kaWZpZXMgY29yZSBWRlMgZnVuY3Rpb25zIChsaWtlIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgLCBldGMuKSB0byB1c2UgdGhlbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTIGFuZCBBRlMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNjozMToxMS40MjcwODk5MTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMzkxODQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQzNDA1NDNjMmJkYzM0MTAwZTIwMzVhZTY0NGYzNTk4ZWZlZDU1MWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTY6MzE6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XFxuaW5kZXggN2M3NTMxNDhhZjg4ODMuLjg5MzQxOWUwMDNlYWY3IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxcbkBAIC00NDUsNiArNDQ1LDkgQEAgQXMgb2Yga2VybmVsIDIuNi4yMiwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOlxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbiBcXHRcXHRpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcXG4gXFx0ICAgICAgICBzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcdFxcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcdFxcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbiBcXHR9O1xcbiBcXG4gQWdhaW4sIGFsbCBtZXRob2RzIGFyZSBjYWxsZWQgd2l0aG91dCBhbnkgbG9ja3MgYmVpbmcgaGVsZCwgdW5sZXNzXFxuQEAgLTYzNCw2ICs2MzcsMjQgQEAgb3RoZXJ3aXNlIG5vdGVkLlxcbiAgICAgICAgIGZpbGVzeXN0ZW0gbXVzdCBkZWZpbmUgdGhpcyBvcGVyYXRpb24gdG8gdXNlXFxuICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy5cXG4gXFxuK2BgaXNfb3duZWRfYnlfbWVgYFxcbitcXHRjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaWxlIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlICdvd25lZCcgYnlcXG4rXFx0dGhlIG93bmVyIG9mIHRoZSBwcm9jZXNzIG9yIGlmIHRoZSBwcm9jZXNzIGhhcyBhIHRva2VuIHRoYXQgZ3JhbnRzXFxuK1xcdGl0IG93bmVyc2hpcCBwcml2aWxlZ2VzLiAgSWYgdW5zZXQsIHRoZSBkZWZhdWx0IGlzIHRvIGNvbXBhcmUgaV91aWRcXG4rXFx0dG8gY3VycmVudF9mc3VpZCgpIC0gYnV0IHRoaXMgbWF5IGdpdmUgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHNvbWVcXG4rXFx0bmV0d29yayBvciBwbHVnLWluIGJsb2NrIGZpbGVzeXN0ZW1zLiAgRm9yIGV4YW1wbGUsIEFGUyBkZXRlcm1pbmVzXFxuK1xcdG93bmVyc2hpcCBlbnRpcmVseSBhY2NvcmRpbmcgdG8gYW4gb2J0YWluZWQgdG9rZW4gYW5kIGlfdWlkIG1heSBub3RcXG4rXFx0ZXZlbiBiZSBmcm9tIHRoZSBzYW1lIElEIHNwYWNlIGFzIGN1cnJlbnRfdWlkKCkuXFxuK1xcbitgYGhhdmVfc2FtZV9vd25lcmBgXFxuK1xcdGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBpbW1lZGlhdGVcXG4rXFx0cGFyZW50IG9uIHRoZSBwYXRoIHdhbGtlZC4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBzaW1wbHlcXG4rXFx0Y29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEc1xcbitcXHRvZiBib3RoIC0gYnV0IHRoZXNlIGFyZSBhIDY0LWJpdCB2YWx1ZXMgb24gc29tZSB2YXJpYW50cyB0aGF0IG1pZ2h0XFxuK1xcdG5vdCBmaXQgaW50byBhIGt1aWRfdCBhbmQgY2lmcyBoYXMgR1VJRHMgdGhhdCBjYW5ub3QgYmUgY29tcGFyZWQgdG9cXG4rXFx0a3VpZF90LlxcbitcXG4rXFxuIFRoZSBBZGRyZXNzIFNwYWNlIE9iamVjdFxcbiA9PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXIuYyBiL2ZzL2Fmcy9kaXIuY1xcbmluZGV4IDZkZjU2ZmU5MTYzZmQ3Li5lZTJmNWVjMGIyYzY3ZCAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZGlyLmNcXG4rKysgYi9mcy9hZnMvZGlyLmNcXG5AQCAtNjksNiArNjksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5wZXJtaXNzaW9uXFx0PSBhZnNfcGVybWlzc2lvbixcXG4gXFx0LmdldGF0dHJcXHQ9IGFmc19nZXRhdHRyLFxcbiBcXHQuc2V0YXR0clxcdD0gYWZzX3NldGF0dHIsXFxuK1xcdC5pc19vd25lZF9ieV9tZVxcdD0gYWZzX2lzX293bmVkX2J5X21lLFxcbitcXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcXG4gfTtcXG4gXFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2Rpcl9hb3BzID0ge1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUuY1xcbmluZGV4IDA0Njc3NDJiZmVlZTM0Li5iYTQ0NDkzY2NhZjZlZSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZmlsZS5jXFxuKysrIGIvZnMvYWZzL2ZpbGUuY1xcbkBAIC00OSw2ICs0OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5nZXRhdHRyXFx0PSBhZnNfZ2V0YXR0cixcXG4gXFx0LnNldGF0dHJcXHQ9IGFmc19zZXRhdHRyLFxcbiBcXHQucGVybWlzc2lvblxcdD0gYWZzX3Blcm1pc3Npb24sXFxuK1xcdC5pc19vd25lZF9ieV9tZVxcdD0gYWZzX2lzX293bmVkX2J5X21lLFxcbitcXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcXG4gfTtcXG4gXFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2ZpbGVfYW9wcyA9IHtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuY1xcbmluZGV4IDE0ZjM5YTliZWE2Y2ZlLi5hZjg1YTg4ZDk0M2RkMSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvaW5vZGUuY1xcbisrKyBiL2ZzL2Fmcy9pbm9kZS5jXFxuQEAgLTkxLDYgKzkxLDcgQEAgc3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsXFxuIFxcdGlub2RlLVxcdTAwM2VpX2ZsYWdzIHw9IFNfTk9BVElNRTtcXG4gXFx0aW5vZGUtXFx1MDAzZWlfdWlkID0gbWFrZV9rdWlkKFxcdTAwMjZpbml0X3VzZXJfbnMsIHN0YXR1cy1cXHUwMDNlb3duZXIpO1xcbiBcXHRpbm9kZS1cXHUwMDNlaV9naWQgPSBtYWtlX2tnaWQoXFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVxcdTAwM2Vncm91cCk7XFxuK1xcdGlub2RlLVxcdTAwM2VpX29wZmxhZ3MgfD0gSU9QX09XTkVSU0hJUF9PVkVSUklERTtcXG4gXFx0c2V0X25saW5rKFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMuaW5vZGUsIHN0YXR1cy1cXHUwMDNlbmxpbmspO1xcbiBcXG4gXFx0aV9zaXplX3dyaXRlKGlub2RlLCBzdGF0dXMtXFx1MDAzZXNpemUpO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oXFxuaW5kZXggNjAxZjAxZTVjMTVmY2MuLmUxMGNmNzYzNmY2NWI2IDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oXFxuKysrIGIvZnMvYWZzL2ludGVybmFsLmhcXG5AQCAtMTUzMCw2ICsxNTMwLDkgQEAgZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleShzdHJ1Y3QgYWZzX2NlbGwgKik7XFxuIGV4dGVybiBzdHJ1Y3Qga2V5ICphZnNfcmVxdWVzdF9rZXlfcmN1KHN0cnVjdCBhZnNfY2VsbCAqKTtcXG4gZXh0ZXJuIGludCBhZnNfY2hlY2tfcGVybWl0KHN0cnVjdCBhZnNfdm5vZGUgKiwgc3RydWN0IGtleSAqLCBhZnNfYWNjZXNzX3QgKik7XFxuIGV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcXG4raW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuK2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcXG4rXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZTIpO1xcbiBleHRlcm4gdm9pZCBfX2V4aXQgYWZzX2NsZWFuX3VwX3Blcm1pdF9jYWNoZSh2b2lkKTtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZWN1cml0eS5jIGIvZnMvYWZzL3NlY3VyaXR5LmNcXG5pbmRleCA2ZDAwZDYyYTY1ZWRmNi4uNzA5MmY1YWNkY2Q2YWMgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL3NlY3VyaXR5LmNcXG4rKysgYi9mcy9hZnMvc2VjdXJpdHkuY1xcbkBAIC01MTAsNiArNTEwLDUyIEBAIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLypcXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5ICdtZScgLSB3aGF0ZXZlciB0aGF0IG1lYW5zIGZvciB0aGVcXG4rICogZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyB0aGF0IHRoZSBmaWxlIGlzIG93bmVkIGJ5IHRoZVxcbisgKiBBRlMgdXNlciByZXByZXNlbnRlZCBieSB0aGUgUnggU2VjdXJpdHkgQ2xhc3MgdG9rZW4gaGVsZCBpbiBhIGtleS4gIFJldHVybnNcXG4rICogMCBpZiBvd25lZCBieSBtZSwgMSBpZiBub3Q7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci5cXG4rICovXFxuK2ludCBhZnNfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShpbm9kZSk7XFxuK1xcdGFmc19hY2Nlc3NfdCBhY2Nlc3M7XFxuK1xcdHN0cnVjdCBrZXkgKmtleTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbitcXHRcXHRyZXR1cm4gMTsgLyogVGhlIEFETUlOIHJpZ2h0IGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgZGlyZWN0b3JpZXMuICovXFxuK1xcbitcXHRrZXkgPSBhZnNfcmVxdWVzdF9rZXkodm5vZGUtXFx1MDAzZXZvbHVtZS1cXHUwMDNlY2VsbCk7XFxuK1xcdGlmIChJU19FUlIoa2V5KSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoa2V5KTtcXG4rXFxuK1xcdC8qIEdldCB0aGUgYWNjZXNzIHJpZ2h0cyBmb3IgdGhlIGtleSBvbiB0aGlzIGZpbGUuICovXFxuK1xcdHJldCA9IGFmc19jaGVja19wZXJtaXQodm5vZGUsIGtleSwgXFx1MDAyNmFjY2Vzcyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXG4rXFx0LyogV2UgZ2V0IHRoZSBBRE1JTklTVEVSIGJpdCBpZiB3ZSBvd24gdGhlIGZpbGUuICovXFxuK1xcdHJldCA9IChhY2Nlc3MgXFx1MDAyNiBBRlNfQUNFX0FETUlOSVNURVIpID8gMCA6IDE7XFxuK2Vycm9yOlxcbitcXHRrZXlfcHV0KGtleSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qXFxuKyAqIERldGVybWluZSBpZiBhIGZpbGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBwYXJlbnQgLSB3aGF0ZXZlciB0aGF0IG1lYW5zXFxuKyAqIGZvciB0aGUgZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyBjb21wYXJpbmcgdGhlaXIgQUZTXFxuKyAqIFVJRHMuICBSZXR1cm5zIDAgaWYgc2FtZSwgMSBpZiBub3Qgc2FtZTsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLlxcbisgKi9cXG4raW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxcbitcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlMilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTEgPSBBRlNfRlNfSShpbm9kZTEpO1xcbitcXHRjb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTIgPSBBRlNfRlNfSShpbm9kZTIpO1xcbitcXG4rXFx0cmV0dXJuIHZub2RlMS1cXHUwMDNlc3RhdHVzLm93bmVyICE9IHZub2RlMi1cXHUwMDNlc3RhdHVzLm93bmVyO1xcbit9XFxuK1xcbiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpXFxuIHtcXG4gXFx0aW50IGk7XFxuZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuY1xcbmluZGV4IDRmNDM3ZmFiYjdmMGY1Li5iN2U4YjVkNDlhOWZlNiAxMDA2NDRcXG4tLS0gYS9mcy9hdHRyLmNcXG4rKysgYi9mcy9hdHRyLmNcXG5AQCAtMTYsNiArMTYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmNudGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gXFxuIC8qKlxcbiAgKiBzZXRhdHRyX3Nob3VsZF9kcm9wX3NnaWQgLSBkZXRlcm1pbmUgd2hldGhlciB0aGUgc2V0Z2lkIGJpdCBuZWVkcyB0byBiZVxcbkBAIC05MSwxOSArOTIsMjEgQEAgRVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpO1xcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXFxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxcbitzdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxcbiB7XFxuIFxcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHZmc3VpZF9lcShpYV92ZnN1aWQsIHZmc3VpZCkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0aWYgKCF2ZnN1aWRfdmFsaWQodmZzdWlkKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FUEVSTTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTExOCwyMyArMTIxLDI3IEBAIHN0YXRpYyBib29sIGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXFxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgY2hncnBfb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxcbitzdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxcbiB7XFxuIFxcdHZmc2dpZF90IHZmc2dpZCA9IGlfZ2lkX2ludG9fdmZzZ2lkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIHtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJldCA9PSAwKSB7XFxuIFxcdFxcdGlmICh2ZnNnaWRfZXEoaWFfdmZzZ2lkLCB2ZnNnaWQpKVxcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGlmICh2ZnNnaWRfaW5fZ3JvdXBfcChpYV92ZnNnaWQpKVxcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0aWYgKCF2ZnNnaWRfdmFsaWQodmZzZ2lkKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FUEVSTTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE2Myw2ICsxNzAsNyBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcXG4gXFx0dW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0ci1cXHUwMDNlaWFfdmFsaWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBGaXJzdCBjaGVjayBzaXplIGNvbnN0cmFpbnRzLiAgVGhlc2UgY2FuJ3QgYmUgb3ZlcnJpZGRlbiB1c2luZ1xcbkBAIC0xODksMTQgKzE5NywxOCBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdFxcdGdvdG8ga2lsbF9wcml2O1xcbiBcXG4gXFx0LyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG93bi4gKi9cXG4tXFx0aWYgKChpYV92YWxpZCBcXHUwMDI2IEFUVFJfVUlEKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIWNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cXHUwMDNlaWFfdmZzdWlkKSlcXG4tXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFx0aWYgKGlhX3ZhbGlkIFxcdTAwMjYgQVRUUl9VSUQpIHtcXG4rXFx0XFx0cmV0ID0gY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVxcdTAwM2VpYV92ZnN1aWQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4gXFx0LyogTWFrZSBzdXJlIGNhbGxlciBjYW4gY2hncnAuICovXFxuLVxcdGlmICgoaWFfdmFsaWQgXFx1MDAyNiBBVFRSX0dJRCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICFjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItXFx1MDAzZWlhX3Zmc2dpZCkpXFxuLVxcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcdGlmIChpYV92YWxpZCBcXHUwMDI2IEFUVFJfR0lEKSB7XFxuK1xcdFxcdHJldCA9IGNoZ3JwX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cXHUwMDNlaWFfdmZzZ2lkKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovXFxuIFxcdGlmIChpYV92YWxpZCBcXHUwMDI2IEFUVFJfTU9ERSkge1xcbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xcbmluZGV4IGU2OGE3NmZmOTJhMzg2Li4zZjMyZTczYWFlZGEyOCAxMDA2NDRcXG4tLS0gYS9mcy9jb3JlZHVtcC5jXFxuKysrIGIvZnMvY29yZWR1bXAuY1xcbkBAIC05NTQsNyArOTU0LDcgQEAgc3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcXG4gXFx0ICogZmlsZXN5c3RlbS5cXG4gXFx0ICovXFxuIFxcdGlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XFxuLVxcdGlmICghdmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkge1xcbitcXHRpZiAodmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSkgIT0gMCkge1xcbiBcXHRcXHRjb3JlZHVtcF9yZXBvcnRfZmFpbHVyZShcXFwiQ29yZSBkdW1wIHRvICVzIGFib3J0ZWQ6IGNhbm5vdCBwcmVzZXJ2ZSBmaWxlIG93bmVyXFxcIiwgY24tXFx1MDAzZWNvcmVuYW1lKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jXFxuaW5kZXggMzFjNWI5ZWUzYTgxZGYuLmE3ZWM4MzBhYjY4M2YwIDEwMDY0NFxcbi0tLSBhL2ZzL2lub2RlLmNcXG4rKysgYi9mcy9pbm9kZS5jXFxuQEAgLTI3NTAsMTYgKzI3NTAsMTkgQEAgRVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X293bmVyKTtcXG4gICogT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGVcXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKi9cXG4tYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG4rYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdHZmc3VpZF90IHZmc3VpZDtcXG4gXFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICpucztcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0ID09IDApXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcXG4gXFx0bnMgPSBjdXJyZW50X3VzZXJfbnMoKTtcXG4gXFx0aWYgKHZmc3VpZF9oYXNfbWFwcGluZyhucywgdmZzdWlkKSBcXHUwMDI2XFx1MDAyNiBuc19jYXBhYmxlKG5zLCBDQVBfRk9XTkVSKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oXFxuaW5kZXggMzU1ZDkzZjkyMjA4NjEuLmJlNDVjYzYzODg2MTkyIDEwMDY0NFxcbi0tLSBhL2ZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9pbnRlcm5hbC5oXFxuQEAgLTUxLDYgKzUxLDcgQEAgZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbiAvKlxcbiAgKiBuYW1laS5jXFxuICAqL1xcbitpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KTtcXG4gaW50IGZpbGVuYW1lX3JtZGlyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jXFxuaW5kZXggNmU0ZmY3ZmNlYzA1M2UuLjAyZjgxMGRjOWU3ZTdhIDEwMDY0NFxcbi0tLSBhL2ZzL2xvY2tzLmNcXG4rKysgYi9mcy9sb2Nrcy5jXFxuQEAgLTY4LDYgKzY4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9maWxlbG9jay5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuIFxcbiBzdGF0aWMgc3RydWN0IGZpbGVfbG9jayAqZmlsZV9sb2NrKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKVxcbiB7XFxuQEAgLTIxMzYsMTAgKzIxMzcsMTIgQEAgaW50XFxuIHZmc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGFyZywgc3RydWN0IGZpbGVfbGVhc2UgKipsZWFzZSwgdm9pZCAqKnByaXYpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XFxuLVxcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XFxuIFxcdGludCBlcnJvcjtcXG4gXFxuLVxcdGlmICgoIXZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSkgXFx1MDAyNlxcdTAwMjYgIWNhcGFibGUoQ0FQX0xFQVNFKSlcXG4rXFx0ZXJyb3IgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoZmlsZV9tbnRfaWRtYXAoZmlscCksIGlub2RlKTtcXG4rXFx0aWYgKGVycm9yIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXHRpZiAoZXJyb3IgIT0gMCBcXHUwMDI2XFx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0ZXJyb3IgPSBzZWN1cml0eV9maWxlX2xvY2soZmlscCwgYXJnKTtcXG4gXFx0aWYgKGVycm9yKVxcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xcbmluZGV4IDE5Y2U0M2M5YTZlNjYyLi43MmY5NGQyMDRmOTNmNCAxMDA2NDRcXG4tLS0gYS9mcy9uYW1laS5jXFxuKysrIGIvZnMvbmFtZWkuY1xcbkBAIC01NSw4ICs1NSw4IEBAXFxuICAqIFRoZSBuZXcgY29kZSByZXBsYWNlcyB0aGUgb2xkIHJlY3Vyc2l2ZSBzeW1saW5rIHJlc29sdXRpb24gd2l0aFxcbiAgKiBhbiBpdGVyYXRpdmUgb25lIChpbiBjYXNlIG9mIG5vbi1uZXN0ZWQgc3ltbGluayBjaGFpbnMpLiAgSXQgZG9lc1xcbiAgKiB0aGlzIHdpdGggY2FsbHMgdG8gXFx1MDAzY2ZzXFx1MDAzZV9mb2xsb3dfbGluaygpLlxcbi0gKiBBcyBhIHNpZGUgZWZmZWN0LCBkaXJfbmFtZWkoKSwgX25hbWVpKCkgYW5kIGZvbGxvd19saW5rKCkgYXJlIG5vdyBcXG4tICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbCBcXG4rICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3dcXG4rICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbFxcbiAgKiB0aGUgc3BlY2lhbCBjYXNlcyBvZiB0aGUgZm9ybWVyIGNvZGUuXFxuICAqXFxuICAqIFdpdGggdGhlIG5ldyBkY2FjaGUsIHRoZSBwYXRobmFtZSBpcyBzdG9yZWQgYXQgZWFjaCBpbm9kZSwgYXQgbGVhc3QgYXNcXG5AQCAtMTI1NSw2ICsxMjU1LDcyIEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqL1xcbiBcXG4rLypcXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5IHRoZSBwcm9jZXNzIChhbGxvd2luZyBmb3IgZnN1aWQgb3ZlcnJpZGUpLFxcbisgKiByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtXFxuKyAqIG1ha2luZyB0aGUgZGV0ZXJtaW5hdGlvbi5cXG4rICovXFxuK2ludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0aWYgKHVubGlrZWx5KGlub2RlLVxcdTAwM2VpX29wZmxhZ3MgXFx1MDAyNiBJT1BfT1dORVJTSElQX09WRVJSSURFKSlcXG4rXFx0XFx0cmV0dXJuIGlub2RlLVxcdTAwM2VpX29wLVxcdTAwM2Vpc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cXG4rfVxcbitcXG4rLypcXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IGRpcmVjdG9yeSwgcmV0dXJuaW5nXFxuKyAqIDAgaWYgc28sIDEgaWYgbm90IGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmdcXG4rICogdGhlIGRldGVybWluYXRpb24uXFxuKyAqL1xcbitzdGF0aWMgaW50IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4re1xcbitcXHRpZiAodW5saWtlbHkoaW5vZGUtXFx1MDAzZWlfb3BmbGFncyBcXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKSB7XFxuK1xcdFxcdHN0cnVjdCBkZW50cnkgKnBhcmVudDtcXG4rXFx0XFx0c3RydWN0IGlub2RlICpkaXI7XFxuK1xcdFxcdGludCByZXQ7XFxuK1xcbitcXHRcXHRpZiAoaW5vZGUgIT0gbmQtXFx1MDAzZWlub2RlKSB7XFxuK1xcdFxcdFxcdGRpciA9IG5kLVxcdTAwM2Vpbm9kZTtcXG4rXFx0XFx0XFx0cmV0ID0gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XFxuK1xcdFxcdH0gZWxzZSBpZiAobmQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSkge1xcbitcXHRcXHRcXHRwYXJlbnQgPSBSRUFEX09OQ0UobmQtXFx1MDAzZXBhdGguZGVudHJ5KTtcXG4rXFx0XFx0XFx0ZGlyID0gUkVBRF9PTkNFKHBhcmVudC1cXHUwMDNlZF9pbm9kZSk7XFxuK1xcdFxcdFxcdGlmICghZGlyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVDSElMRDtcXG4rXFx0XFx0XFx0cmV0ID0gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHBhcmVudCA9IGRnZXRfcGFyZW50KG5kLVxcdTAwM2VwYXRoLmRlbnRyeSk7XFxuK1xcdFxcdFxcdGRpciA9IHBhcmVudC1cXHUwMDNlZF9pbm9kZTtcXG4rXFx0XFx0XFx0cmV0ID0gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XFxuK1xcdFxcdFxcdGRwdXQocGFyZW50KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAodmZzdWlkX3ZhbGlkKG5kLVxcdTAwM2VkaXJfdmZzdWlkKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdmZzdWlkX2VxKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIG5kLVxcdTAwM2VkaXJfdmZzdWlkKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cXG4rfVxcbitcXG4rLypcXG4rICogRGV0ZXJtaW5lIGlmIHR3byBpbm9kZXMgaGF2ZSB0aGUgc2FtZSBvd25lciwgcmV0dXJuaW5nIDAgaWYgc28sIDEgaWYgbm90IGFuZFxcbisgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uXFxuKyAqL1xcbitzdGF0aWMgaW50IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcilcXG4re1xcbitcXHRpZiAodW5saWtlbHkoaW5vZGUtXFx1MDAzZWlfb3BmbGFncyBcXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKVxcbitcXHRcXHRyZXR1cm4gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XFxuK1xcdGlmICh2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSxcXG4rXFx0XFx0ICAgICAgaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGRpcikpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqL1xcbit9XFxuK1xcbiAvKipcXG4gICogbWF5X2ZvbGxvd19saW5rIC0gQ2hlY2sgc3ltbGluayBmb2xsb3dpbmcgZm9yIHVuc2FmZSBzaXR1YXRpb25zXFxuICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcXG5AQCAtMTI3MSwyNyArMTMzNywyOCBAQCBmc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpO1xcbiAgKlxcbiAgKiBSZXR1cm5zIDAgaWYgZm9sbG93aW5nIHRoZSBzeW1saW5rIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG4rc3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xcbi1cXHR2ZnN1aWRfdCB2ZnN1aWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAoIXN5c2N0bF9wcm90ZWN0ZWRfc3ltbGlua3MpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWRtYXAgPSBtbnRfaWRtYXAobmQtXFx1MDAzZXBhdGgubW50KTtcXG4tXFx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcXG4tXFx0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4gXFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IG5vdCBzdGlja3kgYW5kIHdvcmxkLXdyaXRhYmxlLiAqL1xcbiBcXHRpZiAoKG5kLVxcdTAwM2VkaXJfbW9kZSBcXHUwMDI2IChTX0lTVlRYfFNfSVdPVEgpKSAhPSAoU19JU1ZUWHxTX0lXT1RIKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRpZG1hcCA9IG1udF9pZG1hcChuZC1cXHUwMDNlcGF0aC5tbnQpO1xcbitcXHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cXG4rXFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdC8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBhbmQgbGluayBvd25lciBtYXRjaC4gKi9cXG4tXFx0aWYgKHZmc3VpZF92YWxpZChuZC1cXHUwMDNlZGlyX3Zmc3VpZCkgXFx1MDAyNlxcdTAwMjYgdmZzdWlkX2VxKG5kLVxcdTAwM2VkaXJfdmZzdWlkLCB2ZnN1aWQpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRpZiAobmQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSlcXG4gXFx0XFx0cmV0dXJuIC1FQ0hJTEQ7XFxuQEAgLTEzODksMTIgKzE0NTYsMTIgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXFxuICAqXFxuICAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOlxcbi0gKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkXFxuLSAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xcbi0gKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxcbi0gKiAgIC0gd2UgZG9uJ3Qgb3duIHRoZSBmaWxlXFxuKyAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWQsXFxuKyAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cyxcXG4rICogICAtIHdlIGFyZSBpbiBhIHN0aWNreSBkaXJlY3RvcnksXFxuKyAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlLFxcbisgKiAgIC0gd2UgZG9uJ3Qgb3duIHRoZSBmaWxlIGFuZFxcbiAgKiAgIC0gdGhlIG93bmVyIG9mIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBvd24gdGhlIGZpbGVcXG4tICogICAtIHRoZSBkaXJlY3RvcnkgaXMgd29ybGQgd3JpdGFibGVcXG4gICogSWYgdGhlIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgc2V0IHRvIDJcXG4gICogdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGhhdmUgdG8gYmUgd29ybGQgd3JpdGFibGU6IGJlaW5nIGdyb3VwIHdyaXRhYmxlIHdpbGxcXG4gICogYmUgZW5vdWdoLlxcbkBAIC0xNDA1LDEzICsxNDcyLDQ1IEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcXG4gICogT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGVcXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKlxcbisgKiBGb3IgYSBmaWxlc3lzdGVtIChlLmcuIGEgbmV0d29yayBmaWxlc3lzdGVtKSB0aGF0IGhhcyBhIHNlcGFyYXRlIElEIHNwYWNlXFxuKyAqIGFuZCBoYXMgZm9yZWlnbiBJRHMgKG1heWJlIGV2ZW4gbm9uLWludGVnZXIgSURzKSwgaV91aWQgY2Fubm90IGJlIGNvbXBhcmVkXFxuKyAqIHRvIGN1cnJlbnRfZnN1aWQoKSBhbmQgbWF5IG5vdCBiZSBkaXJlY3RseSBjb21wYXJhYmxlIHRvIGFub3RoZXIgaV91aWQuXFxuKyAqIEluc3RlYWQsIHRoZSBmaWxlc3lzdGVtIGlzIGFza2VkIHRvIHBlcmZvcm0gdGhlIGNvbXBhcmlzb25zLiAgV2l0aCBuZXR3b3JrXFxuKyAqIGZpbGVzeXN0ZW1zLCB0aGVyZSBhbHNvIGV4aXN0cyB0aGUgcG9zc2liaWxpdHkgb2YgZG9pbmcgYW5vbnltb3VzXFxuKyAqIG9wZXJhdGlvbnMgYW5kIGhhdmluZyBhbm9ueW1vdXNseS1vd25lZCBvYmplY3RzLlxcbisgKlxcbisgKiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zOlxcbisgKlxcbisgKlxcdFVTRVJcXHRESVJcXHRGSUxFXFx0RklMRVxcdEFMTE9XRURcXG4rICpcXHRcXHRPV05FUlxcdE9XTkVSXFx0U1RBVEVcXG4rICpcXHQ9PT09PT09XFx0PT09PT09PVxcdD09PT09PT1cXHQ9PT09PT09XFx0PT09PT09PVxcbisgKlxcdEFcXHRBXFx0LVxcdE5ld1xcdFllc1xcbisgKlxcdEFcXHRBXFx0QVxcdEV4aXN0c1xcdFllc1xcbisgKlxcdEFcXHRBXFx0Q1xcdEV4aXN0c1xcdE5vXFxuKyAqXFx0QVxcdEJcXHQtXFx0TmV3XFx0WWVzXFxuKyAqXFx0QVxcdEJcXHRBXFx0RXhpc3RzXFx0WWVzLCBGTz09VVxcbisgKlxcdEFcXHRCXFx0QlxcdEV4aXN0c1xcdFllcywgRk89PURPXFxuKyAqXFx0QVxcdEJcXHRDXFx0RXhpc3RzXFx0Tm9cXG4rICpcXHRBXFx0YW5vblsxXVxcdC1cXHROZXdcXHRZZXNcXG4rICpcXHRBXFx0YW5vblsxXVxcdEFcXHRFeGlzdHNcXHRZZXNcXG4rICpcXHRBXFx0YW5vblsxXVxcdENcXHRFeGlzdHNcXHROb1xcbisgKlxcdGFub25cXHRBXFx0LVxcdE5ld1xcdFllc1xcbisgKlxcdGFub25cXHRBXFx0QVxcdEV4aXN0c1xcdFllcywgRk89PURPXFxuKyAqXFx0YW5vblxcdGFub25bMV1cXHQtXFx0TmV3XFx0WWVzXFxuKyAqXFx0YW5vblxcdGFub25bMV1cXHQtXFx0RXhpc3RzXFx0Tm9cXG4rICpcXHRhbm9uXFx0QVxcdEFcXHRFeGlzdHNcXHRZZXMsIEZPPT1ET1xcbisgKlxcdGFub25cXHRBXFx0Q1xcdEV4aXN0c1xcdE5vXFxuKyAqXFx0YW5vblxcdEFcXHRhbm9uXFx0RXhpc3RzXFx0Tm9cXG4rICpcXG4rICogWzFdIENhbiBhbm9ueW1vdXNseS1vd25lZCBkaXJzIGJlIHN0aWNreT9cXG4rICpcXG4gICogUmV0dXJucyAwIGlmIHRoZSBvcGVuIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci5cXG4gICovXFxuIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmNvbnN0IGlub2RlKVxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdHVtb2RlX3QgZGlyX21vZGUgPSBuZC1cXHUwMDNlZGlyX21vZGU7XFxuLVxcdHZmc3VpZF90IGRpcl92ZnN1aWQgPSBuZC1cXHUwMDNlZGlyX3Zmc3VpZCwgaV92ZnN1aWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAobGlrZWx5KCEoZGlyX21vZGUgXFx1MDAyNiBTX0lTVlRYKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xNDIyLDEzICsxNTIxLDEzIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbiBcXHRpZiAoU19JU0ZJRk8oaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aV92ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xcbi1cXG4tXFx0aWYgKHZmc3VpZF9lcShpX3Zmc3VpZCwgZGlyX3Zmc3VpZCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3Zmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRpZiAobGlrZWx5KGRpcl9tb2RlIFxcdTAwMjYgMDAwMikpIHtcXG4gXFx0XFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsIFxcXCJzdGlja3lfY3JlYXRlXFxcIik7XFxuQEAgLTM2NDUsMTIgKzM3NDQsMTQgQEAgRVhQT1JUX1NZTUJPTCh1c2VyX3BhdGhfYXQpO1xcbiBpbnQgX19jaGVja19zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuLVxcdGt1aWRfdCBmc3VpZCA9IGN1cnJlbnRfZnN1aWQoKTtcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBmc3VpZCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGRpciksIGZzdWlkKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRyZXR1cm4gIWNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9GT1dORVIpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woX19jaGVja19zdGlja3kpO1xcbmRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5jIGIvZnMvcmVtYXBfcmFuZ2UuY1xcbmluZGV4IDI2YWZiYmJmYjEwYzJlLi45ZWVlOTNjMjcwMDEyNSAxMDA2NDRcXG4tLS0gYS9mcy9yZW1hcF9yYW5nZS5jXFxuKysrIGIvZnMvcmVtYXBfcmFuZ2UuY1xcbkBAIC00MTMsMjAgKzQxMywyMiBAQCBsb2ZmX3QgdmZzX2Nsb25lX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXFxuIEVYUE9SVF9TWU1CT0wodmZzX2Nsb25lX2ZpbGVfcmFuZ2UpO1xcbiBcXG4gLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgYWxsb3dlZCB0byBkZWR1cGUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgKi9cXG4tc3RhdGljIGJvb2wgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbitzdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9XUklURSlcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdGlmICghaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gLUVQRVJNO1xcbiB9XFxuIFxcbiBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLFxcbkBAIC00NTksOCArNDYxLDggQEAgbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IC1FUEVSTTtcXG4tXFx0aWYgKCFtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpKVxcbitcXHRyZXQgPSBtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfZHJvcF93cml0ZTtcXG4gXFxuIFxcdHJldCA9IC1FWERFVjtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXFxuaW5kZXggNTBjZTczMWEyYjc4ZjEuLjgwMTNjMTNhMzUzZDY3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZnMuaFxcbkBAIC02MjgsNiArNjI4LDcgQEAgaXNfdW5jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKmFjbClcXG4gI2RlZmluZSBJT1BfQ0FDSEVEX0xJTktcXHRcXHQweDAwNDBcXG4gI2RlZmluZSBJT1BfRkFTVFBFUk1fTUFZX0VYRUNcXHQweDAwODBcXG4gI2RlZmluZSBJT1BfRkxDVFhcXHRcXHQweDAxMDBcXG4rI2RlZmluZSBJT1BfT1dORVJTSElQX09WRVJSSURFXFx0MHgwMjAwXFx0LyogVXNlIC1cXHUwMDNlaXNfb3duZWRfYnlfbWUoKSBhbmQgLVxcdTAwM2VoYXZlX3NhbWVfb3duZXIoKSAqL1xcbiBcXG4gLypcXG4gICogSW5vZGUgc3RhdGUgYml0cy4gIFByb3RlY3RlZCBieSBpbm9kZS1cXHUwMDNlaV9sb2NrXFxuQEAgLTE3NTUsOCArMTc1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX3dyaXRlX25vdF9zdGFydGVkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRyZXR1cm4gc2Jfd3JpdGVfbm90X3N0YXJ0ZWQoZmlsZV9pbm9kZShmaWxlKS1cXHUwMDNlaV9zYik7XFxuIH1cXG4gXFxuLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbitib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBcXG4gLypcXG4gICogVkZTIGhlbHBlciBmdW5jdGlvbnMuLlxcbkBAIC0yMDM2LDYgKzIwMzYsOSBAQCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB7XFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XFxuIFxcdGludCAoKmZpbGVhdHRyX2dldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbiBcXHRzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGlub2RlICppbm9kZTIpO1xcbiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcXG4gXFxuIC8qIERpZCB0aGUgZHJpdmVyIHByb3ZpZGUgdmFsaWQgbW1hcCBob29rIGNvbmZpZ3VyYXRpb24/ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE2OjMxOjEyLjI2MjA2NTM2MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY0NjgxOTQ1NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19pbm9kZV9pc19vd25lZF9ieV9tZVwiLFxuICAgIFwidmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJ2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lclwiLFxuICAgIFwiYWZzX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJhZnNfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJjaG93bl9va1wiLFxuICAgIFwiY2hncnBfb2tcIixcbiAgICBcIm1heV9jcmVhdGVfaW5fc3RpY2t5XCIsXG4gICAgXCJfX2NoZWNrX3N0aWNreVwiLFxuICAgIFwibWF5X2RlZHVwZV9maWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0d28gbmV3IGlub2RlIG9wZXJhdGlvbnMgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgVkZTIG93bmVyc2hpcCBjaGVja3MuIEl0IGltcGxlbWVudHMgdGhlc2Ugb3BlcmF0aW9ucyBpbiB0aGUgQUZTIGZpbGVzeXN0ZW0gYW5kIG1vZGlmaWVzIGNvcmUgVkZTIGZ1bmN0aW9ucyAobGlrZSBgY2hvd25fb2tgLCBgY2hncnBfb2tgLCBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgLCBgbWF5X2RlZHVwZV9maWxlYCwgZXRjLikgdG8gdXNlIHRoZW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFZGUyBhbmQgQUZTIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMzQwNTQzYzJiZGMzNDEwMGUyMDM1YWU2NDRmMzU5OGVmZWQ1NTFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTY6MzE6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbmluZGV4IDdjNzUzMTQ4YWY4ODgzLi44OTM0MTllMDAzZWFmNyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG5AQCAtNDQ1LDYgKzQ0NSw5IEBAIEFzIG9mIGtlcm5lbCAyLjYuMjIsIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgZGVmaW5lZDpcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHRcdGludCAoKmZpbGVhdHRyX2dldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuIFx0ICAgICAgICBzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7XG4rXHRcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4rXHRcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBcdH07XG4gXG4gQWdhaW4sIGFsbCBtZXRob2RzIGFyZSBjYWxsZWQgd2l0aG91dCBhbnkgbG9ja3MgYmVpbmcgaGVsZCwgdW5sZXNzXG5AQCAtNjM0LDYgKzYzNywyNCBAQCBvdGhlcndpc2Ugbm90ZWQuXG4gICAgICAgICBmaWxlc3lzdGVtIG11c3QgZGVmaW5lIHRoaXMgb3BlcmF0aW9uIHRvIHVzZVxuICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy5cbiBcbitgYGlzX293bmVkX2J5X21lYGBcbitcdGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGZpbGUgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgJ293bmVkJyBieVxuK1x0dGhlIG93bmVyIG9mIHRoZSBwcm9jZXNzIG9yIGlmIHRoZSBwcm9jZXNzIGhhcyBhIHRva2VuIHRoYXQgZ3JhbnRzXG4rXHRpdCBvd25lcnNoaXAgcHJpdmlsZWdlcy4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBjb21wYXJlIGlfdWlkXG4rXHR0byBjdXJyZW50X2ZzdWlkKCkgLSBidXQgdGhpcyBtYXkgZ2l2ZSBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc29tZVxuK1x0bmV0d29yayBvciBwbHVnLWluIGJsb2NrIGZpbGVzeXN0ZW1zLiAgRm9yIGV4YW1wbGUsIEFGUyBkZXRlcm1pbmVzXG4rXHRvd25lcnNoaXAgZW50aXJlbHkgYWNjb3JkaW5nIHRvIGFuIG9idGFpbmVkIHRva2VuIGFuZCBpX3VpZCBtYXkgbm90XG4rXHRldmVuIGJlIGZyb20gdGhlIHNhbWUgSUQgc3BhY2UgYXMgY3VycmVudF91aWQoKS5cbitcbitgYGhhdmVfc2FtZV9vd25lcmBgXG4rXHRjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIGFuIGlub2RlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgaW1tZWRpYXRlXG4rXHRwYXJlbnQgb24gdGhlIHBhdGggd2Fsa2VkLiAgSWYgdW5zZXQsIHRoZSBkZWZhdWx0IGlzIHRvIHNpbXBseVxuK1x0Y29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEc1xuK1x0b2YgYm90aCAtIGJ1dCB0aGVzZSBhcmUgYSA2NC1iaXQgdmFsdWVzIG9uIHNvbWUgdmFyaWFudHMgdGhhdCBtaWdodFxuK1x0bm90IGZpdCBpbnRvIGEga3VpZF90IGFuZCBjaWZzIGhhcyBHVUlEcyB0aGF0IGNhbm5vdCBiZSBjb21wYXJlZCB0b1xuK1x0a3VpZF90LlxuK1xuK1xuIFRoZSBBZGRyZXNzIFNwYWNlIE9iamVjdFxuID09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXIuYyBiL2ZzL2Fmcy9kaXIuY1xuaW5kZXggNmRmNTZmZTkxNjNmZDcuLmVlMmY1ZWMwYjJjNjdkIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpci5jXG4rKysgYi9mcy9hZnMvZGlyLmNcbkBAIC02OSw2ICs2OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5wZXJtaXNzaW9uXHQ9IGFmc19wZXJtaXNzaW9uLFxuIFx0LmdldGF0dHJcdD0gYWZzX2dldGF0dHIsXG4gXHQuc2V0YXR0clx0PSBhZnNfc2V0YXR0cixcbitcdC5pc19vd25lZF9ieV9tZVx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXG4rXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcbiB9O1xuIFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2Rpcl9hb3BzID0ge1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9maWxlLmMgYi9mcy9hZnMvZmlsZS5jXG5pbmRleCAwNDY3NzQyYmZlZWUzNC4uYmE0NDQ5M2NjYWY2ZWUgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZmlsZS5jXG4rKysgYi9mcy9hZnMvZmlsZS5jXG5AQCAtNDksNiArNDksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LmdldGF0dHJcdD0gYWZzX2dldGF0dHIsXG4gXHQuc2V0YXR0clx0PSBhZnNfc2V0YXR0cixcbiBcdC5wZXJtaXNzaW9uXHQ9IGFmc19wZXJtaXNzaW9uLFxuK1x0LmlzX293bmVkX2J5X21lXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcbitcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZmlsZV9hb3BzID0ge1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbm9kZS5jIGIvZnMvYWZzL2lub2RlLmNcbmluZGV4IDE0ZjM5YTliZWE2Y2ZlLi5hZjg1YTg4ZDk0M2RkMSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9pbm9kZS5jXG4rKysgYi9mcy9hZnMvaW5vZGUuY1xuQEAgLTkxLDYgKzkxLDcgQEAgc3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsXG4gXHRpbm9kZS1cdTAwM2VpX2ZsYWdzIHw9IFNfTk9BVElNRTtcbiBcdGlub2RlLVx1MDAzZWlfdWlkID0gbWFrZV9rdWlkKFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVx1MDAzZW93bmVyKTtcbiBcdGlub2RlLVx1MDAzZWlfZ2lkID0gbWFrZV9rZ2lkKFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVx1MDAzZWdyb3VwKTtcbitcdGlub2RlLVx1MDAzZWlfb3BmbGFncyB8PSBJT1BfT1dORVJTSElQX09WRVJSSURFO1xuIFx0c2V0X25saW5rKFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlLCBzdGF0dXMtXHUwMDNlbmxpbmspO1xuIFxuIFx0aV9zaXplX3dyaXRlKGlub2RlLCBzdGF0dXMtXHUwMDNlc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxuaW5kZXggNjAxZjAxZTVjMTVmY2MuLmUxMGNmNzYzNmY2NWI2IDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcbisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5AQCAtMTUzMCw2ICsxNTMwLDkgQEAgZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleShzdHJ1Y3QgYWZzX2NlbGwgKik7XG4gZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleV9yY3Uoc3RydWN0IGFmc19jZWxsICopO1xuIGV4dGVybiBpbnQgYWZzX2NoZWNrX3Blcm1pdChzdHJ1Y3QgYWZzX3Zub2RlICosIHN0cnVjdCBrZXkgKiwgYWZzX2FjY2Vzc190ICopO1xuIGV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcbitpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitpbnQgYWZzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsXG4rXHRcdFx0c3RydWN0IGlub2RlICppbm9kZTIpO1xuIGV4dGVybiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpO1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3NlY3VyaXR5LmMgYi9mcy9hZnMvc2VjdXJpdHkuY1xuaW5kZXggNmQwMGQ2MmE2NWVkZjYuLjcwOTJmNWFjZGNkNmFjIDEwMDY0NFxuLS0tIGEvZnMvYWZzL3NlY3VyaXR5LmNcbisrKyBiL2ZzL2Fmcy9zZWN1cml0eS5jXG5AQCAtNTEwLDYgKzUxMCw1MiBAQCBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKlxuKyAqIERldGVybWluZSBpZiBhbiBpbm9kZSBpcyBvd25lZCBieSAnbWUnIC0gd2hhdGV2ZXIgdGhhdCBtZWFucyBmb3IgdGhlXG4rICogZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyB0aGF0IHRoZSBmaWxlIGlzIG93bmVkIGJ5IHRoZVxuKyAqIEFGUyB1c2VyIHJlcHJlc2VudGVkIGJ5IHRoZSBSeCBTZWN1cml0eSBDbGFzcyB0b2tlbiBoZWxkIGluIGEga2V5LiAgUmV0dXJuc1xuKyAqIDAgaWYgb3duZWQgYnkgbWUsIDEgaWYgbm90OyBjYW4gYWxzbyByZXR1cm4gYW4gZXJyb3IuXG4rICovXG4raW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGlub2RlKTtcbitcdGFmc19hY2Nlc3NfdCBhY2Nlc3M7XG4rXHRzdHJ1Y3Qga2V5ICprZXk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbitcdFx0cmV0dXJuIDE7IC8qIFRoZSBBRE1JTiByaWdodCBjaGVjayBkb2Vzbid0IHdvcmsgZm9yIGRpcmVjdG9yaWVzLiAqL1xuK1xuK1x0a2V5ID0gYWZzX3JlcXVlc3Rfa2V5KHZub2RlLVx1MDAzZXZvbHVtZS1cdTAwM2VjZWxsKTtcbitcdGlmIChJU19FUlIoa2V5KSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoa2V5KTtcbitcbitcdC8qIEdldCB0aGUgYWNjZXNzIHJpZ2h0cyBmb3IgdGhlIGtleSBvbiB0aGlzIGZpbGUuICovXG4rXHRyZXQgPSBhZnNfY2hlY2tfcGVybWl0KHZub2RlLCBrZXksIFx1MDAyNmFjY2Vzcyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycm9yO1xuK1xuK1x0LyogV2UgZ2V0IHRoZSBBRE1JTklTVEVSIGJpdCBpZiB3ZSBvd24gdGhlIGZpbGUuICovXG4rXHRyZXQgPSAoYWNjZXNzIFx1MDAyNiBBRlNfQUNFX0FETUlOSVNURVIpID8gMCA6IDE7XG4rZXJyb3I6XG4rXHRrZXlfcHV0KGtleSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKlxuKyAqIERldGVybWluZSBpZiBhIGZpbGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBwYXJlbnQgLSB3aGF0ZXZlciB0aGF0IG1lYW5zXG4rICogZm9yIHRoZSBmaWxlc3lzdGVtLiAgSW4gdGhlIGNhc2Ugb2YgQUZTLCB0aGlzIG1lYW5zIGNvbXBhcmluZyB0aGVpciBBRlNcbisgKiBVSURzLiAgUmV0dXJucyAwIGlmIHNhbWUsIDEgaWYgbm90IHNhbWU7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci5cbisgKi9cbitpbnQgYWZzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsXG4rXHRcdFx0c3RydWN0IGlub2RlICppbm9kZTIpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUxID0gQUZTX0ZTX0koaW5vZGUxKTtcbitcdGNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlMiA9IEFGU19GU19JKGlub2RlMik7XG4rXG4rXHRyZXR1cm4gdm5vZGUxLVx1MDAzZXN0YXR1cy5vd25lciAhPSB2bm9kZTItXHUwMDNlc3RhdHVzLm93bmVyO1xuK31cbitcbiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpXG4ge1xuIFx0aW50IGk7XG5kaWZmIC0tZ2l0IGEvZnMvYXR0ci5jIGIvZnMvYXR0ci5jXG5pbmRleCA0ZjQzN2ZhYmI3ZjBmNS4uYjdlOGI1ZDQ5YTlmZTYgMTAwNjQ0XG4tLS0gYS9mcy9hdHRyLmNcbisrKyBiL2ZzL2F0dHIuY1xuQEAgLTE2LDYgKzE2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZWxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbisjaW5jbHVkZSBcImludGVybmFsLmhcIlxuIFxuIC8qKlxuICAqIHNldGF0dHJfc2hvdWxkX2Ryb3Bfc2dpZCAtIGRldGVybWluZSB3aGV0aGVyIHRoZSBzZXRnaWQgYml0IG5lZWRzIHRvIGJlXG5AQCAtOTEsMTkgKzkyLDIxIEBAIEVYUE9SVF9TWU1CT0woc2V0YXR0cl9zaG91bGRfZHJvcF9zdWlkZ2lkKTtcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXG4gICogcGVyZm9ybWVkIG9uIHRoZSByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuXG4gICovXG4tc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tXHRcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxuK3N0YXRpYyBpbnQgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnN1aWRfdCBpYV92ZnN1aWQpXG4ge1xuIFx0dmZzdWlkX3QgdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgdmZzdWlkX2VxKGlhX3Zmc3VpZCwgdmZzdWlkKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbiBcdGlmIChjYXBhYmxlX3dydF9pbm9kZV91aWRnaWQoaWRtYXAsIGlub2RlLCBDQVBfQ0hPV04pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0cmV0dXJuIDA7XG4gXHRpZiAoIXZmc3VpZF92YWxpZCh2ZnN1aWQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG5zX2NhcGFibGUoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX3VzZXJfbnMsIENBUF9DSE9XTikpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0cmV0dXJuIGZhbHNlO1xuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAtRVBFUk07XG4gfVxuIFxuIC8qKlxuQEAgLTExOCwyMyArMTIxLDI3IEBAIHN0YXRpYyBib29sIGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuICAqIHBlcm1pc3Npb25zLiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmVcbiAgKiBwZXJmb3JtZWQgb24gdGhlIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC5cbiAgKi9cbi1zdGF0aWMgYm9vbCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0ICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnNnaWRfdCBpYV92ZnNnaWQpXG4rc3RhdGljIGludCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc2dpZF90IGlhX3Zmc2dpZClcbiB7XG4gXHR2ZnNnaWRfdCB2ZnNnaWQgPSBpX2dpZF9pbnRvX3Zmc2dpZChpZG1hcCwgaW5vZGUpO1xuLVx0dmZzdWlkX3QgdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIHtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAocmV0ID09IDApIHtcbiBcdFx0aWYgKHZmc2dpZF9lcShpYV92ZnNnaWQsIHZmc2dpZCkpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdFx0cmV0dXJuIDA7XG4gXHRcdGlmICh2ZnNnaWRfaW5fZ3JvdXBfcChpYV92ZnNnaWQpKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbiBcdGlmICghdmZzZ2lkX3ZhbGlkKHZmc2dpZCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfdXNlcl9ucywgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gZmFsc2U7XG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIC1FUEVSTTtcbiB9XG4gXG4gLyoqXG5AQCAtMTYzLDYgKzE3MCw3IEBAIGludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuIFx0dW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0ci1cdTAwM2VpYV92YWxpZDtcbitcdGludCByZXQ7XG4gXG4gXHQvKlxuIFx0ICogRmlyc3QgY2hlY2sgc2l6ZSBjb25zdHJhaW50cy4gIFRoZXNlIGNhbid0IGJlIG92ZXJyaWRkZW4gdXNpbmdcbkBAIC0xODksMTQgKzE5NywxOCBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRcdGdvdG8ga2lsbF9wcml2O1xuIFxuIFx0LyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG93bi4gKi9cbi1cdGlmICgoaWFfdmFsaWQgXHUwMDI2IEFUVFJfVUlEKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc3VpZCkpXG4tXHRcdHJldHVybiAtRVBFUk07XG4rXHRpZiAoaWFfdmFsaWQgXHUwMDI2IEFUVFJfVUlEKSB7XG4rXHRcdHJldCA9IGNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cdTAwM2VpYV92ZnN1aWQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4gXHQvKiBNYWtlIHN1cmUgY2FsbGVyIGNhbiBjaGdycC4gKi9cbi1cdGlmICgoaWFfdmFsaWQgXHUwMDI2IEFUVFJfR0lEKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc2dpZCkpXG4tXHRcdHJldHVybiAtRVBFUk07XG4rXHRpZiAoaWFfdmFsaWQgXHUwMDI2IEFUVFJfR0lEKSB7XG4rXHRcdHJldCA9IGNoZ3JwX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cdTAwM2VpYV92ZnNnaWQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4gXHQvKiBNYWtlIHN1cmUgYSBjYWxsZXIgY2FuIGNobW9kLiAqL1xuIFx0aWYgKGlhX3ZhbGlkIFx1MDAyNiBBVFRSX01PREUpIHtcbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xuaW5kZXggZTY4YTc2ZmY5MmEzODYuLjNmMzJlNzNhYWVkYTI4IDEwMDY0NFxuLS0tIGEvZnMvY29yZWR1bXAuY1xuKysrIGIvZnMvY29yZWR1bXAuY1xuQEAgLTk1NCw3ICs5NTQsNyBAQCBzdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuIFx0ICogZmlsZXN5c3RlbS5cbiBcdCAqL1xuIFx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcbi1cdGlmICghdmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkge1xuK1x0aWYgKHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpICE9IDApIHtcbiBcdFx0Y29yZWR1bXBfcmVwb3J0X2ZhaWx1cmUoXCJDb3JlIGR1bXAgdG8gJXMgYWJvcnRlZDogY2Fubm90IHByZXNlcnZlIGZpbGUgb3duZXJcIiwgY24tXHUwMDNlY29yZW5hbWUpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmNcbmluZGV4IDMxYzViOWVlM2E4MWRmLi5hN2VjODMwYWI2ODNmMCAxMDA2NDRcbi0tLSBhL2ZzL2lub2RlLmNcbisrKyBiL2ZzL2lub2RlLmNcbkBAIC0yNzUwLDE2ICsyNzUwLDE5IEBAIEVYUE9SVF9TWU1CT0woaW5vZGVfaW5pdF9vd25lcik7XG4gICogT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGVcbiAgKiByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuXG4gICovXG4tYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK2Jvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHR2ZnN1aWRfdCB2ZnN1aWQ7XG4gXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zO1xuK1x0aW50IHJldDtcbiBcbi1cdHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKVxuK1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4rXHRpZiAocmV0ID09IDApXG4gXHRcdHJldHVybiB0cnVlO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuK1x0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbiBcdG5zID0gY3VycmVudF91c2VyX25zKCk7XG4gXHRpZiAodmZzdWlkX2hhc19tYXBwaW5nKG5zLCB2ZnN1aWQpIFx1MDAyNlx1MDAyNiBuc19jYXBhYmxlKG5zLCBDQVBfRk9XTkVSKSlcbiBcdFx0cmV0dXJuIHRydWU7XG5kaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmhcbmluZGV4IDM1NWQ5M2Y5MjIwODYxLi5iZTQ1Y2M2Mzg4NjE5MiAxMDA2NDRcbi0tLSBhL2ZzL2ludGVybmFsLmhcbisrKyBiL2ZzL2ludGVybmFsLmhcbkBAIC01MSw2ICs1MSw3IEBAIGV4dGVybiBpbnQgZmluaXNoX2NsZWFuX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbiAvKlxuICAqIG5hbWVpLmNcbiAgKi9cbitpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBleHRlcm4gaW50IGZpbGVuYW1lX2xvb2t1cChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIHVuc2lnbmVkIGZsYWdzLFxuIFx0XHRcdCAgIHN0cnVjdCBwYXRoICpwYXRoLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCk7XG4gaW50IGZpbGVuYW1lX3JtZGlyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSk7XG5kaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmNcbmluZGV4IDZlNGZmN2ZjZWMwNTNlLi4wMmY4MTBkYzllN2U3YSAxMDA2NDRcbi0tLSBhL2ZzL2xvY2tzLmNcbisrKyBiL2ZzL2xvY2tzLmNcbkBAIC02OCw2ICs2OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2ZpbGVsb2NrLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbisjaW5jbHVkZSBcImludGVybmFsLmhcIlxuIFxuIHN0YXRpYyBzdHJ1Y3QgZmlsZV9sb2NrICpmaWxlX2xvY2soc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbGMpXG4ge1xuQEAgLTIxMzYsMTAgKzIxMzcsMTIgQEAgaW50XG4gdmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbi1cdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG4gXHRpbnQgZXJyb3I7XG4gXG4tXHRpZiAoKCF2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxuK1x0ZXJyb3IgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoZmlsZV9tbnRfaWRtYXAoZmlscCksIGlub2RlKTtcbitcdGlmIChlcnJvciBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGVycm9yO1xuK1x0aWYgKGVycm9yICE9IDAgXHUwMDI2XHUwMDI2ICFjYXBhYmxlKENBUF9MRUFTRSkpXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0ZXJyb3IgPSBzZWN1cml0eV9maWxlX2xvY2soZmlscCwgYXJnKTtcbiBcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggMTljZTQzYzlhNmU2NjIuLjcyZjk0ZDIwNGY5M2Y0IDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuKysrIGIvZnMvbmFtZWkuY1xuQEAgLTU1LDggKzU1LDggQEBcbiAgKiBUaGUgbmV3IGNvZGUgcmVwbGFjZXMgdGhlIG9sZCByZWN1cnNpdmUgc3ltbGluayByZXNvbHV0aW9uIHdpdGhcbiAgKiBhbiBpdGVyYXRpdmUgb25lIChpbiBjYXNlIG9mIG5vbi1uZXN0ZWQgc3ltbGluayBjaGFpbnMpLiAgSXQgZG9lc1xuICAqIHRoaXMgd2l0aCBjYWxscyB0byBcdTAwM2Nmc1x1MDAzZV9mb2xsb3dfbGluaygpLlxuLSAqIEFzIGEgc2lkZSBlZmZlY3QsIGRpcl9uYW1laSgpLCBfbmFtZWkoKSBhbmQgZm9sbG93X2xpbmsoKSBhcmUgbm93IFxuLSAqIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gbG9va3VwX2RlbnRyeSgpIHRoYXQgY2FuIGhhbmRsZSBhbGwgXG4rICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3dcbisgKiByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGxvb2t1cF9kZW50cnkoKSB0aGF0IGNhbiBoYW5kbGUgYWxsXG4gICogdGhlIHNwZWNpYWwgY2FzZXMgb2YgdGhlIGZvcm1lciBjb2RlLlxuICAqXG4gICogV2l0aCB0aGUgbmV3IGRjYWNoZSwgdGhlIHBhdGhuYW1lIGlzIHN0b3JlZCBhdCBlYWNoIGlub2RlLCBhdCBsZWFzdCBhc1xuQEAgLTEyNTUsNiArMTI1NSw3MiBAQCBmc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpO1xuIFxuICNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovXG4gXG4rLypcbisgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaXMgb3duZWQgYnkgdGhlIHByb2Nlc3MgKGFsbG93aW5nIGZvciBmc3VpZCBvdmVycmlkZSksXG4rICogcmV0dXJuaW5nIDAgaWYgc28sIDEgaWYgbm90IGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbVxuKyAqIG1ha2luZyB0aGUgZGV0ZXJtaW5hdGlvbi5cbisgKi9cbitpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdGlmICh1bmxpa2VseShpbm9kZS1cdTAwM2VpX29wZmxhZ3MgXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKVxuK1x0XHRyZXR1cm4gaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2Vpc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuK1x0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGN1cnJlbnRfZnN1aWQoKSkpXG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqL1xuK31cbitcbisvKlxuKyAqIERldGVybWluZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIHBhcmVudCBkaXJlY3RvcnksIHJldHVybmluZ1xuKyAqIDAgaWYgc28sIDEgaWYgbm90IGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmdcbisgKiB0aGUgZGV0ZXJtaW5hdGlvbi5cbisgKi9cbitzdGF0aWMgaW50IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmFtZWlkYXRhICpuZClcbit7XG4rXHRpZiAodW5saWtlbHkoaW5vZGUtXHUwMDNlaV9vcGZsYWdzIFx1MDAyNiBJT1BfT1dORVJTSElQX09WRVJSSURFKSkge1xuK1x0XHRzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7XG4rXHRcdHN0cnVjdCBpbm9kZSAqZGlyO1xuK1x0XHRpbnQgcmV0O1xuK1xuK1x0XHRpZiAoaW5vZGUgIT0gbmQtXHUwMDNlaW5vZGUpIHtcbitcdFx0XHRkaXIgPSBuZC1cdTAwM2Vpbm9kZTtcbitcdFx0XHRyZXQgPSBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4rXHRcdH0gZWxzZSBpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpIHtcbitcdFx0XHRwYXJlbnQgPSBSRUFEX09OQ0UobmQtXHUwMDNlcGF0aC5kZW50cnkpO1xuK1x0XHRcdGRpciA9IFJFQURfT05DRShwYXJlbnQtXHUwMDNlZF9pbm9kZSk7XG4rXHRcdFx0aWYgKCFkaXIpXG4rXHRcdFx0XHRyZXR1cm4gLUVDSElMRDtcbitcdFx0XHRyZXQgPSBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cGFyZW50ID0gZGdldF9wYXJlbnQobmQtXHUwMDNlcGF0aC5kZW50cnkpO1xuK1x0XHRcdGRpciA9IHBhcmVudC1cdTAwM2VkX2lub2RlO1xuK1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbitcdFx0XHRkcHV0KHBhcmVudCk7XG4rXHRcdH1cbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGlmICh2ZnN1aWRfdmFsaWQobmQtXHUwMDNlZGlyX3Zmc3VpZCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdmZzdWlkX2VxKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIG5kLVx1MDAzZWRpcl92ZnN1aWQpKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cbit9XG4rXG4rLypcbisgKiBEZXRlcm1pbmUgaWYgdHdvIGlub2RlcyBoYXZlIHRoZSBzYW1lIG93bmVyLCByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kXG4rICogYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gbWFraW5nIHRoZSBkZXRlcm1pbmF0aW9uLlxuKyAqL1xuK3N0YXRpYyBpbnQgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcilcbit7XG4rXHRpZiAodW5saWtlbHkoaW5vZGUtXHUwMDNlaV9vcGZsYWdzIFx1MDAyNiBJT1BfT1dORVJTSElQX09WRVJSSURFKSlcbitcdFx0cmV0dXJuIGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbitcdGlmICh2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSxcbitcdFx0ICAgICAgaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGRpcikpKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cbit9XG4rXG4gLyoqXG4gICogbWF5X2ZvbGxvd19saW5rIC0gQ2hlY2sgc3ltbGluayBmb2xsb3dpbmcgZm9yIHVuc2FmZSBzaXR1YXRpb25zXG4gICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxuQEAgLTEyNzEsMjcgKzEzMzcsMjggQEAgZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTtcbiAgKlxuICAqIFJldHVybnMgMCBpZiBmb2xsb3dpbmcgdGhlIHN5bWxpbmsgaXMgYWxsb3dlZCwgLXZlIG9uIGVycm9yLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbitzdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXA7XG4tXHR2ZnN1aWRfdCB2ZnN1aWQ7XG4rXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFzeXNjdGxfcHJvdGVjdGVkX3N5bWxpbmtzKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlkbWFwID0gbW50X2lkbWFwKG5kLVx1MDAzZXBhdGgubW50KTtcbi1cdHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cbi1cdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXG4tXHRcdHJldHVybiAwO1xuLVxuIFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IG5vdCBzdGlja3kgYW5kIHdvcmxkLXdyaXRhYmxlLiAqL1xuIFx0aWYgKChuZC1cdTAwM2VkaXJfbW9kZSBcdTAwMjYgKFNfSVNWVFh8U19JV09USCkpICE9IChTX0lTVlRYfFNfSVdPVEgpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdGlkbWFwID0gbW50X2lkbWFwKG5kLVx1MDAzZXBhdGgubW50KTtcbitcdC8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqL1xuK1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbitcbiBcdC8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBhbmQgbGluayBvd25lciBtYXRjaC4gKi9cbi1cdGlmICh2ZnN1aWRfdmFsaWQobmQtXHUwMDNlZGlyX3Zmc3VpZCkgXHUwMDI2XHUwMDI2IHZmc3VpZF9lcShuZC1cdTAwM2VkaXJfdmZzdWlkLCB2ZnN1aWQpKVxuLVx0XHRyZXR1cm4gMDtcbitcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0aWYgKG5kLVx1MDAzZWZsYWdzIFx1MDAyNiBMT09LVVBfUkNVKVxuIFx0XHRyZXR1cm4gLUVDSElMRDtcbkBAIC0xMzg5LDEyICsxNDU2LDEyIEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXG4gICpcbiAgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjpcbi0gKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkXG4tICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzXG4tICogICAtIHdlIGFyZSBpbiBhIHN0aWNreSBkaXJlY3Rvcnlcbi0gKiAgIC0gd2UgZG9uJ3Qgb3duIHRoZSBmaWxlXG4rICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZCxcbisgKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsXG4rICogICAtIHdlIGFyZSBpbiBhIHN0aWNreSBkaXJlY3RvcnksXG4rICogICAtIHRoZSBkaXJlY3RvcnkgaXMgd29ybGQgd3JpdGFibGUsXG4rICogICAtIHdlIGRvbid0IG93biB0aGUgZmlsZSBhbmRcbiAgKiAgIC0gdGhlIG93bmVyIG9mIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBvd24gdGhlIGZpbGVcbi0gKiAgIC0gdGhlIGRpcmVjdG9yeSBpcyB3b3JsZCB3cml0YWJsZVxuICAqIElmIHRoZSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIHNldCB0byAyXG4gICogdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGhhdmUgdG8gYmUgd29ybGQgd3JpdGFibGU6IGJlaW5nIGdyb3VwIHdyaXRhYmxlIHdpbGxcbiAgKiBiZSBlbm91Z2guXG5AQCAtMTQwNSwxMyArMTQ3Miw0NSBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXG4gICogT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGVcbiAgKiByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuXG4gICpcbisgKiBGb3IgYSBmaWxlc3lzdGVtIChlLmcuIGEgbmV0d29yayBmaWxlc3lzdGVtKSB0aGF0IGhhcyBhIHNlcGFyYXRlIElEIHNwYWNlXG4rICogYW5kIGhhcyBmb3JlaWduIElEcyAobWF5YmUgZXZlbiBub24taW50ZWdlciBJRHMpLCBpX3VpZCBjYW5ub3QgYmUgY29tcGFyZWRcbisgKiB0byBjdXJyZW50X2ZzdWlkKCkgYW5kIG1heSBub3QgYmUgZGlyZWN0bHkgY29tcGFyYWJsZSB0byBhbm90aGVyIGlfdWlkLlxuKyAqIEluc3RlYWQsIHRoZSBmaWxlc3lzdGVtIGlzIGFza2VkIHRvIHBlcmZvcm0gdGhlIGNvbXBhcmlzb25zLiAgV2l0aCBuZXR3b3JrXG4rICogZmlsZXN5c3RlbXMsIHRoZXJlIGFsc28gZXhpc3RzIHRoZSBwb3NzaWJpbGl0eSBvZiBkb2luZyBhbm9ueW1vdXNcbisgKiBvcGVyYXRpb25zIGFuZCBoYXZpbmcgYW5vbnltb3VzbHktb3duZWQgb2JqZWN0cy5cbisgKlxuKyAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6XG4rICpcbisgKlx0VVNFUlx0RElSXHRGSUxFXHRGSUxFXHRBTExPV0VEXG4rICpcdFx0T1dORVJcdE9XTkVSXHRTVEFURVxuKyAqXHQ9PT09PT09XHQ9PT09PT09XHQ9PT09PT09XHQ9PT09PT09XHQ9PT09PT09XG4rICpcdEFcdEFcdC1cdE5ld1x0WWVzXG4rICpcdEFcdEFcdEFcdEV4aXN0c1x0WWVzXG4rICpcdEFcdEFcdENcdEV4aXN0c1x0Tm9cbisgKlx0QVx0Qlx0LVx0TmV3XHRZZXNcbisgKlx0QVx0Qlx0QVx0RXhpc3RzXHRZZXMsIEZPPT1VXG4rICpcdEFcdEJcdEJcdEV4aXN0c1x0WWVzLCBGTz09RE9cbisgKlx0QVx0Qlx0Q1x0RXhpc3RzXHROb1xuKyAqXHRBXHRhbm9uWzFdXHQtXHROZXdcdFllc1xuKyAqXHRBXHRhbm9uWzFdXHRBXHRFeGlzdHNcdFllc1xuKyAqXHRBXHRhbm9uWzFdXHRDXHRFeGlzdHNcdE5vXG4rICpcdGFub25cdEFcdC1cdE5ld1x0WWVzXG4rICpcdGFub25cdEFcdEFcdEV4aXN0c1x0WWVzLCBGTz09RE9cbisgKlx0YW5vblx0YW5vblsxXVx0LVx0TmV3XHRZZXNcbisgKlx0YW5vblx0YW5vblsxXVx0LVx0RXhpc3RzXHROb1xuKyAqXHRhbm9uXHRBXHRBXHRFeGlzdHNcdFllcywgRk89PURPXG4rICpcdGFub25cdEFcdENcdEV4aXN0c1x0Tm9cbisgKlx0YW5vblx0QVx0YW5vblx0RXhpc3RzXHROb1xuKyAqXG4rICogWzFdIENhbiBhbm9ueW1vdXNseS1vd25lZCBkaXJzIGJlIHN0aWNreT9cbisgKlxuICAqIFJldHVybnMgMCBpZiB0aGUgb3BlbiBpcyBhbGxvd2VkLCAtdmUgb24gZXJyb3IuXG4gICovXG4gc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4tXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmNvbnN0IGlub2RlKVxuK1x0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHR1bW9kZV90IGRpcl9tb2RlID0gbmQtXHUwMDNlZGlyX21vZGU7XG4tXHR2ZnN1aWRfdCBkaXJfdmZzdWlkID0gbmQtXHUwMDNlZGlyX3Zmc3VpZCwgaV92ZnN1aWQ7XG4rXHRpbnQgcmV0O1xuIFxuIFx0aWYgKGxpa2VseSghKGRpcl9tb2RlIFx1MDAyNiBTX0lTVlRYKSkpXG4gXHRcdHJldHVybiAwO1xuQEAgLTE0MjIsMTMgKzE1MjEsMTMgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAoU19JU0ZJRk8oaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aV92ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVxuLVx0aWYgKHZmc3VpZF9lcShpX3Zmc3VpZCwgZGlyX3Zmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuK1x0cmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4gXG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV92ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXG4tXHRcdHJldHVybiAwO1xuK1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGlmIChsaWtlbHkoZGlyX21vZGUgXHUwMDI2IDAwMDIpKSB7XG4gXHRcdGF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULCBcInN0aWNreV9jcmVhdGVcIik7XG5AQCAtMzY0NSwxMiArMzc0NCwxNCBAQCBFWFBPUlRfU1lNQk9MKHVzZXJfcGF0aF9hdCk7XG4gaW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4tXHRrdWlkX3QgZnN1aWQgPSBjdXJyZW50X2ZzdWlkKCk7XG4rXHRpbnQgcmV0O1xuIFxuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGZzdWlkKSlcbi1cdFx0cmV0dXJuIDA7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGRpciksIGZzdWlkKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0gdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4gXHRyZXR1cm4gIWNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9GT1dORVIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKF9fY2hlY2tfc3RpY2t5KTtcbmRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5jIGIvZnMvcmVtYXBfcmFuZ2UuY1xuaW5kZXggMjZhZmJiYmZiMTBjMmUuLjllZWU5M2MyNzAwMTI1IDEwMDY0NFxuLS0tIGEvZnMvcmVtYXBfcmFuZ2UuY1xuKysrIGIvZnMvcmVtYXBfcmFuZ2UuY1xuQEAgLTQxMywyMCArNDEzLDIyIEBAIGxvZmZfdCB2ZnNfY2xvbmVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19pbixcbiBFWFBPUlRfU1lNQk9MKHZmc19jbG9uZV9maWxlX3JhbmdlKTtcbiBcbiAvKiBDaGVjayB3aGV0aGVyIHdlIGFyZSBhbGxvd2VkIHRvIGRlZHVwZSB0aGUgZGVzdGluYXRpb24gZmlsZSAqL1xuLXN0YXRpYyBib29sIG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbitzdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4rXHRpbnQgcmV0O1xuIFxuIFx0aWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbiBcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfV1JJVEUpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGN1cnJlbnRfZnN1aWQoKSkpXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbitcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4gXHRpZiAoIWlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBNQVlfV1JJVEUpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdHJldHVybiBmYWxzZTtcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gLUVQRVJNO1xuIH1cbiBcbiBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLFxuQEAgLTQ1OSw4ICs0NjEsOCBAQCBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IC1FUEVSTTtcbi1cdGlmICghbWF5X2RlZHVwZV9maWxlKGRzdF9maWxlKSlcbitcdHJldCA9IG1heV9kZWR1cGVfZmlsZShkc3RfZmlsZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF9kcm9wX3dyaXRlO1xuIFxuIFx0cmV0ID0gLUVYREVWO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxuaW5kZXggNTBjZTczMWEyYjc4ZjEuLjgwMTNjMTNhMzUzZDY3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbkBAIC02MjgsNiArNjI4LDcgQEAgaXNfdW5jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKmFjbClcbiAjZGVmaW5lIElPUF9DQUNIRURfTElOS1x0XHQweDAwNDBcbiAjZGVmaW5lIElPUF9GQVNUUEVSTV9NQVlfRVhFQ1x0MHgwMDgwXG4gI2RlZmluZSBJT1BfRkxDVFhcdFx0MHgwMTAwXG4rI2RlZmluZSBJT1BfT1dORVJTSElQX09WRVJSSURFXHQweDAyMDBcdC8qIFVzZSAtXHUwMDNlaXNfb3duZWRfYnlfbWUoKSBhbmQgLVx1MDAzZWhhdmVfc2FtZV9vd25lcigpICovXG4gXG4gLypcbiAgKiBJbm9kZSBzdGF0ZSBiaXRzLiAgUHJvdGVjdGVkIGJ5IGlub2RlLVx1MDAzZWlfbG9ja1xuQEAgLTE3NTUsOCArMTc1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX3dyaXRlX25vdF9zdGFydGVkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIHNiX3dyaXRlX25vdF9zdGFydGVkKGZpbGVfaW5vZGUoZmlsZSktXHUwMDNlaV9zYik7XG4gfVxuIFxuLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSk7XG4rYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKlxuICAqIFZGUyBoZWxwZXIgZnVuY3Rpb25zLi5cbkBAIC0yMDM2LDYgKzIwMzYsOSBAQCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB7XG4gXHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdGludCAoKmZpbGVhdHRyX2dldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuIFx0c3RydWN0IG9mZnNldF9jdHggKigqZ2V0X29mZnNldF9jdHgpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuK1x0aW50ICgqaXNfb3duZWRfYnlfbWUpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlMik7XG4gfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7XG4gXG4gLyogRGlkIHRoZSBkcml2ZXIgcHJvdmlkZSB2YWxpZCBtbWFwIGhvb2sgY29uZmlndXJhdGlvbj8gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE2OjMxOjEyLjI2MjA2Nzc2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MTU5ODE2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggSW50cm9kdWNpbmcgTmV3IFZGUyBJbm9kZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgc29tZSBuZXcgaW5vZGUgb3BlcmF0aW9uczogYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAuIFRoZXNlIGFyZSBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZXkncmUgZGVzaWduZWQgdG8gKm92ZXJyaWRlKiB0aGUgc3RhbmRhcmQgVkZTIG93bmVyc2hpcCBjaGVja3MsIHdoaWNoIGN1cnJlbnRseSBqdXN0IGNvbXBhcmUgdGhlIGBpX3VpZGAgdG8gYGN1cnJlbnRfZnN1aWQoKWAuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgY29yZSBWRlMgY29tcG9uZW50czogYGZzL25hbWVpLmNgLCBgZnMvYXR0ci5jYCwgYGZzL2NvcmVkdW1wLmNgLCBgZnMvaW5vZGUuY2AsIGBmcy9sb2Nrcy5jYCwgYW5kIGBmcy9yZW1hcF9yYW5nZS5jYC4gSXQncyBhbHNvIGltcGxlbWVudGluZyB0aGVzZSBmb3IgdGhlIEFGUyBmaWxlc3lzdGVtIGluIGBmcy9hZnMvYC5cblxuVGhpcyBjbGVhcmx5IHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBib3RoIHRoZSBWRlMgbGF5ZXIgYW5kIHRoZSBBRlMgZmlsZXN5c3RlbSwgYW5kIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMuIEdpdmVuIHRoZSBpbXBhY3Qgb24gY29yZSBmdW5jdGlvbmFsaXR5LCBgV29ydGhGdXp6aW5nPXRydWVgIGlzIGEgcmVhc29uYWJsZSBhc3Nlc3NtZW50LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhpcyBmdXJ0aGVyIHRvIHNlZSB3aGVyZSB0aGUgcmVhbCBjb21wbGV4aXRpZXMgbGllLlxuXG5JJ20gbWFraW5nIGEgbWVudGFsIGxpc3Qgb2YgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZmZlY3RlZCBhbmQgd2hlcmUgdGhleSdyZSBsb2NhdGVkLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2U6XG5cbiogICBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYFxuKiAgIGB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXJgXG4qICAgYHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyYFxuKiAgIGBhZnNfaXNfb3duZWRfYnlfbWVgXG4qICAgYGFmc19oYXZlX3NhbWVfb3duZXJgXG4qICAgYGNob3duX29rYFxuKiAgIGBjaGdycF9va2BcbiogICBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgXG4qICAgYG1heV9mb2xsb3dfbGlua2BcbiogICBgX19jaGVja19zdGlja3lgXG4qICAgYG1heV9kZWR1cGVfZmlsZWBcblxuT2theSwgbm93IGxldCdzIHNlZSBob3cgdGhlc2UgYXJlIGV4cG9zZWQuIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgIGlzIGluIGBmcy9uYW1laS5jYCBhbmQgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgaW4gYGZzL2ludGVybmFsLmhgLiBUaGUgb3RoZXIgdHdvIFZGUyBmdW5jdGlvbnMsIGB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXJgIGFuZCBgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXJgIGFyZSBzdGF0aWMgaW5zaWRlIGBmcy9uYW1laS5jYC4gQm90aCBBRlMgZnVuY3Rpb25zIGFyZSBpbiBgZnMvYWZzL3NlY3VyaXR5LmNgLlxuXG5JIGFsc28gc2VlIHRoYXQgdG8gZWZmZWN0aXZlbHkgdGVzdCB0aGUgQUZTIGludGVncmF0aW9uLCBJJ2xsIG5lZWQgYENPTkZJR19BRlNfRlNgIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuXG5cblJpZ2h0LCB0aW1lIHRvIG1vdmUgYmV5b25kIHRoaXMgY3Vyc29yeSBpbnNwZWN0aW9uIGFuZCBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIG5hbWVzIGFyZSBjb3JyZWN0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgxNSwiT3V0cHV0VG9rZW5zIjo3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE2OjMxOjIwLjk3ODA1MjM0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjYxNjE5MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIih2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWV8dmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyfHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyfGFmc19pc19vd25lZF9ieV9tZXxhZnNfaGF2ZV9zYW1lX293bmVyKVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvZGlyLmM9NjA9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvYWZzL2Rpci5jLTcxLVxcdC5zZXRhdHRyXFx0PSBhZnNfc2V0YXR0cixcXG5mcy9hZnMvZGlyLmM6NzI6XFx0LmlzX293bmVkX2J5X21lXFx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXFxuZnMvYWZzL2Rpci5jOjczOlxcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxcbmZzL2Fmcy9kaXIuYy03NC19O1xcbi0tXFxuZnMvYWZzL2ZpbGUuYz00OD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvYWZzL2ZpbGUuYy01MS1cXHQucGVybWlzc2lvblxcdD0gYWZzX3Blcm1pc3Npb24sXFxuZnMvYWZzL2ZpbGUuYzo1MjpcXHQuaXNfb3duZWRfYnlfbWVcXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcXG5mcy9hZnMvZmlsZS5jOjUzOlxcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxcbmZzL2Fmcy9maWxlLmMtNTQtfTtcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTE1MzI9ZXh0ZXJuIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjE1MzM6aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvYWZzL2ludGVybmFsLmg6MTUzNDppbnQgYWZzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsXFxuZnMvYWZzL2ludGVybmFsLmgtMTUzNS1cXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlMik7XFxuLS1cXG5mcy9hZnMvc2VjdXJpdHkuYz00MzE9aW50IGFmc19wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvYWZzL3NlY3VyaXR5LmMtNTE4LSAqL1xcbmZzL2Fmcy9zZWN1cml0eS5jOjUxOTppbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2Fmcy9zZWN1cml0eS5jLTUyMC17XFxuLS1cXG5mcy9hZnMvc2VjdXJpdHkuYy01NDktICovXFxuZnMvYWZzL3NlY3VyaXR5LmM6NTUwOmludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcXG5mcy9hZnMvc2VjdXJpdHkuYy01NTEtXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZTIpXFxuLS1cXG5mcy9hdHRyLmM9OTU9c3RhdGljIGludCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2F0dHIuYy0xMDAtXFxuZnMvYXR0ci5jOjEwMTpcXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcXG5mcy9hdHRyLmMtMTAyLVxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4tLVxcbmZzL2F0dHIuYz0xMjQ9c3RhdGljIGludCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2F0dHIuYy0xMjktXFxuZnMvYXR0ci5jOjEzMDpcXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcXG5mcy9hdHRyLmMtMTMxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvY29yZWR1bXAuYz04Nzg9c3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcXG4tLVxcbmZzL2NvcmVkdW1wLmMtOTU2LVxcdGlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XFxuZnMvY29yZWR1bXAuYzo5NTc6XFx0aWYgKHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpICE9IDApIHtcXG5mcy9jb3JlZHVtcC5jLTk1OC1cXHRcXHRjb3JlZHVtcF9yZXBvcnRfZmFpbHVyZShcXFwiQ29yZSBkdW1wIHRvICVzIGFib3J0ZWQ6IGNhbm5vdCBwcmVzZXJ2ZSBmaWxlIG93bmVyXFxcIiwgY24tXFx1MDAzZWNvcmVuYW1lKTtcXG4tLVxcbmZzL2lub2RlLmM9Mjc1Mz1ib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9pbm9kZS5jLTI3NTgtXFxuZnMvaW5vZGUuYzoyNzU5OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL2lub2RlLmMtMjc2MC1cXHRpZiAocmV0ID09IDApXFxuLS1cXG5mcy9pbnRlcm5hbC5oPTQ5PWV4dGVybiBpbnQgZmluaXNoX2NsZWFuX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcXG4tLVxcbmZzL2ludGVybmFsLmgtNTMtICovXFxuZnMvaW50ZXJuYWwuaDo1NDppbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9pbnRlcm5hbC5oLTU1LWV4dGVybiBpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXFxuLS1cXG5mcy9sb2Nrcy5jPTIxMzc9dmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcXG4tLVxcbmZzL2xvY2tzLmMtMjE0MS1cXG5mcy9sb2Nrcy5jOjIxNDI6XFx0ZXJyb3IgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoZmlsZV9tbnRfaWRtYXAoZmlscCksIGlub2RlKTtcXG5mcy9sb2Nrcy5jLTIxNDMtXFx0aWYgKGVycm9yIFxcdTAwM2MgMClcXG4tLVxcbmZzL25hbWVpLmM9MTI1ND1mc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpO1xcbi0tXFxuZnMvbmFtZWkuYy0xMjYyLSAqL1xcbmZzL25hbWVpLmM6MTI2MzppbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL25hbWVpLmMtMTI2NC17XFxuLS1cXG5mcy9uYW1laS5jLTEyNzYtICovXFxuZnMvbmFtZWkuYzoxMjc3OnN0YXRpYyBpbnQgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL25hbWVpLmMtMTI3OC1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuYW1laWRhdGEgKm5kKVxcbi0tXFxuZnMvbmFtZWkuYy0xMzEyLSAqL1xcbmZzL25hbWVpLmM6MTMxMzpzdGF0aWMgaW50IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL25hbWVpLmMtMTMxNC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcilcXG4tLVxcbmZzL25hbWVpLmM9MTM0MD1zdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9uYW1laS5jLTEzNTMtXFx0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXFxuZnMvbmFtZWkuYzoxMzU0OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMTM1NS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jLTEzNTgtXFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IGFuZCBsaW5rIG93bmVyIG1hdGNoLiAqL1xcbmZzL25hbWVpLmM6MTM1OTpcXHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XFxuZnMvbmFtZWkuYy0xMzYwLVxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4tLVxcbmZzL25hbWVpLmM9MTUwOT1zdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG4tLVxcbmZzL25hbWVpLmMtMTUyMy1cXG5mcy9uYW1laS5jOjE1MjQ6XFx0cmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpO1xcbmZzL25hbWVpLmMtMTUyNS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jLTE1MjctXFxuZnMvbmFtZWkuYzoxNTI4OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMTUyOS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jPTM3NDQ9aW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL25hbWVpLmMtMzc0OC1cXG5mcy9uYW1laS5jOjM3NDk6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvbmFtZWkuYy0zNzUwLVxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG5mcy9uYW1laS5jLTM3NTEtXFx0XFx0cmV0dXJuIHJldDtcXG5mcy9uYW1laS5jOjM3NTI6XFx0cmV0ID0gdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xcbmZzL25hbWVpLmMtMzc1My1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9yZW1hcF9yYW5nZS5jPTQxNj1zdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNDI1LVxcdFxcdHJldHVybiAwO1xcbmZzL3JlbWFwX3JhbmdlLmM6NDI2OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL3JlbWFwX3JhbmdlLmMtNDI3LVxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTY6MzE6MjUuNjM5Njc3Njg2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NzQwMjA5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgT3duZXJzaGlwIGFuZCBBY2Nlc3MgQ29udHJvbCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiByaWdodCBub3cgYXJlIHRoZXNlOiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAsIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgLCBhbmQgYG1heV9mb2xsb3dfbGlua2AuIFNlZW1zIGxpa2UgYSBwcmV0dHkgY29tcHJlaGVuc2l2ZSBsaXN0IGZvciBkZWFsaW5nIHdpdGggZmlsZSBvd25lcnNoaXAsIGdyb3VwIG1lbWJlcnNoaXAsIGFuZCBwZXJtaXNzaW9ucyBjaGVja3MsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHJhbmdlIG9mIFZGUyBhbmQgQUZTIGltcGxlbWVudGF0aW9ucyBpbiBwbGF5IGhlcmUuIEkgd2FudCB0byBjaGVjayBgQ09ORklHX0FGU19GU2AgaXMgdGhlIGNvcnJlY3QgY29uZmlnIHRvIGFkZHJlc3MgdGhlIGFyY2hpdGVjdHVyZSwgYnV0IG1vcmUgZ2VuZXJhbGx5IHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyB1c2VyIGFjY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNDIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTY6MzE6MjkuOTM3MDgxOTg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDE0MTI5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFGU19GU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2Fmcy9LY29uZmlnOjI6Y29uZmlnIEFGU19GU1xcbmZzL2Fmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFuZHJldyBGaWxlIFN5c3RlbSBzdXBwb3J0IChBRlMpXFxcIlxcbi0tXFxuZnMvYWZzL0tjb25maWc9MTc9Y29uZmlnIEFGU19ERUJVR1xcbi0tXFxuZnMvYWZzL0tjb25maWctMjYtXFxuZnMvYWZzL0tjb25maWc6Mjc6Y29uZmlnIEFGU19GU0NBQ0hFXFxuZnMvYWZzL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiUHJvdmlkZSBBRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTY6MzE6MzIuMzM4NTAwNzEyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5NjA0ODYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgT3duZXJzaGlwIGFuZCBQZXJtaXNzaW9ucyBMb2dpYyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgZW5hYmxpbmcgYEFGU19GU2AgaXMgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMuIE5vdywgYmVmb3JlIEkgbW92ZSBvbiwgSSdkIGxpa2UgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIG9ic2N1cmUgY29uZmlndXJhdGlvbnMgbHVya2luZyBhcm91bmQgdGhhdCBJJ3ZlIG1pc3NlZC4gSSBrbm93IHRoZSBjaGFuZ2VzIHByaW1hcmlseSByZWxhdGUgdG8gdGhlIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykgYW5kIHRoZSBBRlMgbGF5ZXJzLiBUaGUgVkZTIGlzIGFsd2F5cyBlbmFibGVkLCBzbyBBRlMgaXMgdGhlIGtleSwgYW5kIHRoYXQgcmVsaWVzIG9uIGBBRlNfRlNgLiBHb3QgaXQuXG5cbk5vdywgbGV0J3MgZ2V0IGJhY2sgdG8gcmVmaW5pbmcgdGhpcyBgRm9jdXNTeW1ib2xzYCBsaXN0LiBJIG5lZWQgdG8gbWFrZSB0aGlzIGFzIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSBhcyBwb3NzaWJsZS4gU28sIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aGlzIGxpc3Q6XG4qICAgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWBcbiogICBgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyYFxuKiAgIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmBcbiogICBgYWZzX2lzX293bmVkX2J5X21lYFxuKiAgIGBhZnNfaGF2ZV9zYW1lX293bmVyYFxuKiAgIGBjaG93bl9va2BcbiogICBgY2hncnBfb2tgXG4qICAgYG1heV9jcmVhdGVfaW5fc3RpY2t5YFxuKiAgIGBfX2NoZWNrX3N0aWNreWBcbiogICBgbWF5X2RlZHVwZV9maWxlYFxuKiAgIGBtYXlfZm9sbG93X2xpbmtgXG5cbkhhbmcgb24gYSBzZWNvbmTigKYgaXNuJ3QgYG1heV9mb2xsb3dfbGlua2AgaW1wbGVtZW50ZWQgaW5saW5lPyBZZXMsIGl0IGlzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGZzL25hbWVpLmNgIHRvIHNlZSBob3cgaXQncyBoYW5kbGVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY3MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNjozMTozNy4wMzQ1NTI1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTAzODE2NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1heV9mb2xsb3dfbGlua1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtbG9va3VwLnJzdD0xMTMwPWNvbXBvbmVudCBvZiB0aGUgbG9va3VwLCBzbyB3ZSB3aWxsIGNoZWNrIHVzZXJzcGFjZSBmbGFnIGBgTE9PS1VQX0ZPTExPV2BgIHRvXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC5yc3Q6MTEzMTpkZWNpZGUgd2hldGhlciBmb2xsb3cgaXQgd2hlbiBpdCBpcyBhIHN5bWxpbmsgYW5kIGNhbGwgYGBtYXlfZm9sbG93X2xpbmsoKWBgIHRvXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC5yc3QtMTEzMi1jaGVjayBpZiB3ZSBoYXZlIHByaXZpbGVnZSB0byBmb2xsb3cgaXQuXFxuLS1cXG5mcy9uYW1laS5jPTEzMTM9c3RhdGljIGludCB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL25hbWVpLmMtMTMyNC0vKipcXG5mcy9uYW1laS5jOjEzMjU6ICogbWF5X2ZvbGxvd19saW5rIC0gQ2hlY2sgc3ltbGluayBmb2xsb3dpbmcgZm9yIHVuc2FmZSBzaXR1YXRpb25zXFxuZnMvbmFtZWkuYy0xMzI2LSAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcXG4tLVxcbmZzL25hbWVpLmMtMTMzOS0gKi9cXG5mcy9uYW1laS5jOjEzNDA6c3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL25hbWVpLmMtMTM0MS17XFxuLS1cXG5mcy9uYW1laS5jPTIxMDY9c3RhdGljIG5vaW5saW5lIGNvbnN0IGNoYXIgKnBpY2tfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IHBhdGggKmxpbmssXFxuLS1cXG5mcy9uYW1laS5jLTIxMzMtXFx0aWYgKGZsYWdzIFxcdTAwMjYgV0FMS19UUkFJTElORykge1xcbmZzL25hbWVpLmM6MjEzNDpcXHRcXHRlcnJvciA9IG1heV9mb2xsb3dfbGluayhuZCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMjEzNS1cXHRcXHRpZiAodW5saWtlbHkoZXJyb3IpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNjozMTozOS4xMzgzNzUyMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTkzNjU0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZpbGUgU3lzdGVtIFBlcm1pc3Npb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGVpciBzY29wZXMgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSBjb2RlLiBJIHNlZSB0aGF0IGBtYXlfZm9sbG93X2xpbmtgIGlzICppbmxpbmUqLCB3aGljaCBtZWFucyBpdCdzIHByb2JhYmx5IG5vdCBhIGdvb2QgY2FuZGlkYXRlIHRvIGZvY3VzIG9uIGRpcmVjdGx5LiBJdCdzIGludGVncmF0ZWQgaW50byBvdGhlciBmdW5jdGlvbnMuIE9uIHRoZSBvdGhlciBoYW5kLCBgY2hvd25fb2tgIGFuZCBgY2hncnBfb2tgIGFyZSBjbGVhcmx5IGRlZmluZWQgYXMgKnN0YXRpYyogdmFyaWFibGVzIHdpdGhpbiBgZnMvYXR0ci5jYC4gVGhhdCBnaXZlcyBtZSBhIGRlZmluaXRlIHBsYWNlIHRvIHN0YXJ0IGlmIEkgd2FudCB0byBleGFtaW5lIHRob3NlIGFjY2VzcyBjb250cm9sIGNoZWNrcy4gU2ltaWxhcmx5LCBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgIGlzIHN0YXRpYyBpbiBgZnMvbmFtZWkuY2AuIEl0IGlzIHVzZWZ1bCB0byBrbm93IHdoZXJlIHRoZXNlIGZsYWdzIGxpdmUuXG5cbk5vdywgYF9fY2hlY2tfc3RpY2t5YCBpcyAqZXhwb3J0ZWQqIGZyb20gYGZzL25hbWVpLmNgLiBUaGF0IG1lYW5zIGl0J3MgYXZhaWxhYmxlIGZvciB1c2Ugb3V0c2lkZSBvZiB0aGF0IGZpbGUuIE9rYXksIGdvb2QgdG8ga25vdy4gSXQgaXMgZ29vZCBpbmZvcm1hdGlvbiwgYnV0IG5vdCBpbW1lZGlhdGVseSB1c2VmdWwuXG5cbkZpbmFsbHksIGBtYXlfZGVkdXBlX2ZpbGVgIGlzIHN0YXRpYyBpbiBgZnMvcmVtYXBfcmFuZ2UuY2AuIFNvIEkga25vdyB3aGVyZSAqdGhhdCogZnVuY3Rpb24gcmVzaWRlcy5cblxuQWxyaWdodCwgbm93IGxldCdzIGNpcmNsZSBiYWNrIHRvIGBjaG93bl9va2AuLi4gbGV0J3MgY2hlY2sgaXQncyBkZWZpbml0aW9uIHRvIHNlZSBpZiBpdCBpcyBpbmxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjMyLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE2OjMxOjQzLjA1Nzc0NTc1NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4NDkwNTA0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaG93bl9va1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hdHRyLmM9ODE9RVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpO1xcbi0tXFxuZnMvYXR0ci5jLTgzLS8qKlxcbmZzL2F0dHIuYzo4NDogKiBjaG93bl9vayAtIHZlcmlmeSBwZXJtaXNzaW9ucyB0byBjaG93biBpbm9kZVxcbmZzL2F0dHIuYy04NS0gKiBAaWRtYXA6XFx0aWRtYXAgb2YgdGhlIG1vdW50IEBpbm9kZSB3YXMgZm91bmQgZnJvbVxcbi0tXFxuZnMvYXR0ci5jLTk0LSAqL1xcbmZzL2F0dHIuYzo5NTpzdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL2F0dHIuYy05Ni1cXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxcbi0tXFxuZnMvYXR0ci5jPTE2OD1pbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9hdHRyLmMtMjAwLVxcdGlmIChpYV92YWxpZCBcXHUwMDI2IEFUVFJfVUlEKSB7XFxuZnMvYXR0ci5jOjIwMTpcXHRcXHRyZXQgPSBjaG93bl9vayhpZG1hcCwgaW5vZGUsIGF0dHItXFx1MDAzZWlhX3Zmc3VpZCk7XFxuZnMvYXR0ci5jLTIwMi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTY6MzE6NDUuNTQyNjU4ODUxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1OTIzOTgxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipBbmFseXppbmcgdGhlIFNpdHVhdGlvbioqXG5cbkFscmlnaHQsIHNvIGl0J3Mgbm90IHN0cmFpZ2h0Zm9yd2FyZCwgbm90IGFuIFwiaW5saW5lXCIgc29sdXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlIG5lZWQgdG8gZGlnIGEgYml0IGRlZXBlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGVsZW1lbnQuIExldCdzIHNlZS4uLiB0aGUgYGNoZ3JwX29rYCBzZXR0aW5nLiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEl0IGxpa2VseSByZWxhdGVzIHRvIGhvdyB3ZSBjYW4gcHJvY2VlZC4gVGltZSB0byBsb29rIGludG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzE0LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTY6MzE6NDguMTM1MDYxMTM5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI3MDIwMTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZ3JwX29rXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2F0dHIuYz05NT1zdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYXR0ci5jLTExMi0vKipcXG5mcy9hdHRyLmM6MTEzOiAqIGNoZ3JwX29rIC0gdmVyaWZ5IHBlcm1pc3Npb25zIHRvIGNoZ3JwIGlub2RlXFxuZnMvYXR0ci5jLTExNC0gKiBAaWRtYXA6XFx0aWRtYXAgb2YgdGhlIG1vdW50IEBpbm9kZSB3YXMgZm91bmQgZnJvbVxcbi0tXFxuZnMvYXR0ci5jLTEyMy0gKi9cXG5mcy9hdHRyLmM6MTI0OnN0YXRpYyBpbnQgY2hncnBfb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvYXR0ci5jLTEyNS1cXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxcbi0tXFxuZnMvYXR0ci5jPTE2OD1pbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9hdHRyLmMtMjA3LVxcdGlmIChpYV92YWxpZCBcXHUwMDI2IEFUVFJfR0lEKSB7XFxuZnMvYXR0ci5jOjIwODpcXHRcXHRyZXQgPSBjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItXFx1MDAzZWlhX3Zmc2dpZCk7XFxuZnMvYXR0ci5jLTIwOS1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTY6MzE6NTAuNDYyMTA2MTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4NDM1MzY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTmF2aWdhdGluZyB0aGUgYG1heV9jcmVhdGVfaW5fc3RpY2t5YCBMb2dpYyoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIGluY29ycmVjdCDigJMgaXQncyBub3QgYW4gaW5saW5lIHNjZW5hcmlvLiBUaGF0J3MgZ29vZCB0byBrbm93LCBuYXJyb3dzIGRvd24gdGhlIHBvc3NpYmxlIGNhdXNlcy4gTGV0J3MgZGlnIGRlZXBlci4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBtYXlfY3JlYXRlX2luX3N0aWNreWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgaXRzIGNvbmRpdGlvbnMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaXRzIGltcGxlbWVudGF0aW9uIHRvIHNlZSBpZiBpdCdzIG9wZXJhdGluZyBhcyBleHBlY3RlZCBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgaXQgY29udGFpbnMgYW55IGZsYXdzLiBUaGlzIGlzIHdoZXJlIHRoZSByb290IGNhdXNlIHByb2JhYmx5IGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzM5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTY6MzE6NTQuMzQ2NDYyMDI3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc2MTE5Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1heV9jcmVhdGVfaW5fc3RpY2t5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25hbWVpLmM9MTQyNz1pbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXFxuLS1cXG5mcy9uYW1laS5jLTE0NTAtLyoqXFxuZnMvbmFtZWkuYzoxNDUxOiAqIG1heV9jcmVhdGVfaW5fc3RpY2t5IC0gQ2hlY2sgd2hldGhlciBhbiBPX0NSRUFUIG9wZW4gaW4gYSBzdGlja3kgZGlyZWN0b3J5XFxuZnMvbmFtZWkuYy0xNDUyLSAqXFx0XFx0XFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHlcXG4tLVxcbmZzL25hbWVpLmMtMTUwOC0gKi9cXG5mcy9uYW1laS5jOjE1MDk6c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuZnMvbmFtZWkuYy0xNTEwLVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9uYW1laS5jPTQ3NTM9c3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbi0tXFxuZnMvbmFtZWkuYy00Nzc0LVxcdFxcdFxcdHJldHVybiAtRUlTRElSO1xcbmZzL25hbWVpLmM6NDc3NTpcXHRcXHRlcnJvciA9IG1heV9jcmVhdGVfaW5fc3RpY2t5KGlkbWFwLCBuZCxcXG5mcy9uYW1laS5jLTQ3NzYtXFx0XFx0XFx0XFx0XFx0ICAgICBkX2JhY2tpbmdfaW5vZGUobmQtXFx1MDAzZXBhdGguZGVudHJ5KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE2OjMxOjU2LjgyMjU4OTc1NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQyMTYxMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIHByb2Zlc3Npb25hbCBzdGFuZHBvaW50OlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBQcm9ibGVtOiBBIFF1aWNrIERpYWdub3N0aWMqKlxuXG5IbW0sIHRoaXMgaXNuJ3QgYW4gaW4tbGluZSBzaXR1YXRpb24uIFRoYXQncyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gYW5kIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIGBtYXlfZGVkdXBlX2ZpbGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIGxvZ2ljIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcuIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gdGhhdCBmdW5jdGlvbiBhcyBhIGtleSBlbGVtZW50IHRvIHVuZGVyc3RhbmRpbmcgd2hhdCdzIG9mZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMzIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNjozMjowMC4yNjQ3NTQ0MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3ODc5MDg0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXlfZGVkdXBlX2ZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcmVtYXBfcmFuZ2UuYz00MTM9RVhQT1JUX1NZTUJPTCh2ZnNfY2xvbmVfZmlsZV9yYW5nZSk7XFxuLS1cXG5mcy9yZW1hcF9yYW5nZS5jLTQxNS0vKiBDaGVjayB3aGV0aGVyIHdlIGFyZSBhbGxvd2VkIHRvIGRlZHVwZSB0aGUgZGVzdGluYXRpb24gZmlsZSAqL1xcbmZzL3JlbWFwX3JhbmdlLmM6NDE2OnN0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbmZzL3JlbWFwX3JhbmdlLmMtNDE3LXtcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDM0PWxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXFxuLS1cXG5mcy9yZW1hcF9yYW5nZS5jLTQ1Ni1cXHQgKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciByZW1hcF92ZXJpZnlfYXJlYSgpIGJlY2F1c2Ugb2ZcXG5mcy9yZW1hcF9yYW5nZS5jOjQ1NzpcXHQgKiBzYl9zdGFydF93cml0ZSgpIGFuZCBiZWZvcmUgbWF5X2RlZHVwZV9maWxlKCkgYmVjYXVzZSB0aGUgbW91bnQnc1xcbmZzL3JlbWFwX3JhbmdlLmMtNDU4LVxcdCAqIE1BWV9XUklURSBuZWVkIHRvIGJlIGNoZWNrZWQgd2l0aCBtbnRfZ2V0X3dyaXRlX2FjY2Vzc19maWxlKCkgaGVsZC5cXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNDYzLVxcbmZzL3JlbWFwX3JhbmdlLmM6NDY0OlxcdHJldCA9IG1heV9kZWR1cGVfZmlsZShkc3RfZmlsZSk7XFxuZnMvcmVtYXBfcmFuZ2UuYy00NjUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE2OjMyOjAyLjY0MzU1MDI1N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTcyODc3NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIE93bmVyc2hpcCBhbmQgQ29udGV4dCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzbid0IGNvbWluZyB0aHJvdWdoIGRpcmVjdGx5IGluIHRoZSBpbmxpbmUgZWxlbWVudHMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBvd25lcnNoaXAgaW5mb3JtYXRpb24gaXMgaGVsZC4gTGV0J3Mgc2VlLi4uSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHdoZXRoZXIgdGhpcyBpcyBhIG1hdHRlciBvZiBwb3NzZXNzaW9uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MDQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNjozMjowNS42MTY0MzE1ODJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTAzNTU0MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX2lub2RlX2lzX293bmVkX2J5X21lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2F0dHIuYz05NT1zdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYXR0ci5jLTEwMC1cXG5mcy9hdHRyLmM6MTAxOlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL2F0dHIuYy0xMDItXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbi0tXFxuZnMvYXR0ci5jPTEyND1zdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYXR0ci5jLTEyOS1cXG5mcy9hdHRyLmM6MTMwOlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL2F0dHIuYy0xMzEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5mcy9jb3JlZHVtcC5jPTg3OD1zdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxcbi0tXFxuZnMvY29yZWR1bXAuYy05NTYtXFx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcXG5mcy9jb3JlZHVtcC5jOjk1NzpcXHRpZiAodmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSkgIT0gMCkge1xcbmZzL2NvcmVkdW1wLmMtOTU4LVxcdFxcdGNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKFxcXCJDb3JlIGR1bXAgdG8gJXMgYWJvcnRlZDogY2Fubm90IHByZXNlcnZlIGZpbGUgb3duZXJcXFwiLCBjbi1cXHUwMDNlY29yZW5hbWUpO1xcbi0tXFxuZnMvaW5vZGUuYz0yNzUzPWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lub2RlLmMtMjc1OC1cXG5mcy9pbm9kZS5jOjI3NTk6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvaW5vZGUuYy0yNzYwLVxcdGlmIChyZXQgPT0gMClcXG4tLVxcbmZzL2ludGVybmFsLmg9NDk9ZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbi0tXFxuZnMvaW50ZXJuYWwuaC01My0gKi9cXG5mcy9pbnRlcm5hbC5oOjU0OmludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2ludGVybmFsLmgtNTUtZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcXG4tLVxcbmZzL2xvY2tzLmM9MjEzNz12ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KVxcbi0tXFxuZnMvbG9ja3MuYy0yMTQxLVxcbmZzL2xvY2tzLmM6MjE0MjpcXHRlcnJvciA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpO1xcbmZzL2xvY2tzLmMtMjE0My1cXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbi0tXFxuZnMvbmFtZWkuYz0xMjU0PWZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XFxuLS1cXG5mcy9uYW1laS5jLTEyNjItICovXFxuZnMvbmFtZWkuYzoxMjYzOmludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvbmFtZWkuYy0xMjY0LXtcXG4tLVxcbmZzL25hbWVpLmM9MTM0MD1zdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9uYW1laS5jLTEzNTMtXFx0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXFxuZnMvbmFtZWkuYzoxMzU0OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMTM1NS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jPTE1MDk9c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLS1cXG5mcy9uYW1laS5jLTE1MjctXFxuZnMvbmFtZWkuYzoxNTI4OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMTUyOS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jPTM3NDQ9aW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL25hbWVpLmMtMzc0OC1cXG5mcy9uYW1laS5jOjM3NDk6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvbmFtZWkuYy0zNzUwLVxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDE2PXN0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvcmVtYXBfcmFuZ2UuYy00MjUtXFx0XFx0cmV0dXJuIDA7XFxuZnMvcmVtYXBfcmFuZ2UuYzo0MjY6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvcmVtYXBfcmFuZ2UuYy00MjctXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNjozMjowOC4yMjY3OTM4MDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU4NTM2NDE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE93bmVyc2hpcCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCB0aGVzZSBvd25lcnNoaXAgY2hlY2tzIGFyZSBjb3JlIHRvIHRoZSBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGRlZmluZWQgd2l0aGluIGBmcy9pbnRlcm5hbC5oYCBhbmQgaW1wbGVtZW50ZWQgaW4gYGZzL25hbWVpLmNgLiBTbyB3ZSdyZSB0YWxraW5nIGFib3V0IGEgZmV3IGtleSBmdW5jdGlvbnM6IGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyYCwgYHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyYCwgYWxvbmcgd2l0aCBzb21lIG90aGVycyBsaWtlIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGFuZCBzb21lIHBlcm1pc3Npb24tcmVsYXRlZCBjaGVja3M6IGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGFuZCBgbWF5X2RlZHVwZV9maWxlYC5cblxuVGhlIGZhY3QgdGhhdCB0aGlzIHBhdGNoIHRvdWNoZXMgYGZzL2Fmcy9gIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoYXQgYEFGU19GU2AgaXMgaW1wbGljYXRlZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB3ZSBzaG91bGQga2VlcCBhbiBleWUgb24/IEJ1dCB0aGUgY29yZSBvZiB0aGUgbWF0dGVyIHNlZW1zIHRvIGJlIGluIFZGUy5cblxuQWxyaWdodCwgdGhlIHBhdGNoIGFkZHMgdHdvICpuZXcqIGlub2RlIG9wZXJhdGlvbnM6IGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgLiBUaGVzZSBhcmUgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBBRlMgc3Vic3lzdGVtIGFuZCB0aGVuLCBjcnVjaWFsbHksIG1vZGlmaWVkIHRvIGJlIHVzZWQgKndpdGhpbiogdGhlIFZGUy4gVGhpcyBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBob3cgb3duZXJzaGlwIGlzIGRldGVybWluZWQsIGF0IGxlYXN0IGluIHNvbWUgY2FzZXMuIEl0J3MgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlIFZGUyBpbnRlcmFjdHMgd2l0aCBvd25lcnNoaXAgY2hlY2tzLCBwb3RlbnRpYWxseSBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBUaGUgZmFjdCB0aGF0IHRoZSBWRlMgaXRzZWxmIGlzIGJlaW5nIG1vZGlmaWVkIGlzIGEgYmlnIGZsYWcgZm9yIGZ1enppbmcsIHdoaWNoIHdpbGwgYmUgZXNzZW50aWFsIGhlcmUuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nLCBhbmQgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSdsbCBrZWVwIHRvcCBvZiBtaW5kOiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAsIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGFuZCBgbWF5X2RlZHVwZV9maWxlYC5cblxuQW5kLCBhcyBhIGZpbmFsIGNvbnNpZGVyYXRpb24sIGVuYWJsaW5nIGBBRlNfRlNgIHNlZW1zIGVzc2VudGlhbCB0byBwcm9wZXIgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNjUsIk91dHB1dFRva2VucyI6MjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE2OjMyOjE2LjgxMjE2MTU2M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTg0NjY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX2lub2RlX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJ2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXJcIixcbiAgICBcInZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJhZnNfaXNfb3duZWRfYnlfbWVcIixcbiAgICBcImFmc19oYXZlX3NhbWVfb3duZXJcIixcbiAgICBcImNob3duX29rXCIsXG4gICAgXCJjaGdycF9va1wiLFxuICAgIFwibWF5X2NyZWF0ZV9pbl9zdGlja3lcIixcbiAgICBcIl9fY2hlY2tfc3RpY2t5XCIsXG4gICAgXCJtYXlfZGVkdXBlX2ZpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBhbmQgbW9kaWZpZXMgY29yZSBWRlMgZnVuY3Rpb25zIChsaWtlIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgLCBldGMuKSB0byB1c2UgdGhlbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTIGFuZCBBRlMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19pbm9kZV9pc19vd25lZF9ieV9tZVwiLFxuICAgIFwidmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJ2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lclwiLFxuICAgIFwiYWZzX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJhZnNfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJjaG93bl9va1wiLFxuICAgIFwiY2hncnBfb2tcIixcbiAgICBcIm1heV9jcmVhdGVfaW5fc3RpY2t5XCIsXG4gICAgXCJfX2NoZWNrX3N0aWNreVwiLFxuICAgIFwibWF5X2RlZHVwZV9maWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0d28gbmV3IGlub2RlIG9wZXJhdGlvbnMgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgVkZTIG93bmVyc2hpcCBjaGVja3MuIEl0IGltcGxlbWVudHMgdGhlc2Ugb3BlcmF0aW9ucyBpbiB0aGUgQUZTIGZpbGVzeXN0ZW0gYW5kIG1vZGlmaWVzIGNvcmUgVkZTIGZ1bmN0aW9ucyAobGlrZSBgY2hvd25fb2tgLCBgY2hncnBfb2tgLCBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgLCBgbWF5X2RlZHVwZV9maWxlYCwgZXRjLikgdG8gdXNlIHRoZW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFZGUyBhbmQgQUZTIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow8zfxb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 16:05:36 +0000 UTC FinishedAt: 2026-07-24 16:32:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "091addcd-618d-4e95-a34a-4a32a4d6a0a2" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "vfs_inode_is_owned_by_me", "vfs_inode_and_dir_have_same_owner", "vfs_inodes_have_same_owner", "afs_is_owned_by_me", "afs_have_same_owner", "chown_ok", "chgrp_ok", "may_create_in_sticky", "__check_sticky", "may_dedupe_file" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE2OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDt2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXImIzM0OywKICAgICYjMzQ7dmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXImIzM0OywKICAgICYjMzQ7YWZzX2lzX293bmVkX2J5X21lJiMzNDssCiAgICAmIzM0O2Fmc19oYXZlX3NhbWVfb3duZXImIzM0OywKICAgICYjMzQ7Y2hvd25fb2smIzM0OywKICAgICYjMzQ7Y2hncnBfb2smIzM0OywKICAgICYjMzQ7bWF5X2NyZWF0ZV9pbl9zdGlja3kmIzM0OywKICAgICYjMzQ7X19jaGVja19zdGlja3kmIzM0OywKICAgICYjMzQ7bWF5X2RlZHVwZV9maWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIG5ldyBpbm9kZSBvcGVyYXRpb25zIGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IFZGUyBvd25lcnNoaXAgY2hlY2tzLiBJdCBpbXBsZW1lbnRzIHRoZXNlIG9wZXJhdGlvbnMgaW4gdGhlIEFGUyBmaWxlc3lzdGVtIGFuZCBtb2RpZmllcyBjb3JlIFZGUyBmdW5jdGlvbnMgKGxpa2UgYGNob3duX29rYCwgYGNoZ3JwX29rYCwgYG1heV9jcmVhdGVfaW5fc3RpY2t5YCwgYG1heV9kZWR1cGVfZmlsZWAsIGV0Yy4pIHRvIHVzZSB0aGVtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMgYW5kIEFGUyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTY6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMzQwNTQzYzJiZGMzNDEwMGUyMDM1YWU2NDRmMzU5OGVmZWQ1NTFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTY6MzE6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG5pbmRleCA3Yzc1MzE0OGFmODg4My4uODkzNDE5ZTAwM2VhZjcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuQEAgLTQ0NSw2ICYjNDM7NDQ1LDkgQEAgQXMgb2Yga2VybmVsIDIuNi4yMiwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOlxuIFx0XHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdFx0aW50ICgqZmlsZWF0dHJfZ2V0KShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHQgICAgICAgIHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7XHRcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1x0XHRpbnQgKCpoYXZlX3NhbWVfb3duZXIpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIFx0fTtcbiBcbiBBZ2FpbiwgYWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3NcbkBAIC02MzQsNiAmIzQzOzYzNywyNCBAQCBvdGhlcndpc2Ugbm90ZWQuXG4gICAgICAgICBmaWxlc3lzdGVtIG11c3QgZGVmaW5lIHRoaXMgb3BlcmF0aW9uIHRvIHVzZVxuICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy5cbiBcbiYjNDM7YGBpc19vd25lZF9ieV9tZWBgXG4mIzQzO1x0Y2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgZmlsZSBjYW4gYmUgY29uc2lkZXJlZCB0byBiZSAmIzM5O293bmVkJiMzOTsgYnlcbiYjNDM7XHR0aGUgb3duZXIgb2YgdGhlIHByb2Nlc3Mgb3IgaWYgdGhlIHByb2Nlc3MgaGFzIGEgdG9rZW4gdGhhdCBncmFudHNcbiYjNDM7XHRpdCBvd25lcnNoaXAgcHJpdmlsZWdlcy4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBjb21wYXJlIGlfdWlkXG4mIzQzO1x0dG8gY3VycmVudF9mc3VpZCgpIC0gYnV0IHRoaXMgbWF5IGdpdmUgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHNvbWVcbiYjNDM7XHRuZXR3b3JrIG9yIHBsdWctaW4gYmxvY2sgZmlsZXN5c3RlbXMuICBGb3IgZXhhbXBsZSwgQUZTIGRldGVybWluZXNcbiYjNDM7XHRvd25lcnNoaXAgZW50aXJlbHkgYWNjb3JkaW5nIHRvIGFuIG9idGFpbmVkIHRva2VuIGFuZCBpX3VpZCBtYXkgbm90XG4mIzQzO1x0ZXZlbiBiZSBmcm9tIHRoZSBzYW1lIElEIHNwYWNlIGFzIGN1cnJlbnRfdWlkKCkuXG4mIzQzO1xuJiM0MztgYGhhdmVfc2FtZV9vd25lcmBgXG4mIzQzO1x0Y2FsbGVkIHRvIGRldGVybWluZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIGltbWVkaWF0ZVxuJiM0MztcdHBhcmVudCBvbiB0aGUgcGF0aCB3YWxrZWQuICBJZiB1bnNldCwgdGhlIGRlZmF1bHQgaXMgdG8gc2ltcGx5XG4mIzQzO1x0Y29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEc1xuJiM0MztcdG9mIGJvdGggLSBidXQgdGhlc2UgYXJlIGEgNjQtYml0IHZhbHVlcyBvbiBzb21lIHZhcmlhbnRzIHRoYXQgbWlnaHRcbiYjNDM7XHRub3QgZml0IGludG8gYSBrdWlkX3QgYW5kIGNpZnMgaGFzIEdVSURzIHRoYXQgY2Fubm90IGJlIGNvbXBhcmVkIHRvXG4mIzQzO1x0a3VpZF90LlxuJiM0MztcbiYjNDM7XG4gVGhlIEFkZHJlc3MgU3BhY2UgT2JqZWN0XG4gPT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jXG5pbmRleCA2ZGY1NmZlOTE2M2ZkNy4uZWUyZjVlYzBiMmM2N2QgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9kaXIuY1xuQEAgLTY5LDYgJiM0Mzs2OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5wZXJtaXNzaW9uXHQ9IGFmc19wZXJtaXNzaW9uLFxuIFx0LmdldGF0dHJcdD0gYWZzX2dldGF0dHIsXG4gXHQuc2V0YXR0clx0PSBhZnNfc2V0YXR0cixcbiYjNDM7XHQuaXNfb3duZWRfYnlfbWVcdD0gYWZzX2lzX293bmVkX2J5X21lLFxuJiM0MztcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZGlyX2FvcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZpbGUuYyBiL2ZzL2Fmcy9maWxlLmNcbmluZGV4IDA0Njc3NDJiZmVlZTM0Li5iYTQ0NDkzY2NhZjZlZSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9maWxlLmNcbkBAIC00OSw2ICYjNDM7NDksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LmdldGF0dHJcdD0gYWZzX2dldGF0dHIsXG4gXHQuc2V0YXR0clx0PSBhZnNfc2V0YXR0cixcbiBcdC5wZXJtaXNzaW9uXHQ9IGFmc19wZXJtaXNzaW9uLFxuJiM0MztcdC5pc19vd25lZF9ieV9tZVx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXG4mIzQzO1x0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXG4gfTtcbiBcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19maWxlX2FvcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuY1xuaW5kZXggMTRmMzlhOWJlYTZjZmUuLmFmODVhODhkOTQzZGQxIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbm9kZS5jXG5AQCAtOTEsNiAmIzQzOzkxLDcgQEAgc3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsXG4gXHRpbm9kZS1cdTAwM2VpX2ZsYWdzIHw9IFNfTk9BVElNRTtcbiBcdGlub2RlLVx1MDAzZWlfdWlkID0gbWFrZV9rdWlkKFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVx1MDAzZW93bmVyKTtcbiBcdGlub2RlLVx1MDAzZWlfZ2lkID0gbWFrZV9rZ2lkKFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVx1MDAzZWdyb3VwKTtcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX29wZmxhZ3MgfD0gSU9QX09XTkVSU0hJUF9PVkVSUklERTtcbiBcdHNldF9ubGluayhcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSwgc3RhdHVzLVx1MDAzZW5saW5rKTtcbiBcbiBcdGlfc2l6ZV93cml0ZShpbm9kZSwgc3RhdHVzLVx1MDAzZXNpemUpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDYwMWYwMWU1YzE1ZmNjLi5lMTBjZjc2MzZmNjViNiAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvaW50ZXJuYWwuaFxuQEAgLTE1MzAsNiAmIzQzOzE1MzAsOSBAQCBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5KHN0cnVjdCBhZnNfY2VsbCAqKTtcbiBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5X3JjdShzdHJ1Y3QgYWZzX2NlbGwgKik7XG4gZXh0ZXJuIGludCBhZnNfY2hlY2tfcGVybWl0KHN0cnVjdCBhZnNfdm5vZGUgKiwgc3RydWN0IGtleSAqLCBhZnNfYWNjZXNzX3QgKik7XG4gZXh0ZXJuIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xuJiM0MztpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7aW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuJiM0MztcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlMik7XG4gZXh0ZXJuIHZvaWQgX19leGl0IGFmc19jbGVhbl91cF9wZXJtaXRfY2FjaGUodm9pZCk7XG4gXG4gLypcbmRpZmYgLS1naXQgYS9mcy9hZnMvc2VjdXJpdHkuYyBiL2ZzL2Fmcy9zZWN1cml0eS5jXG5pbmRleCA2ZDAwZDYyYTY1ZWRmNi4uNzA5MmY1YWNkY2Q2YWMgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc2VjdXJpdHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL3NlY3VyaXR5LmNcbkBAIC01MTAsNiAmIzQzOzUxMCw1MiBAQCBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5ICYjMzk7bWUmIzM5OyAtIHdoYXRldmVyIHRoYXQgbWVhbnMgZm9yIHRoZVxuJiM0MzsgKiBmaWxlc3lzdGVtLiAgSW4gdGhlIGNhc2Ugb2YgQUZTLCB0aGlzIG1lYW5zIHRoYXQgdGhlIGZpbGUgaXMgb3duZWQgYnkgdGhlXG4mIzQzOyAqIEFGUyB1c2VyIHJlcHJlc2VudGVkIGJ5IHRoZSBSeCBTZWN1cml0eSBDbGFzcyB0b2tlbiBoZWxkIGluIGEga2V5LiAgUmV0dXJuc1xuJiM0MzsgKiAwIGlmIG93bmVkIGJ5IG1lLCAxIGlmIG5vdDsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLlxuJiM0MzsgKi9cbiYjNDM7aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpO1xuJiM0MztcdGFmc19hY2Nlc3NfdCBhY2Nlc3M7XG4mIzQzO1x0c3RydWN0IGtleSAqa2V5O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4mIzQzO1x0XHRyZXR1cm4gMTsgLyogVGhlIEFETUlOIHJpZ2h0IGNoZWNrIGRvZXNuJiMzOTt0IHdvcmsgZm9yIGRpcmVjdG9yaWVzLiAqL1xuJiM0MztcbiYjNDM7XHRrZXkgPSBhZnNfcmVxdWVzdF9rZXkodm5vZGUtXHUwMDNldm9sdW1lLVx1MDAzZWNlbGwpO1xuJiM0MztcdGlmIChJU19FUlIoa2V5KSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGtleSk7XG4mIzQzO1xuJiM0MztcdC8qIEdldCB0aGUgYWNjZXNzIHJpZ2h0cyBmb3IgdGhlIGtleSBvbiB0aGlzIGZpbGUuICovXG4mIzQzO1x0cmV0ID0gYWZzX2NoZWNrX3Blcm1pdCh2bm9kZSwga2V5LCBcdTAwMjZhY2Nlc3MpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuJiM0MztcbiYjNDM7XHQvKiBXZSBnZXQgdGhlIEFETUlOSVNURVIgYml0IGlmIHdlIG93biB0aGUgZmlsZS4gKi9cbiYjNDM7XHRyZXQgPSAoYWNjZXNzIFx1MDAyNiBBRlNfQUNFX0FETUlOSVNURVIpID8gMCA6IDE7XG4mIzQzO2Vycm9yOlxuJiM0MztcdGtleV9wdXQoa2V5KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZXRlcm1pbmUgaWYgYSBmaWxlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IC0gd2hhdGV2ZXIgdGhhdCBtZWFuc1xuJiM0MzsgKiBmb3IgdGhlIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgY29tcGFyaW5nIHRoZWlyIEFGU1xuJiM0MzsgKiBVSURzLiAgUmV0dXJucyAwIGlmIHNhbWUsIDEgaWYgbm90IHNhbWU7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci5cbiYjNDM7ICovXG4mIzQzO2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbiYjNDM7XHRcdFx0c3RydWN0IGlub2RlICppbm9kZTIpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTEgPSBBRlNfRlNfSShpbm9kZTEpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlMiA9IEFGU19GU19JKGlub2RlMik7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2bm9kZTEtXHUwMDNlc3RhdHVzLm93bmVyICE9IHZub2RlMi1cdTAwM2VzdGF0dXMub3duZXI7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBfX2V4aXQgYWZzX2NsZWFuX3VwX3Blcm1pdF9jYWNoZSh2b2lkKVxuIHtcbiBcdGludCBpO1xuZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuY1xuaW5kZXggNGY0MzdmYWJiN2YwZjUuLmI3ZThiNWQ0OWE5ZmU2IDEwMDY0NFxuLS0tIGEvZnMvYXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hdHRyLmNcbkBAIC0xNiw2ICYjNDM7MTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG4gLyoqXG4gICogc2V0YXR0cl9zaG91bGRfZHJvcF9zZ2lkIC0gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNldGdpZCBiaXQgbmVlZHMgdG8gYmVcbkBAIC05MSwxOSAmIzQzOzkyLDIxIEBAIEVYUE9SVF9TWU1CT0woc2V0YXR0cl9zaG91bGRfZHJvcF9zdWlkZ2lkKTtcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXG4gICogcGVyZm9ybWVkIG9uIHRoZSByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuXG4gICovXG4tc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tXHRcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxuJiM0MztzdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc3VpZF90IGlhX3Zmc3VpZClcbiB7XG4gXHR2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICB2ZnN1aWRfZXEoaWFfdmZzdWlkLCB2ZnN1aWQpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHRpZiAoY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdGlmICghdmZzdWlkX3ZhbGlkKHZmc3VpZCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfdXNlcl9ucywgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gLUVQRVJNO1xuIH1cbiBcbiAvKipcbkBAIC0xMTgsMjMgJiM0MzsxMjEsMjcgQEAgc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gICogcGVybWlzc2lvbnMuIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZVxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqL1xuLXN0YXRpYyBib29sIGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHQgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc2dpZF90IGlhX3Zmc2dpZClcbiYjNDM7c3RhdGljIGludCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnNnaWRfdCBpYV92ZnNnaWQpXG4ge1xuIFx0dmZzZ2lkX3QgdmZzZ2lkID0gaV9naWRfaW50b192ZnNnaWQoaWRtYXAsIGlub2RlKTtcbi1cdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKSB7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJldCA9PSAwKSB7XG4gXHRcdGlmICh2ZnNnaWRfZXEoaWFfdmZzZ2lkLCB2ZnNnaWQpKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcdFx0aWYgKHZmc2dpZF9pbl9ncm91cF9wKGlhX3Zmc2dpZCkpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXG4tXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHRpZiAoIXZmc2dpZF92YWxpZCh2ZnNnaWQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG5zX2NhcGFibGUoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX3VzZXJfbnMsIENBUF9DSE9XTikpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIC1FUEVSTTtcbiB9XG4gXG4gLyoqXG5AQCAtMTYzLDYgJiM0MzsxNzAsNyBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcbiBcdHVuc2lnbmVkIGludCBpYV92YWxpZCA9IGF0dHItXHUwMDNlaWFfdmFsaWQ7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdC8qXG4gXHQgKiBGaXJzdCBjaGVjayBzaXplIGNvbnN0cmFpbnRzLiAgVGhlc2UgY2FuJiMzOTt0IGJlIG92ZXJyaWRkZW4gdXNpbmdcbkBAIC0xODksMTQgJiM0MzsxOTcsMTggQEAgaW50IHNldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHRnb3RvIGtpbGxfcHJpdjtcbiBcbiBcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2hvd24uICovXG4tXHRpZiAoKGlhX3ZhbGlkIFx1MDAyNiBBVFRSX1VJRCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIWNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cdTAwM2VpYV92ZnN1aWQpKVxuLVx0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9VSUQpIHtcbiYjNDM7XHRcdHJldCA9IGNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cdTAwM2VpYV92ZnN1aWQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4gXG4gXHQvKiBNYWtlIHN1cmUgY2FsbGVyIGNhbiBjaGdycC4gKi9cbi1cdGlmICgoaWFfdmFsaWQgXHUwMDI2IEFUVFJfR0lEKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc2dpZCkpXG4tXHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0aWYgKGlhX3ZhbGlkIFx1MDAyNiBBVFRSX0dJRCkge1xuJiM0MztcdFx0cmV0ID0gY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc2dpZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovXG4gXHRpZiAoaWFfdmFsaWQgXHUwMDI2IEFUVFJfTU9ERSkge1xuZGlmZiAtLWdpdCBhL2ZzL2NvcmVkdW1wLmMgYi9mcy9jb3JlZHVtcC5jXG5pbmRleCBlNjhhNzZmZjkyYTM4Ni4uM2YzMmU3M2FhZWRhMjggMTAwNjQ0XG4tLS0gYS9mcy9jb3JlZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jb3JlZHVtcC5jXG5AQCAtOTU0LDcgJiM0Mzs5NTQsNyBAQCBzdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuIFx0ICogZmlsZXN5c3RlbS5cbiBcdCAqL1xuIFx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcbi1cdGlmICghdmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkge1xuJiM0MztcdGlmICh2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKSAhPSAwKSB7XG4gXHRcdGNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKFwmIzM0O0NvcmUgZHVtcCB0byAlcyBhYm9ydGVkOiBjYW5ub3QgcHJlc2VydmUgZmlsZSBvd25lclwmIzM0OywgY24tXHUwMDNlY29yZW5hbWUpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmNcbmluZGV4IDMxYzViOWVlM2E4MWRmLi5hN2VjODMwYWI2ODNmMCAxMDA2NDRcbi0tLSBhL2ZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lub2RlLmNcbkBAIC0yNzUwLDE2ICYjNDM7Mjc1MCwxOSBAQCBFWFBPUlRfU1lNQk9MKGlub2RlX2luaXRfb3duZXIpO1xuICAqIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqL1xuLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7Ym9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHZmc3VpZF90IHZmc3VpZDtcbiBcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7XG4mIzQzO1x0aW50IHJldDtcbiBcbi1cdHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKVxuJiM0MztcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmIChyZXQgPT0gMClcbiBcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHR2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuIFx0bnMgPSBjdXJyZW50X3VzZXJfbnMoKTtcbiBcdGlmICh2ZnN1aWRfaGFzX21hcHBpbmcobnMsIHZmc3VpZCkgXHUwMDI2XHUwMDI2IG5zX2NhcGFibGUobnMsIENBUF9GT1dORVIpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaFxuaW5kZXggMzU1ZDkzZjkyMjA4NjEuLmJlNDVjYzYzODg2MTkyIDEwMDY0NFxuLS0tIGEvZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW50ZXJuYWwuaFxuQEAgLTUxLDYgJiM0Mzs1MSw3IEBAIGV4dGVybiBpbnQgZmluaXNoX2NsZWFuX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbiAvKlxuICAqIG5hbWVpLmNcbiAgKi9cbiYjNDM7aW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4gZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcbiBcdFx0XHQgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QpO1xuIGludCBmaWxlbmFtZV9ybWRpcihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpO1xuZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jXG5pbmRleCA2ZTRmZjdmY2VjMDUzZS4uMDJmODEwZGM5ZTdlN2EgMTAwNjQ0XG4tLS0gYS9mcy9sb2Nrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9sb2Nrcy5jXG5AQCAtNjgsNiAmIzQzOzY4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvZmlsZWxvY2suaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG4gc3RhdGljIHN0cnVjdCBmaWxlX2xvY2sgKmZpbGVfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYylcbiB7XG5AQCAtMjEzNiwxMCAmIzQzOzIxMzcsMTIgQEAgaW50XG4gdmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbi1cdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG4gXHRpbnQgZXJyb3I7XG4gXG4tXHRpZiAoKCF2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxuJiM0MztcdGVycm9yID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG4mIzQzO1x0aWYgKGVycm9yIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcdGlmIChlcnJvciAhPSAwIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdGVycm9yID0gc2VjdXJpdHlfZmlsZV9sb2NrKGZpbHAsIGFyZyk7XG4gXHRpZiAoZXJyb3IpXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDE5Y2U0M2M5YTZlNjYyLi43MmY5NGQyMDRmOTNmNCAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmNcbkBAIC01NSw4ICYjNDM7NTUsOCBAQFxuICAqIFRoZSBuZXcgY29kZSByZXBsYWNlcyB0aGUgb2xkIHJlY3Vyc2l2ZSBzeW1saW5rIHJlc29sdXRpb24gd2l0aFxuICAqIGFuIGl0ZXJhdGl2ZSBvbmUgKGluIGNhc2Ugb2Ygbm9uLW5lc3RlZCBzeW1saW5rIGNoYWlucykuICBJdCBkb2VzXG4gICogdGhpcyB3aXRoIGNhbGxzIHRvIFx1MDAzY2ZzXHUwMDNlX2ZvbGxvd19saW5rKCkuXG4tICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3cgXG4tICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbCBcbiYjNDM7ICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3dcbiYjNDM7ICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbFxuICAqIHRoZSBzcGVjaWFsIGNhc2VzIG9mIHRoZSBmb3JtZXIgY29kZS5cbiAgKlxuICAqIFdpdGggdGhlIG5ldyBkY2FjaGUsIHRoZSBwYXRobmFtZSBpcyBzdG9yZWQgYXQgZWFjaCBpbm9kZSwgYXQgbGVhc3QgYXNcbkBAIC0xMjU1LDYgJiM0MzsxMjU1LDcyIEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XG4gXG4gI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi9cbiBcbiYjNDM7LypcbiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5IHRoZSBwcm9jZXNzIChhbGxvd2luZyBmb3IgZnN1aWQgb3ZlcnJpZGUpLFxuJiM0MzsgKiByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtXG4mIzQzOyAqIG1ha2luZyB0aGUgZGV0ZXJtaW5hdGlvbi5cbiYjNDM7ICovXG4mIzQzO2ludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAodW5saWtlbHkoaW5vZGUtXHUwMDNlaV9vcGZsYWdzIFx1MDAyNiBJT1BfT1dORVJTSElQX09WRVJSSURFKSlcbiYjNDM7XHRcdHJldHVybiBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWlzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4mIzQzO1x0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGN1cnJlbnRfZnN1aWQoKSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gMTsgLyogTm90IHNhbWUuICovXG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERldGVybWluZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIHBhcmVudCBkaXJlY3RvcnksIHJldHVybmluZ1xuJiM0MzsgKiAwIGlmIHNvLCAxIGlmIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gbWFraW5nXG4mIzQzOyAqIHRoZSBkZXRlcm1pbmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGlub2RlLVx1MDAzZWlfb3BmbGFncyBcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpIHtcbiYjNDM7XHRcdHN0cnVjdCBkZW50cnkgKnBhcmVudDtcbiYjNDM7XHRcdHN0cnVjdCBpbm9kZSAqZGlyO1xuJiM0MztcdFx0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5vZGUgIT0gbmQtXHUwMDNlaW5vZGUpIHtcbiYjNDM7XHRcdFx0ZGlyID0gbmQtXHUwMDNlaW5vZGU7XG4mIzQzO1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpIHtcbiYjNDM7XHRcdFx0cGFyZW50ID0gUkVBRF9PTkNFKG5kLVx1MDAzZXBhdGguZGVudHJ5KTtcbiYjNDM7XHRcdFx0ZGlyID0gUkVBRF9PTkNFKHBhcmVudC1cdTAwM2VkX2lub2RlKTtcbiYjNDM7XHRcdFx0aWYgKCFkaXIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FQ0hJTEQ7XG4mIzQzO1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHBhcmVudCA9IGRnZXRfcGFyZW50KG5kLVx1MDAzZXBhdGguZGVudHJ5KTtcbiYjNDM7XHRcdFx0ZGlyID0gcGFyZW50LVx1MDAzZWRfaW5vZGU7XG4mIzQzO1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbiYjNDM7XHRcdFx0ZHB1dChwYXJlbnQpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh2ZnN1aWRfdmFsaWQobmQtXHUwMDNlZGlyX3Zmc3VpZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHZmc3VpZF9lcShpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBuZC1cdTAwM2VkaXJfdmZzdWlkKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRGV0ZXJtaW5lIGlmIHR3byBpbm9kZXMgaGF2ZSB0aGUgc2FtZSBvd25lciwgcmV0dXJuaW5nIDAgaWYgc28sIDEgaWYgbm90IGFuZFxuJiM0MzsgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGlub2RlLVx1MDAzZWlfb3BmbGFncyBcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpXG4mIzQzO1x0XHRyZXR1cm4gaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuJiM0MztcdGlmICh2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSxcbiYjNDM7XHRcdCAgICAgIGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBtYXlfZm9sbG93X2xpbmsgLSBDaGVjayBzeW1saW5rIGZvbGxvd2luZyBmb3IgdW5zYWZlIHNpdHVhdGlvbnNcbiAgKiBAbmQ6IG5hbWVpZGF0YSBwYXRod2FsayBkYXRhXG5AQCAtMTI3MSwyNyAmIzQzOzEzMzcsMjggQEAgZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTtcbiAgKlxuICAqIFJldHVybnMgMCBpZiBmb2xsb3dpbmcgdGhlIHN5bWxpbmsgaXMgYWxsb3dlZCwgLXZlIG9uIGVycm9yLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xuLVx0dmZzdWlkX3QgdmZzdWlkO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRpZiAoIXN5c2N0bF9wcm90ZWN0ZWRfc3ltbGlua3MpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWRtYXAgPSBtbnRfaWRtYXAobmQtXHUwMDNlcGF0aC5tbnQpO1xuLVx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cdC8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqL1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4gXHQvKiBBbGxvd2VkIGlmIHBhcmVudCBkaXJlY3Rvcnkgbm90IHN0aWNreSBhbmQgd29ybGQtd3JpdGFibGUuICovXG4gXHRpZiAoKG5kLVx1MDAzZWRpcl9tb2RlIFx1MDAyNiAoU19JU1ZUWHxTX0lXT1RIKSkgIT0gKFNfSVNWVFh8U19JV09USCkpXG4gXHRcdHJldHVybiAwO1xuIFxuJiM0MztcdGlkbWFwID0gbW50X2lkbWFwKG5kLVx1MDAzZXBhdGgubW50KTtcbiYjNDM7XHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuIFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IGFuZCBsaW5rIG93bmVyIG1hdGNoLiAqL1xuLVx0aWYgKHZmc3VpZF92YWxpZChuZC1cdTAwM2VkaXJfdmZzdWlkKSBcdTAwMjZcdTAwMjYgdmZzdWlkX2VxKG5kLVx1MDAzZWRpcl92ZnN1aWQsIHZmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpXG4gXHRcdHJldHVybiAtRUNISUxEO1xuQEAgLTEzODksMTIgJiM0MzsxNDU2LDEyIEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXG4gICpcbiAgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjpcbi0gKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkXG4tICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzXG4tICogICAtIHdlIGFyZSBpbiBhIHN0aWNreSBkaXJlY3Rvcnlcbi0gKiAgIC0gd2UgZG9uJiMzOTt0IG93biB0aGUgZmlsZVxuJiM0MzsgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkLFxuJiM0MzsgKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsXG4mIzQzOyAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5LFxuJiM0MzsgKiAgIC0gdGhlIGRpcmVjdG9yeSBpcyB3b3JsZCB3cml0YWJsZSxcbiYjNDM7ICogICAtIHdlIGRvbiYjMzk7dCBvd24gdGhlIGZpbGUgYW5kXG4gICogICAtIHRoZSBvd25lciBvZiB0aGUgZGlyZWN0b3J5IGRvZXNuJiMzOTt0IG93biB0aGUgZmlsZVxuLSAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlXG4gICogSWYgdGhlIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgc2V0IHRvIDJcbiAgKiB0aGUgZGlyZWN0b3J5IGRvZXNuJiMzOTt0IGhhdmUgdG8gYmUgd29ybGQgd3JpdGFibGU6IGJlaW5nIGdyb3VwIHdyaXRhYmxlIHdpbGxcbiAgKiBiZSBlbm91Z2guXG5AQCAtMTQwNSwxMyAmIzQzOzE0NzIsNDUgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuICAqIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqXG4mIzQzOyAqIEZvciBhIGZpbGVzeXN0ZW0gKGUuZy4gYSBuZXR3b3JrIGZpbGVzeXN0ZW0pIHRoYXQgaGFzIGEgc2VwYXJhdGUgSUQgc3BhY2VcbiYjNDM7ICogYW5kIGhhcyBmb3JlaWduIElEcyAobWF5YmUgZXZlbiBub24taW50ZWdlciBJRHMpLCBpX3VpZCBjYW5ub3QgYmUgY29tcGFyZWRcbiYjNDM7ICogdG8gY3VycmVudF9mc3VpZCgpIGFuZCBtYXkgbm90IGJlIGRpcmVjdGx5IGNvbXBhcmFibGUgdG8gYW5vdGhlciBpX3VpZC5cbiYjNDM7ICogSW5zdGVhZCwgdGhlIGZpbGVzeXN0ZW0gaXMgYXNrZWQgdG8gcGVyZm9ybSB0aGUgY29tcGFyaXNvbnMuICBXaXRoIG5ldHdvcmtcbiYjNDM7ICogZmlsZXN5c3RlbXMsIHRoZXJlIGFsc28gZXhpc3RzIHRoZSBwb3NzaWJpbGl0eSBvZiBkb2luZyBhbm9ueW1vdXNcbiYjNDM7ICogb3BlcmF0aW9ucyBhbmQgaGF2aW5nIGFub255bW91c2x5LW93bmVkIG9iamVjdHMuXG4mIzQzOyAqXG4mIzQzOyAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6XG4mIzQzOyAqXG4mIzQzOyAqXHRVU0VSXHRESVJcdEZJTEVcdEZJTEVcdEFMTE9XRURcbiYjNDM7ICpcdFx0T1dORVJcdE9XTkVSXHRTVEFURVxuJiM0MzsgKlx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVxuJiM0MzsgKlx0QVx0QVx0LVx0TmV3XHRZZXNcbiYjNDM7ICpcdEFcdEFcdEFcdEV4aXN0c1x0WWVzXG4mIzQzOyAqXHRBXHRBXHRDXHRFeGlzdHNcdE5vXG4mIzQzOyAqXHRBXHRCXHQtXHROZXdcdFllc1xuJiM0MzsgKlx0QVx0Qlx0QVx0RXhpc3RzXHRZZXMsIEZPPT1VXG4mIzQzOyAqXHRBXHRCXHRCXHRFeGlzdHNcdFllcywgRk89PURPXG4mIzQzOyAqXHRBXHRCXHRDXHRFeGlzdHNcdE5vXG4mIzQzOyAqXHRBXHRhbm9uWzFdXHQtXHROZXdcdFllc1xuJiM0MzsgKlx0QVx0YW5vblsxXVx0QVx0RXhpc3RzXHRZZXNcbiYjNDM7ICpcdEFcdGFub25bMV1cdENcdEV4aXN0c1x0Tm9cbiYjNDM7ICpcdGFub25cdEFcdC1cdE5ld1x0WWVzXG4mIzQzOyAqXHRhbm9uXHRBXHRBXHRFeGlzdHNcdFllcywgRk89PURPXG4mIzQzOyAqXHRhbm9uXHRhbm9uWzFdXHQtXHROZXdcdFllc1xuJiM0MzsgKlx0YW5vblx0YW5vblsxXVx0LVx0RXhpc3RzXHROb1xuJiM0MzsgKlx0YW5vblx0QVx0QVx0RXhpc3RzXHRZZXMsIEZPPT1ET1xuJiM0MzsgKlx0YW5vblx0QVx0Q1x0RXhpc3RzXHROb1xuJiM0MzsgKlx0YW5vblx0QVx0YW5vblx0RXhpc3RzXHROb1xuJiM0MzsgKlxuJiM0MzsgKiBbMV0gQ2FuIGFub255bW91c2x5LW93bmVkIGRpcnMgYmUgc3RpY2t5P1xuJiM0MzsgKlxuICAqIFJldHVybnMgMCBpZiB0aGUgb3BlbiBpcyBhbGxvd2VkLCAtdmUgb24gZXJyb3IuXG4gICovXG4gc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4tXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmNvbnN0IGlub2RlKVxuJiM0MztcdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0dW1vZGVfdCBkaXJfbW9kZSA9IG5kLVx1MDAzZWRpcl9tb2RlO1xuLVx0dmZzdWlkX3QgZGlyX3Zmc3VpZCA9IG5kLVx1MDAzZWRpcl92ZnN1aWQsIGlfdmZzdWlkO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRpZiAobGlrZWx5KCEoZGlyX21vZGUgXHUwMDI2IFNfSVNWVFgpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTQyMiwxMyAmIzQzOzE1MjEsMTMgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAoU19JU0ZJRk8oaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aV92ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVxuLVx0aWYgKHZmc3VpZF9lcShpX3Zmc3VpZCwgZGlyX3Zmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV92ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGlmIChsaWtlbHkoZGlyX21vZGUgXHUwMDI2IDAwMDIpKSB7XG4gXHRcdGF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULCBcJiMzNDtzdGlja3lfY3JlYXRlXCYjMzQ7KTtcbkBAIC0zNjQ1LDEyICYjNDM7Mzc0NCwxNCBAQCBFWFBPUlRfU1lNQk9MKHVzZXJfcGF0aF9hdCk7XG4gaW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4tXHRrdWlkX3QgZnN1aWQgPSBjdXJyZW50X2ZzdWlkKCk7XG4mIzQzO1x0aW50IHJldDtcbiBcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpLCBmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0cmV0dXJuICFjYXBhYmxlX3dydF9pbm9kZV91aWRnaWQoaWRtYXAsIGlub2RlLCBDQVBfRk9XTkVSKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChfX2NoZWNrX3N0aWNreSk7XG5kaWZmIC0tZ2l0IGEvZnMvcmVtYXBfcmFuZ2UuYyBiL2ZzL3JlbWFwX3JhbmdlLmNcbmluZGV4IDI2YWZiYmJmYjEwYzJlLi45ZWVlOTNjMjcwMDEyNSAxMDA2NDRcbi0tLSBhL2ZzL3JlbWFwX3JhbmdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3JlbWFwX3JhbmdlLmNcbkBAIC00MTMsMjAgJiM0Mzs0MTMsMjIgQEAgbG9mZl90IHZmc19jbG9uZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxuIEVYUE9SVF9TWU1CT0wodmZzX2Nsb25lX2ZpbGVfcmFuZ2UpO1xuIFxuIC8qIENoZWNrIHdoZXRoZXIgd2UgYXJlIGFsbG93ZWQgdG8gZGVkdXBlIHRoZSBkZXN0aW5hdGlvbiBmaWxlICovXG4tc3RhdGljIGJvb2wgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0MztzdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHRpZiAoIWlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBNQVlfV1JJVEUpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAtRVBFUk07XG4gfVxuIFxuIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG5AQCAtNDU5LDggJiM0Mzs0NjEsOCBAQCBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IC1FUEVSTTtcbi1cdGlmICghbWF5X2RlZHVwZV9maWxlKGRzdF9maWxlKSlcbiYjNDM7XHRyZXQgPSBtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X2Ryb3Bfd3JpdGU7XG4gXG4gXHRyZXQgPSAtRVhERVY7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCA1MGNlNzMxYTJiNzhmMS4uODAxM2MxM2EzNTNkNjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTYyOCw2ICYjNDM7NjI4LDcgQEAgaXNfdW5jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKmFjbClcbiAjZGVmaW5lIElPUF9DQUNIRURfTElOS1x0XHQweDAwNDBcbiAjZGVmaW5lIElPUF9GQVNUUEVSTV9NQVlfRVhFQ1x0MHgwMDgwXG4gI2RlZmluZSBJT1BfRkxDVFhcdFx0MHgwMTAwXG4mIzQzOyNkZWZpbmUgSU9QX09XTkVSU0hJUF9PVkVSUklERVx0MHgwMjAwXHQvKiBVc2UgLVx1MDAzZWlzX293bmVkX2J5X21lKCkgYW5kIC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoKSAqL1xuIFxuIC8qXG4gICogSW5vZGUgc3RhdGUgYml0cy4gIFByb3RlY3RlZCBieSBpbm9kZS1cdTAwM2VpX2xvY2tcbkBAIC0xNzU1LDggJiM0MzsxNzU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfd3JpdGVfbm90X3N0YXJ0ZWQoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gc2Jfd3JpdGVfbm90X3N0YXJ0ZWQoZmlsZV9pbm9kZShmaWxlKS1cdTAwM2VpX3NiKTtcbiB9XG4gXG4tYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7Ym9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKlxuICAqIFZGUyBoZWxwZXIgZnVuY3Rpb25zLi5cbkBAIC0yMDM2LDYgJiM0MzsyMDM2LDkgQEAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMge1xuIFx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHRpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7XHRpbnQgKCppc19vd25lZF9ieV9tZSkoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuJiM0MztcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICppbm9kZTIpO1xuIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkO1xuIFxuIC8qIERpZCB0aGUgZHJpdmVyIHByb3ZpZGUgdmFsaWQgbW1hcCBob29rIGNvbmZpZ3VyYXRpb24/ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTY6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDt2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXImIzM0OywKICAgICYjMzQ7dmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXImIzM0OywKICAgICYjMzQ7YWZzX2lzX293bmVkX2J5X21lJiMzNDssCiAgICAmIzM0O2Fmc19oYXZlX3NhbWVfb3duZXImIzM0OywKICAgICYjMzQ7Y2hvd25fb2smIzM0OywKICAgICYjMzQ7Y2hncnBfb2smIzM0OywKICAgICYjMzQ7bWF5X2NyZWF0ZV9pbl9zdGlja3kmIzM0OywKICAgICYjMzQ7X19jaGVja19zdGlja3kmIzM0OywKICAgICYjMzQ7bWF5X2RlZHVwZV9maWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIG5ldyBpbm9kZSBvcGVyYXRpb25zIGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IFZGUyBvd25lcnNoaXAgY2hlY2tzLiBJdCBpbXBsZW1lbnRzIHRoZXNlIG9wZXJhdGlvbnMgaW4gdGhlIEFGUyBmaWxlc3lzdGVtIGFuZCBtb2RpZmllcyBjb3JlIFZGUyBmdW5jdGlvbnMgKGxpa2UgYGNob3duX29rYCwgYGNoZ3JwX29rYCwgYG1heV9jcmVhdGVfaW5fc3RpY2t5YCwgYG1heV9kZWR1cGVfZmlsZWAsIGV0Yy4pIHRvIHVzZSB0aGVtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMgYW5kIEFGUyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQzNDA1NDNjMmJkYzM0MTAwZTIwMzVhZTY0NGYzNTk4ZWZlZDU1MWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAyNCAxNjozMTowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdAppbmRleCA3Yzc1MzE0OGFmODg4My4uODkzNDE5ZTAwM2VhZjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QKQEAgLTQ0NSw2ICYjNDM7NDQ1LDkgQEAgQXMgb2Yga2VybmVsIDIuNi4yMiwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOgogCQkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7CiAJCWludCAoKmZpbGVhdHRyX2dldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpOwogCSAgICAgICAgc3RydWN0IG9mZnNldF9jdHggKigqZ2V0X29mZnNldF9jdHgpKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwomIzQzOwkJaW50ICgqaXNfb3duZWRfYnlfbWUpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MzsJCWludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogCX07CiAKIEFnYWluLCBhbGwgbWV0aG9kcyBhcmUgY2FsbGVkIHdpdGhvdXQgYW55IGxvY2tzIGJlaW5nIGhlbGQsIHVubGVzcwpAQCAtNjM0LDYgJiM0Mzs2MzcsMjQgQEAgb3RoZXJ3aXNlIG5vdGVkLgogICAgICAgICBmaWxlc3lzdGVtIG11c3QgZGVmaW5lIHRoaXMgb3BlcmF0aW9uIHRvIHVzZQogICAgICAgICBzaW1wbGVfb2Zmc2V0X2Rpcl9vcGVyYXRpb25zLgogCiYjNDM7YGBpc19vd25lZF9ieV9tZWBgCiYjNDM7CWNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGZpbGUgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgJiMzOTtvd25lZCYjMzk7IGJ5CiYjNDM7CXRoZSBvd25lciBvZiB0aGUgcHJvY2VzcyBvciBpZiB0aGUgcHJvY2VzcyBoYXMgYSB0b2tlbiB0aGF0IGdyYW50cwomIzQzOwlpdCBvd25lcnNoaXAgcHJpdmlsZWdlcy4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBjb21wYXJlIGlfdWlkCiYjNDM7CXRvIGN1cnJlbnRfZnN1aWQoKSAtIGJ1dCB0aGlzIG1heSBnaXZlIGluY29ycmVjdCByZXN1bHRzIGZvciBzb21lCiYjNDM7CW5ldHdvcmsgb3IgcGx1Zy1pbiBibG9jayBmaWxlc3lzdGVtcy4gIEZvciBleGFtcGxlLCBBRlMgZGV0ZXJtaW5lcwomIzQzOwlvd25lcnNoaXAgZW50aXJlbHkgYWNjb3JkaW5nIHRvIGFuIG9idGFpbmVkIHRva2VuIGFuZCBpX3VpZCBtYXkgbm90CiYjNDM7CWV2ZW4gYmUgZnJvbSB0aGUgc2FtZSBJRCBzcGFjZSBhcyBjdXJyZW50X3VpZCgpLgomIzQzOwomIzQzO2BgaGF2ZV9zYW1lX293bmVyYGAKJiM0MzsJY2FsbGVkIHRvIGRldGVybWluZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIGltbWVkaWF0ZQomIzQzOwlwYXJlbnQgb24gdGhlIHBhdGggd2Fsa2VkLiAgSWYgdW5zZXQsIHRoZSBkZWZhdWx0IGlzIHRvIHNpbXBseQomIzQzOwljb21wYXJlIHRoZSBpX3VpZCBvZiBib3RoLiAgRm9yIGV4YW1wbGUsIEFGUyBjb21wYXJlcyB0aGUgb3duZXIgSURzCiYjNDM7CW9mIGJvdGggLSBidXQgdGhlc2UgYXJlIGEgNjQtYml0IHZhbHVlcyBvbiBzb21lIHZhcmlhbnRzIHRoYXQgbWlnaHQKJiM0MzsJbm90IGZpdCBpbnRvIGEga3VpZF90IGFuZCBjaWZzIGhhcyBHVUlEcyB0aGF0IGNhbm5vdCBiZSBjb21wYXJlZCB0bwomIzQzOwlrdWlkX3QuCiYjNDM7CiYjNDM7CiBUaGUgQWRkcmVzcyBTcGFjZSBPYmplY3QKID09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyLmMgYi9mcy9hZnMvZGlyLmMKaW5kZXggNmRmNTZmZTkxNjNmZDcuLmVlMmY1ZWMwYjJjNjdkIDEwMDY0NAotLS0gYS9mcy9hZnMvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Rpci5jCkBAIC02OSw2ICYjNDM7NjksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLnBlcm1pc3Npb24JPSBhZnNfcGVybWlzc2lvbiwKIAkuZ2V0YXR0cgk9IGFmc19nZXRhdHRyLAogCS5zZXRhdHRyCT0gYWZzX3NldGF0dHIsCiYjNDM7CS5pc19vd25lZF9ieV9tZQk9IGFmc19pc19vd25lZF9ieV9tZSwKJiM0MzsJLmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsCiB9OwogCiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19kaXJfYW9wcyA9IHsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9maWxlLmMgYi9mcy9hZnMvZmlsZS5jCmluZGV4IDA0Njc3NDJiZmVlZTM0Li5iYTQ0NDkzY2NhZjZlZSAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZmlsZS5jCkBAIC00OSw2ICYjNDM7NDksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewogCS5nZXRhdHRyCT0gYWZzX2dldGF0dHIsCiAJLnNldGF0dHIJPSBhZnNfc2V0YXR0ciwKIAkucGVybWlzc2lvbgk9IGFmc19wZXJtaXNzaW9uLAomIzQzOwkuaXNfb3duZWRfYnlfbWUJPSBhZnNfaXNfb3duZWRfYnlfbWUsCiYjNDM7CS5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLAogfTsKIAogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZmlsZV9hb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuYwppbmRleCAxNGYzOWE5YmVhNmNmZS4uYWY4NWE4OGQ5NDNkZDEgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbm9kZS5jCkBAIC05MSw2ICYjNDM7OTEsNyBAQCBzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwKIAlpbm9kZS0mZ3Q7aV9mbGFncyB8PSBTX05PQVRJTUU7CiAJaW5vZGUtJmd0O2lfdWlkID0gbWFrZV9rdWlkKCZhbXA7aW5pdF91c2VyX25zLCBzdGF0dXMtJmd0O293bmVyKTsKIAlpbm9kZS0mZ3Q7aV9naWQgPSBtYWtlX2tnaWQoJmFtcDtpbml0X3VzZXJfbnMsIHN0YXR1cy0mZ3Q7Z3JvdXApOwomIzQzOwlpbm9kZS0mZ3Q7aV9vcGZsYWdzIHw9IElPUF9PV05FUlNISVBfT1ZFUlJJREU7CiAJc2V0X25saW5rKCZhbXA7dm5vZGUtJmd0O25ldGZzLmlub2RlLCBzdGF0dXMtJmd0O25saW5rKTsKIAogCWlfc2l6ZV93cml0ZShpbm9kZSwgc3RhdHVzLSZndDtzaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmgKaW5kZXggNjAxZjAxZTVjMTVmY2MuLmUxMGNmNzYzNmY2NWI2IDEwMDY0NAotLS0gYS9mcy9hZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvaW50ZXJuYWwuaApAQCAtMTUzMCw2ICYjNDM7MTUzMCw5IEBAIGV4dGVybiBzdHJ1Y3Qga2V5ICphZnNfcmVxdWVzdF9rZXkoc3RydWN0IGFmc19jZWxsICopOwogZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleV9yY3Uoc3RydWN0IGFmc19jZWxsICopOwogZXh0ZXJuIGludCBhZnNfY2hlY2tfcGVybWl0KHN0cnVjdCBhZnNfdm5vZGUgKiwgc3RydWN0IGtleSAqLCBhZnNfYWNjZXNzX3QgKik7CiBleHRlcm4gaW50IGFmc19wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIGludCk7CiYjNDM7aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7aW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLAomIzQzOwkJCXN0cnVjdCBpbm9kZSAqaW5vZGUyKTsKIGV4dGVybiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpOwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvYWZzL3NlY3VyaXR5LmMgYi9mcy9hZnMvc2VjdXJpdHkuYwppbmRleCA2ZDAwZDYyYTY1ZWRmNi4uNzA5MmY1YWNkY2Q2YWMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9zZWN1cml0eS5jCkBAIC01MTAsNiAmIzQzOzUxMCw1MiBAQCBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5ICYjMzk7bWUmIzM5OyAtIHdoYXRldmVyIHRoYXQgbWVhbnMgZm9yIHRoZQomIzQzOyAqIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgdGhhdCB0aGUgZmlsZSBpcyBvd25lZCBieSB0aGUKJiM0MzsgKiBBRlMgdXNlciByZXByZXNlbnRlZCBieSB0aGUgUnggU2VjdXJpdHkgQ2xhc3MgdG9rZW4gaGVsZCBpbiBhIGtleS4gIFJldHVybnMKJiM0MzsgKiAwIGlmIG93bmVkIGJ5IG1lLCAxIGlmIG5vdDsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLgomIzQzOyAqLwomIzQzO2ludCBhZnNfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGlub2RlKTsKJiM0MzsJYWZzX2FjY2Vzc190IGFjY2VzczsKJiM0MzsJc3RydWN0IGtleSAqa2V5OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkKJiM0MzsJCXJldHVybiAxOyAvKiBUaGUgQURNSU4gcmlnaHQgY2hlY2sgZG9lc24mIzM5O3Qgd29yayBmb3IgZGlyZWN0b3JpZXMuICovCiYjNDM7CiYjNDM7CWtleSA9IGFmc19yZXF1ZXN0X2tleSh2bm9kZS0mZ3Q7dm9sdW1lLSZndDtjZWxsKTsKJiM0MzsJaWYgKElTX0VSUihrZXkpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoa2V5KTsKJiM0MzsKJiM0MzsJLyogR2V0IHRoZSBhY2Nlc3MgcmlnaHRzIGZvciB0aGUga2V5IG9uIHRoaXMgZmlsZS4gKi8KJiM0MzsJcmV0ID0gYWZzX2NoZWNrX3Blcm1pdCh2bm9kZSwga2V5LCAmYW1wO2FjY2Vzcyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsKJiM0MzsJLyogV2UgZ2V0IHRoZSBBRE1JTklTVEVSIGJpdCBpZiB3ZSBvd24gdGhlIGZpbGUuICovCiYjNDM7CXJldCA9IChhY2Nlc3MgJmFtcDsgQUZTX0FDRV9BRE1JTklTVEVSKSA/IDAgOiAxOwomIzQzO2Vycm9yOgomIzQzOwlrZXlfcHV0KGtleSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGEgZmlsZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIHBhcmVudCAtIHdoYXRldmVyIHRoYXQgbWVhbnMKJiM0MzsgKiBmb3IgdGhlIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgY29tcGFyaW5nIHRoZWlyIEFGUwomIzQzOyAqIFVJRHMuICBSZXR1cm5zIDAgaWYgc2FtZSwgMSBpZiBub3Qgc2FtZTsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLgomIzQzOyAqLwomIzQzO2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSwKJiM0MzsJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlMikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlMSA9IEFGU19GU19JKGlub2RlMSk7CiYjNDM7CWNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlMiA9IEFGU19GU19JKGlub2RlMik7CiYjNDM7CiYjNDM7CXJldHVybiB2bm9kZTEtJmd0O3N0YXR1cy5vd25lciAhPSB2bm9kZTItJmd0O3N0YXR1cy5vd25lcjsKJiM0Mzt9CiYjNDM7CiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9mcy9hdHRyLmMgYi9mcy9hdHRyLmMKaW5kZXggNGY0MzdmYWJiN2YwZjUuLmI3ZThiNWQ0OWE5ZmU2IDEwMDY0NAotLS0gYS9mcy9hdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYXR0ci5jCkBAIC0xNiw2ICYjNDM7MTYsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZjbnRsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZmlsZWxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zZWN1cml0eS5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiAKIC8qKgogICogc2V0YXR0cl9zaG91bGRfZHJvcF9zZ2lkIC0gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNldGdpZCBiaXQgbmVlZHMgdG8gYmUKQEAgLTkxLDE5ICYjNDM7OTIsMjEgQEAgRVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpOwogICogcGVybWlzc2lvbnMuIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZQogICogcGVyZm9ybWVkIG9uIHRoZSByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuCiAgKi8KLXN0YXRpYyBib29sIGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAotCQkgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc3VpZF90IGlhX3Zmc3VpZCkKJiM0MztzdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc3VpZF90IGlhX3Zmc3VpZCkKIHsKIAl2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpOwotCWlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkgJmFtcDsmYW1wOwotCSAgICB2ZnN1aWRfZXEoaWFfdmZzdWlkLCB2ZnN1aWQpKQotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiAJaWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpCi0JCXJldHVybiB0cnVlOwomIzQzOwkJcmV0dXJuIDA7CiAJaWYgKCF2ZnN1aWRfdmFsaWQodmZzdWlkKSAmYW1wOyZhbXA7CiAJICAgIG5zX2NhcGFibGUoaW5vZGUtJmd0O2lfc2ItJmd0O3NfdXNlcl9ucywgQ0FQX0NIT1dOKSkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZhbHNlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAtRVBFUk07CiB9CiAKIC8qKgpAQCAtMTE4LDIzICYjNDM7MTIxLDI3IEBAIHN0YXRpYyBib29sIGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogICogcGVybWlzc2lvbnMuIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZQogICogcGVyZm9ybWVkIG9uIHRoZSByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuCiAgKi8KLXN0YXRpYyBib29sIGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAotCQkgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc2dpZF90IGlhX3Zmc2dpZCkKJiM0MztzdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc2dpZF90IGlhX3Zmc2dpZCkKIHsKIAl2ZnNnaWRfdCB2ZnNnaWQgPSBpX2dpZF9pbnRvX3Zmc2dpZChpZG1hcCwgaW5vZGUpOwotCXZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7Ci0JaWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSkgewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmV0ID09IDApIHsKIAkJaWYgKHZmc2dpZF9lcShpYV92ZnNnaWQsIHZmc2dpZCkpCi0JCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCQlyZXR1cm4gMDsKIAkJaWYgKHZmc2dpZF9pbl9ncm91cF9wKGlhX3Zmc2dpZCkpCi0JCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpCi0JCXJldHVybiB0cnVlOwomIzQzOwkJcmV0dXJuIDA7CiAJaWYgKCF2ZnNnaWRfdmFsaWQodmZzZ2lkKSAmYW1wOyZhbXA7CiAJICAgIG5zX2NhcGFibGUoaW5vZGUtJmd0O2lfc2ItJmd0O3NfdXNlcl9ucywgQ0FQX0NIT1dOKSkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZhbHNlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAtRVBFUk07CiB9CiAKIC8qKgpAQCAtMTYzLDYgJiM0MzsxNzAsNyBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTsKIAl1bnNpZ25lZCBpbnQgaWFfdmFsaWQgPSBhdHRyLSZndDtpYV92YWxpZDsKJiM0MzsJaW50IHJldDsKIAogCS8qCiAJICogRmlyc3QgY2hlY2sgc2l6ZSBjb25zdHJhaW50cy4gIFRoZXNlIGNhbiYjMzk7dCBiZSBvdmVycmlkZGVuIHVzaW5nCkBAIC0xODksMTQgJiM0MzsxOTcsMTggQEAgaW50IHNldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQlnb3RvIGtpbGxfcHJpdjsKIAogCS8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2hvd24uICovCi0JaWYgKChpYV92YWxpZCAmYW1wOyBBVFRSX1VJRCkgJmFtcDsmYW1wOwotCSAgICAhY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLSZndDtpYV92ZnN1aWQpKQotCQlyZXR1cm4gLUVQRVJNOwomIzQzOwlpZiAoaWFfdmFsaWQgJmFtcDsgQVRUUl9VSUQpIHsKJiM0MzsJCXJldCA9IGNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci0mZ3Q7aWFfdmZzdWlkKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KIAogCS8qIE1ha2Ugc3VyZSBjYWxsZXIgY2FuIGNoZ3JwLiAqLwotCWlmICgoaWFfdmFsaWQgJmFtcDsgQVRUUl9HSUQpICZhbXA7JmFtcDsKLQkgICAgIWNoZ3JwX29rKGlkbWFwLCBpbm9kZSwgYXR0ci0mZ3Q7aWFfdmZzZ2lkKSkKLQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJaWYgKGlhX3ZhbGlkICZhbXA7IEFUVFJfR0lEKSB7CiYjNDM7CQlyZXQgPSBjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItJmd0O2lhX3Zmc2dpZCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKIAkvKiBNYWtlIHN1cmUgYSBjYWxsZXIgY2FuIGNobW9kLiAqLwogCWlmIChpYV92YWxpZCAmYW1wOyBBVFRSX01PREUpIHsKZGlmZiAtLWdpdCBhL2ZzL2NvcmVkdW1wLmMgYi9mcy9jb3JlZHVtcC5jCmluZGV4IGU2OGE3NmZmOTJhMzg2Li4zZjMyZTczYWFlZGEyOCAxMDA2NDQKLS0tIGEvZnMvY29yZWR1bXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb3JlZHVtcC5jCkBAIC05NTQsNyAmIzQzOzk1NCw3IEBAIHN0YXRpYyBib29sIGNvcmVkdW1wX2ZpbGUoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sCiAJICogZmlsZXN5c3RlbS4KIAkgKi8KIAlpZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpOwotCWlmICghdmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkgewomIzQzOwlpZiAodmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSkgIT0gMCkgewogCQljb3JlZHVtcF9yZXBvcnRfZmFpbHVyZSgmIzM0O0NvcmUgZHVtcCB0byAlcyBhYm9ydGVkOiBjYW5ub3QgcHJlc2VydmUgZmlsZSBvd25lciYjMzQ7LCBjbi0mZ3Q7Y29yZW5hbWUpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmMKaW5kZXggMzFjNWI5ZWUzYTgxZGYuLmE3ZWM4MzBhYjY4M2YwIDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lub2RlLmMKQEAgLTI3NTAsMTYgJiM0MzsyNzUwLDE5IEBAIEVYUE9SVF9TWU1CT0woaW5vZGVfaW5pdF9vd25lcik7CiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZQogICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLgogICovCi1ib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCi0JCQkgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mztib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJdmZzdWlkX3QgdmZzdWlkOwogCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7CiYjNDM7CWludCByZXQ7CiAKLQl2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpOwotCWlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpCiYjNDM7CXJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpOwomIzQzOwlpZiAocmV0ID09IDApCiAJCXJldHVybiB0cnVlOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBmYWxzZTsKIAomIzQzOwl2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpOwogCW5zID0gY3VycmVudF91c2VyX25zKCk7CiAJaWYgKHZmc3VpZF9oYXNfbWFwcGluZyhucywgdmZzdWlkKSAmYW1wOyZhbXA7IG5zX2NhcGFibGUobnMsIENBUF9GT1dORVIpKQogCQlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oCmluZGV4IDM1NWQ5M2Y5MjIwODYxLi5iZTQ1Y2M2Mzg4NjE5MiAxMDA2NDQKLS0tIGEvZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9pbnRlcm5hbC5oCkBAIC01MSw2ICYjNDM7NTEsNyBAQCBleHRlcm4gaW50IGZpbmlzaF9jbGVhbl9jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYyk7CiAvKgogICogbmFtZWkuYwogICovCiYjNDM7aW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gaW50IGZpbGVuYW1lX2xvb2t1cChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIHVuc2lnbmVkIGZsYWdzLAogCQkJICAgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KTsKIGludCBmaWxlbmFtZV9ybWRpcihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmMKaW5kZXggNmU0ZmY3ZmNlYzA1M2UuLjAyZjgxMGRjOWU3ZTdhIDEwMDY0NAotLS0gYS9mcy9sb2Nrcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2xvY2tzLmMKQEAgLTY4LDYgJiM0Mzs2OCw3IEBACiAjaW5jbHVkZSAmbHQ7dHJhY2UvZXZlbnRzL2ZpbGVsb2NrLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtsaW51eC91YWNjZXNzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIAogc3RhdGljIHN0cnVjdCBmaWxlX2xvY2sgKmZpbGVfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYykKIHsKQEAgLTIxMzYsMTAgJiM0MzsyMTM3LDEyIEBAIGludAogdmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdikKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTsKLQl2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpOwogCWludCBlcnJvcjsKIAotCWlmICgoIXZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSkgJmFtcDsmYW1wOyAhY2FwYWJsZShDQVBfTEVBU0UpKQomIzQzOwllcnJvciA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpOwomIzQzOwlpZiAoZXJyb3IgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwlpZiAoZXJyb3IgIT0gMCAmYW1wOyZhbXA7ICFjYXBhYmxlKENBUF9MRUFTRSkpCiAJCXJldHVybiAtRUFDQ0VTOwogCWVycm9yID0gc2VjdXJpdHlfZmlsZV9sb2NrKGZpbHAsIGFyZyk7CiAJaWYgKGVycm9yKQpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggMTljZTQzYzlhNmU2NjIuLjcyZjk0ZDIwNGY5M2Y0IDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTU1LDggJiM0Mzs1NSw4IEBACiAgKiBUaGUgbmV3IGNvZGUgcmVwbGFjZXMgdGhlIG9sZCByZWN1cnNpdmUgc3ltbGluayByZXNvbHV0aW9uIHdpdGgKICAqIGFuIGl0ZXJhdGl2ZSBvbmUgKGluIGNhc2Ugb2Ygbm9uLW5lc3RlZCBzeW1saW5rIGNoYWlucykuICBJdCBkb2VzCiAgKiB0aGlzIHdpdGggY2FsbHMgdG8gJmx0O2ZzJmd0O19mb2xsb3dfbGluaygpLgotICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3cgCi0gKiByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGxvb2t1cF9kZW50cnkoKSB0aGF0IGNhbiBoYW5kbGUgYWxsIAomIzQzOyAqIEFzIGEgc2lkZSBlZmZlY3QsIGRpcl9uYW1laSgpLCBfbmFtZWkoKSBhbmQgZm9sbG93X2xpbmsoKSBhcmUgbm93CiYjNDM7ICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbAogICogdGhlIHNwZWNpYWwgY2FzZXMgb2YgdGhlIGZvcm1lciBjb2RlLgogICoKICAqIFdpdGggdGhlIG5ldyBkY2FjaGUsIHRoZSBwYXRobmFtZSBpcyBzdG9yZWQgYXQgZWFjaCBpbm9kZSwgYXQgbGVhc3QgYXMKQEAgLTEyNTUsNiAmIzQzOzEyNTUsNzIgQEAgZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTsKIAogI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KIAomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5IHRoZSBwcm9jZXNzIChhbGxvd2luZyBmb3IgZnN1aWQgb3ZlcnJpZGUpLAomIzQzOyAqIHJldHVybmluZyAwIGlmIHNvLCAxIGlmIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0KJiM0MzsgKiBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uCiYjNDM7ICovCiYjNDM7aW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseShpbm9kZS0mZ3Q7aV9vcGZsYWdzICZhbXA7IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKQomIzQzOwkJcmV0dXJuIGlub2RlLSZndDtpX29wLSZndDtpc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpOwomIzQzOwlpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gMTsgLyogTm90IHNhbWUuICovCiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IGRpcmVjdG9yeSwgcmV0dXJuaW5nCiYjNDM7ICogMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIG1ha2luZwomIzQzOyAqIHRoZSBkZXRlcm1pbmF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseShpbm9kZS0mZ3Q7aV9vcGZsYWdzICZhbXA7IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKSB7CiYjNDM7CQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CiYjNDM7CQlzdHJ1Y3QgaW5vZGUgKmRpcjsKJiM0MzsJCWludCByZXQ7CiYjNDM7CiYjNDM7CQlpZiAoaW5vZGUgIT0gbmQtJmd0O2lub2RlKSB7CiYjNDM7CQkJZGlyID0gbmQtJmd0O2lub2RlOwomIzQzOwkJCXJldCA9IGlub2RlLSZndDtpX29wLSZndDtoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpOwomIzQzOwkJfSBlbHNlIGlmIChuZC0mZ3Q7ZmxhZ3MgJmFtcDsgTE9PS1VQX1JDVSkgewomIzQzOwkJCXBhcmVudCA9IFJFQURfT05DRShuZC0mZ3Q7cGF0aC5kZW50cnkpOwomIzQzOwkJCWRpciA9IFJFQURfT05DRShwYXJlbnQtJmd0O2RfaW5vZGUpOwomIzQzOwkJCWlmICghZGlyKQomIzQzOwkJCQlyZXR1cm4gLUVDSElMRDsKJiM0MzsJCQlyZXQgPSBpbm9kZS0mZ3Q7aV9vcC0mZ3Q7aGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcGFyZW50ID0gZGdldF9wYXJlbnQobmQtJmd0O3BhdGguZGVudHJ5KTsKJiM0MzsJCQlkaXIgPSBwYXJlbnQtJmd0O2RfaW5vZGU7CiYjNDM7CQkJcmV0ID0gaW5vZGUtJmd0O2lfb3AtJmd0O2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7CiYjNDM7CQkJZHB1dChwYXJlbnQpOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmZzdWlkX3ZhbGlkKG5kLSZndDtkaXJfdmZzdWlkKSAmYW1wOyZhbXA7CiYjNDM7CSAgICB2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgbmQtJmd0O2Rpcl92ZnN1aWQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi8KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEZXRlcm1pbmUgaWYgdHdvIGlub2RlcyBoYXZlIHRoZSBzYW1lIG93bmVyLCByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kCiYjNDM7ICogYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gbWFraW5nIHRoZSBkZXRlcm1pbmF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyKQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KGlub2RlLSZndDtpX29wZmxhZ3MgJmFtcDsgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpCiYjNDM7CQlyZXR1cm4gaW5vZGUtJmd0O2lfb3AtJmd0O2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7CiYjNDM7CWlmICh2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwKJiM0MzsJCSAgICAgIGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gMTsgLyogTm90IHNhbWUuICovCiYjNDM7fQomIzQzOwogLyoqCiAgKiBtYXlfZm9sbG93X2xpbmsgLSBDaGVjayBzeW1saW5rIGZvbGxvd2luZyBmb3IgdW5zYWZlIHNpdHVhdGlvbnMKICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGEKQEAgLTEyNzEsMjcgJiM0MzsxMzM3LDI4IEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7CiAgKgogICogUmV0dXJucyAwIGlmIGZvbGxvd2luZyB0aGUgc3ltbGluayBpcyBhbGxvd2VkLCAtdmUgb24gZXJyb3IuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IG1udF9pZG1hcCAqaWRtYXA7Ci0JdmZzdWlkX3QgdmZzdWlkOwomIzQzOwlpbnQgcmV0OwogCiAJaWYgKCFzeXNjdGxfcHJvdGVjdGVkX3N5bWxpbmtzKQogCQlyZXR1cm4gMDsKIAotCWlkbWFwID0gbW50X2lkbWFwKG5kLSZndDtwYXRoLm1udCk7Ci0JdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTsKLQkvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi8KLQlpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKQotCQlyZXR1cm4gMDsKLQogCS8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBub3Qgc3RpY2t5IGFuZCB3b3JsZC13cml0YWJsZS4gKi8KIAlpZiAoKG5kLSZndDtkaXJfbW9kZSAmYW1wOyAoU19JU1ZUWHxTX0lXT1RIKSkgIT0gKFNfSVNWVFh8U19JV09USCkpCiAJCXJldHVybiAwOwogCiYjNDM7CWlkbWFwID0gbW50X2lkbWFwKG5kLSZndDtwYXRoLm1udCk7CiYjNDM7CS8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqLwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAkvKiBBbGxvd2VkIGlmIHBhcmVudCBkaXJlY3RvcnkgYW5kIGxpbmsgb3duZXIgbWF0Y2guICovCi0JaWYgKHZmc3VpZF92YWxpZChuZC0mZ3Q7ZGlyX3Zmc3VpZCkgJmFtcDsmYW1wOyB2ZnN1aWRfZXEobmQtJmd0O2Rpcl92ZnN1aWQsIHZmc3VpZCkpCi0JCXJldHVybiAwOwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlpZiAobmQtJmd0O2ZsYWdzICZhbXA7IExPT0tVUF9SQ1UpCiAJCXJldHVybiAtRUNISUxEOwpAQCAtMTM4OSwxMiAmIzQzOzE0NTYsMTIgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKQogICogQGlub2RlOiB0aGUgaW5vZGUgb2YgdGhlIGZpbGUgdG8gb3BlbgogICoKICAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOgotICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZAotICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzCi0gKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeQotICogICAtIHdlIGRvbiYjMzk7dCBvd24gdGhlIGZpbGUKJiM0MzsgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkLAomIzQzOyAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywKJiM0MzsgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeSwKJiM0MzsgKiAgIC0gdGhlIGRpcmVjdG9yeSBpcyB3b3JsZCB3cml0YWJsZSwKJiM0MzsgKiAgIC0gd2UgZG9uJiMzOTt0IG93biB0aGUgZmlsZSBhbmQKICAqICAgLSB0aGUgb3duZXIgb2YgdGhlIGRpcmVjdG9yeSBkb2VzbiYjMzk7dCBvd24gdGhlIGZpbGUKLSAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlCiAgKiBJZiB0aGUgc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBzZXQgdG8gMgogICogdGhlIGRpcmVjdG9yeSBkb2VzbiYjMzk7dCBoYXZlIHRvIGJlIHdvcmxkIHdyaXRhYmxlOiBiZWluZyBncm91cCB3cml0YWJsZSB3aWxsCiAgKiBiZSBlbm91Z2guCkBAIC0xNDA1LDEzICYjNDM7MTQ3Miw0NSBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspCiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZQogICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLgogICoKJiM0MzsgKiBGb3IgYSBmaWxlc3lzdGVtIChlLmcuIGEgbmV0d29yayBmaWxlc3lzdGVtKSB0aGF0IGhhcyBhIHNlcGFyYXRlIElEIHNwYWNlCiYjNDM7ICogYW5kIGhhcyBmb3JlaWduIElEcyAobWF5YmUgZXZlbiBub24taW50ZWdlciBJRHMpLCBpX3VpZCBjYW5ub3QgYmUgY29tcGFyZWQKJiM0MzsgKiB0byBjdXJyZW50X2ZzdWlkKCkgYW5kIG1heSBub3QgYmUgZGlyZWN0bHkgY29tcGFyYWJsZSB0byBhbm90aGVyIGlfdWlkLgomIzQzOyAqIEluc3RlYWQsIHRoZSBmaWxlc3lzdGVtIGlzIGFza2VkIHRvIHBlcmZvcm0gdGhlIGNvbXBhcmlzb25zLiAgV2l0aCBuZXR3b3JrCiYjNDM7ICogZmlsZXN5c3RlbXMsIHRoZXJlIGFsc28gZXhpc3RzIHRoZSBwb3NzaWJpbGl0eSBvZiBkb2luZyBhbm9ueW1vdXMKJiM0MzsgKiBvcGVyYXRpb25zIGFuZCBoYXZpbmcgYW5vbnltb3VzbHktb3duZWQgb2JqZWN0cy4KJiM0MzsgKgomIzQzOyAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6CiYjNDM7ICoKJiM0MzsgKglVU0VSCURJUglGSUxFCUZJTEUJQUxMT1dFRAomIzQzOyAqCQlPV05FUglPV05FUglTVEFURQomIzQzOyAqCT09PT09PT0JPT09PT09PQk9PT09PT09CT09PT09PT0JPT09PT09PQomIzQzOyAqCUEJQQktCU5ldwlZZXMKJiM0MzsgKglBCUEJQQlFeGlzdHMJWWVzCiYjNDM7ICoJQQlBCUMJRXhpc3RzCU5vCiYjNDM7ICoJQQlCCS0JTmV3CVllcwomIzQzOyAqCUEJQglBCUV4aXN0cwlZZXMsIEZPPT1VCiYjNDM7ICoJQQlCCUIJRXhpc3RzCVllcywgRk89PURPCiYjNDM7ICoJQQlCCUMJRXhpc3RzCU5vCiYjNDM7ICoJQQlhbm9uWzFdCS0JTmV3CVllcwomIzQzOyAqCUEJYW5vblsxXQlBCUV4aXN0cwlZZXMKJiM0MzsgKglBCWFub25bMV0JQwlFeGlzdHMJTm8KJiM0MzsgKglhbm9uCUEJLQlOZXcJWWVzCiYjNDM7ICoJYW5vbglBCUEJRXhpc3RzCVllcywgRk89PURPCiYjNDM7ICoJYW5vbglhbm9uWzFdCS0JTmV3CVllcwomIzQzOyAqCWFub24JYW5vblsxXQktCUV4aXN0cwlObwomIzQzOyAqCWFub24JQQlBCUV4aXN0cwlZZXMsIEZPPT1ETwomIzQzOyAqCWFub24JQQlDCUV4aXN0cwlObwomIzQzOyAqCWFub24JQQlhbm9uCUV4aXN0cwlObwomIzQzOyAqCiYjNDM7ICogWzFdIENhbiBhbm9ueW1vdXNseS1vd25lZCBkaXJzIGJlIHN0aWNreT8KJiM0MzsgKgogICogUmV0dXJucyAwIGlmIHRoZSBvcGVuIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci4KICAqLwogc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsCi0JCQkJc3RydWN0IGlub2RlICpjb25zdCBpbm9kZSkKJiM0MzsJCQkJc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAl1bW9kZV90IGRpcl9tb2RlID0gbmQtJmd0O2Rpcl9tb2RlOwotCXZmc3VpZF90IGRpcl92ZnN1aWQgPSBuZC0mZ3Q7ZGlyX3Zmc3VpZCwgaV92ZnN1aWQ7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAobGlrZWx5KCEoZGlyX21vZGUgJmFtcDsgU19JU1ZUWCkpKQogCQlyZXR1cm4gMDsKQEAgLTE0MjIsMTMgJiM0MzsxNTIxLDEzIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLAogCWlmIChTX0lTRklGTyhpbm9kZS0mZ3Q7aV9tb2RlKSAmYW1wOyZhbXA7ICFzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zKQogCQlyZXR1cm4gMDsKIAotCWlfdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTsKLQotCWlmICh2ZnN1aWRfZXEoaV92ZnN1aWQsIGRpcl92ZnN1aWQpKQotCQlyZXR1cm4gMDsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwogCi0JaWYgKHZmc3VpZF9lcV9rdWlkKGlfdmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKQotCQlyZXR1cm4gMDsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlpZiAobGlrZWx5KGRpcl9tb2RlICZhbXA7IDAwMDIpKSB7CiAJCWF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULCAmIzM0O3N0aWNreV9jcmVhdGUmIzM0Oyk7CkBAIC0zNjQ1LDEyICYjNDM7Mzc0NCwxNCBAQCBFWFBPUlRfU1lNQk9MKHVzZXJfcGF0aF9hdCk7CiBpbnQgX19jaGVja19zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWt1aWRfdCBmc3VpZCA9IGN1cnJlbnRfZnN1aWQoKTsKJiM0MzsJaW50IHJldDsKIAotCWlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBmc3VpZCkpCi0JCXJldHVybiAwOwotCWlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgZGlyKSwgZnN1aWQpKQotCQlyZXR1cm4gMDsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKIAlyZXR1cm4gIWNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9GT1dORVIpOwogfQogRVhQT1JUX1NZTUJPTChfX2NoZWNrX3N0aWNreSk7CmRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5jIGIvZnMvcmVtYXBfcmFuZ2UuYwppbmRleCAyNmFmYmJiZmIxMGMyZS4uOWVlZTkzYzI3MDAxMjUgMTAwNjQ0Ci0tLSBhL2ZzL3JlbWFwX3JhbmdlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcmVtYXBfcmFuZ2UuYwpAQCAtNDEzLDIwICYjNDM7NDEzLDIyIEBAIGxvZmZfdCB2ZnNfY2xvbmVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19pbiwKIEVYUE9SVF9TWU1CT0wodmZzX2Nsb25lX2ZpbGVfcmFuZ2UpOwogCiAvKiBDaGVjayB3aGV0aGVyIHdlIGFyZSBhbGxvd2VkIHRvIGRlZHVwZSB0aGUgZGVzdGluYXRpb24gZmlsZSAqLwotc3RhdGljIGJvb2wgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3N0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIHRydWU7CiYjNDM7CQlyZXR1cm4gMDsKIAlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX1dSSVRFKQotCQlyZXR1cm4gdHJ1ZTsKLQlpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkKLQkJcmV0dXJuIHRydWU7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiAJaWYgKCFpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgTUFZX1dSSVRFKSkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZhbHNlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAtRVBFUk07CiB9CiAKIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsCkBAIC00NTksOCAmIzQzOzQ2MSw4IEBAIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IC1FUEVSTTsKLQlpZiAoIW1heV9kZWR1cGVfZmlsZShkc3RfZmlsZSkpCiYjNDM7CXJldCA9IG1heV9kZWR1cGVfZmlsZShkc3RfZmlsZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIG91dF9kcm9wX3dyaXRlOwogCiAJcmV0ID0gLUVYREVWOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDUwY2U3MzFhMmI3OGYxLi44MDEzYzEzYTM1M2Q2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtNjI4LDYgJiM0Mzs2MjgsNyBAQCBpc191bmNhY2hlZF9hY2woc3RydWN0IHBvc2l4X2FjbCAqYWNsKQogI2RlZmluZSBJT1BfQ0FDSEVEX0xJTksJCTB4MDA0MAogI2RlZmluZSBJT1BfRkFTVFBFUk1fTUFZX0VYRUMJMHgwMDgwCiAjZGVmaW5lIElPUF9GTENUWAkJMHgwMTAwCiYjNDM7I2RlZmluZSBJT1BfT1dORVJTSElQX09WRVJSSURFCTB4MDIwMAkvKiBVc2UgLSZndDtpc19vd25lZF9ieV9tZSgpIGFuZCAtJmd0O2hhdmVfc2FtZV9vd25lcigpICovCiAKIC8qCiAgKiBJbm9kZSBzdGF0ZSBiaXRzLiAgUHJvdGVjdGVkIGJ5IGlub2RlLSZndDtpX2xvY2sKQEAgLTE3NTUsOCAmIzQzOzE3NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV93cml0ZV9ub3Rfc3RhcnRlZChjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gc2Jfd3JpdGVfbm90X3N0YXJ0ZWQoZmlsZV9pbm9kZShmaWxlKS0mZ3Q7aV9zYik7CiB9CiAKLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0Mztib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiAvKgogICogVkZTIGhlbHBlciBmdW5jdGlvbnMuLgpAQCAtMjAzNiw2ICYjNDM7MjAzNiw5IEBAIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHsKIAkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7CiAJaW50ICgqZmlsZWF0dHJfZ2V0KShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7CiAJc3RydWN0IG9mZnNldF9jdHggKigqZ2V0X29mZnNldF9jdHgpKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwomIzQzOwlpbnQgKCppc19vd25lZF9ieV9tZSkoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwomIzQzOwlpbnQgKCpoYXZlX3NhbWVfb3duZXIpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSwKJiM0MzsJCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZTIpOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKIC8qIERpZCB0aGUgZHJpdmVyIHByb3ZpZGUgdmFsaWQgbW1hcCBob29rIGNvbmZpZ3VyYXRpb24/ICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODE1CgkJCQkJCQlvdXRwdXQ6IDcyCgkJCQkJCQl0aG91Z2h0czogNTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIEludHJvZHVjaW5nIE5ldyBWRlMgSW5vZGUgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgc29tZSBuZXcgaW5vZGUgb3BlcmF0aW9uczogYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAuIFRoZXNlIGFyZSBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZXkmIzM5O3JlIGRlc2lnbmVkIHRvICpvdmVycmlkZSogdGhlIHN0YW5kYXJkIFZGUyBvd25lcnNoaXAgY2hlY2tzLCB3aGljaCBjdXJyZW50bHkganVzdCBjb21wYXJlIHRoZSBgaV91aWRgIHRvIGBjdXJyZW50X2ZzdWlkKClgLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGNvcmUgVkZTIGNvbXBvbmVudHM6IGBmcy9uYW1laS5jYCwgYGZzL2F0dHIuY2AsIGBmcy9jb3JlZHVtcC5jYCwgYGZzL2lub2RlLmNgLCBgZnMvbG9ja3MuY2AsIGFuZCBgZnMvcmVtYXBfcmFuZ2UuY2AuIEl0JiMzOTtzIGFsc28gaW1wbGVtZW50aW5nIHRoZXNlIGZvciB0aGUgQUZTIGZpbGVzeXN0ZW0gaW4gYGZzL2Fmcy9gLgoKVGhpcyBjbGVhcmx5IHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBib3RoIHRoZSBWRlMgbGF5ZXIgYW5kIHRoZSBBRlMgZmlsZXN5c3RlbSwgYW5kIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMuIEdpdmVuIHRoZSBpbXBhY3Qgb24gY29yZSBmdW5jdGlvbmFsaXR5LCBgV29ydGhGdXp6aW5nPXRydWVgIGlzIGEgcmVhc29uYWJsZSBhc3Nlc3NtZW50LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgZnVydGhlciB0byBzZWUgd2hlcmUgdGhlIHJlYWwgY29tcGxleGl0aWVzIGxpZS4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIGxpc3Qgb2YgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZmZlY3RlZCBhbmQgd2hlcmUgdGhleSYjMzk7cmUgbG9jYXRlZC4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlOgoKKiAgIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgCiogICBgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyYAoqICAgYHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyYAoqICAgYGFmc19pc19vd25lZF9ieV9tZWAKKiAgIGBhZnNfaGF2ZV9zYW1lX293bmVyYAoqICAgYGNob3duX29rYAoqICAgYGNoZ3JwX29rYAoqICAgYG1heV9jcmVhdGVfaW5fc3RpY2t5YAoqICAgYG1heV9mb2xsb3dfbGlua2AKKiAgIGBfX2NoZWNrX3N0aWNreWAKKiAgIGBtYXlfZGVkdXBlX2ZpbGVgCgpPa2F5LCBub3cgbGV0JiMzOTtzIHNlZSBob3cgdGhlc2UgYXJlIGV4cG9zZWQuIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgIGlzIGluIGBmcy9uYW1laS5jYCBhbmQgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgaW4gYGZzL2ludGVybmFsLmhgLiBUaGUgb3RoZXIgdHdvIFZGUyBmdW5jdGlvbnMsIGB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXJgIGFuZCBgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXJgIGFyZSBzdGF0aWMgaW5zaWRlIGBmcy9uYW1laS5jYC4gQm90aCBBRlMgZnVuY3Rpb25zIGFyZSBpbiBgZnMvYWZzL3NlY3VyaXR5LmNgLgoKSSBhbHNvIHNlZSB0aGF0IHRvIGVmZmVjdGl2ZWx5IHRlc3QgdGhlIEFGUyBpbnRlZ3JhdGlvbiwgSSYjMzk7bGwgbmVlZCBgQ09ORklHX0FGU19GU2AgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4KClJpZ2h0LCB0aW1lIHRvIG1vdmUgYmV5b25kIHRoaXMgY3Vyc29yeSBpbnNwZWN0aW9uIGFuZCBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIG5hbWVzIGFyZSBjb3JyZWN0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oyh2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWV8dmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyfHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyfGFmc19pc19vd25lZF9ieV9tZXxhZnNfaGF2ZV9zYW1lX293bmVyKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvZGlyLmM9NjA9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2Fmcy9kaXIuYy03MS1cdC5zZXRhdHRyXHQ9IGFmc19zZXRhdHRyLFxuZnMvYWZzL2Rpci5jOjcyOlx0LmlzX293bmVkX2J5X21lXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcbmZzL2Fmcy9kaXIuYzo3MzpcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxuZnMvYWZzL2Rpci5jLTc0LX07XG4tLVxuZnMvYWZzL2ZpbGUuYz00OD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2Fmcy9maWxlLmMtNTEtXHQucGVybWlzc2lvblx0PSBhZnNfcGVybWlzc2lvbixcbmZzL2Fmcy9maWxlLmM6NTI6XHQuaXNfb3duZWRfYnlfbWVcdD0gYWZzX2lzX293bmVkX2J5X21lLFxuZnMvYWZzL2ZpbGUuYzo1MzpcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxuZnMvYWZzL2ZpbGUuYy01NC19O1xuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oPTE1MzI9ZXh0ZXJuIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xuZnMvYWZzL2ludGVybmFsLmg6MTUzMzppbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjE1MzQ6aW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuZnMvYWZzL2ludGVybmFsLmgtMTUzNS1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlMik7XG4tLVxuZnMvYWZzL3NlY3VyaXR5LmM9NDMxPWludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9hZnMvc2VjdXJpdHkuYy01MTgtICovXG5mcy9hZnMvc2VjdXJpdHkuYzo1MTk6aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2Fmcy9zZWN1cml0eS5jLTUyMC17XG4tLVxuZnMvYWZzL3NlY3VyaXR5LmMtNTQ5LSAqL1xuZnMvYWZzL3NlY3VyaXR5LmM6NTUwOmludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbmZzL2Fmcy9zZWN1cml0eS5jLTU1MS1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlMilcbi0tXG5mcy9hdHRyLmM9OTU9c3RhdGljIGludCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9hdHRyLmMtMTAwLVxuZnMvYXR0ci5jOjEwMTpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvYXR0ci5jLTEwMi1cdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbmZzL2F0dHIuYz0xMjQ9c3RhdGljIGludCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9hdHRyLmMtMTI5LVxuZnMvYXR0ci5jOjEzMDpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvYXR0ci5jLTEzMS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZnMvY29yZWR1bXAuYz04Nzg9c3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcbi0tXG5mcy9jb3JlZHVtcC5jLTk1Ni1cdGlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XG5mcy9jb3JlZHVtcC5jOjk1NzpcdGlmICh2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKSAhPSAwKSB7XG5mcy9jb3JlZHVtcC5jLTk1OC1cdFx0Y29yZWR1bXBfcmVwb3J0X2ZhaWx1cmUoXCYjMzQ7Q29yZSBkdW1wIHRvICVzIGFib3J0ZWQ6IGNhbm5vdCBwcmVzZXJ2ZSBmaWxlIG93bmVyXCYjMzQ7LCBjbi1cdTAwM2Vjb3JlbmFtZSk7XG4tLVxuZnMvaW5vZGUuYz0yNzUzPWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9pbm9kZS5jLTI3NTgtXG5mcy9pbm9kZS5jOjI3NTk6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL2lub2RlLmMtMjc2MC1cdGlmIChyZXQgPT0gMClcbi0tXG5mcy9pbnRlcm5hbC5oPTQ5PWV4dGVybiBpbnQgZmluaXNoX2NsZWFuX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbi0tXG5mcy9pbnRlcm5hbC5oLTUzLSAqL1xuZnMvaW50ZXJuYWwuaDo1NDppbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2ludGVybmFsLmgtNTUtZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcbi0tXG5mcy9sb2Nrcy5jPTIxMzc9dmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcbi0tXG5mcy9sb2Nrcy5jLTIxNDEtXG5mcy9sb2Nrcy5jOjIxNDI6XHRlcnJvciA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpO1xuZnMvbG9ja3MuYy0yMTQzLVx0aWYgKGVycm9yIFx1MDAzYyAwKVxuLS1cbmZzL25hbWVpLmM9MTI1ND1mc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpO1xuLS1cbmZzL25hbWVpLmMtMTI2Mi0gKi9cbmZzL25hbWVpLmM6MTI2MzppbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvbmFtZWkuYy0xMjY0LXtcbi0tXG5mcy9uYW1laS5jLTEyNzYtICovXG5mcy9uYW1laS5jOjEyNzc6c3RhdGljIGludCB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9uYW1laS5jLTEyNzgtXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4tLVxuZnMvbmFtZWkuYy0xMzEyLSAqL1xuZnMvbmFtZWkuYzoxMzEzOnN0YXRpYyBpbnQgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9uYW1laS5jLTEzMTQtXHRcdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcilcbi0tXG5mcy9uYW1laS5jPTEzNDA9c3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL25hbWVpLmMtMTM1My1cdC8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqL1xuZnMvbmFtZWkuYzoxMzU0Olx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9uYW1laS5jLTEzNTUtXHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5mcy9uYW1laS5jLTEzNTgtXHQvKiBBbGxvd2VkIGlmIHBhcmVudCBkaXJlY3RvcnkgYW5kIGxpbmsgb3duZXIgbWF0Y2guICovXG5mcy9uYW1laS5jOjEzNTk6XHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XG5mcy9uYW1laS5jLTEzNjAtXHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5mcy9uYW1laS5jPTE1MDk9c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4tLVxuZnMvbmFtZWkuYy0xNTIzLVxuZnMvbmFtZWkuYzoxNTI0Olx0cmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpO1xuZnMvbmFtZWkuYy0xNTI1LVx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxuZnMvbmFtZWkuYy0xNTI3LVxuZnMvbmFtZWkuYzoxNTI4Olx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9uYW1laS5jLTE1MjktXHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5mcy9uYW1laS5jPTM3NDQ9aW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9uYW1laS5jLTM3NDgtXG5mcy9uYW1laS5jOjM3NDk6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL25hbWVpLmMtMzc1MC1cdGlmIChyZXQgXHUwMDNjPSAwKVxuZnMvbmFtZWkuYy0zNzUxLVx0XHRyZXR1cm4gcmV0O1xuZnMvbmFtZWkuYzozNzUyOlx0cmV0ID0gdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuZnMvbmFtZWkuYy0zNzUzLVx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYz00MTY9c3RhdGljIGludCBtYXlfZGVkdXBlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYy00MjUtXHRcdHJldHVybiAwO1xuZnMvcmVtYXBfcmFuZ2UuYzo0MjY6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL3JlbWFwX3JhbmdlLmMtNDI3LVx0aWYgKHJldCBcdTAwM2M9IDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNDIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIE93bmVyc2hpcCBhbmQgQWNjZXNzIENvbnRyb2wgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiByaWdodCBub3cgYXJlIHRoZXNlOiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAsIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgLCBhbmQgYG1heV9mb2xsb3dfbGlua2AuIFNlZW1zIGxpa2UgYSBwcmV0dHkgY29tcHJlaGVuc2l2ZSBsaXN0IGZvciBkZWFsaW5nIHdpdGggZmlsZSBvd25lcnNoaXAsIGdyb3VwIG1lbWJlcnNoaXAsIGFuZCBwZXJtaXNzaW9ucyBjaGVja3MsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHJhbmdlIG9mIFZGUyBhbmQgQUZTIGltcGxlbWVudGF0aW9ucyBpbiBwbGF5IGhlcmUuIEkgd2FudCB0byBjaGVjayBgQ09ORklHX0FGU19GU2AgaXMgdGhlIGNvcnJlY3QgY29uZmlnIHRvIGFkZHJlc3MgdGhlIGFyY2hpdGVjdHVyZSwgYnV0IG1vcmUgZ2VuZXJhbGx5IHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyB1c2VyIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUZTX0ZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9hZnMvS2NvbmZpZzoyOmNvbmZpZyBBRlNfRlNcbmZzL2Fmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKVwmIzM0O1xuLS1cbmZzL2Fmcy9LY29uZmlnPTE3PWNvbmZpZyBBRlNfREVCVUdcbi0tXG5mcy9hZnMvS2NvbmZpZy0yNi1cbmZzL2Fmcy9LY29uZmlnOjI3OmNvbmZpZyBBRlNfRlNDQUNIRVxuZnMvYWZzL0tjb25maWctMjgtXHRib29sIFwmIzM0O1Byb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY3MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgT3duZXJzaGlwIGFuZCBQZXJtaXNzaW9ucyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBlbmFibGluZyBgQUZTX0ZTYCBpcyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBmb3IgdGhpcy4gTm93LCBiZWZvcmUgSSBtb3ZlIG9uLCBJJiMzOTtkIGxpa2UgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBvYnNjdXJlIGNvbmZpZ3VyYXRpb25zIGx1cmtpbmcgYXJvdW5kIHRoYXQgSSYjMzk7dmUgbWlzc2VkLiBJIGtub3cgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJlbGF0ZSB0byB0aGUgVmlydHVhbCBGaWxlIFN5c3RlbSAoVkZTKSBhbmQgdGhlIEFGUyBsYXllcnMuIFRoZSBWRlMgaXMgYWx3YXlzIGVuYWJsZWQsIHNvIEFGUyBpcyB0aGUga2V5LCBhbmQgdGhhdCByZWxpZXMgb24gYEFGU19GU2AuIEdvdCBpdC4KCk5vdywgbGV0JiMzOTtzIGdldCBiYWNrIHRvIHJlZmluaW5nIHRoaXMgYEZvY3VzU3ltYm9sc2AgbGlzdC4gSSBuZWVkIHRvIG1ha2UgdGhpcyBhcyBhY2N1cmF0ZSBhbmQgY29tcGxldGUgYXMgcG9zc2libGUuIFNvLCBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHRoaXMgbGlzdDoKKiAgIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgCiogICBgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyYAoqICAgYHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyYAoqICAgYGFmc19pc19vd25lZF9ieV9tZWAKKiAgIGBhZnNfaGF2ZV9zYW1lX293bmVyYAoqICAgYGNob3duX29rYAoqICAgYGNoZ3JwX29rYAoqICAgYG1heV9jcmVhdGVfaW5fc3RpY2t5YAoqICAgYF9fY2hlY2tfc3RpY2t5YAoqICAgYG1heV9kZWR1cGVfZmlsZWAKKiAgIGBtYXlfZm9sbG93X2xpbmtgCgpIYW5nIG9uIGEgc2Vjb25k4oCmIGlzbiYjMzk7dCBgbWF5X2ZvbGxvd19saW5rYCBpbXBsZW1lbnRlZCBpbmxpbmU/IFllcywgaXQgaXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYGZzL25hbWVpLmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgaGFuZGxlZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXlfZm9sbG93X2xpbmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC5yc3Q9MTEzMD1jb21wb25lbnQgb2YgdGhlIGxvb2t1cCwgc28gd2Ugd2lsbCBjaGVjayB1c2Vyc3BhY2UgZmxhZyBgYExPT0tVUF9GT0xMT1dgYCB0b1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC5yc3Q6MTEzMTpkZWNpZGUgd2hldGhlciBmb2xsb3cgaXQgd2hlbiBpdCBpcyBhIHN5bWxpbmsgYW5kIGNhbGwgYGBtYXlfZm9sbG93X2xpbmsoKWBgIHRvXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtbG9va3VwLnJzdC0xMTMyLWNoZWNrIGlmIHdlIGhhdmUgcHJpdmlsZWdlIHRvIGZvbGxvdyBpdC5cbi0tXG5mcy9uYW1laS5jPTEzMTM9c3RhdGljIGludCB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9uYW1laS5jLTEzMjQtLyoqXG5mcy9uYW1laS5jOjEzMjU6ICogbWF5X2ZvbGxvd19saW5rIC0gQ2hlY2sgc3ltbGluayBmb2xsb3dpbmcgZm9yIHVuc2FmZSBzaXR1YXRpb25zXG5mcy9uYW1laS5jLTEzMjYtICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxuLS1cbmZzL25hbWVpLmMtMTMzOS0gKi9cbmZzL25hbWVpLmM6MTM0MDpzdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9uYW1laS5jLTEzNDEte1xuLS1cbmZzL25hbWVpLmM9MjEwNj1zdGF0aWMgbm9pbmxpbmUgY29uc3QgY2hhciAqcGlja19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgcGF0aCAqbGluayxcbi0tXG5mcy9uYW1laS5jLTIxMzMtXHRpZiAoZmxhZ3MgXHUwMDI2IFdBTEtfVFJBSUxJTkcpIHtcbmZzL25hbWVpLmM6MjEzNDpcdFx0ZXJyb3IgPSBtYXlfZm9sbG93X2xpbmsobmQsIGlub2RlKTtcbmZzL25hbWVpLmMtMjEzNS1cdFx0aWYgKHVubGlrZWx5KGVycm9yKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYzMgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRmlsZSBTeXN0ZW0gUGVybWlzc2lvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc2NvcGVzIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gY29kZS4gSSBzZWUgdGhhdCBgbWF5X2ZvbGxvd19saW5rYCBpcyAqaW5saW5lKiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgcHJvYmFibHkgbm90IGEgZ29vZCBjYW5kaWRhdGUgdG8gZm9jdXMgb24gZGlyZWN0bHkuIEl0JiMzOTtzIGludGVncmF0ZWQgaW50byBvdGhlciBmdW5jdGlvbnMuIE9uIHRoZSBvdGhlciBoYW5kLCBgY2hvd25fb2tgIGFuZCBgY2hncnBfb2tgIGFyZSBjbGVhcmx5IGRlZmluZWQgYXMgKnN0YXRpYyogdmFyaWFibGVzIHdpdGhpbiBgZnMvYXR0ci5jYC4gVGhhdCBnaXZlcyBtZSBhIGRlZmluaXRlIHBsYWNlIHRvIHN0YXJ0IGlmIEkgd2FudCB0byBleGFtaW5lIHRob3NlIGFjY2VzcyBjb250cm9sIGNoZWNrcy4gU2ltaWxhcmx5LCBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgIGlzIHN0YXRpYyBpbiBgZnMvbmFtZWkuY2AuIEl0IGlzIHVzZWZ1bCB0byBrbm93IHdoZXJlIHRoZXNlIGZsYWdzIGxpdmUuCgpOb3csIGBfX2NoZWNrX3N0aWNreWAgaXMgKmV4cG9ydGVkKiBmcm9tIGBmcy9uYW1laS5jYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBhdmFpbGFibGUgZm9yIHVzZSBvdXRzaWRlIG9mIHRoYXQgZmlsZS4gT2theSwgZ29vZCB0byBrbm93LiBJdCBpcyBnb29kIGluZm9ybWF0aW9uLCBidXQgbm90IGltbWVkaWF0ZWx5IHVzZWZ1bC4KCkZpbmFsbHksIGBtYXlfZGVkdXBlX2ZpbGVgIGlzIHN0YXRpYyBpbiBgZnMvcmVtYXBfcmFuZ2UuY2AuIFNvIEkga25vdyB3aGVyZSAqdGhhdCogZnVuY3Rpb24gcmVzaWRlcy4KCkFscmlnaHQsIG5vdyBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gYGNob3duX29rYC4uLiBsZXQmIzM5O3MgY2hlY2sgaXQmIzM5O3MgZGVmaW5pdGlvbiB0byBzZWUgaWYgaXQgaXMgaW5saW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaG93bl9vayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hdHRyLmM9ODE9RVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpO1xuLS1cbmZzL2F0dHIuYy04My0vKipcbmZzL2F0dHIuYzo4NDogKiBjaG93bl9vayAtIHZlcmlmeSBwZXJtaXNzaW9ucyB0byBjaG93biBpbm9kZVxuZnMvYXR0ci5jLTg1LSAqIEBpZG1hcDpcdGlkbWFwIG9mIHRoZSBtb3VudCBAaW5vZGUgd2FzIGZvdW5kIGZyb21cbi0tXG5mcy9hdHRyLmMtOTQtICovXG5mcy9hdHRyLmM6OTU6c3RhdGljIGludCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL2F0dHIuYy05Ni1cdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc3VpZF90IGlhX3Zmc3VpZClcbi0tXG5mcy9hdHRyLmM9MTY4PWludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9hdHRyLmMtMjAwLVx0aWYgKGlhX3ZhbGlkIFx1MDAyNiBBVFRSX1VJRCkge1xuZnMvYXR0ci5jOjIwMTpcdFx0cmV0ID0gY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc3VpZCk7XG5mcy9hdHRyLmMtMjAyLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMxNAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipBbmFseXppbmcgdGhlIFNpdHVhdGlvbioqCgpBbHJpZ2h0LCBzbyBpdCYjMzk7cyBub3Qgc3RyYWlnaHRmb3J3YXJkLCBub3QgYW4gJiMzNDtpbmxpbmUmIzM0OyBzb2x1dGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgd2UgbmVlZCB0byBkaWcgYSBiaXQgZGVlcGVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgZWxlbWVudC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYGNoZ3JwX29rYCBzZXR0aW5nLiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBJdCBsaWtlbHkgcmVsYXRlcyB0byBob3cgd2UgY2FuIHByb2NlZWQuIFRpbWUgdG8gbG9vayBpbnRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGdycF9vayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hdHRyLmM9OTU9c3RhdGljIGludCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9hdHRyLmMtMTEyLS8qKlxuZnMvYXR0ci5jOjExMzogKiBjaGdycF9vayAtIHZlcmlmeSBwZXJtaXNzaW9ucyB0byBjaGdycCBpbm9kZVxuZnMvYXR0ci5jLTExNC0gKiBAaWRtYXA6XHRpZG1hcCBvZiB0aGUgbW91bnQgQGlub2RlIHdhcyBmb3VuZCBmcm9tXG4tLVxuZnMvYXR0ci5jLTEyMy0gKi9cbmZzL2F0dHIuYzoxMjQ6c3RhdGljIGludCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL2F0dHIuYy0xMjUtXHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnNnaWRfdCBpYV92ZnNnaWQpXG4tLVxuZnMvYXR0ci5jPTE2OD1pbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvYXR0ci5jLTIwNy1cdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9HSUQpIHtcbmZzL2F0dHIuYzoyMDg6XHRcdHJldCA9IGNoZ3JwX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cdTAwM2VpYV92ZnNnaWQpO1xuZnMvYXR0ci5jLTIwOS1cdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MzkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqTmF2aWdhdGluZyB0aGUgYG1heV9jcmVhdGVfaW5fc3RpY2t5YCBMb2dpYyoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyBpbmNvcnJlY3Qg4oCTIGl0JiMzOTtzIG5vdCBhbiBpbmxpbmUgc2NlbmFyaW8uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBuYXJyb3dzIGRvd24gdGhlIHBvc3NpYmxlIGNhdXNlcy4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGl0cyBjb25kaXRpb25zLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBpdHMgaW1wbGVtZW50YXRpb24gdG8gc2VlIGlmIGl0JiMzOTtzIG9wZXJhdGluZyBhcyBleHBlY3RlZCBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgaXQgY29udGFpbnMgYW55IGZsYXdzLiBUaGlzIGlzIHdoZXJlIHRoZSByb290IGNhdXNlIHByb2JhYmx5IGxpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21heV9jcmVhdGVfaW5fc3RpY2t5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmM9MTQyNz1pbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXG4tLVxuZnMvbmFtZWkuYy0xNDUwLS8qKlxuZnMvbmFtZWkuYzoxNDUxOiAqIG1heV9jcmVhdGVfaW5fc3RpY2t5IC0gQ2hlY2sgd2hldGhlciBhbiBPX0NSRUFUIG9wZW4gaW4gYSBzdGlja3kgZGlyZWN0b3J5XG5mcy9uYW1laS5jLTE0NTItICpcdFx0XHQgIHNob3VsZCBiZSBhbGxvd2VkLCBvciBub3QsIG9uIGZpbGVzIHRoYXQgYWxyZWFkeVxuLS1cbmZzL25hbWVpLmMtMTUwOC0gKi9cbmZzL25hbWVpLmM6MTUwOTpzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbmZzL25hbWVpLmMtMTUxMC1cdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvbmFtZWkuYz00NzUzPXN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbi0tXG5mcy9uYW1laS5jLTQ3NzQtXHRcdFx0cmV0dXJuIC1FSVNESVI7XG5mcy9uYW1laS5jOjQ3NzU6XHRcdGVycm9yID0gbWF5X2NyZWF0ZV9pbl9zdGlja3koaWRtYXAsIG5kLFxuZnMvbmFtZWkuYy00Nzc2LVx0XHRcdFx0XHQgICAgIGRfYmFja2luZ19pbm9kZShuZC1cdTAwM2VwYXRoLmRlbnRyeSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIzMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBwcm9mZXNzaW9uYWwgc3RhbmRwb2ludDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIFByb2JsZW06IEEgUXVpY2sgRGlhZ25vc3RpYyoqCgpIbW0sIHRoaXMgaXNuJiMzOTt0IGFuIGluLWxpbmUgc2l0dWF0aW9uLiBUaGF0JiMzOTtzIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgZXhhbWluZSB0aGUgZnVuY3Rpb24gYG1heV9kZWR1cGVfZmlsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgbG9naWMgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHRoYXQgZnVuY3Rpb24gYXMgYSBrZXkgZWxlbWVudCB0byB1bmRlcnN0YW5kaW5nIHdoYXQmIzM5O3Mgb2ZmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXlfZGVkdXBlX2ZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcmVtYXBfcmFuZ2UuYz00MTM9RVhQT1JUX1NZTUJPTCh2ZnNfY2xvbmVfZmlsZV9yYW5nZSk7XG4tLVxuZnMvcmVtYXBfcmFuZ2UuYy00MTUtLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgYWxsb3dlZCB0byBkZWR1cGUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgKi9cbmZzL3JlbWFwX3JhbmdlLmM6NDE2OnN0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvcmVtYXBfcmFuZ2UuYy00MTcte1xuLS1cbmZzL3JlbWFwX3JhbmdlLmM9NDM0PWxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYy00NTYtXHQgKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciByZW1hcF92ZXJpZnlfYXJlYSgpIGJlY2F1c2Ugb2ZcbmZzL3JlbWFwX3JhbmdlLmM6NDU3Olx0ICogc2Jfc3RhcnRfd3JpdGUoKSBhbmQgYmVmb3JlIG1heV9kZWR1cGVfZmlsZSgpIGJlY2F1c2UgdGhlIG1vdW50JiMzOTtzXG5mcy9yZW1hcF9yYW5nZS5jLTQ1OC1cdCAqIE1BWV9XUklURSBuZWVkIHRvIGJlIGNoZWNrZWQgd2l0aCBtbnRfZ2V0X3dyaXRlX2FjY2Vzc19maWxlKCkgaGVsZC5cbi0tXG5mcy9yZW1hcF9yYW5nZS5jLTQ2My1cbmZzL3JlbWFwX3JhbmdlLmM6NDY0Olx0cmV0ID0gbWF5X2RlZHVwZV9maWxlKGRzdF9maWxlKTtcbmZzL3JlbWFwX3JhbmdlLmMtNDY1LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTY6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3MDQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgUG90ZW50aWFsIE93bmVyc2hpcCBhbmQgQ29udGV4dCoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpc24mIzM5O3QgY29taW5nIHRocm91Z2ggZGlyZWN0bHkgaW4gdGhlIGlubGluZSBlbGVtZW50cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIG93bmVyc2hpcCBpbmZvcm1hdGlvbiBpcyBoZWxkLiBMZXQmIzM5O3Mgc2VlLi4uSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHdoZXRoZXIgdGhpcyBpcyBhIG1hdHRlciBvZiBwb3NzZXNzaW9uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTY6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZzX2lub2RlX2lzX293bmVkX2J5X21lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2F0dHIuYz05NT1zdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2F0dHIuYy0xMDAtXG5mcy9hdHRyLmM6MTAxOlx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9hdHRyLmMtMTAyLVx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxuZnMvYXR0ci5jPTEyND1zdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2F0dHIuYy0xMjktXG5mcy9hdHRyLmM6MTMwOlx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9hdHRyLmMtMTMxLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5mcy9jb3JlZHVtcC5jPTg3OD1zdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuLS1cbmZzL2NvcmVkdW1wLmMtOTU2LVx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcbmZzL2NvcmVkdW1wLmM6OTU3Olx0aWYgKHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpICE9IDApIHtcbmZzL2NvcmVkdW1wLmMtOTU4LVx0XHRjb3JlZHVtcF9yZXBvcnRfZmFpbHVyZShcJiMzNDtDb3JlIGR1bXAgdG8gJXMgYWJvcnRlZDogY2Fubm90IHByZXNlcnZlIGZpbGUgb3duZXJcJiMzNDssIGNuLVx1MDAzZWNvcmVuYW1lKTtcbi0tXG5mcy9pbm9kZS5jPTI3NTM9Ym9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2lub2RlLmMtMjc1OC1cbmZzL2lub2RlLmM6Mjc1OTpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvaW5vZGUuYy0yNzYwLVx0aWYgKHJldCA9PSAwKVxuLS1cbmZzL2ludGVybmFsLmg9NDk9ZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuLS1cbmZzL2ludGVybmFsLmgtNTMtICovXG5mcy9pbnRlcm5hbC5oOjU0OmludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvaW50ZXJuYWwuaC01NS1leHRlcm4gaW50IGZpbGVuYW1lX2xvb2t1cChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIHVuc2lnbmVkIGZsYWdzLFxuLS1cbmZzL2xvY2tzLmM9MjEzNz12ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KVxuLS1cbmZzL2xvY2tzLmMtMjE0MS1cbmZzL2xvY2tzLmM6MjE0MjpcdGVycm9yID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG5mcy9sb2Nrcy5jLTIxNDMtXHRpZiAoZXJyb3IgXHUwMDNjIDApXG4tLVxuZnMvbmFtZWkuYz0xMjU0PWZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XG4tLVxuZnMvbmFtZWkuYy0xMjYyLSAqL1xuZnMvbmFtZWkuYzoxMjYzOmludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9uYW1laS5jLTEyNjQte1xuLS1cbmZzL25hbWVpLmM9MTM0MD1zdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvbmFtZWkuYy0xMzUzLVx0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXG5mcy9uYW1laS5jOjEzNTQ6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL25hbWVpLmMtMTM1NS1cdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbmZzL25hbWVpLmM9MTUwOT1zdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbi0tXG5mcy9uYW1laS5jLTE1MjctXG5mcy9uYW1laS5jOjE1Mjg6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL25hbWVpLmMtMTUyOS1cdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbmZzL25hbWVpLmM9Mzc0ND1pbnQgX19jaGVja19zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL25hbWVpLmMtMzc0OC1cbmZzL25hbWVpLmM6Mzc0OTpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvbmFtZWkuYy0zNzUwLVx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYz00MTY9c3RhdGljIGludCBtYXlfZGVkdXBlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYy00MjUtXHRcdHJldHVybiAwO1xuZnMvcmVtYXBfcmFuZ2UuYzo0MjY6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL3JlbWFwX3JhbmdlLmMtNDI3LVx0aWYgKHJldCBcdTAwM2M9IDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE2OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDY1CgkJCQkJCQlvdXRwdXQ6IDI0NgoJCQkJCQkJdGhvdWdodHM6IDQ4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE93bmVyc2hpcCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoZXNlIG93bmVyc2hpcCBjaGVja3MgYXJlIGNvcmUgdG8gdGhlIGZpbGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkgZGVmaW5lZCB3aXRoaW4gYGZzL2ludGVybmFsLmhgIGFuZCBpbXBsZW1lbnRlZCBpbiBgZnMvbmFtZWkuY2AuIFNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgZmV3IGtleSBmdW5jdGlvbnM6IGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyYCwgYHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyYCwgYWxvbmcgd2l0aCBzb21lIG90aGVycyBsaWtlIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGFuZCBzb21lIHBlcm1pc3Npb24tcmVsYXRlZCBjaGVja3M6IGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGFuZCBgbWF5X2RlZHVwZV9maWxlYC4KClRoZSBmYWN0IHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzIGBmcy9hZnMvYCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGF0IGBBRlNfRlNgIGlzIGltcGxpY2F0ZWQuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgd2Ugc2hvdWxkIGtlZXAgYW4gZXllIG9uPyBCdXQgdGhlIGNvcmUgb2YgdGhlIG1hdHRlciBzZWVtcyB0byBiZSBpbiBWRlMuCgpBbHJpZ2h0LCB0aGUgcGF0Y2ggYWRkcyB0d28gKm5ldyogaW5vZGUgb3BlcmF0aW9uczogYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAuIFRoZXNlIGFyZSBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIEFGUyBzdWJzeXN0ZW0gYW5kIHRoZW4sIGNydWNpYWxseSwgbW9kaWZpZWQgdG8gYmUgdXNlZCAqd2l0aGluKiB0aGUgVkZTLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBob3cgb3duZXJzaGlwIGlzIGRldGVybWluZWQsIGF0IGxlYXN0IGluIHNvbWUgY2FzZXMuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IHRoZSBWRlMgaW50ZXJhY3RzIHdpdGggb3duZXJzaGlwIGNoZWNrcywgcG90ZW50aWFsbHkgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVGhlIGZhY3QgdGhhdCB0aGUgVkZTIGl0c2VsZiBpcyBiZWluZyBtb2RpZmllZCBpcyBhIGJpZyBmbGFnIGZvciBmdXp6aW5nLCB3aGljaCB3aWxsIGJlIGVzc2VudGlhbCBoZXJlLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcsIGFuZCB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJJiMzOTtsbCBrZWVwIHRvcCBvZiBtaW5kOiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAsIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGFuZCBgbWF5X2RlZHVwZV9maWxlYC4KCkFuZCwgYXMgYSBmaW5hbCBjb25zaWRlcmF0aW9uLCBlbmFibGluZyBgQUZTX0ZTYCBzZWVtcyBlc3NlbnRpYWwgdG8gcHJvcGVyIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE2OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUmIzM0OywKICAgICYjMzQ7dmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O3Zmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O2Fmc19pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDthZnNfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O2Nob3duX29rJiMzNDssCiAgICAmIzM0O2NoZ3JwX29rJiMzNDssCiAgICAmIzM0O21heV9jcmVhdGVfaW5fc3RpY2t5JiMzNDssCiAgICAmIzM0O19fY2hlY2tfc3RpY2t5JiMzNDssCiAgICAmIzM0O21heV9kZWR1cGVfZmlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBhbmQgbW9kaWZpZXMgY29yZSBWRlMgZnVuY3Rpb25zIChsaWtlIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgLCBldGMuKSB0byB1c2UgdGhlbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTIGFuZCBBRlMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUmIzM0OywKICAgICYjMzQ7dmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O3Zmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O2Fmc19pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDthZnNfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O2Nob3duX29rJiMzNDssCiAgICAmIzM0O2NoZ3JwX29rJiMzNDssCiAgICAmIzM0O21heV9jcmVhdGVfaW5fc3RpY2t5JiMzNDssCiAgICAmIzM0O19fY2hlY2tfc3RpY2t5JiMzNDssCiAgICAmIzM0O21heV9kZWR1cGVfZmlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBhbmQgbW9kaWZpZXMgY29yZSBWRlMgZnVuY3Rpb25zIChsaWtlIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgLCBldGMuKSB0byB1c2UgdGhlbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTIGFuZCBBRlMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjRUMTY6MzE6MTEuNDI3MDg0NDgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU1MTY5MzU2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX2lub2RlX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJ2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXJcIixcbiAgICBcInZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJhZnNfaXNfb3duZWRfYnlfbWVcIixcbiAgICBcImFmc19oYXZlX3NhbWVfb3duZXJcIixcbiAgICBcImNob3duX29rXCIsXG4gICAgXCJjaGdycF9va1wiLFxuICAgIFwibWF5X2NyZWF0ZV9pbl9zdGlja3lcIixcbiAgICBcIl9fY2hlY2tfc3RpY2t5XCIsXG4gICAgXCJtYXlfZGVkdXBlX2ZpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBhbmQgbW9kaWZpZXMgY29yZSBWRlMgZnVuY3Rpb25zIChsaWtlIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgLCBldGMuKSB0byB1c2UgdGhlbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTIGFuZCBBRlMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNjozMToxMS40MjcwODk5MTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMzkxODQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQzNDA1NDNjMmJkYzM0MTAwZTIwMzVhZTY0NGYzNTk4ZWZlZDU1MWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTY6MzE6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XFxuaW5kZXggN2M3NTMxNDhhZjg4ODMuLjg5MzQxOWUwMDNlYWY3IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxcbkBAIC00NDUsNiArNDQ1LDkgQEAgQXMgb2Yga2VybmVsIDIuNi4yMiwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOlxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbiBcXHRcXHRpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcXG4gXFx0ICAgICAgICBzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcdFxcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcdFxcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbiBcXHR9O1xcbiBcXG4gQWdhaW4sIGFsbCBtZXRob2RzIGFyZSBjYWxsZWQgd2l0aG91dCBhbnkgbG9ja3MgYmVpbmcgaGVsZCwgdW5sZXNzXFxuQEAgLTYzNCw2ICs2MzcsMjQgQEAgb3RoZXJ3aXNlIG5vdGVkLlxcbiAgICAgICAgIGZpbGVzeXN0ZW0gbXVzdCBkZWZpbmUgdGhpcyBvcGVyYXRpb24gdG8gdXNlXFxuICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy5cXG4gXFxuK2BgaXNfb3duZWRfYnlfbWVgYFxcbitcXHRjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaWxlIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlICdvd25lZCcgYnlcXG4rXFx0dGhlIG93bmVyIG9mIHRoZSBwcm9jZXNzIG9yIGlmIHRoZSBwcm9jZXNzIGhhcyBhIHRva2VuIHRoYXQgZ3JhbnRzXFxuK1xcdGl0IG93bmVyc2hpcCBwcml2aWxlZ2VzLiAgSWYgdW5zZXQsIHRoZSBkZWZhdWx0IGlzIHRvIGNvbXBhcmUgaV91aWRcXG4rXFx0dG8gY3VycmVudF9mc3VpZCgpIC0gYnV0IHRoaXMgbWF5IGdpdmUgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHNvbWVcXG4rXFx0bmV0d29yayBvciBwbHVnLWluIGJsb2NrIGZpbGVzeXN0ZW1zLiAgRm9yIGV4YW1wbGUsIEFGUyBkZXRlcm1pbmVzXFxuK1xcdG93bmVyc2hpcCBlbnRpcmVseSBhY2NvcmRpbmcgdG8gYW4gb2J0YWluZWQgdG9rZW4gYW5kIGlfdWlkIG1heSBub3RcXG4rXFx0ZXZlbiBiZSBmcm9tIHRoZSBzYW1lIElEIHNwYWNlIGFzIGN1cnJlbnRfdWlkKCkuXFxuK1xcbitgYGhhdmVfc2FtZV9vd25lcmBgXFxuK1xcdGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBpbW1lZGlhdGVcXG4rXFx0cGFyZW50IG9uIHRoZSBwYXRoIHdhbGtlZC4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBzaW1wbHlcXG4rXFx0Y29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEc1xcbitcXHRvZiBib3RoIC0gYnV0IHRoZXNlIGFyZSBhIDY0LWJpdCB2YWx1ZXMgb24gc29tZSB2YXJpYW50cyB0aGF0IG1pZ2h0XFxuK1xcdG5vdCBmaXQgaW50byBhIGt1aWRfdCBhbmQgY2lmcyBoYXMgR1VJRHMgdGhhdCBjYW5ub3QgYmUgY29tcGFyZWQgdG9cXG4rXFx0a3VpZF90LlxcbitcXG4rXFxuIFRoZSBBZGRyZXNzIFNwYWNlIE9iamVjdFxcbiA9PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXIuYyBiL2ZzL2Fmcy9kaXIuY1xcbmluZGV4IDZkZjU2ZmU5MTYzZmQ3Li5lZTJmNWVjMGIyYzY3ZCAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZGlyLmNcXG4rKysgYi9mcy9hZnMvZGlyLmNcXG5AQCAtNjksNiArNjksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5wZXJtaXNzaW9uXFx0PSBhZnNfcGVybWlzc2lvbixcXG4gXFx0LmdldGF0dHJcXHQ9IGFmc19nZXRhdHRyLFxcbiBcXHQuc2V0YXR0clxcdD0gYWZzX3NldGF0dHIsXFxuK1xcdC5pc19vd25lZF9ieV9tZVxcdD0gYWZzX2lzX293bmVkX2J5X21lLFxcbitcXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcXG4gfTtcXG4gXFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2Rpcl9hb3BzID0ge1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUuY1xcbmluZGV4IDA0Njc3NDJiZmVlZTM0Li5iYTQ0NDkzY2NhZjZlZSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZmlsZS5jXFxuKysrIGIvZnMvYWZzL2ZpbGUuY1xcbkBAIC00OSw2ICs0OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5nZXRhdHRyXFx0PSBhZnNfZ2V0YXR0cixcXG4gXFx0LnNldGF0dHJcXHQ9IGFmc19zZXRhdHRyLFxcbiBcXHQucGVybWlzc2lvblxcdD0gYWZzX3Blcm1pc3Npb24sXFxuK1xcdC5pc19vd25lZF9ieV9tZVxcdD0gYWZzX2lzX293bmVkX2J5X21lLFxcbitcXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcXG4gfTtcXG4gXFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2ZpbGVfYW9wcyA9IHtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuY1xcbmluZGV4IDE0ZjM5YTliZWE2Y2ZlLi5hZjg1YTg4ZDk0M2RkMSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvaW5vZGUuY1xcbisrKyBiL2ZzL2Fmcy9pbm9kZS5jXFxuQEAgLTkxLDYgKzkxLDcgQEAgc3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsXFxuIFxcdGlub2RlLVxcdTAwM2VpX2ZsYWdzIHw9IFNfTk9BVElNRTtcXG4gXFx0aW5vZGUtXFx1MDAzZWlfdWlkID0gbWFrZV9rdWlkKFxcdTAwMjZpbml0X3VzZXJfbnMsIHN0YXR1cy1cXHUwMDNlb3duZXIpO1xcbiBcXHRpbm9kZS1cXHUwMDNlaV9naWQgPSBtYWtlX2tnaWQoXFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVxcdTAwM2Vncm91cCk7XFxuK1xcdGlub2RlLVxcdTAwM2VpX29wZmxhZ3MgfD0gSU9QX09XTkVSU0hJUF9PVkVSUklERTtcXG4gXFx0c2V0X25saW5rKFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMuaW5vZGUsIHN0YXR1cy1cXHUwMDNlbmxpbmspO1xcbiBcXG4gXFx0aV9zaXplX3dyaXRlKGlub2RlLCBzdGF0dXMtXFx1MDAzZXNpemUpO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oXFxuaW5kZXggNjAxZjAxZTVjMTVmY2MuLmUxMGNmNzYzNmY2NWI2IDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oXFxuKysrIGIvZnMvYWZzL2ludGVybmFsLmhcXG5AQCAtMTUzMCw2ICsxNTMwLDkgQEAgZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleShzdHJ1Y3QgYWZzX2NlbGwgKik7XFxuIGV4dGVybiBzdHJ1Y3Qga2V5ICphZnNfcmVxdWVzdF9rZXlfcmN1KHN0cnVjdCBhZnNfY2VsbCAqKTtcXG4gZXh0ZXJuIGludCBhZnNfY2hlY2tfcGVybWl0KHN0cnVjdCBhZnNfdm5vZGUgKiwgc3RydWN0IGtleSAqLCBhZnNfYWNjZXNzX3QgKik7XFxuIGV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcXG4raW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuK2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcXG4rXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZTIpO1xcbiBleHRlcm4gdm9pZCBfX2V4aXQgYWZzX2NsZWFuX3VwX3Blcm1pdF9jYWNoZSh2b2lkKTtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZWN1cml0eS5jIGIvZnMvYWZzL3NlY3VyaXR5LmNcXG5pbmRleCA2ZDAwZDYyYTY1ZWRmNi4uNzA5MmY1YWNkY2Q2YWMgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL3NlY3VyaXR5LmNcXG4rKysgYi9mcy9hZnMvc2VjdXJpdHkuY1xcbkBAIC01MTAsNiArNTEwLDUyIEBAIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLypcXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5ICdtZScgLSB3aGF0ZXZlciB0aGF0IG1lYW5zIGZvciB0aGVcXG4rICogZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyB0aGF0IHRoZSBmaWxlIGlzIG93bmVkIGJ5IHRoZVxcbisgKiBBRlMgdXNlciByZXByZXNlbnRlZCBieSB0aGUgUnggU2VjdXJpdHkgQ2xhc3MgdG9rZW4gaGVsZCBpbiBhIGtleS4gIFJldHVybnNcXG4rICogMCBpZiBvd25lZCBieSBtZSwgMSBpZiBub3Q7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci5cXG4rICovXFxuK2ludCBhZnNfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShpbm9kZSk7XFxuK1xcdGFmc19hY2Nlc3NfdCBhY2Nlc3M7XFxuK1xcdHN0cnVjdCBrZXkgKmtleTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbitcXHRcXHRyZXR1cm4gMTsgLyogVGhlIEFETUlOIHJpZ2h0IGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgZGlyZWN0b3JpZXMuICovXFxuK1xcbitcXHRrZXkgPSBhZnNfcmVxdWVzdF9rZXkodm5vZGUtXFx1MDAzZXZvbHVtZS1cXHUwMDNlY2VsbCk7XFxuK1xcdGlmIChJU19FUlIoa2V5KSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoa2V5KTtcXG4rXFxuK1xcdC8qIEdldCB0aGUgYWNjZXNzIHJpZ2h0cyBmb3IgdGhlIGtleSBvbiB0aGlzIGZpbGUuICovXFxuK1xcdHJldCA9IGFmc19jaGVja19wZXJtaXQodm5vZGUsIGtleSwgXFx1MDAyNmFjY2Vzcyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXG4rXFx0LyogV2UgZ2V0IHRoZSBBRE1JTklTVEVSIGJpdCBpZiB3ZSBvd24gdGhlIGZpbGUuICovXFxuK1xcdHJldCA9IChhY2Nlc3MgXFx1MDAyNiBBRlNfQUNFX0FETUlOSVNURVIpID8gMCA6IDE7XFxuK2Vycm9yOlxcbitcXHRrZXlfcHV0KGtleSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qXFxuKyAqIERldGVybWluZSBpZiBhIGZpbGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBwYXJlbnQgLSB3aGF0ZXZlciB0aGF0IG1lYW5zXFxuKyAqIGZvciB0aGUgZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyBjb21wYXJpbmcgdGhlaXIgQUZTXFxuKyAqIFVJRHMuICBSZXR1cm5zIDAgaWYgc2FtZSwgMSBpZiBub3Qgc2FtZTsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLlxcbisgKi9cXG4raW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxcbitcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlMilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTEgPSBBRlNfRlNfSShpbm9kZTEpO1xcbitcXHRjb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTIgPSBBRlNfRlNfSShpbm9kZTIpO1xcbitcXG4rXFx0cmV0dXJuIHZub2RlMS1cXHUwMDNlc3RhdHVzLm93bmVyICE9IHZub2RlMi1cXHUwMDNlc3RhdHVzLm93bmVyO1xcbit9XFxuK1xcbiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpXFxuIHtcXG4gXFx0aW50IGk7XFxuZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuY1xcbmluZGV4IDRmNDM3ZmFiYjdmMGY1Li5iN2U4YjVkNDlhOWZlNiAxMDA2NDRcXG4tLS0gYS9mcy9hdHRyLmNcXG4rKysgYi9mcy9hdHRyLmNcXG5AQCAtMTYsNiArMTYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmNudGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gXFxuIC8qKlxcbiAgKiBzZXRhdHRyX3Nob3VsZF9kcm9wX3NnaWQgLSBkZXRlcm1pbmUgd2hldGhlciB0aGUgc2V0Z2lkIGJpdCBuZWVkcyB0byBiZVxcbkBAIC05MSwxOSArOTIsMjEgQEAgRVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpO1xcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXFxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxcbitzdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxcbiB7XFxuIFxcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHZmc3VpZF9lcShpYV92ZnN1aWQsIHZmc3VpZCkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0aWYgKCF2ZnN1aWRfdmFsaWQodmZzdWlkKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FUEVSTTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTExOCwyMyArMTIxLDI3IEBAIHN0YXRpYyBib29sIGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXFxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgY2hncnBfb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxcbitzdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxcbiB7XFxuIFxcdHZmc2dpZF90IHZmc2dpZCA9IGlfZ2lkX2ludG9fdmZzZ2lkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIHtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJldCA9PSAwKSB7XFxuIFxcdFxcdGlmICh2ZnNnaWRfZXEoaWFfdmZzZ2lkLCB2ZnNnaWQpKVxcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGlmICh2ZnNnaWRfaW5fZ3JvdXBfcChpYV92ZnNnaWQpKVxcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0aWYgKCF2ZnNnaWRfdmFsaWQodmZzZ2lkKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FUEVSTTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE2Myw2ICsxNzAsNyBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcXG4gXFx0dW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0ci1cXHUwMDNlaWFfdmFsaWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBGaXJzdCBjaGVjayBzaXplIGNvbnN0cmFpbnRzLiAgVGhlc2UgY2FuJ3QgYmUgb3ZlcnJpZGRlbiB1c2luZ1xcbkBAIC0xODksMTQgKzE5NywxOCBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdFxcdGdvdG8ga2lsbF9wcml2O1xcbiBcXG4gXFx0LyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG93bi4gKi9cXG4tXFx0aWYgKChpYV92YWxpZCBcXHUwMDI2IEFUVFJfVUlEKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIWNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cXHUwMDNlaWFfdmZzdWlkKSlcXG4tXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFx0aWYgKGlhX3ZhbGlkIFxcdTAwMjYgQVRUUl9VSUQpIHtcXG4rXFx0XFx0cmV0ID0gY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVxcdTAwM2VpYV92ZnN1aWQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4gXFx0LyogTWFrZSBzdXJlIGNhbGxlciBjYW4gY2hncnAuICovXFxuLVxcdGlmICgoaWFfdmFsaWQgXFx1MDAyNiBBVFRSX0dJRCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICFjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItXFx1MDAzZWlhX3Zmc2dpZCkpXFxuLVxcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcdGlmIChpYV92YWxpZCBcXHUwMDI2IEFUVFJfR0lEKSB7XFxuK1xcdFxcdHJldCA9IGNoZ3JwX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cXHUwMDNlaWFfdmZzZ2lkKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovXFxuIFxcdGlmIChpYV92YWxpZCBcXHUwMDI2IEFUVFJfTU9ERSkge1xcbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xcbmluZGV4IGU2OGE3NmZmOTJhMzg2Li4zZjMyZTczYWFlZGEyOCAxMDA2NDRcXG4tLS0gYS9mcy9jb3JlZHVtcC5jXFxuKysrIGIvZnMvY29yZWR1bXAuY1xcbkBAIC05NTQsNyArOTU0LDcgQEAgc3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcXG4gXFx0ICogZmlsZXN5c3RlbS5cXG4gXFx0ICovXFxuIFxcdGlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XFxuLVxcdGlmICghdmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkge1xcbitcXHRpZiAodmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSkgIT0gMCkge1xcbiBcXHRcXHRjb3JlZHVtcF9yZXBvcnRfZmFpbHVyZShcXFwiQ29yZSBkdW1wIHRvICVzIGFib3J0ZWQ6IGNhbm5vdCBwcmVzZXJ2ZSBmaWxlIG93bmVyXFxcIiwgY24tXFx1MDAzZWNvcmVuYW1lKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jXFxuaW5kZXggMzFjNWI5ZWUzYTgxZGYuLmE3ZWM4MzBhYjY4M2YwIDEwMDY0NFxcbi0tLSBhL2ZzL2lub2RlLmNcXG4rKysgYi9mcy9pbm9kZS5jXFxuQEAgLTI3NTAsMTYgKzI3NTAsMTkgQEAgRVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X293bmVyKTtcXG4gICogT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGVcXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKi9cXG4tYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG4rYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdHZmc3VpZF90IHZmc3VpZDtcXG4gXFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICpucztcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0ID09IDApXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcXG4gXFx0bnMgPSBjdXJyZW50X3VzZXJfbnMoKTtcXG4gXFx0aWYgKHZmc3VpZF9oYXNfbWFwcGluZyhucywgdmZzdWlkKSBcXHUwMDI2XFx1MDAyNiBuc19jYXBhYmxlKG5zLCBDQVBfRk9XTkVSKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oXFxuaW5kZXggMzU1ZDkzZjkyMjA4NjEuLmJlNDVjYzYzODg2MTkyIDEwMDY0NFxcbi0tLSBhL2ZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9pbnRlcm5hbC5oXFxuQEAgLTUxLDYgKzUxLDcgQEAgZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbiAvKlxcbiAgKiBuYW1laS5jXFxuICAqL1xcbitpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KTtcXG4gaW50IGZpbGVuYW1lX3JtZGlyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jXFxuaW5kZXggNmU0ZmY3ZmNlYzA1M2UuLjAyZjgxMGRjOWU3ZTdhIDEwMDY0NFxcbi0tLSBhL2ZzL2xvY2tzLmNcXG4rKysgYi9mcy9sb2Nrcy5jXFxuQEAgLTY4LDYgKzY4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9maWxlbG9jay5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuIFxcbiBzdGF0aWMgc3RydWN0IGZpbGVfbG9jayAqZmlsZV9sb2NrKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKVxcbiB7XFxuQEAgLTIxMzYsMTAgKzIxMzcsMTIgQEAgaW50XFxuIHZmc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGFyZywgc3RydWN0IGZpbGVfbGVhc2UgKipsZWFzZSwgdm9pZCAqKnByaXYpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XFxuLVxcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XFxuIFxcdGludCBlcnJvcjtcXG4gXFxuLVxcdGlmICgoIXZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSkgXFx1MDAyNlxcdTAwMjYgIWNhcGFibGUoQ0FQX0xFQVNFKSlcXG4rXFx0ZXJyb3IgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoZmlsZV9tbnRfaWRtYXAoZmlscCksIGlub2RlKTtcXG4rXFx0aWYgKGVycm9yIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXHRpZiAoZXJyb3IgIT0gMCBcXHUwMDI2XFx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0ZXJyb3IgPSBzZWN1cml0eV9maWxlX2xvY2soZmlscCwgYXJnKTtcXG4gXFx0aWYgKGVycm9yKVxcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xcbmluZGV4IDE5Y2U0M2M5YTZlNjYyLi43MmY5NGQyMDRmOTNmNCAxMDA2NDRcXG4tLS0gYS9mcy9uYW1laS5jXFxuKysrIGIvZnMvbmFtZWkuY1xcbkBAIC01NSw4ICs1NSw4IEBAXFxuICAqIFRoZSBuZXcgY29kZSByZXBsYWNlcyB0aGUgb2xkIHJlY3Vyc2l2ZSBzeW1saW5rIHJlc29sdXRpb24gd2l0aFxcbiAgKiBhbiBpdGVyYXRpdmUgb25lIChpbiBjYXNlIG9mIG5vbi1uZXN0ZWQgc3ltbGluayBjaGFpbnMpLiAgSXQgZG9lc1xcbiAgKiB0aGlzIHdpdGggY2FsbHMgdG8gXFx1MDAzY2ZzXFx1MDAzZV9mb2xsb3dfbGluaygpLlxcbi0gKiBBcyBhIHNpZGUgZWZmZWN0LCBkaXJfbmFtZWkoKSwgX25hbWVpKCkgYW5kIGZvbGxvd19saW5rKCkgYXJlIG5vdyBcXG4tICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbCBcXG4rICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3dcXG4rICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbFxcbiAgKiB0aGUgc3BlY2lhbCBjYXNlcyBvZiB0aGUgZm9ybWVyIGNvZGUuXFxuICAqXFxuICAqIFdpdGggdGhlIG5ldyBkY2FjaGUsIHRoZSBwYXRobmFtZSBpcyBzdG9yZWQgYXQgZWFjaCBpbm9kZSwgYXQgbGVhc3QgYXNcXG5AQCAtMTI1NSw2ICsxMjU1LDcyIEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqL1xcbiBcXG4rLypcXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5IHRoZSBwcm9jZXNzIChhbGxvd2luZyBmb3IgZnN1aWQgb3ZlcnJpZGUpLFxcbisgKiByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtXFxuKyAqIG1ha2luZyB0aGUgZGV0ZXJtaW5hdGlvbi5cXG4rICovXFxuK2ludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0aWYgKHVubGlrZWx5KGlub2RlLVxcdTAwM2VpX29wZmxhZ3MgXFx1MDAyNiBJT1BfT1dORVJTSElQX09WRVJSSURFKSlcXG4rXFx0XFx0cmV0dXJuIGlub2RlLVxcdTAwM2VpX29wLVxcdTAwM2Vpc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cXG4rfVxcbitcXG4rLypcXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IGRpcmVjdG9yeSwgcmV0dXJuaW5nXFxuKyAqIDAgaWYgc28sIDEgaWYgbm90IGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmdcXG4rICogdGhlIGRldGVybWluYXRpb24uXFxuKyAqL1xcbitzdGF0aWMgaW50IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4re1xcbitcXHRpZiAodW5saWtlbHkoaW5vZGUtXFx1MDAzZWlfb3BmbGFncyBcXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKSB7XFxuK1xcdFxcdHN0cnVjdCBkZW50cnkgKnBhcmVudDtcXG4rXFx0XFx0c3RydWN0IGlub2RlICpkaXI7XFxuK1xcdFxcdGludCByZXQ7XFxuK1xcbitcXHRcXHRpZiAoaW5vZGUgIT0gbmQtXFx1MDAzZWlub2RlKSB7XFxuK1xcdFxcdFxcdGRpciA9IG5kLVxcdTAwM2Vpbm9kZTtcXG4rXFx0XFx0XFx0cmV0ID0gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XFxuK1xcdFxcdH0gZWxzZSBpZiAobmQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSkge1xcbitcXHRcXHRcXHRwYXJlbnQgPSBSRUFEX09OQ0UobmQtXFx1MDAzZXBhdGguZGVudHJ5KTtcXG4rXFx0XFx0XFx0ZGlyID0gUkVBRF9PTkNFKHBhcmVudC1cXHUwMDNlZF9pbm9kZSk7XFxuK1xcdFxcdFxcdGlmICghZGlyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVDSElMRDtcXG4rXFx0XFx0XFx0cmV0ID0gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHBhcmVudCA9IGRnZXRfcGFyZW50KG5kLVxcdTAwM2VwYXRoLmRlbnRyeSk7XFxuK1xcdFxcdFxcdGRpciA9IHBhcmVudC1cXHUwMDNlZF9pbm9kZTtcXG4rXFx0XFx0XFx0cmV0ID0gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XFxuK1xcdFxcdFxcdGRwdXQocGFyZW50KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAodmZzdWlkX3ZhbGlkKG5kLVxcdTAwM2VkaXJfdmZzdWlkKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdmZzdWlkX2VxKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIG5kLVxcdTAwM2VkaXJfdmZzdWlkKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cXG4rfVxcbitcXG4rLypcXG4rICogRGV0ZXJtaW5lIGlmIHR3byBpbm9kZXMgaGF2ZSB0aGUgc2FtZSBvd25lciwgcmV0dXJuaW5nIDAgaWYgc28sIDEgaWYgbm90IGFuZFxcbisgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uXFxuKyAqL1xcbitzdGF0aWMgaW50IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcilcXG4re1xcbitcXHRpZiAodW5saWtlbHkoaW5vZGUtXFx1MDAzZWlfb3BmbGFncyBcXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKVxcbitcXHRcXHRyZXR1cm4gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XFxuK1xcdGlmICh2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSxcXG4rXFx0XFx0ICAgICAgaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGRpcikpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqL1xcbit9XFxuK1xcbiAvKipcXG4gICogbWF5X2ZvbGxvd19saW5rIC0gQ2hlY2sgc3ltbGluayBmb2xsb3dpbmcgZm9yIHVuc2FmZSBzaXR1YXRpb25zXFxuICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcXG5AQCAtMTI3MSwyNyArMTMzNywyOCBAQCBmc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpO1xcbiAgKlxcbiAgKiBSZXR1cm5zIDAgaWYgZm9sbG93aW5nIHRoZSBzeW1saW5rIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG4rc3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xcbi1cXHR2ZnN1aWRfdCB2ZnN1aWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAoIXN5c2N0bF9wcm90ZWN0ZWRfc3ltbGlua3MpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWRtYXAgPSBtbnRfaWRtYXAobmQtXFx1MDAzZXBhdGgubW50KTtcXG4tXFx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcXG4tXFx0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4gXFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IG5vdCBzdGlja3kgYW5kIHdvcmxkLXdyaXRhYmxlLiAqL1xcbiBcXHRpZiAoKG5kLVxcdTAwM2VkaXJfbW9kZSBcXHUwMDI2IChTX0lTVlRYfFNfSVdPVEgpKSAhPSAoU19JU1ZUWHxTX0lXT1RIKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRpZG1hcCA9IG1udF9pZG1hcChuZC1cXHUwMDNlcGF0aC5tbnQpO1xcbitcXHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cXG4rXFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdC8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBhbmQgbGluayBvd25lciBtYXRjaC4gKi9cXG4tXFx0aWYgKHZmc3VpZF92YWxpZChuZC1cXHUwMDNlZGlyX3Zmc3VpZCkgXFx1MDAyNlxcdTAwMjYgdmZzdWlkX2VxKG5kLVxcdTAwM2VkaXJfdmZzdWlkLCB2ZnN1aWQpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRpZiAobmQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSlcXG4gXFx0XFx0cmV0dXJuIC1FQ0hJTEQ7XFxuQEAgLTEzODksMTIgKzE0NTYsMTIgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXFxuICAqXFxuICAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOlxcbi0gKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkXFxuLSAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xcbi0gKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxcbi0gKiAgIC0gd2UgZG9uJ3Qgb3duIHRoZSBmaWxlXFxuKyAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWQsXFxuKyAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cyxcXG4rICogICAtIHdlIGFyZSBpbiBhIHN0aWNreSBkaXJlY3RvcnksXFxuKyAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlLFxcbisgKiAgIC0gd2UgZG9uJ3Qgb3duIHRoZSBmaWxlIGFuZFxcbiAgKiAgIC0gdGhlIG93bmVyIG9mIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBvd24gdGhlIGZpbGVcXG4tICogICAtIHRoZSBkaXJlY3RvcnkgaXMgd29ybGQgd3JpdGFibGVcXG4gICogSWYgdGhlIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgc2V0IHRvIDJcXG4gICogdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGhhdmUgdG8gYmUgd29ybGQgd3JpdGFibGU6IGJlaW5nIGdyb3VwIHdyaXRhYmxlIHdpbGxcXG4gICogYmUgZW5vdWdoLlxcbkBAIC0xNDA1LDEzICsxNDcyLDQ1IEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcXG4gICogT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGVcXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKlxcbisgKiBGb3IgYSBmaWxlc3lzdGVtIChlLmcuIGEgbmV0d29yayBmaWxlc3lzdGVtKSB0aGF0IGhhcyBhIHNlcGFyYXRlIElEIHNwYWNlXFxuKyAqIGFuZCBoYXMgZm9yZWlnbiBJRHMgKG1heWJlIGV2ZW4gbm9uLWludGVnZXIgSURzKSwgaV91aWQgY2Fubm90IGJlIGNvbXBhcmVkXFxuKyAqIHRvIGN1cnJlbnRfZnN1aWQoKSBhbmQgbWF5IG5vdCBiZSBkaXJlY3RseSBjb21wYXJhYmxlIHRvIGFub3RoZXIgaV91aWQuXFxuKyAqIEluc3RlYWQsIHRoZSBmaWxlc3lzdGVtIGlzIGFza2VkIHRvIHBlcmZvcm0gdGhlIGNvbXBhcmlzb25zLiAgV2l0aCBuZXR3b3JrXFxuKyAqIGZpbGVzeXN0ZW1zLCB0aGVyZSBhbHNvIGV4aXN0cyB0aGUgcG9zc2liaWxpdHkgb2YgZG9pbmcgYW5vbnltb3VzXFxuKyAqIG9wZXJhdGlvbnMgYW5kIGhhdmluZyBhbm9ueW1vdXNseS1vd25lZCBvYmplY3RzLlxcbisgKlxcbisgKiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zOlxcbisgKlxcbisgKlxcdFVTRVJcXHRESVJcXHRGSUxFXFx0RklMRVxcdEFMTE9XRURcXG4rICpcXHRcXHRPV05FUlxcdE9XTkVSXFx0U1RBVEVcXG4rICpcXHQ9PT09PT09XFx0PT09PT09PVxcdD09PT09PT1cXHQ9PT09PT09XFx0PT09PT09PVxcbisgKlxcdEFcXHRBXFx0LVxcdE5ld1xcdFllc1xcbisgKlxcdEFcXHRBXFx0QVxcdEV4aXN0c1xcdFllc1xcbisgKlxcdEFcXHRBXFx0Q1xcdEV4aXN0c1xcdE5vXFxuKyAqXFx0QVxcdEJcXHQtXFx0TmV3XFx0WWVzXFxuKyAqXFx0QVxcdEJcXHRBXFx0RXhpc3RzXFx0WWVzLCBGTz09VVxcbisgKlxcdEFcXHRCXFx0QlxcdEV4aXN0c1xcdFllcywgRk89PURPXFxuKyAqXFx0QVxcdEJcXHRDXFx0RXhpc3RzXFx0Tm9cXG4rICpcXHRBXFx0YW5vblsxXVxcdC1cXHROZXdcXHRZZXNcXG4rICpcXHRBXFx0YW5vblsxXVxcdEFcXHRFeGlzdHNcXHRZZXNcXG4rICpcXHRBXFx0YW5vblsxXVxcdENcXHRFeGlzdHNcXHROb1xcbisgKlxcdGFub25cXHRBXFx0LVxcdE5ld1xcdFllc1xcbisgKlxcdGFub25cXHRBXFx0QVxcdEV4aXN0c1xcdFllcywgRk89PURPXFxuKyAqXFx0YW5vblxcdGFub25bMV1cXHQtXFx0TmV3XFx0WWVzXFxuKyAqXFx0YW5vblxcdGFub25bMV1cXHQtXFx0RXhpc3RzXFx0Tm9cXG4rICpcXHRhbm9uXFx0QVxcdEFcXHRFeGlzdHNcXHRZZXMsIEZPPT1ET1xcbisgKlxcdGFub25cXHRBXFx0Q1xcdEV4aXN0c1xcdE5vXFxuKyAqXFx0YW5vblxcdEFcXHRhbm9uXFx0RXhpc3RzXFx0Tm9cXG4rICpcXG4rICogWzFdIENhbiBhbm9ueW1vdXNseS1vd25lZCBkaXJzIGJlIHN0aWNreT9cXG4rICpcXG4gICogUmV0dXJucyAwIGlmIHRoZSBvcGVuIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci5cXG4gICovXFxuIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmNvbnN0IGlub2RlKVxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdHVtb2RlX3QgZGlyX21vZGUgPSBuZC1cXHUwMDNlZGlyX21vZGU7XFxuLVxcdHZmc3VpZF90IGRpcl92ZnN1aWQgPSBuZC1cXHUwMDNlZGlyX3Zmc3VpZCwgaV92ZnN1aWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAobGlrZWx5KCEoZGlyX21vZGUgXFx1MDAyNiBTX0lTVlRYKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xNDIyLDEzICsxNTIxLDEzIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbiBcXHRpZiAoU19JU0ZJRk8oaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aV92ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xcbi1cXG4tXFx0aWYgKHZmc3VpZF9lcShpX3Zmc3VpZCwgZGlyX3Zmc3VpZCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3Zmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRpZiAobGlrZWx5KGRpcl9tb2RlIFxcdTAwMjYgMDAwMikpIHtcXG4gXFx0XFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsIFxcXCJzdGlja3lfY3JlYXRlXFxcIik7XFxuQEAgLTM2NDUsMTIgKzM3NDQsMTQgQEAgRVhQT1JUX1NZTUJPTCh1c2VyX3BhdGhfYXQpO1xcbiBpbnQgX19jaGVja19zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuLVxcdGt1aWRfdCBmc3VpZCA9IGN1cnJlbnRfZnN1aWQoKTtcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBmc3VpZCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGRpciksIGZzdWlkKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRyZXR1cm4gIWNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9GT1dORVIpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woX19jaGVja19zdGlja3kpO1xcbmRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5jIGIvZnMvcmVtYXBfcmFuZ2UuY1xcbmluZGV4IDI2YWZiYmJmYjEwYzJlLi45ZWVlOTNjMjcwMDEyNSAxMDA2NDRcXG4tLS0gYS9mcy9yZW1hcF9yYW5nZS5jXFxuKysrIGIvZnMvcmVtYXBfcmFuZ2UuY1xcbkBAIC00MTMsMjAgKzQxMywyMiBAQCBsb2ZmX3QgdmZzX2Nsb25lX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXFxuIEVYUE9SVF9TWU1CT0wodmZzX2Nsb25lX2ZpbGVfcmFuZ2UpO1xcbiBcXG4gLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgYWxsb3dlZCB0byBkZWR1cGUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgKi9cXG4tc3RhdGljIGJvb2wgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbitzdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9XUklURSlcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdGlmICghaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gLUVQRVJNO1xcbiB9XFxuIFxcbiBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLFxcbkBAIC00NTksOCArNDYxLDggQEAgbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IC1FUEVSTTtcXG4tXFx0aWYgKCFtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpKVxcbitcXHRyZXQgPSBtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfZHJvcF93cml0ZTtcXG4gXFxuIFxcdHJldCA9IC1FWERFVjtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXFxuaW5kZXggNTBjZTczMWEyYjc4ZjEuLjgwMTNjMTNhMzUzZDY3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZnMuaFxcbkBAIC02MjgsNiArNjI4LDcgQEAgaXNfdW5jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKmFjbClcXG4gI2RlZmluZSBJT1BfQ0FDSEVEX0xJTktcXHRcXHQweDAwNDBcXG4gI2RlZmluZSBJT1BfRkFTVFBFUk1fTUFZX0VYRUNcXHQweDAwODBcXG4gI2RlZmluZSBJT1BfRkxDVFhcXHRcXHQweDAxMDBcXG4rI2RlZmluZSBJT1BfT1dORVJTSElQX09WRVJSSURFXFx0MHgwMjAwXFx0LyogVXNlIC1cXHUwMDNlaXNfb3duZWRfYnlfbWUoKSBhbmQgLVxcdTAwM2VoYXZlX3NhbWVfb3duZXIoKSAqL1xcbiBcXG4gLypcXG4gICogSW5vZGUgc3RhdGUgYml0cy4gIFByb3RlY3RlZCBieSBpbm9kZS1cXHUwMDNlaV9sb2NrXFxuQEAgLTE3NTUsOCArMTc1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX3dyaXRlX25vdF9zdGFydGVkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRyZXR1cm4gc2Jfd3JpdGVfbm90X3N0YXJ0ZWQoZmlsZV9pbm9kZShmaWxlKS1cXHUwMDNlaV9zYik7XFxuIH1cXG4gXFxuLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbitib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBcXG4gLypcXG4gICogVkZTIGhlbHBlciBmdW5jdGlvbnMuLlxcbkBAIC0yMDM2LDYgKzIwMzYsOSBAQCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB7XFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XFxuIFxcdGludCAoKmZpbGVhdHRyX2dldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbiBcXHRzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGlub2RlICppbm9kZTIpO1xcbiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcXG4gXFxuIC8qIERpZCB0aGUgZHJpdmVyIHByb3ZpZGUgdmFsaWQgbW1hcCBob29rIGNvbmZpZ3VyYXRpb24/ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE2OjMxOjEyLjI2MjA2NTM2MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY0NjgxOTQ1NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19pbm9kZV9pc19vd25lZF9ieV9tZVwiLFxuICAgIFwidmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJ2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lclwiLFxuICAgIFwiYWZzX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJhZnNfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJjaG93bl9va1wiLFxuICAgIFwiY2hncnBfb2tcIixcbiAgICBcIm1heV9jcmVhdGVfaW5fc3RpY2t5XCIsXG4gICAgXCJfX2NoZWNrX3N0aWNreVwiLFxuICAgIFwibWF5X2RlZHVwZV9maWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0d28gbmV3IGlub2RlIG9wZXJhdGlvbnMgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgVkZTIG93bmVyc2hpcCBjaGVja3MuIEl0IGltcGxlbWVudHMgdGhlc2Ugb3BlcmF0aW9ucyBpbiB0aGUgQUZTIGZpbGVzeXN0ZW0gYW5kIG1vZGlmaWVzIGNvcmUgVkZTIGZ1bmN0aW9ucyAobGlrZSBgY2hvd25fb2tgLCBgY2hncnBfb2tgLCBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgLCBgbWF5X2RlZHVwZV9maWxlYCwgZXRjLikgdG8gdXNlIHRoZW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFZGUyBhbmQgQUZTIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMzQwNTQzYzJiZGMzNDEwMGUyMDM1YWU2NDRmMzU5OGVmZWQ1NTFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTY6MzE6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbmluZGV4IDdjNzUzMTQ4YWY4ODgzLi44OTM0MTllMDAzZWFmNyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG5AQCAtNDQ1LDYgKzQ0NSw5IEBAIEFzIG9mIGtlcm5lbCAyLjYuMjIsIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgZGVmaW5lZDpcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHRcdGludCAoKmZpbGVhdHRyX2dldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuIFx0ICAgICAgICBzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7XG4rXHRcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4rXHRcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBcdH07XG4gXG4gQWdhaW4sIGFsbCBtZXRob2RzIGFyZSBjYWxsZWQgd2l0aG91dCBhbnkgbG9ja3MgYmVpbmcgaGVsZCwgdW5sZXNzXG5AQCAtNjM0LDYgKzYzNywyNCBAQCBvdGhlcndpc2Ugbm90ZWQuXG4gICAgICAgICBmaWxlc3lzdGVtIG11c3QgZGVmaW5lIHRoaXMgb3BlcmF0aW9uIHRvIHVzZVxuICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy5cbiBcbitgYGlzX293bmVkX2J5X21lYGBcbitcdGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGZpbGUgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgJ293bmVkJyBieVxuK1x0dGhlIG93bmVyIG9mIHRoZSBwcm9jZXNzIG9yIGlmIHRoZSBwcm9jZXNzIGhhcyBhIHRva2VuIHRoYXQgZ3JhbnRzXG4rXHRpdCBvd25lcnNoaXAgcHJpdmlsZWdlcy4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBjb21wYXJlIGlfdWlkXG4rXHR0byBjdXJyZW50X2ZzdWlkKCkgLSBidXQgdGhpcyBtYXkgZ2l2ZSBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc29tZVxuK1x0bmV0d29yayBvciBwbHVnLWluIGJsb2NrIGZpbGVzeXN0ZW1zLiAgRm9yIGV4YW1wbGUsIEFGUyBkZXRlcm1pbmVzXG4rXHRvd25lcnNoaXAgZW50aXJlbHkgYWNjb3JkaW5nIHRvIGFuIG9idGFpbmVkIHRva2VuIGFuZCBpX3VpZCBtYXkgbm90XG4rXHRldmVuIGJlIGZyb20gdGhlIHNhbWUgSUQgc3BhY2UgYXMgY3VycmVudF91aWQoKS5cbitcbitgYGhhdmVfc2FtZV9vd25lcmBgXG4rXHRjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIGFuIGlub2RlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgaW1tZWRpYXRlXG4rXHRwYXJlbnQgb24gdGhlIHBhdGggd2Fsa2VkLiAgSWYgdW5zZXQsIHRoZSBkZWZhdWx0IGlzIHRvIHNpbXBseVxuK1x0Y29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEc1xuK1x0b2YgYm90aCAtIGJ1dCB0aGVzZSBhcmUgYSA2NC1iaXQgdmFsdWVzIG9uIHNvbWUgdmFyaWFudHMgdGhhdCBtaWdodFxuK1x0bm90IGZpdCBpbnRvIGEga3VpZF90IGFuZCBjaWZzIGhhcyBHVUlEcyB0aGF0IGNhbm5vdCBiZSBjb21wYXJlZCB0b1xuK1x0a3VpZF90LlxuK1xuK1xuIFRoZSBBZGRyZXNzIFNwYWNlIE9iamVjdFxuID09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXIuYyBiL2ZzL2Fmcy9kaXIuY1xuaW5kZXggNmRmNTZmZTkxNjNmZDcuLmVlMmY1ZWMwYjJjNjdkIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpci5jXG4rKysgYi9mcy9hZnMvZGlyLmNcbkBAIC02OSw2ICs2OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5wZXJtaXNzaW9uXHQ9IGFmc19wZXJtaXNzaW9uLFxuIFx0LmdldGF0dHJcdD0gYWZzX2dldGF0dHIsXG4gXHQuc2V0YXR0clx0PSBhZnNfc2V0YXR0cixcbitcdC5pc19vd25lZF9ieV9tZVx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXG4rXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcbiB9O1xuIFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2Rpcl9hb3BzID0ge1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9maWxlLmMgYi9mcy9hZnMvZmlsZS5jXG5pbmRleCAwNDY3NzQyYmZlZWUzNC4uYmE0NDQ5M2NjYWY2ZWUgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZmlsZS5jXG4rKysgYi9mcy9hZnMvZmlsZS5jXG5AQCAtNDksNiArNDksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LmdldGF0dHJcdD0gYWZzX2dldGF0dHIsXG4gXHQuc2V0YXR0clx0PSBhZnNfc2V0YXR0cixcbiBcdC5wZXJtaXNzaW9uXHQ9IGFmc19wZXJtaXNzaW9uLFxuK1x0LmlzX293bmVkX2J5X21lXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcbitcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZmlsZV9hb3BzID0ge1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbm9kZS5jIGIvZnMvYWZzL2lub2RlLmNcbmluZGV4IDE0ZjM5YTliZWE2Y2ZlLi5hZjg1YTg4ZDk0M2RkMSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9pbm9kZS5jXG4rKysgYi9mcy9hZnMvaW5vZGUuY1xuQEAgLTkxLDYgKzkxLDcgQEAgc3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsXG4gXHRpbm9kZS1cdTAwM2VpX2ZsYWdzIHw9IFNfTk9BVElNRTtcbiBcdGlub2RlLVx1MDAzZWlfdWlkID0gbWFrZV9rdWlkKFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVx1MDAzZW93bmVyKTtcbiBcdGlub2RlLVx1MDAzZWlfZ2lkID0gbWFrZV9rZ2lkKFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVx1MDAzZWdyb3VwKTtcbitcdGlub2RlLVx1MDAzZWlfb3BmbGFncyB8PSBJT1BfT1dORVJTSElQX09WRVJSSURFO1xuIFx0c2V0X25saW5rKFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlLCBzdGF0dXMtXHUwMDNlbmxpbmspO1xuIFxuIFx0aV9zaXplX3dyaXRlKGlub2RlLCBzdGF0dXMtXHUwMDNlc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxuaW5kZXggNjAxZjAxZTVjMTVmY2MuLmUxMGNmNzYzNmY2NWI2IDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcbisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5AQCAtMTUzMCw2ICsxNTMwLDkgQEAgZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleShzdHJ1Y3QgYWZzX2NlbGwgKik7XG4gZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleV9yY3Uoc3RydWN0IGFmc19jZWxsICopO1xuIGV4dGVybiBpbnQgYWZzX2NoZWNrX3Blcm1pdChzdHJ1Y3QgYWZzX3Zub2RlICosIHN0cnVjdCBrZXkgKiwgYWZzX2FjY2Vzc190ICopO1xuIGV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcbitpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitpbnQgYWZzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsXG4rXHRcdFx0c3RydWN0IGlub2RlICppbm9kZTIpO1xuIGV4dGVybiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpO1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3NlY3VyaXR5LmMgYi9mcy9hZnMvc2VjdXJpdHkuY1xuaW5kZXggNmQwMGQ2MmE2NWVkZjYuLjcwOTJmNWFjZGNkNmFjIDEwMDY0NFxuLS0tIGEvZnMvYWZzL3NlY3VyaXR5LmNcbisrKyBiL2ZzL2Fmcy9zZWN1cml0eS5jXG5AQCAtNTEwLDYgKzUxMCw1MiBAQCBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKlxuKyAqIERldGVybWluZSBpZiBhbiBpbm9kZSBpcyBvd25lZCBieSAnbWUnIC0gd2hhdGV2ZXIgdGhhdCBtZWFucyBmb3IgdGhlXG4rICogZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyB0aGF0IHRoZSBmaWxlIGlzIG93bmVkIGJ5IHRoZVxuKyAqIEFGUyB1c2VyIHJlcHJlc2VudGVkIGJ5IHRoZSBSeCBTZWN1cml0eSBDbGFzcyB0b2tlbiBoZWxkIGluIGEga2V5LiAgUmV0dXJuc1xuKyAqIDAgaWYgb3duZWQgYnkgbWUsIDEgaWYgbm90OyBjYW4gYWxzbyByZXR1cm4gYW4gZXJyb3IuXG4rICovXG4raW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGlub2RlKTtcbitcdGFmc19hY2Nlc3NfdCBhY2Nlc3M7XG4rXHRzdHJ1Y3Qga2V5ICprZXk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbitcdFx0cmV0dXJuIDE7IC8qIFRoZSBBRE1JTiByaWdodCBjaGVjayBkb2Vzbid0IHdvcmsgZm9yIGRpcmVjdG9yaWVzLiAqL1xuK1xuK1x0a2V5ID0gYWZzX3JlcXVlc3Rfa2V5KHZub2RlLVx1MDAzZXZvbHVtZS1cdTAwM2VjZWxsKTtcbitcdGlmIChJU19FUlIoa2V5KSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoa2V5KTtcbitcbitcdC8qIEdldCB0aGUgYWNjZXNzIHJpZ2h0cyBmb3IgdGhlIGtleSBvbiB0aGlzIGZpbGUuICovXG4rXHRyZXQgPSBhZnNfY2hlY2tfcGVybWl0KHZub2RlLCBrZXksIFx1MDAyNmFjY2Vzcyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycm9yO1xuK1xuK1x0LyogV2UgZ2V0IHRoZSBBRE1JTklTVEVSIGJpdCBpZiB3ZSBvd24gdGhlIGZpbGUuICovXG4rXHRyZXQgPSAoYWNjZXNzIFx1MDAyNiBBRlNfQUNFX0FETUlOSVNURVIpID8gMCA6IDE7XG4rZXJyb3I6XG4rXHRrZXlfcHV0KGtleSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKlxuKyAqIERldGVybWluZSBpZiBhIGZpbGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBwYXJlbnQgLSB3aGF0ZXZlciB0aGF0IG1lYW5zXG4rICogZm9yIHRoZSBmaWxlc3lzdGVtLiAgSW4gdGhlIGNhc2Ugb2YgQUZTLCB0aGlzIG1lYW5zIGNvbXBhcmluZyB0aGVpciBBRlNcbisgKiBVSURzLiAgUmV0dXJucyAwIGlmIHNhbWUsIDEgaWYgbm90IHNhbWU7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci5cbisgKi9cbitpbnQgYWZzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsXG4rXHRcdFx0c3RydWN0IGlub2RlICppbm9kZTIpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUxID0gQUZTX0ZTX0koaW5vZGUxKTtcbitcdGNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlMiA9IEFGU19GU19JKGlub2RlMik7XG4rXG4rXHRyZXR1cm4gdm5vZGUxLVx1MDAzZXN0YXR1cy5vd25lciAhPSB2bm9kZTItXHUwMDNlc3RhdHVzLm93bmVyO1xuK31cbitcbiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpXG4ge1xuIFx0aW50IGk7XG5kaWZmIC0tZ2l0IGEvZnMvYXR0ci5jIGIvZnMvYXR0ci5jXG5pbmRleCA0ZjQzN2ZhYmI3ZjBmNS4uYjdlOGI1ZDQ5YTlmZTYgMTAwNjQ0XG4tLS0gYS9mcy9hdHRyLmNcbisrKyBiL2ZzL2F0dHIuY1xuQEAgLTE2LDYgKzE2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZWxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbisjaW5jbHVkZSBcImludGVybmFsLmhcIlxuIFxuIC8qKlxuICAqIHNldGF0dHJfc2hvdWxkX2Ryb3Bfc2dpZCAtIGRldGVybWluZSB3aGV0aGVyIHRoZSBzZXRnaWQgYml0IG5lZWRzIHRvIGJlXG5AQCAtOTEsMTkgKzkyLDIxIEBAIEVYUE9SVF9TWU1CT0woc2V0YXR0cl9zaG91bGRfZHJvcF9zdWlkZ2lkKTtcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXG4gICogcGVyZm9ybWVkIG9uIHRoZSByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuXG4gICovXG4tc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tXHRcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxuK3N0YXRpYyBpbnQgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnN1aWRfdCBpYV92ZnN1aWQpXG4ge1xuIFx0dmZzdWlkX3QgdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgdmZzdWlkX2VxKGlhX3Zmc3VpZCwgdmZzdWlkKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbiBcdGlmIChjYXBhYmxlX3dydF9pbm9kZV91aWRnaWQoaWRtYXAsIGlub2RlLCBDQVBfQ0hPV04pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0cmV0dXJuIDA7XG4gXHRpZiAoIXZmc3VpZF92YWxpZCh2ZnN1aWQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG5zX2NhcGFibGUoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX3VzZXJfbnMsIENBUF9DSE9XTikpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0cmV0dXJuIGZhbHNlO1xuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAtRVBFUk07XG4gfVxuIFxuIC8qKlxuQEAgLTExOCwyMyArMTIxLDI3IEBAIHN0YXRpYyBib29sIGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuICAqIHBlcm1pc3Npb25zLiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmVcbiAgKiBwZXJmb3JtZWQgb24gdGhlIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC5cbiAgKi9cbi1zdGF0aWMgYm9vbCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0ICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnNnaWRfdCBpYV92ZnNnaWQpXG4rc3RhdGljIGludCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc2dpZF90IGlhX3Zmc2dpZClcbiB7XG4gXHR2ZnNnaWRfdCB2ZnNnaWQgPSBpX2dpZF9pbnRvX3Zmc2dpZChpZG1hcCwgaW5vZGUpO1xuLVx0dmZzdWlkX3QgdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIHtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAocmV0ID09IDApIHtcbiBcdFx0aWYgKHZmc2dpZF9lcShpYV92ZnNnaWQsIHZmc2dpZCkpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdFx0cmV0dXJuIDA7XG4gXHRcdGlmICh2ZnNnaWRfaW5fZ3JvdXBfcChpYV92ZnNnaWQpKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbiBcdGlmICghdmZzZ2lkX3ZhbGlkKHZmc2dpZCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfdXNlcl9ucywgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gZmFsc2U7XG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIC1FUEVSTTtcbiB9XG4gXG4gLyoqXG5AQCAtMTYzLDYgKzE3MCw3IEBAIGludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuIFx0dW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0ci1cdTAwM2VpYV92YWxpZDtcbitcdGludCByZXQ7XG4gXG4gXHQvKlxuIFx0ICogRmlyc3QgY2hlY2sgc2l6ZSBjb25zdHJhaW50cy4gIFRoZXNlIGNhbid0IGJlIG92ZXJyaWRkZW4gdXNpbmdcbkBAIC0xODksMTQgKzE5NywxOCBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRcdGdvdG8ga2lsbF9wcml2O1xuIFxuIFx0LyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG93bi4gKi9cbi1cdGlmICgoaWFfdmFsaWQgXHUwMDI2IEFUVFJfVUlEKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc3VpZCkpXG4tXHRcdHJldHVybiAtRVBFUk07XG4rXHRpZiAoaWFfdmFsaWQgXHUwMDI2IEFUVFJfVUlEKSB7XG4rXHRcdHJldCA9IGNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cdTAwM2VpYV92ZnN1aWQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4gXHQvKiBNYWtlIHN1cmUgY2FsbGVyIGNhbiBjaGdycC4gKi9cbi1cdGlmICgoaWFfdmFsaWQgXHUwMDI2IEFUVFJfR0lEKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc2dpZCkpXG4tXHRcdHJldHVybiAtRVBFUk07XG4rXHRpZiAoaWFfdmFsaWQgXHUwMDI2IEFUVFJfR0lEKSB7XG4rXHRcdHJldCA9IGNoZ3JwX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cdTAwM2VpYV92ZnNnaWQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4gXHQvKiBNYWtlIHN1cmUgYSBjYWxsZXIgY2FuIGNobW9kLiAqL1xuIFx0aWYgKGlhX3ZhbGlkIFx1MDAyNiBBVFRSX01PREUpIHtcbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xuaW5kZXggZTY4YTc2ZmY5MmEzODYuLjNmMzJlNzNhYWVkYTI4IDEwMDY0NFxuLS0tIGEvZnMvY29yZWR1bXAuY1xuKysrIGIvZnMvY29yZWR1bXAuY1xuQEAgLTk1NCw3ICs5NTQsNyBAQCBzdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuIFx0ICogZmlsZXN5c3RlbS5cbiBcdCAqL1xuIFx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcbi1cdGlmICghdmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkge1xuK1x0aWYgKHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpICE9IDApIHtcbiBcdFx0Y29yZWR1bXBfcmVwb3J0X2ZhaWx1cmUoXCJDb3JlIGR1bXAgdG8gJXMgYWJvcnRlZDogY2Fubm90IHByZXNlcnZlIGZpbGUgb3duZXJcIiwgY24tXHUwMDNlY29yZW5hbWUpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmNcbmluZGV4IDMxYzViOWVlM2E4MWRmLi5hN2VjODMwYWI2ODNmMCAxMDA2NDRcbi0tLSBhL2ZzL2lub2RlLmNcbisrKyBiL2ZzL2lub2RlLmNcbkBAIC0yNzUwLDE2ICsyNzUwLDE5IEBAIEVYUE9SVF9TWU1CT0woaW5vZGVfaW5pdF9vd25lcik7XG4gICogT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGVcbiAgKiByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuXG4gICovXG4tYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK2Jvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHR2ZnN1aWRfdCB2ZnN1aWQ7XG4gXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zO1xuK1x0aW50IHJldDtcbiBcbi1cdHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKVxuK1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4rXHRpZiAocmV0ID09IDApXG4gXHRcdHJldHVybiB0cnVlO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuK1x0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbiBcdG5zID0gY3VycmVudF91c2VyX25zKCk7XG4gXHRpZiAodmZzdWlkX2hhc19tYXBwaW5nKG5zLCB2ZnN1aWQpIFx1MDAyNlx1MDAyNiBuc19jYXBhYmxlKG5zLCBDQVBfRk9XTkVSKSlcbiBcdFx0cmV0dXJuIHRydWU7XG5kaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmhcbmluZGV4IDM1NWQ5M2Y5MjIwODYxLi5iZTQ1Y2M2Mzg4NjE5MiAxMDA2NDRcbi0tLSBhL2ZzL2ludGVybmFsLmhcbisrKyBiL2ZzL2ludGVybmFsLmhcbkBAIC01MSw2ICs1MSw3IEBAIGV4dGVybiBpbnQgZmluaXNoX2NsZWFuX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbiAvKlxuICAqIG5hbWVpLmNcbiAgKi9cbitpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBleHRlcm4gaW50IGZpbGVuYW1lX2xvb2t1cChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIHVuc2lnbmVkIGZsYWdzLFxuIFx0XHRcdCAgIHN0cnVjdCBwYXRoICpwYXRoLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCk7XG4gaW50IGZpbGVuYW1lX3JtZGlyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSk7XG5kaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmNcbmluZGV4IDZlNGZmN2ZjZWMwNTNlLi4wMmY4MTBkYzllN2U3YSAxMDA2NDRcbi0tLSBhL2ZzL2xvY2tzLmNcbisrKyBiL2ZzL2xvY2tzLmNcbkBAIC02OCw2ICs2OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2ZpbGVsb2NrLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbisjaW5jbHVkZSBcImludGVybmFsLmhcIlxuIFxuIHN0YXRpYyBzdHJ1Y3QgZmlsZV9sb2NrICpmaWxlX2xvY2soc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbGMpXG4ge1xuQEAgLTIxMzYsMTAgKzIxMzcsMTIgQEAgaW50XG4gdmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbi1cdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG4gXHRpbnQgZXJyb3I7XG4gXG4tXHRpZiAoKCF2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxuK1x0ZXJyb3IgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoZmlsZV9tbnRfaWRtYXAoZmlscCksIGlub2RlKTtcbitcdGlmIChlcnJvciBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGVycm9yO1xuK1x0aWYgKGVycm9yICE9IDAgXHUwMDI2XHUwMDI2ICFjYXBhYmxlKENBUF9MRUFTRSkpXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0ZXJyb3IgPSBzZWN1cml0eV9maWxlX2xvY2soZmlscCwgYXJnKTtcbiBcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggMTljZTQzYzlhNmU2NjIuLjcyZjk0ZDIwNGY5M2Y0IDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuKysrIGIvZnMvbmFtZWkuY1xuQEAgLTU1LDggKzU1LDggQEBcbiAgKiBUaGUgbmV3IGNvZGUgcmVwbGFjZXMgdGhlIG9sZCByZWN1cnNpdmUgc3ltbGluayByZXNvbHV0aW9uIHdpdGhcbiAgKiBhbiBpdGVyYXRpdmUgb25lIChpbiBjYXNlIG9mIG5vbi1uZXN0ZWQgc3ltbGluayBjaGFpbnMpLiAgSXQgZG9lc1xuICAqIHRoaXMgd2l0aCBjYWxscyB0byBcdTAwM2Nmc1x1MDAzZV9mb2xsb3dfbGluaygpLlxuLSAqIEFzIGEgc2lkZSBlZmZlY3QsIGRpcl9uYW1laSgpLCBfbmFtZWkoKSBhbmQgZm9sbG93X2xpbmsoKSBhcmUgbm93IFxuLSAqIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gbG9va3VwX2RlbnRyeSgpIHRoYXQgY2FuIGhhbmRsZSBhbGwgXG4rICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3dcbisgKiByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGxvb2t1cF9kZW50cnkoKSB0aGF0IGNhbiBoYW5kbGUgYWxsXG4gICogdGhlIHNwZWNpYWwgY2FzZXMgb2YgdGhlIGZvcm1lciBjb2RlLlxuICAqXG4gICogV2l0aCB0aGUgbmV3IGRjYWNoZSwgdGhlIHBhdGhuYW1lIGlzIHN0b3JlZCBhdCBlYWNoIGlub2RlLCBhdCBsZWFzdCBhc1xuQEAgLTEyNTUsNiArMTI1NSw3MiBAQCBmc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpO1xuIFxuICNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovXG4gXG4rLypcbisgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaXMgb3duZWQgYnkgdGhlIHByb2Nlc3MgKGFsbG93aW5nIGZvciBmc3VpZCBvdmVycmlkZSksXG4rICogcmV0dXJuaW5nIDAgaWYgc28sIDEgaWYgbm90IGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbVxuKyAqIG1ha2luZyB0aGUgZGV0ZXJtaW5hdGlvbi5cbisgKi9cbitpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdGlmICh1bmxpa2VseShpbm9kZS1cdTAwM2VpX29wZmxhZ3MgXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKVxuK1x0XHRyZXR1cm4gaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2Vpc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuK1x0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGN1cnJlbnRfZnN1aWQoKSkpXG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqL1xuK31cbitcbisvKlxuKyAqIERldGVybWluZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIHBhcmVudCBkaXJlY3RvcnksIHJldHVybmluZ1xuKyAqIDAgaWYgc28sIDEgaWYgbm90IGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmdcbisgKiB0aGUgZGV0ZXJtaW5hdGlvbi5cbisgKi9cbitzdGF0aWMgaW50IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmFtZWlkYXRhICpuZClcbit7XG4rXHRpZiAodW5saWtlbHkoaW5vZGUtXHUwMDNlaV9vcGZsYWdzIFx1MDAyNiBJT1BfT1dORVJTSElQX09WRVJSSURFKSkge1xuK1x0XHRzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7XG4rXHRcdHN0cnVjdCBpbm9kZSAqZGlyO1xuK1x0XHRpbnQgcmV0O1xuK1xuK1x0XHRpZiAoaW5vZGUgIT0gbmQtXHUwMDNlaW5vZGUpIHtcbitcdFx0XHRkaXIgPSBuZC1cdTAwM2Vpbm9kZTtcbitcdFx0XHRyZXQgPSBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4rXHRcdH0gZWxzZSBpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpIHtcbitcdFx0XHRwYXJlbnQgPSBSRUFEX09OQ0UobmQtXHUwMDNlcGF0aC5kZW50cnkpO1xuK1x0XHRcdGRpciA9IFJFQURfT05DRShwYXJlbnQtXHUwMDNlZF9pbm9kZSk7XG4rXHRcdFx0aWYgKCFkaXIpXG4rXHRcdFx0XHRyZXR1cm4gLUVDSElMRDtcbitcdFx0XHRyZXQgPSBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cGFyZW50ID0gZGdldF9wYXJlbnQobmQtXHUwMDNlcGF0aC5kZW50cnkpO1xuK1x0XHRcdGRpciA9IHBhcmVudC1cdTAwM2VkX2lub2RlO1xuK1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbitcdFx0XHRkcHV0KHBhcmVudCk7XG4rXHRcdH1cbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdGlmICh2ZnN1aWRfdmFsaWQobmQtXHUwMDNlZGlyX3Zmc3VpZCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdmZzdWlkX2VxKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIG5kLVx1MDAzZWRpcl92ZnN1aWQpKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cbit9XG4rXG4rLypcbisgKiBEZXRlcm1pbmUgaWYgdHdvIGlub2RlcyBoYXZlIHRoZSBzYW1lIG93bmVyLCByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kXG4rICogYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gbWFraW5nIHRoZSBkZXRlcm1pbmF0aW9uLlxuKyAqL1xuK3N0YXRpYyBpbnQgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcilcbit7XG4rXHRpZiAodW5saWtlbHkoaW5vZGUtXHUwMDNlaV9vcGZsYWdzIFx1MDAyNiBJT1BfT1dORVJTSElQX09WRVJSSURFKSlcbitcdFx0cmV0dXJuIGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbitcdGlmICh2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSxcbitcdFx0ICAgICAgaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGRpcikpKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cbit9XG4rXG4gLyoqXG4gICogbWF5X2ZvbGxvd19saW5rIC0gQ2hlY2sgc3ltbGluayBmb2xsb3dpbmcgZm9yIHVuc2FmZSBzaXR1YXRpb25zXG4gICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxuQEAgLTEyNzEsMjcgKzEzMzcsMjggQEAgZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTtcbiAgKlxuICAqIFJldHVybnMgMCBpZiBmb2xsb3dpbmcgdGhlIHN5bWxpbmsgaXMgYWxsb3dlZCwgLXZlIG9uIGVycm9yLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbitzdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXA7XG4tXHR2ZnN1aWRfdCB2ZnN1aWQ7XG4rXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFzeXNjdGxfcHJvdGVjdGVkX3N5bWxpbmtzKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlkbWFwID0gbW50X2lkbWFwKG5kLVx1MDAzZXBhdGgubW50KTtcbi1cdHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cbi1cdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXG4tXHRcdHJldHVybiAwO1xuLVxuIFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IG5vdCBzdGlja3kgYW5kIHdvcmxkLXdyaXRhYmxlLiAqL1xuIFx0aWYgKChuZC1cdTAwM2VkaXJfbW9kZSBcdTAwMjYgKFNfSVNWVFh8U19JV09USCkpICE9IChTX0lTVlRYfFNfSVdPVEgpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdGlkbWFwID0gbW50X2lkbWFwKG5kLVx1MDAzZXBhdGgubW50KTtcbitcdC8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqL1xuK1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbitcbiBcdC8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBhbmQgbGluayBvd25lciBtYXRjaC4gKi9cbi1cdGlmICh2ZnN1aWRfdmFsaWQobmQtXHUwMDNlZGlyX3Zmc3VpZCkgXHUwMDI2XHUwMDI2IHZmc3VpZF9lcShuZC1cdTAwM2VkaXJfdmZzdWlkLCB2ZnN1aWQpKVxuLVx0XHRyZXR1cm4gMDtcbitcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0aWYgKG5kLVx1MDAzZWZsYWdzIFx1MDAyNiBMT09LVVBfUkNVKVxuIFx0XHRyZXR1cm4gLUVDSElMRDtcbkBAIC0xMzg5LDEyICsxNDU2LDEyIEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXG4gICpcbiAgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjpcbi0gKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkXG4tICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzXG4tICogICAtIHdlIGFyZSBpbiBhIHN0aWNreSBkaXJlY3Rvcnlcbi0gKiAgIC0gd2UgZG9uJ3Qgb3duIHRoZSBmaWxlXG4rICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZCxcbisgKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsXG4rICogICAtIHdlIGFyZSBpbiBhIHN0aWNreSBkaXJlY3RvcnksXG4rICogICAtIHRoZSBkaXJlY3RvcnkgaXMgd29ybGQgd3JpdGFibGUsXG4rICogICAtIHdlIGRvbid0IG93biB0aGUgZmlsZSBhbmRcbiAgKiAgIC0gdGhlIG93bmVyIG9mIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBvd24gdGhlIGZpbGVcbi0gKiAgIC0gdGhlIGRpcmVjdG9yeSBpcyB3b3JsZCB3cml0YWJsZVxuICAqIElmIHRoZSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIHNldCB0byAyXG4gICogdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGhhdmUgdG8gYmUgd29ybGQgd3JpdGFibGU6IGJlaW5nIGdyb3VwIHdyaXRhYmxlIHdpbGxcbiAgKiBiZSBlbm91Z2guXG5AQCAtMTQwNSwxMyArMTQ3Miw0NSBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXG4gICogT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGVcbiAgKiByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuXG4gICpcbisgKiBGb3IgYSBmaWxlc3lzdGVtIChlLmcuIGEgbmV0d29yayBmaWxlc3lzdGVtKSB0aGF0IGhhcyBhIHNlcGFyYXRlIElEIHNwYWNlXG4rICogYW5kIGhhcyBmb3JlaWduIElEcyAobWF5YmUgZXZlbiBub24taW50ZWdlciBJRHMpLCBpX3VpZCBjYW5ub3QgYmUgY29tcGFyZWRcbisgKiB0byBjdXJyZW50X2ZzdWlkKCkgYW5kIG1heSBub3QgYmUgZGlyZWN0bHkgY29tcGFyYWJsZSB0byBhbm90aGVyIGlfdWlkLlxuKyAqIEluc3RlYWQsIHRoZSBmaWxlc3lzdGVtIGlzIGFza2VkIHRvIHBlcmZvcm0gdGhlIGNvbXBhcmlzb25zLiAgV2l0aCBuZXR3b3JrXG4rICogZmlsZXN5c3RlbXMsIHRoZXJlIGFsc28gZXhpc3RzIHRoZSBwb3NzaWJpbGl0eSBvZiBkb2luZyBhbm9ueW1vdXNcbisgKiBvcGVyYXRpb25zIGFuZCBoYXZpbmcgYW5vbnltb3VzbHktb3duZWQgb2JqZWN0cy5cbisgKlxuKyAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6XG4rICpcbisgKlx0VVNFUlx0RElSXHRGSUxFXHRGSUxFXHRBTExPV0VEXG4rICpcdFx0T1dORVJcdE9XTkVSXHRTVEFURVxuKyAqXHQ9PT09PT09XHQ9PT09PT09XHQ9PT09PT09XHQ9PT09PT09XHQ9PT09PT09XG4rICpcdEFcdEFcdC1cdE5ld1x0WWVzXG4rICpcdEFcdEFcdEFcdEV4aXN0c1x0WWVzXG4rICpcdEFcdEFcdENcdEV4aXN0c1x0Tm9cbisgKlx0QVx0Qlx0LVx0TmV3XHRZZXNcbisgKlx0QVx0Qlx0QVx0RXhpc3RzXHRZZXMsIEZPPT1VXG4rICpcdEFcdEJcdEJcdEV4aXN0c1x0WWVzLCBGTz09RE9cbisgKlx0QVx0Qlx0Q1x0RXhpc3RzXHROb1xuKyAqXHRBXHRhbm9uWzFdXHQtXHROZXdcdFllc1xuKyAqXHRBXHRhbm9uWzFdXHRBXHRFeGlzdHNcdFllc1xuKyAqXHRBXHRhbm9uWzFdXHRDXHRFeGlzdHNcdE5vXG4rICpcdGFub25cdEFcdC1cdE5ld1x0WWVzXG4rICpcdGFub25cdEFcdEFcdEV4aXN0c1x0WWVzLCBGTz09RE9cbisgKlx0YW5vblx0YW5vblsxXVx0LVx0TmV3XHRZZXNcbisgKlx0YW5vblx0YW5vblsxXVx0LVx0RXhpc3RzXHROb1xuKyAqXHRhbm9uXHRBXHRBXHRFeGlzdHNcdFllcywgRk89PURPXG4rICpcdGFub25cdEFcdENcdEV4aXN0c1x0Tm9cbisgKlx0YW5vblx0QVx0YW5vblx0RXhpc3RzXHROb1xuKyAqXG4rICogWzFdIENhbiBhbm9ueW1vdXNseS1vd25lZCBkaXJzIGJlIHN0aWNreT9cbisgKlxuICAqIFJldHVybnMgMCBpZiB0aGUgb3BlbiBpcyBhbGxvd2VkLCAtdmUgb24gZXJyb3IuXG4gICovXG4gc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4tXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmNvbnN0IGlub2RlKVxuK1x0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHR1bW9kZV90IGRpcl9tb2RlID0gbmQtXHUwMDNlZGlyX21vZGU7XG4tXHR2ZnN1aWRfdCBkaXJfdmZzdWlkID0gbmQtXHUwMDNlZGlyX3Zmc3VpZCwgaV92ZnN1aWQ7XG4rXHRpbnQgcmV0O1xuIFxuIFx0aWYgKGxpa2VseSghKGRpcl9tb2RlIFx1MDAyNiBTX0lTVlRYKSkpXG4gXHRcdHJldHVybiAwO1xuQEAgLTE0MjIsMTMgKzE1MjEsMTMgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAoU19JU0ZJRk8oaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aV92ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVxuLVx0aWYgKHZmc3VpZF9lcShpX3Zmc3VpZCwgZGlyX3Zmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuK1x0cmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4gXG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV92ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXG4tXHRcdHJldHVybiAwO1xuK1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGlmIChsaWtlbHkoZGlyX21vZGUgXHUwMDI2IDAwMDIpKSB7XG4gXHRcdGF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULCBcInN0aWNreV9jcmVhdGVcIik7XG5AQCAtMzY0NSwxMiArMzc0NCwxNCBAQCBFWFBPUlRfU1lNQk9MKHVzZXJfcGF0aF9hdCk7XG4gaW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4tXHRrdWlkX3QgZnN1aWQgPSBjdXJyZW50X2ZzdWlkKCk7XG4rXHRpbnQgcmV0O1xuIFxuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGZzdWlkKSlcbi1cdFx0cmV0dXJuIDA7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGRpciksIGZzdWlkKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0gdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4gXHRyZXR1cm4gIWNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9GT1dORVIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKF9fY2hlY2tfc3RpY2t5KTtcbmRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5jIGIvZnMvcmVtYXBfcmFuZ2UuY1xuaW5kZXggMjZhZmJiYmZiMTBjMmUuLjllZWU5M2MyNzAwMTI1IDEwMDY0NFxuLS0tIGEvZnMvcmVtYXBfcmFuZ2UuY1xuKysrIGIvZnMvcmVtYXBfcmFuZ2UuY1xuQEAgLTQxMywyMCArNDEzLDIyIEBAIGxvZmZfdCB2ZnNfY2xvbmVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19pbixcbiBFWFBPUlRfU1lNQk9MKHZmc19jbG9uZV9maWxlX3JhbmdlKTtcbiBcbiAvKiBDaGVjayB3aGV0aGVyIHdlIGFyZSBhbGxvd2VkIHRvIGRlZHVwZSB0aGUgZGVzdGluYXRpb24gZmlsZSAqL1xuLXN0YXRpYyBib29sIG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbitzdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4rXHRpbnQgcmV0O1xuIFxuIFx0aWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbiBcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfV1JJVEUpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGN1cnJlbnRfZnN1aWQoKSkpXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbitcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4gXHRpZiAoIWlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBNQVlfV1JJVEUpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdHJldHVybiBmYWxzZTtcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gLUVQRVJNO1xuIH1cbiBcbiBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLFxuQEAgLTQ1OSw4ICs0NjEsOCBAQCBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IC1FUEVSTTtcbi1cdGlmICghbWF5X2RlZHVwZV9maWxlKGRzdF9maWxlKSlcbitcdHJldCA9IG1heV9kZWR1cGVfZmlsZShkc3RfZmlsZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF9kcm9wX3dyaXRlO1xuIFxuIFx0cmV0ID0gLUVYREVWO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxuaW5kZXggNTBjZTczMWEyYjc4ZjEuLjgwMTNjMTNhMzUzZDY3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbkBAIC02MjgsNiArNjI4LDcgQEAgaXNfdW5jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKmFjbClcbiAjZGVmaW5lIElPUF9DQUNIRURfTElOS1x0XHQweDAwNDBcbiAjZGVmaW5lIElPUF9GQVNUUEVSTV9NQVlfRVhFQ1x0MHgwMDgwXG4gI2RlZmluZSBJT1BfRkxDVFhcdFx0MHgwMTAwXG4rI2RlZmluZSBJT1BfT1dORVJTSElQX09WRVJSSURFXHQweDAyMDBcdC8qIFVzZSAtXHUwMDNlaXNfb3duZWRfYnlfbWUoKSBhbmQgLVx1MDAzZWhhdmVfc2FtZV9vd25lcigpICovXG4gXG4gLypcbiAgKiBJbm9kZSBzdGF0ZSBiaXRzLiAgUHJvdGVjdGVkIGJ5IGlub2RlLVx1MDAzZWlfbG9ja1xuQEAgLTE3NTUsOCArMTc1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX3dyaXRlX25vdF9zdGFydGVkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIHNiX3dyaXRlX25vdF9zdGFydGVkKGZpbGVfaW5vZGUoZmlsZSktXHUwMDNlaV9zYik7XG4gfVxuIFxuLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSk7XG4rYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKlxuICAqIFZGUyBoZWxwZXIgZnVuY3Rpb25zLi5cbkBAIC0yMDM2LDYgKzIwMzYsOSBAQCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB7XG4gXHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdGludCAoKmZpbGVhdHRyX2dldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuIFx0c3RydWN0IG9mZnNldF9jdHggKigqZ2V0X29mZnNldF9jdHgpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuK1x0aW50ICgqaXNfb3duZWRfYnlfbWUpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlMik7XG4gfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7XG4gXG4gLyogRGlkIHRoZSBkcml2ZXIgcHJvdmlkZSB2YWxpZCBtbWFwIGhvb2sgY29uZmlndXJhdGlvbj8gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE2OjMxOjEyLjI2MjA2Nzc2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MTU5ODE2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggSW50cm9kdWNpbmcgTmV3IFZGUyBJbm9kZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgc29tZSBuZXcgaW5vZGUgb3BlcmF0aW9uczogYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAuIFRoZXNlIGFyZSBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZXkncmUgZGVzaWduZWQgdG8gKm92ZXJyaWRlKiB0aGUgc3RhbmRhcmQgVkZTIG93bmVyc2hpcCBjaGVja3MsIHdoaWNoIGN1cnJlbnRseSBqdXN0IGNvbXBhcmUgdGhlIGBpX3VpZGAgdG8gYGN1cnJlbnRfZnN1aWQoKWAuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgY29yZSBWRlMgY29tcG9uZW50czogYGZzL25hbWVpLmNgLCBgZnMvYXR0ci5jYCwgYGZzL2NvcmVkdW1wLmNgLCBgZnMvaW5vZGUuY2AsIGBmcy9sb2Nrcy5jYCwgYW5kIGBmcy9yZW1hcF9yYW5nZS5jYC4gSXQncyBhbHNvIGltcGxlbWVudGluZyB0aGVzZSBmb3IgdGhlIEFGUyBmaWxlc3lzdGVtIGluIGBmcy9hZnMvYC5cblxuVGhpcyBjbGVhcmx5IHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBib3RoIHRoZSBWRlMgbGF5ZXIgYW5kIHRoZSBBRlMgZmlsZXN5c3RlbSwgYW5kIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMuIEdpdmVuIHRoZSBpbXBhY3Qgb24gY29yZSBmdW5jdGlvbmFsaXR5LCBgV29ydGhGdXp6aW5nPXRydWVgIGlzIGEgcmVhc29uYWJsZSBhc3Nlc3NtZW50LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhpcyBmdXJ0aGVyIHRvIHNlZSB3aGVyZSB0aGUgcmVhbCBjb21wbGV4aXRpZXMgbGllLlxuXG5JJ20gbWFraW5nIGEgbWVudGFsIGxpc3Qgb2YgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZmZlY3RlZCBhbmQgd2hlcmUgdGhleSdyZSBsb2NhdGVkLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2U6XG5cbiogICBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYFxuKiAgIGB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXJgXG4qICAgYHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyYFxuKiAgIGBhZnNfaXNfb3duZWRfYnlfbWVgXG4qICAgYGFmc19oYXZlX3NhbWVfb3duZXJgXG4qICAgYGNob3duX29rYFxuKiAgIGBjaGdycF9va2BcbiogICBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgXG4qICAgYG1heV9mb2xsb3dfbGlua2BcbiogICBgX19jaGVja19zdGlja3lgXG4qICAgYG1heV9kZWR1cGVfZmlsZWBcblxuT2theSwgbm93IGxldCdzIHNlZSBob3cgdGhlc2UgYXJlIGV4cG9zZWQuIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgIGlzIGluIGBmcy9uYW1laS5jYCBhbmQgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgaW4gYGZzL2ludGVybmFsLmhgLiBUaGUgb3RoZXIgdHdvIFZGUyBmdW5jdGlvbnMsIGB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXJgIGFuZCBgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXJgIGFyZSBzdGF0aWMgaW5zaWRlIGBmcy9uYW1laS5jYC4gQm90aCBBRlMgZnVuY3Rpb25zIGFyZSBpbiBgZnMvYWZzL3NlY3VyaXR5LmNgLlxuXG5JIGFsc28gc2VlIHRoYXQgdG8gZWZmZWN0aXZlbHkgdGVzdCB0aGUgQUZTIGludGVncmF0aW9uLCBJJ2xsIG5lZWQgYENPTkZJR19BRlNfRlNgIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuXG5cblJpZ2h0LCB0aW1lIHRvIG1vdmUgYmV5b25kIHRoaXMgY3Vyc29yeSBpbnNwZWN0aW9uIGFuZCBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIG5hbWVzIGFyZSBjb3JyZWN0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgxNSwiT3V0cHV0VG9rZW5zIjo3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE2OjMxOjIwLjk3ODA1MjM0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjYxNjE5MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIih2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWV8dmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyfHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyfGFmc19pc19vd25lZF9ieV9tZXxhZnNfaGF2ZV9zYW1lX293bmVyKVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvZGlyLmM9NjA9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvYWZzL2Rpci5jLTcxLVxcdC5zZXRhdHRyXFx0PSBhZnNfc2V0YXR0cixcXG5mcy9hZnMvZGlyLmM6NzI6XFx0LmlzX293bmVkX2J5X21lXFx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXFxuZnMvYWZzL2Rpci5jOjczOlxcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxcbmZzL2Fmcy9kaXIuYy03NC19O1xcbi0tXFxuZnMvYWZzL2ZpbGUuYz00OD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvYWZzL2ZpbGUuYy01MS1cXHQucGVybWlzc2lvblxcdD0gYWZzX3Blcm1pc3Npb24sXFxuZnMvYWZzL2ZpbGUuYzo1MjpcXHQuaXNfb3duZWRfYnlfbWVcXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcXG5mcy9hZnMvZmlsZS5jOjUzOlxcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxcbmZzL2Fmcy9maWxlLmMtNTQtfTtcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTE1MzI9ZXh0ZXJuIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjE1MzM6aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvYWZzL2ludGVybmFsLmg6MTUzNDppbnQgYWZzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsXFxuZnMvYWZzL2ludGVybmFsLmgtMTUzNS1cXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlMik7XFxuLS1cXG5mcy9hZnMvc2VjdXJpdHkuYz00MzE9aW50IGFmc19wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvYWZzL3NlY3VyaXR5LmMtNTE4LSAqL1xcbmZzL2Fmcy9zZWN1cml0eS5jOjUxOTppbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2Fmcy9zZWN1cml0eS5jLTUyMC17XFxuLS1cXG5mcy9hZnMvc2VjdXJpdHkuYy01NDktICovXFxuZnMvYWZzL3NlY3VyaXR5LmM6NTUwOmludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcXG5mcy9hZnMvc2VjdXJpdHkuYy01NTEtXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZTIpXFxuLS1cXG5mcy9hdHRyLmM9OTU9c3RhdGljIGludCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2F0dHIuYy0xMDAtXFxuZnMvYXR0ci5jOjEwMTpcXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcXG5mcy9hdHRyLmMtMTAyLVxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4tLVxcbmZzL2F0dHIuYz0xMjQ9c3RhdGljIGludCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2F0dHIuYy0xMjktXFxuZnMvYXR0ci5jOjEzMDpcXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcXG5mcy9hdHRyLmMtMTMxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvY29yZWR1bXAuYz04Nzg9c3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcXG4tLVxcbmZzL2NvcmVkdW1wLmMtOTU2LVxcdGlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XFxuZnMvY29yZWR1bXAuYzo5NTc6XFx0aWYgKHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpICE9IDApIHtcXG5mcy9jb3JlZHVtcC5jLTk1OC1cXHRcXHRjb3JlZHVtcF9yZXBvcnRfZmFpbHVyZShcXFwiQ29yZSBkdW1wIHRvICVzIGFib3J0ZWQ6IGNhbm5vdCBwcmVzZXJ2ZSBmaWxlIG93bmVyXFxcIiwgY24tXFx1MDAzZWNvcmVuYW1lKTtcXG4tLVxcbmZzL2lub2RlLmM9Mjc1Mz1ib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9pbm9kZS5jLTI3NTgtXFxuZnMvaW5vZGUuYzoyNzU5OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL2lub2RlLmMtMjc2MC1cXHRpZiAocmV0ID09IDApXFxuLS1cXG5mcy9pbnRlcm5hbC5oPTQ5PWV4dGVybiBpbnQgZmluaXNoX2NsZWFuX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcXG4tLVxcbmZzL2ludGVybmFsLmgtNTMtICovXFxuZnMvaW50ZXJuYWwuaDo1NDppbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9pbnRlcm5hbC5oLTU1LWV4dGVybiBpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXFxuLS1cXG5mcy9sb2Nrcy5jPTIxMzc9dmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcXG4tLVxcbmZzL2xvY2tzLmMtMjE0MS1cXG5mcy9sb2Nrcy5jOjIxNDI6XFx0ZXJyb3IgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoZmlsZV9tbnRfaWRtYXAoZmlscCksIGlub2RlKTtcXG5mcy9sb2Nrcy5jLTIxNDMtXFx0aWYgKGVycm9yIFxcdTAwM2MgMClcXG4tLVxcbmZzL25hbWVpLmM9MTI1ND1mc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpO1xcbi0tXFxuZnMvbmFtZWkuYy0xMjYyLSAqL1xcbmZzL25hbWVpLmM6MTI2MzppbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL25hbWVpLmMtMTI2NC17XFxuLS1cXG5mcy9uYW1laS5jLTEyNzYtICovXFxuZnMvbmFtZWkuYzoxMjc3OnN0YXRpYyBpbnQgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL25hbWVpLmMtMTI3OC1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuYW1laWRhdGEgKm5kKVxcbi0tXFxuZnMvbmFtZWkuYy0xMzEyLSAqL1xcbmZzL25hbWVpLmM6MTMxMzpzdGF0aWMgaW50IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL25hbWVpLmMtMTMxNC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcilcXG4tLVxcbmZzL25hbWVpLmM9MTM0MD1zdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9uYW1laS5jLTEzNTMtXFx0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXFxuZnMvbmFtZWkuYzoxMzU0OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMTM1NS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jLTEzNTgtXFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IGFuZCBsaW5rIG93bmVyIG1hdGNoLiAqL1xcbmZzL25hbWVpLmM6MTM1OTpcXHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XFxuZnMvbmFtZWkuYy0xMzYwLVxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4tLVxcbmZzL25hbWVpLmM9MTUwOT1zdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG4tLVxcbmZzL25hbWVpLmMtMTUyMy1cXG5mcy9uYW1laS5jOjE1MjQ6XFx0cmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpO1xcbmZzL25hbWVpLmMtMTUyNS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jLTE1MjctXFxuZnMvbmFtZWkuYzoxNTI4OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMTUyOS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jPTM3NDQ9aW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL25hbWVpLmMtMzc0OC1cXG5mcy9uYW1laS5jOjM3NDk6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvbmFtZWkuYy0zNzUwLVxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG5mcy9uYW1laS5jLTM3NTEtXFx0XFx0cmV0dXJuIHJldDtcXG5mcy9uYW1laS5jOjM3NTI6XFx0cmV0ID0gdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xcbmZzL25hbWVpLmMtMzc1My1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9yZW1hcF9yYW5nZS5jPTQxNj1zdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNDI1LVxcdFxcdHJldHVybiAwO1xcbmZzL3JlbWFwX3JhbmdlLmM6NDI2OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL3JlbWFwX3JhbmdlLmMtNDI3LVxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTY6MzE6MjUuNjM5Njc3Njg2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NzQwMjA5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgT3duZXJzaGlwIGFuZCBBY2Nlc3MgQ29udHJvbCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiByaWdodCBub3cgYXJlIHRoZXNlOiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAsIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgLCBhbmQgYG1heV9mb2xsb3dfbGlua2AuIFNlZW1zIGxpa2UgYSBwcmV0dHkgY29tcHJlaGVuc2l2ZSBsaXN0IGZvciBkZWFsaW5nIHdpdGggZmlsZSBvd25lcnNoaXAsIGdyb3VwIG1lbWJlcnNoaXAsIGFuZCBwZXJtaXNzaW9ucyBjaGVja3MsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHJhbmdlIG9mIFZGUyBhbmQgQUZTIGltcGxlbWVudGF0aW9ucyBpbiBwbGF5IGhlcmUuIEkgd2FudCB0byBjaGVjayBgQ09ORklHX0FGU19GU2AgaXMgdGhlIGNvcnJlY3QgY29uZmlnIHRvIGFkZHJlc3MgdGhlIGFyY2hpdGVjdHVyZSwgYnV0IG1vcmUgZ2VuZXJhbGx5IHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyB1c2VyIGFjY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNDIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTY6MzE6MjkuOTM3MDgxOTg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDE0MTI5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFGU19GU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2Fmcy9LY29uZmlnOjI6Y29uZmlnIEFGU19GU1xcbmZzL2Fmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFuZHJldyBGaWxlIFN5c3RlbSBzdXBwb3J0IChBRlMpXFxcIlxcbi0tXFxuZnMvYWZzL0tjb25maWc9MTc9Y29uZmlnIEFGU19ERUJVR1xcbi0tXFxuZnMvYWZzL0tjb25maWctMjYtXFxuZnMvYWZzL0tjb25maWc6Mjc6Y29uZmlnIEFGU19GU0NBQ0hFXFxuZnMvYWZzL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiUHJvdmlkZSBBRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTY6MzE6MzIuMzM4NTAwNzEyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5NjA0ODYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgT3duZXJzaGlwIGFuZCBQZXJtaXNzaW9ucyBMb2dpYyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgZW5hYmxpbmcgYEFGU19GU2AgaXMgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMuIE5vdywgYmVmb3JlIEkgbW92ZSBvbiwgSSdkIGxpa2UgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIG9ic2N1cmUgY29uZmlndXJhdGlvbnMgbHVya2luZyBhcm91bmQgdGhhdCBJJ3ZlIG1pc3NlZC4gSSBrbm93IHRoZSBjaGFuZ2VzIHByaW1hcmlseSByZWxhdGUgdG8gdGhlIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykgYW5kIHRoZSBBRlMgbGF5ZXJzLiBUaGUgVkZTIGlzIGFsd2F5cyBlbmFibGVkLCBzbyBBRlMgaXMgdGhlIGtleSwgYW5kIHRoYXQgcmVsaWVzIG9uIGBBRlNfRlNgLiBHb3QgaXQuXG5cbk5vdywgbGV0J3MgZ2V0IGJhY2sgdG8gcmVmaW5pbmcgdGhpcyBgRm9jdXNTeW1ib2xzYCBsaXN0LiBJIG5lZWQgdG8gbWFrZSB0aGlzIGFzIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSBhcyBwb3NzaWJsZS4gU28sIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aGlzIGxpc3Q6XG4qICAgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWBcbiogICBgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyYFxuKiAgIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmBcbiogICBgYWZzX2lzX293bmVkX2J5X21lYFxuKiAgIGBhZnNfaGF2ZV9zYW1lX293bmVyYFxuKiAgIGBjaG93bl9va2BcbiogICBgY2hncnBfb2tgXG4qICAgYG1heV9jcmVhdGVfaW5fc3RpY2t5YFxuKiAgIGBfX2NoZWNrX3N0aWNreWBcbiogICBgbWF5X2RlZHVwZV9maWxlYFxuKiAgIGBtYXlfZm9sbG93X2xpbmtgXG5cbkhhbmcgb24gYSBzZWNvbmTigKYgaXNuJ3QgYG1heV9mb2xsb3dfbGlua2AgaW1wbGVtZW50ZWQgaW5saW5lPyBZZXMsIGl0IGlzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGZzL25hbWVpLmNgIHRvIHNlZSBob3cgaXQncyBoYW5kbGVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY3MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNjozMTozNy4wMzQ1NTI1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTAzODE2NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1heV9mb2xsb3dfbGlua1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtbG9va3VwLnJzdD0xMTMwPWNvbXBvbmVudCBvZiB0aGUgbG9va3VwLCBzbyB3ZSB3aWxsIGNoZWNrIHVzZXJzcGFjZSBmbGFnIGBgTE9PS1VQX0ZPTExPV2BgIHRvXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC5yc3Q6MTEzMTpkZWNpZGUgd2hldGhlciBmb2xsb3cgaXQgd2hlbiBpdCBpcyBhIHN5bWxpbmsgYW5kIGNhbGwgYGBtYXlfZm9sbG93X2xpbmsoKWBgIHRvXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC5yc3QtMTEzMi1jaGVjayBpZiB3ZSBoYXZlIHByaXZpbGVnZSB0byBmb2xsb3cgaXQuXFxuLS1cXG5mcy9uYW1laS5jPTEzMTM9c3RhdGljIGludCB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL25hbWVpLmMtMTMyNC0vKipcXG5mcy9uYW1laS5jOjEzMjU6ICogbWF5X2ZvbGxvd19saW5rIC0gQ2hlY2sgc3ltbGluayBmb2xsb3dpbmcgZm9yIHVuc2FmZSBzaXR1YXRpb25zXFxuZnMvbmFtZWkuYy0xMzI2LSAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcXG4tLVxcbmZzL25hbWVpLmMtMTMzOS0gKi9cXG5mcy9uYW1laS5jOjEzNDA6c3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL25hbWVpLmMtMTM0MS17XFxuLS1cXG5mcy9uYW1laS5jPTIxMDY9c3RhdGljIG5vaW5saW5lIGNvbnN0IGNoYXIgKnBpY2tfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IHBhdGggKmxpbmssXFxuLS1cXG5mcy9uYW1laS5jLTIxMzMtXFx0aWYgKGZsYWdzIFxcdTAwMjYgV0FMS19UUkFJTElORykge1xcbmZzL25hbWVpLmM6MjEzNDpcXHRcXHRlcnJvciA9IG1heV9mb2xsb3dfbGluayhuZCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMjEzNS1cXHRcXHRpZiAodW5saWtlbHkoZXJyb3IpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNjozMTozOS4xMzgzNzUyMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTkzNjU0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZpbGUgU3lzdGVtIFBlcm1pc3Npb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGVpciBzY29wZXMgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSBjb2RlLiBJIHNlZSB0aGF0IGBtYXlfZm9sbG93X2xpbmtgIGlzICppbmxpbmUqLCB3aGljaCBtZWFucyBpdCdzIHByb2JhYmx5IG5vdCBhIGdvb2QgY2FuZGlkYXRlIHRvIGZvY3VzIG9uIGRpcmVjdGx5LiBJdCdzIGludGVncmF0ZWQgaW50byBvdGhlciBmdW5jdGlvbnMuIE9uIHRoZSBvdGhlciBoYW5kLCBgY2hvd25fb2tgIGFuZCBgY2hncnBfb2tgIGFyZSBjbGVhcmx5IGRlZmluZWQgYXMgKnN0YXRpYyogdmFyaWFibGVzIHdpdGhpbiBgZnMvYXR0ci5jYC4gVGhhdCBnaXZlcyBtZSBhIGRlZmluaXRlIHBsYWNlIHRvIHN0YXJ0IGlmIEkgd2FudCB0byBleGFtaW5lIHRob3NlIGFjY2VzcyBjb250cm9sIGNoZWNrcy4gU2ltaWxhcmx5LCBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgIGlzIHN0YXRpYyBpbiBgZnMvbmFtZWkuY2AuIEl0IGlzIHVzZWZ1bCB0byBrbm93IHdoZXJlIHRoZXNlIGZsYWdzIGxpdmUuXG5cbk5vdywgYF9fY2hlY2tfc3RpY2t5YCBpcyAqZXhwb3J0ZWQqIGZyb20gYGZzL25hbWVpLmNgLiBUaGF0IG1lYW5zIGl0J3MgYXZhaWxhYmxlIGZvciB1c2Ugb3V0c2lkZSBvZiB0aGF0IGZpbGUuIE9rYXksIGdvb2QgdG8ga25vdy4gSXQgaXMgZ29vZCBpbmZvcm1hdGlvbiwgYnV0IG5vdCBpbW1lZGlhdGVseSB1c2VmdWwuXG5cbkZpbmFsbHksIGBtYXlfZGVkdXBlX2ZpbGVgIGlzIHN0YXRpYyBpbiBgZnMvcmVtYXBfcmFuZ2UuY2AuIFNvIEkga25vdyB3aGVyZSAqdGhhdCogZnVuY3Rpb24gcmVzaWRlcy5cblxuQWxyaWdodCwgbm93IGxldCdzIGNpcmNsZSBiYWNrIHRvIGBjaG93bl9va2AuLi4gbGV0J3MgY2hlY2sgaXQncyBkZWZpbml0aW9uIHRvIHNlZSBpZiBpdCBpcyBpbmxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjMyLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE2OjMxOjQzLjA1Nzc0NTc1NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4NDkwNTA0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaG93bl9va1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hdHRyLmM9ODE9RVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpO1xcbi0tXFxuZnMvYXR0ci5jLTgzLS8qKlxcbmZzL2F0dHIuYzo4NDogKiBjaG93bl9vayAtIHZlcmlmeSBwZXJtaXNzaW9ucyB0byBjaG93biBpbm9kZVxcbmZzL2F0dHIuYy04NS0gKiBAaWRtYXA6XFx0aWRtYXAgb2YgdGhlIG1vdW50IEBpbm9kZSB3YXMgZm91bmQgZnJvbVxcbi0tXFxuZnMvYXR0ci5jLTk0LSAqL1xcbmZzL2F0dHIuYzo5NTpzdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL2F0dHIuYy05Ni1cXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxcbi0tXFxuZnMvYXR0ci5jPTE2OD1pbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9hdHRyLmMtMjAwLVxcdGlmIChpYV92YWxpZCBcXHUwMDI2IEFUVFJfVUlEKSB7XFxuZnMvYXR0ci5jOjIwMTpcXHRcXHRyZXQgPSBjaG93bl9vayhpZG1hcCwgaW5vZGUsIGF0dHItXFx1MDAzZWlhX3Zmc3VpZCk7XFxuZnMvYXR0ci5jLTIwMi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTY6MzE6NDUuNTQyNjU4ODUxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1OTIzOTgxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipBbmFseXppbmcgdGhlIFNpdHVhdGlvbioqXG5cbkFscmlnaHQsIHNvIGl0J3Mgbm90IHN0cmFpZ2h0Zm9yd2FyZCwgbm90IGFuIFwiaW5saW5lXCIgc29sdXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlIG5lZWQgdG8gZGlnIGEgYml0IGRlZXBlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGVsZW1lbnQuIExldCdzIHNlZS4uLiB0aGUgYGNoZ3JwX29rYCBzZXR0aW5nLiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEl0IGxpa2VseSByZWxhdGVzIHRvIGhvdyB3ZSBjYW4gcHJvY2VlZC4gVGltZSB0byBsb29rIGludG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzE0LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTY6MzE6NDguMTM1MDYxMTM5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI3MDIwMTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZ3JwX29rXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2F0dHIuYz05NT1zdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYXR0ci5jLTExMi0vKipcXG5mcy9hdHRyLmM6MTEzOiAqIGNoZ3JwX29rIC0gdmVyaWZ5IHBlcm1pc3Npb25zIHRvIGNoZ3JwIGlub2RlXFxuZnMvYXR0ci5jLTExNC0gKiBAaWRtYXA6XFx0aWRtYXAgb2YgdGhlIG1vdW50IEBpbm9kZSB3YXMgZm91bmQgZnJvbVxcbi0tXFxuZnMvYXR0ci5jLTEyMy0gKi9cXG5mcy9hdHRyLmM6MTI0OnN0YXRpYyBpbnQgY2hncnBfb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvYXR0ci5jLTEyNS1cXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxcbi0tXFxuZnMvYXR0ci5jPTE2OD1pbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9hdHRyLmMtMjA3LVxcdGlmIChpYV92YWxpZCBcXHUwMDI2IEFUVFJfR0lEKSB7XFxuZnMvYXR0ci5jOjIwODpcXHRcXHRyZXQgPSBjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItXFx1MDAzZWlhX3Zmc2dpZCk7XFxuZnMvYXR0ci5jLTIwOS1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTY6MzE6NTAuNDYyMTA2MTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4NDM1MzY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTmF2aWdhdGluZyB0aGUgYG1heV9jcmVhdGVfaW5fc3RpY2t5YCBMb2dpYyoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIGluY29ycmVjdCDigJMgaXQncyBub3QgYW4gaW5saW5lIHNjZW5hcmlvLiBUaGF0J3MgZ29vZCB0byBrbm93LCBuYXJyb3dzIGRvd24gdGhlIHBvc3NpYmxlIGNhdXNlcy4gTGV0J3MgZGlnIGRlZXBlci4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBtYXlfY3JlYXRlX2luX3N0aWNreWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgaXRzIGNvbmRpdGlvbnMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaXRzIGltcGxlbWVudGF0aW9uIHRvIHNlZSBpZiBpdCdzIG9wZXJhdGluZyBhcyBleHBlY3RlZCBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgaXQgY29udGFpbnMgYW55IGZsYXdzLiBUaGlzIGlzIHdoZXJlIHRoZSByb290IGNhdXNlIHByb2JhYmx5IGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzM5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTY6MzE6NTQuMzQ2NDYyMDI3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc2MTE5Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1heV9jcmVhdGVfaW5fc3RpY2t5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25hbWVpLmM9MTQyNz1pbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXFxuLS1cXG5mcy9uYW1laS5jLTE0NTAtLyoqXFxuZnMvbmFtZWkuYzoxNDUxOiAqIG1heV9jcmVhdGVfaW5fc3RpY2t5IC0gQ2hlY2sgd2hldGhlciBhbiBPX0NSRUFUIG9wZW4gaW4gYSBzdGlja3kgZGlyZWN0b3J5XFxuZnMvbmFtZWkuYy0xNDUyLSAqXFx0XFx0XFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHlcXG4tLVxcbmZzL25hbWVpLmMtMTUwOC0gKi9cXG5mcy9uYW1laS5jOjE1MDk6c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuZnMvbmFtZWkuYy0xNTEwLVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9uYW1laS5jPTQ3NTM9c3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbi0tXFxuZnMvbmFtZWkuYy00Nzc0LVxcdFxcdFxcdHJldHVybiAtRUlTRElSO1xcbmZzL25hbWVpLmM6NDc3NTpcXHRcXHRlcnJvciA9IG1heV9jcmVhdGVfaW5fc3RpY2t5KGlkbWFwLCBuZCxcXG5mcy9uYW1laS5jLTQ3NzYtXFx0XFx0XFx0XFx0XFx0ICAgICBkX2JhY2tpbmdfaW5vZGUobmQtXFx1MDAzZXBhdGguZGVudHJ5KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE2OjMxOjU2LjgyMjU4OTc1NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQyMTYxMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIHByb2Zlc3Npb25hbCBzdGFuZHBvaW50OlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBQcm9ibGVtOiBBIFF1aWNrIERpYWdub3N0aWMqKlxuXG5IbW0sIHRoaXMgaXNuJ3QgYW4gaW4tbGluZSBzaXR1YXRpb24uIFRoYXQncyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gYW5kIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIGBtYXlfZGVkdXBlX2ZpbGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIGxvZ2ljIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcuIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gdGhhdCBmdW5jdGlvbiBhcyBhIGtleSBlbGVtZW50IHRvIHVuZGVyc3RhbmRpbmcgd2hhdCdzIG9mZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMzIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNjozMjowMC4yNjQ3NTQ0MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3ODc5MDg0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXlfZGVkdXBlX2ZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcmVtYXBfcmFuZ2UuYz00MTM9RVhQT1JUX1NZTUJPTCh2ZnNfY2xvbmVfZmlsZV9yYW5nZSk7XFxuLS1cXG5mcy9yZW1hcF9yYW5nZS5jLTQxNS0vKiBDaGVjayB3aGV0aGVyIHdlIGFyZSBhbGxvd2VkIHRvIGRlZHVwZSB0aGUgZGVzdGluYXRpb24gZmlsZSAqL1xcbmZzL3JlbWFwX3JhbmdlLmM6NDE2OnN0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbmZzL3JlbWFwX3JhbmdlLmMtNDE3LXtcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDM0PWxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXFxuLS1cXG5mcy9yZW1hcF9yYW5nZS5jLTQ1Ni1cXHQgKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciByZW1hcF92ZXJpZnlfYXJlYSgpIGJlY2F1c2Ugb2ZcXG5mcy9yZW1hcF9yYW5nZS5jOjQ1NzpcXHQgKiBzYl9zdGFydF93cml0ZSgpIGFuZCBiZWZvcmUgbWF5X2RlZHVwZV9maWxlKCkgYmVjYXVzZSB0aGUgbW91bnQnc1xcbmZzL3JlbWFwX3JhbmdlLmMtNDU4LVxcdCAqIE1BWV9XUklURSBuZWVkIHRvIGJlIGNoZWNrZWQgd2l0aCBtbnRfZ2V0X3dyaXRlX2FjY2Vzc19maWxlKCkgaGVsZC5cXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNDYzLVxcbmZzL3JlbWFwX3JhbmdlLmM6NDY0OlxcdHJldCA9IG1heV9kZWR1cGVfZmlsZShkc3RfZmlsZSk7XFxuZnMvcmVtYXBfcmFuZ2UuYy00NjUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE2OjMyOjAyLjY0MzU1MDI1N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTcyODc3NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIE93bmVyc2hpcCBhbmQgQ29udGV4dCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzbid0IGNvbWluZyB0aHJvdWdoIGRpcmVjdGx5IGluIHRoZSBpbmxpbmUgZWxlbWVudHMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBvd25lcnNoaXAgaW5mb3JtYXRpb24gaXMgaGVsZC4gTGV0J3Mgc2VlLi4uSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHdoZXRoZXIgdGhpcyBpcyBhIG1hdHRlciBvZiBwb3NzZXNzaW9uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MDQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNjozMjowNS42MTY0MzE1ODJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTAzNTU0MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX2lub2RlX2lzX293bmVkX2J5X21lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2F0dHIuYz05NT1zdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYXR0ci5jLTEwMC1cXG5mcy9hdHRyLmM6MTAxOlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL2F0dHIuYy0xMDItXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbi0tXFxuZnMvYXR0ci5jPTEyND1zdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYXR0ci5jLTEyOS1cXG5mcy9hdHRyLmM6MTMwOlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL2F0dHIuYy0xMzEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5mcy9jb3JlZHVtcC5jPTg3OD1zdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxcbi0tXFxuZnMvY29yZWR1bXAuYy05NTYtXFx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcXG5mcy9jb3JlZHVtcC5jOjk1NzpcXHRpZiAodmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSkgIT0gMCkge1xcbmZzL2NvcmVkdW1wLmMtOTU4LVxcdFxcdGNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKFxcXCJDb3JlIGR1bXAgdG8gJXMgYWJvcnRlZDogY2Fubm90IHByZXNlcnZlIGZpbGUgb3duZXJcXFwiLCBjbi1cXHUwMDNlY29yZW5hbWUpO1xcbi0tXFxuZnMvaW5vZGUuYz0yNzUzPWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lub2RlLmMtMjc1OC1cXG5mcy9pbm9kZS5jOjI3NTk6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvaW5vZGUuYy0yNzYwLVxcdGlmIChyZXQgPT0gMClcXG4tLVxcbmZzL2ludGVybmFsLmg9NDk9ZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbi0tXFxuZnMvaW50ZXJuYWwuaC01My0gKi9cXG5mcy9pbnRlcm5hbC5oOjU0OmludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2ludGVybmFsLmgtNTUtZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcXG4tLVxcbmZzL2xvY2tzLmM9MjEzNz12ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KVxcbi0tXFxuZnMvbG9ja3MuYy0yMTQxLVxcbmZzL2xvY2tzLmM6MjE0MjpcXHRlcnJvciA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpO1xcbmZzL2xvY2tzLmMtMjE0My1cXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbi0tXFxuZnMvbmFtZWkuYz0xMjU0PWZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XFxuLS1cXG5mcy9uYW1laS5jLTEyNjItICovXFxuZnMvbmFtZWkuYzoxMjYzOmludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvbmFtZWkuYy0xMjY0LXtcXG4tLVxcbmZzL25hbWVpLmM9MTM0MD1zdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9uYW1laS5jLTEzNTMtXFx0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXFxuZnMvbmFtZWkuYzoxMzU0OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMTM1NS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jPTE1MDk9c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLS1cXG5mcy9uYW1laS5jLTE1MjctXFxuZnMvbmFtZWkuYzoxNTI4OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMTUyOS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jPTM3NDQ9aW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL25hbWVpLmMtMzc0OC1cXG5mcy9uYW1laS5jOjM3NDk6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvbmFtZWkuYy0zNzUwLVxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDE2PXN0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvcmVtYXBfcmFuZ2UuYy00MjUtXFx0XFx0cmV0dXJuIDA7XFxuZnMvcmVtYXBfcmFuZ2UuYzo0MjY6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvcmVtYXBfcmFuZ2UuYy00MjctXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNjozMjowOC4yMjY3OTM4MDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU4NTM2NDE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE93bmVyc2hpcCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCB0aGVzZSBvd25lcnNoaXAgY2hlY2tzIGFyZSBjb3JlIHRvIHRoZSBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGRlZmluZWQgd2l0aGluIGBmcy9pbnRlcm5hbC5oYCBhbmQgaW1wbGVtZW50ZWQgaW4gYGZzL25hbWVpLmNgLiBTbyB3ZSdyZSB0YWxraW5nIGFib3V0IGEgZmV3IGtleSBmdW5jdGlvbnM6IGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyYCwgYHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyYCwgYWxvbmcgd2l0aCBzb21lIG90aGVycyBsaWtlIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGFuZCBzb21lIHBlcm1pc3Npb24tcmVsYXRlZCBjaGVja3M6IGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGFuZCBgbWF5X2RlZHVwZV9maWxlYC5cblxuVGhlIGZhY3QgdGhhdCB0aGlzIHBhdGNoIHRvdWNoZXMgYGZzL2Fmcy9gIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoYXQgYEFGU19GU2AgaXMgaW1wbGljYXRlZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB3ZSBzaG91bGQga2VlcCBhbiBleWUgb24/IEJ1dCB0aGUgY29yZSBvZiB0aGUgbWF0dGVyIHNlZW1zIHRvIGJlIGluIFZGUy5cblxuQWxyaWdodCwgdGhlIHBhdGNoIGFkZHMgdHdvICpuZXcqIGlub2RlIG9wZXJhdGlvbnM6IGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgLiBUaGVzZSBhcmUgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBBRlMgc3Vic3lzdGVtIGFuZCB0aGVuLCBjcnVjaWFsbHksIG1vZGlmaWVkIHRvIGJlIHVzZWQgKndpdGhpbiogdGhlIFZGUy4gVGhpcyBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBob3cgb3duZXJzaGlwIGlzIGRldGVybWluZWQsIGF0IGxlYXN0IGluIHNvbWUgY2FzZXMuIEl0J3MgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlIFZGUyBpbnRlcmFjdHMgd2l0aCBvd25lcnNoaXAgY2hlY2tzLCBwb3RlbnRpYWxseSBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBUaGUgZmFjdCB0aGF0IHRoZSBWRlMgaXRzZWxmIGlzIGJlaW5nIG1vZGlmaWVkIGlzIGEgYmlnIGZsYWcgZm9yIGZ1enppbmcsIHdoaWNoIHdpbGwgYmUgZXNzZW50aWFsIGhlcmUuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nLCBhbmQgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSdsbCBrZWVwIHRvcCBvZiBtaW5kOiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAsIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGFuZCBgbWF5X2RlZHVwZV9maWxlYC5cblxuQW5kLCBhcyBhIGZpbmFsIGNvbnNpZGVyYXRpb24sIGVuYWJsaW5nIGBBRlNfRlNgIHNlZW1zIGVzc2VudGlhbCB0byBwcm9wZXIgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNjUsIk91dHB1dFRva2VucyI6MjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE2OjMyOjE2LjgxMjE2MTU2M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTg0NjY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX2lub2RlX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJ2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXJcIixcbiAgICBcInZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJhZnNfaXNfb3duZWRfYnlfbWVcIixcbiAgICBcImFmc19oYXZlX3NhbWVfb3duZXJcIixcbiAgICBcImNob3duX29rXCIsXG4gICAgXCJjaGdycF9va1wiLFxuICAgIFwibWF5X2NyZWF0ZV9pbl9zdGlja3lcIixcbiAgICBcIl9fY2hlY2tfc3RpY2t5XCIsXG4gICAgXCJtYXlfZGVkdXBlX2ZpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBhbmQgbW9kaWZpZXMgY29yZSBWRlMgZnVuY3Rpb25zIChsaWtlIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgLCBldGMuKSB0byB1c2UgdGhlbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTIGFuZCBBRlMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19pbm9kZV9pc19vd25lZF9ieV9tZVwiLFxuICAgIFwidmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJ2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lclwiLFxuICAgIFwiYWZzX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJhZnNfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJjaG93bl9va1wiLFxuICAgIFwiY2hncnBfb2tcIixcbiAgICBcIm1heV9jcmVhdGVfaW5fc3RpY2t5XCIsXG4gICAgXCJfX2NoZWNrX3N0aWNreVwiLFxuICAgIFwibWF5X2RlZHVwZV9maWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0d28gbmV3IGlub2RlIG9wZXJhdGlvbnMgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgVkZTIG93bmVyc2hpcCBjaGVja3MuIEl0IGltcGxlbWVudHMgdGhlc2Ugb3BlcmF0aW9ucyBpbiB0aGUgQUZTIGZpbGVzeXN0ZW0gYW5kIG1vZGlmaWVzIGNvcmUgVkZTIGZ1bmN0aW9ucyAobGlrZSBgY2hvd25fb2tgLCBgY2hncnBfb2tgLCBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgLCBgbWF5X2RlZHVwZV9maWxlYCwgZXRjLikgdG8gdXNlIHRoZW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFZGUyBhbmQgQUZTIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow8zfxb[1] Phase: Succeeded StartedAt: 2026-07-24 16:32:29 +0000 UTC FinishedAt: 2026-07-24 16:32:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-24 16:32:29 +0000 UTC FinishedAt: 2026-07-24 16:32:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2] Phase: Succeeded StartedAt: 2026-07-24 16:32:29 +0000 UTC FinishedAt: 2026-07-24 20:40:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-24 16:32:29 +0000 UTC FinishedAt: 2026-07-24 20:40:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-24 16:32:29 +0000 UTC FinishedAt: 2026-07-24 16:33:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-24 16:32:29 +0000 UTC FinishedAt: 2026-07-24 16:32:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8zfxb/series-workflow8zfxb-convert-artifact-858709893/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-24 16:33:04 +0000 UTC FinishedAt: 2026-07-24 17:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-24 16:33:04 +0000 UTC FinishedAt: 2026-07-24 17:02:10 +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:*4bfb6c80-eb27-4b13-9b6e-6516f87ab6ea,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-workflow8zfxb/series-workflow8zfxb-convert-artifact-858709893/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": "4456482e-fbfa-437a-81bb-41252844e420", "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-workflow8zfxb/series-workflow8zfxb-build-action-602774315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-24 16:33:04 +0000 UTC FinishedAt: 2026-07-24 17:02:00 +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:*4bfb6c80-eb27-4b13-9b6e-6516f87ab6ea,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-workflow8zfxb/series-workflow8zfxb-convert-artifact-858709893/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": "4456482e-fbfa-437a-81bb-41252844e420", "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-workflow8zfxb/series-workflow8zfxb-build-action-602774315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-24 17:02:10 +0000 UTC FinishedAt: 2026-07-24 17:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-24 17:02:10 +0000 UTC FinishedAt: 2026-07-24 17:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-24 17:02:10 +0000 UTC FinishedAt: 2026-07-24 17:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-24 17:02:10 +0000 UTC FinishedAt: 2026-07-24 17:02:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8zfxb/series-workflow8zfxb-convert-artifact-2830109792/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-24 17:02:20 +0000 UTC FinishedAt: 2026-07-24 17:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-24 17:02:20 +0000 UTC FinishedAt: 2026-07-24 17:04:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4456482e-fbfa-437a-81bb-41252844e420,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-workflow8zfxb/series-workflow8zfxb-build-action-602774315/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-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-24 17:04:26 +0000 UTC FinishedAt: 2026-07-24 17:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-24 17:04:26 +0000 UTC FinishedAt: 2026-07-24 17:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-24 17:04:26 +0000 UTC FinishedAt: 2026-07-24 17:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-24 17:04:26 +0000 UTC FinishedAt: 2026-07-24 17:33:53 +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:*4bfb6c80-eb27-4b13-9b6e-6516f87ab6ea,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-workflow8zfxb/series-workflow8zfxb-convert-artifact-2830109792/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": "d08e262a-7334-4faf-aced-a66e59a23ad0", "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-workflow8zfxb/series-workflow8zfxb-build-action-52590876/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-24 17:04:26 +0000 UTC FinishedAt: 2026-07-24 17:33:43 +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:*4bfb6c80-eb27-4b13-9b6e-6516f87ab6ea,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-workflow8zfxb/series-workflow8zfxb-convert-artifact-2830109792/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": "d08e262a-7334-4faf-aced-a66e59a23ad0", "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-workflow8zfxb/series-workflow8zfxb-build-action-52590876/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-24 17:33:53 +0000 UTC FinishedAt: 2026-07-24 17:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-24 17:33:53 +0000 UTC FinishedAt: 2026-07-24 17:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-24 17:33:53 +0000 UTC FinishedAt: 2026-07-24 17:36:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-24 17:33:53 +0000 UTC FinishedAt: 2026-07-24 17:35:52 +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:*d08e262a-7334-4faf-aced-a66e59a23ad0,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-workflow8zfxb/series-workflow8zfxb-build-action-52590876/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-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-24 17:36:02 +0000 UTC FinishedAt: 2026-07-24 20:40:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-24 17:36:02 +0000 UTC FinishedAt: 2026-07-24 20:40:57 +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":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"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:*4456482e-fbfa-437a-81bb-41252844e420,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d08e262a-7334-4faf-aced-a66e59a23ad0,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-workflow8zfxb/series-workflow8zfxb-build-action-602774315/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-workflow8zfxb/series-workflow8zfxb-build-action-52590876/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-24 17:36:02 +0000 UTC FinishedAt: 2026-07-24 17:37:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-24 17:36:02 +0000 UTC FinishedAt: 2026-07-24 17:37:32 +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":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"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-workflow8zfxb/series-workflow8zfxb-convert-artifact-1063201465/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-24 17:36:02 +0000 UTC FinishedAt: 2026-07-24 17:36:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-24 17:36:02 +0000 UTC FinishedAt: 2026-07-24 17:36:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-24 17:36:03 +0000 UTC FinishedAt: 2026-07-24 17:36:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-24 17:37:39 +0000 UTC FinishedAt: 2026-07-24 20:40:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zfxb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","vfs_inode_and_dir_have_same_owner","vfs_inodes_have_same_owner","afs_is_owned_by_me","afs_have_same_owner","chown_ok","chgrp_ok","may_create_in_sticky","__check_sticky","may_dedupe_file"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"091addcd-618d-4e95-a34a-4a32a4d6a0a2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-24 17:37:39 +0000 UTC FinishedAt: 2026-07-24 20:40:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4456482e-fbfa-437a-81bb-41252844e420,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d08e262a-7334-4faf-aced-a66e59a23ad0,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-workflow8zfxb/series-workflow8zfxb-build-action-602774315/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-workflow8zfxb/series-workflow8zfxb-build-action-52590876/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-workflow8zfxb/series-workflow8zfxb-convert-artifact-1063201465/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,}