Name: series-workflows9c5t Phase: Succeeded StartedAt: 2026-06-19 17:22:36 +0000 UTC FinishedAt: 2026-06-19 21:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[0] Phase: Succeeded StartedAt: 2026-06-19 17:22:36 +0000 UTC FinishedAt: 2026-06-19 17:37:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[0].run-triage Phase: Succeeded StartedAt: 2026-06-19 17:22:36 +0000 UTC FinishedAt: 2026-06-19 17:37:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "7d87a5a284bb34edb3f4e7e312ef403b3385a7b7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUSE_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "7d87a5a284bb34edb3f4e7e312ef403b3385a7b7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUSE_FS" ], "series_id": "1764156d-e8b0-471c-ae50-4c6c9a7cf040" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "fuse_opt_fd", "fuse_syncfs_enable", "process_init_reply", "fuse_new_init", "fuse_fill_super_common" ], "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+CgkJCTx0ZD4yMDI2LzA2LzE5IDE3OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVU0VfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmdXNlX29wdF9mZCYjMzQ7LAogICAgJiMzNDtmdXNlX3N5bmNmc19lbmFibGUmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19pbml0X3JlcGx5JiMzNDssCiAgICAmIzM0O2Z1c2VfbmV3X2luaXQmIzM0OywKICAgICYjMzQ7ZnVzZV9maWxsX3N1cGVyX2NvbW1vbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gdGhlIEZVU0UgZmlsZXN5c3RlbSwgYWxsb3dpbmcgcHJpdmlsZWdlZCB1c2Vyc3BhY2Ugc2VydmVycyB0byBvcHQtaW4gdG8gcmVjZWl2aW5nIEZVU0VfU1lOQ0ZTIHJlcXVlc3RzLiBJdCBtb2RpZmllcyBtb3VudCBwYXJhbWV0ZXIgcGFyc2luZyBhbmQgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNzozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc2MmUyM2U5Y2ZhODQ1NTk5MjZkMmFmYTA2YjlmNzA2Zjc3ZGQ1NWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAxOSAxNzozMzowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Z1c2VfaS5oIGIvZnMvZnVzZS9mdXNlX2kuaFxuaW5kZXggODVmNzM4YzUzMTIyNWEuLjNmYmU0OTU3ZTgzOWI0IDEwMDY0NFxuLS0tIGEvZnMvZnVzZS9mdXNlX2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnVzZS9mdXNlX2kuaFxuQEAgLTM5MSw2ICYjNDM7MzkxLDcgQEAgc3RydWN0IGZ1c2VfZnNfY29udGV4dCB7XG4gXHRib29sIG5vX2NvbnRyb2w6MTtcbiBcdGJvb2wgbm9fZm9yY2VfdW1vdW50OjE7XG4gXHRib29sIGxlZ2FjeV9vcHRzX3Nob3c6MTtcbiYjNDM7XHRib29sIHN5bmNmc19jYXBhYmxlOjE7XG4gXHRlbnVtIGZ1c2VfZGF4X21vZGUgZGF4X21vZGU7XG4gXHR1bnNpZ25lZCBpbnQgbWF4X3JlYWQ7XG4gXHR1bnNpZ25lZCBpbnQgYmxrc2l6ZTtcbkBAIC02NzUsNiAmIzQzOzY3NiwxNCBAQCBzdHJ1Y3QgZnVzZV9jb25uIHtcbiBcdC8qKiBAc3luY19mczogUHJvcGFnYXRlIHN5bmNmcygpIHRvIHNlcnZlciAqL1xuIFx0dW5zaWduZWQgaW50IHN5bmNfZnM6MTtcbiBcbiYjNDM7XHQvKipcbiYjNDM7XHQgKiBAc3luY2ZzX2NhcGFibGU6IHRoZSBwcml2aWxlZ2UgcmVxdWlyZWQgdG8gaG9ub3IgRlVTRV9IQVNfU1lOQ0ZTIHdhc1xuJiM0MztcdCAqIHByZXNlbnQgd2hlbiAvZGV2L2Z1c2Ugd2FzIG9wZW5lZCAoQ0FQX1NZU19BRE1JTiBpbiB0aGUgaW5pdGlhbCB1c2VyXG4mIzQzO1x0ICogbmFtZXNwYWNlKSwgaS5lLiB0aGUgc2FtZSBwcml2aWxlZ2UgdGhhdCBtb3VudGluZyB2aXJ0aW9mcy9mdXNlYmxrXG4mIzQzO1x0ICogcmVxdWlyZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0dW5zaWduZWQgaW50IHN5bmNmc19jYXBhYmxlOjE7XG4mIzQzO1xuIFx0LyoqIEBpbml0X3NlY3VyaXR5OiBJbml0aWFsaXplIHNlY3VyaXR5IHhhdHRycyB3aGVuIGNyZWF0aW5nIGEgbmV3IGlub2RlICovXG4gXHR1bnNpZ25lZCBpbnQgaW5pdF9zZWN1cml0eToxO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuY1xuaW5kZXggZDk3NTA3M2M2MDI5NjMuLmJhNzUwNmI1MzlhZTAzIDEwMDY0NFxuLS0tIGEvZnMvZnVzZS9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mdXNlL2lub2RlLmNcbkBAIC04MDAsNiAmIzQzOzgwMCwxNSBAQCBzdGF0aWMgaW50IGZ1c2Vfb3B0X2ZkKHN0cnVjdCBmc19jb250ZXh0ICpmc2MsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0aWYgKGZpbGUtXHUwMDNlZl9jcmVkLVx1MDAzZXVzZXJfbnMgIT0gZnNjLVx1MDAzZXVzZXJfbnMpXG4gXHRcdHJldHVybiBpbnZhbGZjKGZzYywgXCYjMzQ7d3JvbmcgdXNlciBuYW1lc3BhY2UgZm9yIGZ1c2UgZGV2aWNlXCYjMzQ7KTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlY29yZCB3aGV0aGVyIHRoZSBzZXJ2ZXIgb3BlbmVkIC9kZXYvZnVzZSB3aXRoIENBUF9TWVNfQURNSU4gaW4gdGhlXG4mIzQzO1x0ICogaW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAtLSB0aGUgc2FtZSBwcml2aWxlZ2UgdGhhdCBtb3VudGluZyB2aXJ0aW9mc1xuJiM0MztcdCAqIG9yIGZ1c2VibGsgcmVxdWlyZXMuICBPbmx5IHN1Y2ggc2VydmVycyBhcmUgdHJ1c3RlZCB0byByZWNlaXZlXG4mIzQzO1x0ICogRlVTRV9TWU5DRlMgKHNlZSBmdXNlX3N5bmNmc19lbmFibGUoKSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3R4LVx1MDAzZXN5bmNmc19jYXBhYmxlID0gZmlsZV9uc19jYXBhYmxlKGZpbGUsIFx1MDAyNmluaXRfdXNlcl9ucyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIENBUF9TWVNfQURNSU4pO1xuJiM0MztcbiBcdGN0eC1cdTAwM2VmdWQgPSBmdXNlX2Rldl9ncmFiKGZpbGUpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTI2Niw2ICYjNDM7MTI3NSwxNiBAQCBzdHJ1Y3QgZnVzZV9pbml0X2FyZ3Mge1xuIFx0c3RydWN0IGZ1c2VfbW91bnQgKmZtO1xuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEEgc2VydmVyIGNhbiBzdGFsbCBzeW5jZnMoKS9zeW5jKCksIHNvIG9ubHkgaG9ub3IgRlVTRV9IQVNfU1lOQ0ZTIGZvclxuJiM0MzsgKiBzZXJ2ZXJzIHRoYXQgb3BlbmVkIC9kZXYvZnVzZSB3aXRoIENBUF9TWVNfQURNSU4gaW4gdGhlIGluaXRpYWwgdXNlclxuJiM0MzsgKiBuYW1lc3BhY2UgLS0gdGhlIHNhbWUgcHJpdmlsZWdlIHJlcXVpcmVkIHRvIG1vdW50IHZpcnRpb2ZzIG9yIGZ1c2VibGsuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBmdXNlX3N5bmNmc19lbmFibGUoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHU2NCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAoZmxhZ3MgXHUwMDI2IEZVU0VfSEFTX1NZTkNGUykgXHUwMDI2XHUwMDI2IGZjLVx1MDAzZXN5bmNmc19jYXBhYmxlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHByb2Nlc3NfaW5pdF9yZXBseShzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCBpbnQgZXJyb3IpXG4ge1xuIFx0c3RydWN0IGZ1c2VfaW5pdF9hcmdzICppYSA9IGNvbnRhaW5lcl9vZihhcmdzLCB0eXBlb2YoKmlhKSwgYXJncyk7XG5AQCAtMTQwNiw2ICYjNDM7MTQyNSw5IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfaW5pdF9yZXBseShzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCBpbnQgZXJyb3IpXG4gXG4gXHRcdFx0aWYgKGZsYWdzIFx1MDAyNiBGVVNFX1JFUVVFU1RfVElNRU9VVClcbiBcdFx0XHRcdHRpbWVvdXQgPSBhcmctXHUwMDNlcmVxdWVzdF90aW1lb3V0O1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGZ1c2Vfc3luY2ZzX2VuYWJsZShmYywgZmxhZ3MpKVxuJiM0MztcdFx0XHRcdGZjLVx1MDAzZXN5bmNfZnMgPSAxO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHJhX3BhZ2VzID0gZmMtXHUwMDNlbWF4X3JlYWQgLyBQQUdFX1NJWkU7XG4gXHRcdFx0ZmMtXHUwMDNlbm9fbG9jayA9IDE7XG5AQCAtMTQ3Myw2ICYjNDM7MTQ5NSwxMSBAQCBzdGF0aWMgc3RydWN0IGZ1c2VfaW5pdF9hcmdzICpmdXNlX25ld19pbml0KHN0cnVjdCBmdXNlX21vdW50ICpmbSlcbiBcdFx0ZmxhZ3MgfD0gRlVTRV9TVUJNT1VOVFM7XG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkpXG4gXHRcdGZsYWdzIHw9IEZVU0VfUEFTU1RIUk9VR0g7XG4mIzQzO1x0LyogT25seSBvZmZlcmVkIHRvIHN1ZmZpY2llbnRseSBwcml2aWxlZ2VkIHNlcnZlcnM7IHNlZVxuJiM0MztcdCAqIGZ1c2Vfc3luY2ZzX2VuYWJsZSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmbS1cdTAwM2VmYy1cdTAwM2VzeW5jZnNfY2FwYWJsZSlcbiYjNDM7XHRcdGZsYWdzIHw9IEZVU0VfSEFTX1NZTkNGUztcbiBcbiBcdC8qXG4gXHQgKiBUaGlzIGlzIGp1c3QgYW4gaW5mb3JtYXRpb24gZmxhZyBmb3IgZnVzZSBzZXJ2ZXIuIE5vIG5lZWQgdG8gY2hlY2tcbkBAIC0xNzY2LDYgJiM0MzsxNzkzLDcgQEAgaW50IGZ1c2VfZmlsbF9zdXBlcl9jb21tb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZ1c2VfZnNfY29udGV4dCAqY3R4KVxuIFxuIFx0ZmMtXHUwMDNlZGVmYXVsdF9wZXJtaXNzaW9ucyA9IGN0eC1cdTAwM2VkZWZhdWx0X3Blcm1pc3Npb25zO1xuIFx0ZmMtXHUwMDNlYWxsb3dfb3RoZXIgPSBjdHgtXHUwMDNlYWxsb3dfb3RoZXI7XG4mIzQzO1x0ZmMtXHUwMDNlc3luY2ZzX2NhcGFibGUgPSBjdHgtXHUwMDNlc3luY2ZzX2NhcGFibGU7XG4gXHRmYy1cdTAwM2V1c2VyX2lkID0gY3R4LVx1MDAzZXVzZXJfaWQ7XG4gXHRmYy1cdTAwM2Vncm91cF9pZCA9IGN0eC1cdTAwM2Vncm91cF9pZDtcbiBcdGZjLVx1MDAzZWxlZ2FjeV9vcHRzX3Nob3cgPSBjdHgtXHUwMDNlbGVnYWN5X29wdHNfc2hvdztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaFxuaW5kZXggYzEzZTFmOWEyZjEyYmQuLmMwNzhjNWYwZjk0ZWM5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaFxuQEAgLTI0MCw2ICYjNDM7MjQwLDkgQEBcbiAgKiAgLSBhZGQgRlVTRV9DT1BZX0ZJTEVfUkFOR0VfNjRcbiAgKiAgLSBhZGQgc3RydWN0IGZ1c2VfY29weV9maWxlX3JhbmdlX291dFxuICAqICAtIGFkZCBGVVNFX05PVElGWV9QUlVORVxuJiM0MzsgKlxuJiM0MzsgKiAgNy40NlxuJiM0MzsgKiAgLSBhZGQgRlVTRV9IQVNfU1lOQ0ZTIG9wdC1pbiBmbGFnIGZvciBwcml2aWxlZ2VkIHVzZXJzcGFjZSBzZXJ2ZXJzXG4gICovXG4gXG4gI2lmbmRlZiBfTElOVVhfRlVTRV9IXG5AQCAtMjc1LDcgJiM0MzsyNzgsNyBAQFxuICNkZWZpbmUgRlVTRV9LRVJORUxfVkVSU0lPTiA3XG4gXG4gLyoqIE1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgaW50ZXJmYWNlICovXG4tI2RlZmluZSBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OIDQ1XG4mIzQzOyNkZWZpbmUgRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTiA0NlxuIFxuIC8qKiBUaGUgbm9kZSBJRCBvZiB0aGUgcm9vdCBpbm9kZSAqL1xuICNkZWZpbmUgRlVTRV9ST09UX0lEIDFcbkBAIC00NDgsNiAmIzQzOzQ1MSwxMiBAQCBzdHJ1Y3QgZnVzZV9maWxlX2xvY2sge1xuICAqIEZVU0VfT1ZFUl9JT19VUklORzogSW5kaWNhdGUgdGhhdCBjbGllbnQgc3VwcG9ydHMgaW8tdXJpbmdcbiAgKiBGVVNFX1JFUVVFU1RfVElNRU9VVDoga2VybmVsIHN1cHBvcnRzIHRpbWluZyBvdXQgcmVxdWVzdHMuXG4gICpcdFx0XHQgaW5pdF9vdXQucmVxdWVzdF90aW1lb3V0IGNvbnRhaW5zIHRoZSB0aW1lb3V0IChpbiBzZWNzKVxuJiM0MzsgKiBGVVNFX0hBU19TWU5DRlM6IHNlcnZlciByZXF1ZXN0cyB0aGF0IHN5bmNmcygpL3N5bmMoKSBiZSBwcm9wYWdhdGVkIGFzXG4mIzQzOyAqXHRcdEZVU0VfU1lOQ0ZTIHJlcXVlc3RzLiAgU2luY2UgYW4gdW50cnVzdGVkIHNlcnZlciBjYW4gdXNlIHRoaXNcbiYjNDM7ICpcdFx0dG8gc3RhbGwgc3luYygpLCBpdCBpcyBvbmx5IGhvbm9yZWQgd2hlbiAvZGV2L2Z1c2Ugd2FzIG9wZW5lZFxuJiM0MzsgKlx0XHR3aXRoIENBUF9TWVNfQURNSU4gaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgKHRoZSBzYW1lXG4mIzQzOyAqXHRcdHByaXZpbGVnZSB0aGF0IG1vdW50aW5nIHZpcnRpb2ZzIG9yIGZ1c2VibGsgcmVxdWlyZXMpLlxuJiM0MzsgKlx0XHRJbnN1ZmZpY2llbnRseSBwcml2aWxlZ2VkIHNlcnZlcnMgaWdub3JlIGl0LlxuICAqL1xuICNkZWZpbmUgRlVTRV9BU1lOQ19SRUFEXHRcdCgxIFx1MDAzY1x1MDAzYyAwKVxuICNkZWZpbmUgRlVTRV9QT1NJWF9MT0NLU1x0KDEgXHUwMDNjXHUwMDNjIDEpXG5AQCAtNDk1LDYgJiM0Mzs1MDQsNyBAQCBzdHJ1Y3QgZnVzZV9maWxlX2xvY2sge1xuICNkZWZpbmUgRlVTRV9BTExPV19JRE1BUFx0KDFVTEwgXHUwMDNjXHUwMDNjIDQwKVxuICNkZWZpbmUgRlVTRV9PVkVSX0lPX1VSSU5HXHQoMVVMTCBcdTAwM2NcdTAwM2MgNDEpXG4gI2RlZmluZSBGVVNFX1JFUVVFU1RfVElNRU9VVFx0KDFVTEwgXHUwMDNjXHUwMDNjIDQyKVxuJiM0MzsjZGVmaW5lIEZVU0VfSEFTX1NZTkNGU1x0XHQoMVVMTCBcdTAwM2NcdTAwM2MgNDMpXG4gXG4gLyoqXG4gICogQ1VTRSBJTklUIHJlcXVlc3QvcmVwbHkgZmxhZ3NcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlLy5naXRpZ25vcmVcbmluZGV4IDNlNzJlNzQyZDA4ZThjLi40ZTkyZjM2M2M3NGFiMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvLmdpdGlnbm9yZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS8uZ2l0aWdub3JlXG5AQCAtMSwzICYjNDM7MSw0IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gZnVzZV9tbnRcbiBmdXNlY3RsX3Rlc3RcbiYjNDM7dGVzdF9zeW5jZnNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuaW5kZXggNjEyYWFkNjlhOTNhYTQuLmNiYmEwMTYzNTIyNmRjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuQEAgLTIsNyAmIzQzOzIsNyBAQFxuIFxuIENGTEFHUyAmIzQzOz0gLVdhbGwgLU8yIC1nICQoS0hEUl9JTkNMVURFUylcbiBcbi1URVNUX0dFTl9QUk9HUyA6PSBmdXNlY3RsX3Rlc3RcbiYjNDM7VEVTVF9HRU5fUFJPR1MgOj0gZnVzZWN0bF90ZXN0IHRlc3Rfc3luY2ZzXG4gVEVTVF9HRU5fRklMRVMgOj0gZnVzZV9tbnRcbiBcbiBpbmNsdWRlIC4uLy4uL2xpYi5ta1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvdGVzdF9zeW5jZnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvdGVzdF9zeW5jZnMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MGZiMzQ3ODU1NGFmNVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS90ZXN0X3N5bmNmcy5jXG5AQCAtMCwwICYjNDM7MSwzNzAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogVGVzdCB0aGF0IEZVU0VfU1lOQ0ZTIGlzIHByb3BhZ2F0ZWQgdG8gYSB1c2Vyc3BhY2Ugc2VydmVyIG9ubHkgd2hlbiB0aGVcbiYjNDM7ICogc2VydmVyIG9wdHMgaW4gd2l0aCBGVVNFX0hBU19TWU5DRlMgKmFuZCogb3BlbmVkIC9kZXYvZnVzZSB3aXRoXG4mIzQzOyAqIENBUF9TWVNfQURNSU4gaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIFVubGlrZSB0aGUgbGliZnVzZS1iYXNlZCBzZWxmdGVzdHMsIHRoaXMgdGFsa3MgdGhlIHJhdyBGVVNFIHdpcmUgcHJvdG9jb2xcbiYjNDM7ICogb3ZlciAvZGV2L2Z1c2Ugc28gaXQgY2FuIChhKSBjaG9vc2Ugd2hldGhlciB0byBhZHZlcnRpc2UgRlVTRV9IQVNfU1lOQ0ZTIGluXG4mIzQzOyAqIHRoZSBJTklUIHJlcGx5IGFuZCAoYikgb2JzZXJ2ZSBkaXJlY3RseSB3aGV0aGVyIGEgRlVTRV9TWU5DRlMgb3Bjb2RlIGFycml2ZXMuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9ldmVudGZkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL21vdW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy91aW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NhcGFiaWxpdHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mdXNlLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uLy4uL2tzZWxmdGVzdC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEZVU0VfUk9PVF9JRCAxXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBZGQgb3IgZHJvcCBDQVBfU1lTX0FETUlOIGluIHRoZSBlZmZlY3RpdmUgc2V0IHZpYSByYXcgY2FwZ2V0L2NhcHNldFxuJiM0MzsgKiAoYXZvaWRzIGEgbGliY2FwIGRlcGVuZGVuY3kpLiAgVXNlZCB0byBjb25zdHJ1Y3QgYSBzZXJ2ZXIgdGhhdCBvcGVuc1xuJiM0MzsgKiAvZGV2L2Z1c2Ugd2l0aG91dCB0aGUgcHJpdmlsZWdlIEZVU0VfSEFTX1NZTkNGUyByZXF1aXJlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgc2V0X3N5c2FkbWluKGludCBvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBfX3VzZXJfY2FwX2hlYWRlcl9zdHJ1Y3QgaGRyID0ge1xuJiM0MztcdFx0LnZlcnNpb24gPSBfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OXzMsXG4mIzQzO1x0XHQucGlkID0gMCxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBfX3VzZXJfY2FwX2RhdGFfc3RydWN0IGRhdGFbX0xJTlVYX0NBUEFCSUxJVFlfVTMyU18zXSA9IHt9O1xuJiM0MztcdHVuc2lnbmVkIGludCBpZHggPSBDQVBfU1lTX0FETUlOIFx1MDAzZVx1MDAzZSA1O1xuJiM0MztcdF9fdTMyIGJpdCA9IDFVIFx1MDAzY1x1MDAzYyAoQ0FQX1NZU19BRE1JTiBcdTAwMjYgMzEpO1xuJiM0MztcbiYjNDM7XHRpZiAoc3lzY2FsbChTWVNfY2FwZ2V0LCBcdTAwMjZoZHIsIGRhdGEpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdGlmIChvbilcbiYjNDM7XHRcdGRhdGFbaWR4XS5lZmZlY3RpdmUgfD0gYml0O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGRhdGFbaWR4XS5lZmZlY3RpdmUgXHUwMDI2PSB+Yml0O1xuJiM0MztcdHJldHVybiBzeXNjYWxsKFNZU19jYXBzZXQsIFx1MDAyNmhkciwgZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIGV2ZW50ZmQgdGhlIHNlcnZlciBjaGlsZCB3cml0ZXMgb25jZSB3aGVuIGl0IHJlY2VpdmVzIEZVU0VfU1lOQ0ZTOyB0aGVcbiYjNDM7ICogcGFyZW50IHBvbGwoKXMgaXQgdG8gb2JzZXJ2ZSAob3IgcnVsZSBvdXQpIHByb3BhZ2F0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBzeW5jZnNfZXZmZDtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlcGx5KGludCBmZCwgdWludDY0X3QgdW5pcXVlLCBpbnQgZXJyb3IsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZnVzZV9vdXRfaGVhZGVyIG9oID0ge1xuJiM0MztcdFx0LmxlbiA9IHNpemVvZihvaCkgJiM0MzsgbGVuLFxuJiM0MztcdFx0LmVycm9yID0gZXJyb3IsXG4mIzQzO1x0XHQudW5pcXVlID0gdW5pcXVlLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGlvdmVjIGlvdlsyXSA9IHtcbiYjNDM7XHRcdHsgXHUwMDI2b2gsIHNpemVvZihvaCkgfSxcbiYjNDM7XHRcdHsgZGF0YSwgbGVuIH0sXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0aWYgKHdyaXRldihmZCwgaW92LCBkYXRhID8gMiA6IDEpIFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7c2VydmVyIHdyaXRldiBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBmaWxsX2F0dHIoc3RydWN0IGZ1c2VfYXR0ciAqYSwgdWludDY0X3QgaW5vLCB1aW50MzJfdCBtb2RlLFxuJiM0MztcdFx0ICAgICAgdWludDMyX3QgbmxpbmspXG4mIzQzO3tcbiYjNDM7XHRtZW1zZXQoYSwgMCwgc2l6ZW9mKCphKSk7XG4mIzQzO1x0YS1cdTAwM2Vpbm8gPSBpbm87XG4mIzQzO1x0YS1cdTAwM2Vtb2RlID0gbW9kZTtcbiYjNDM7XHRhLVx1MDAzZW5saW5rID0gbmxpbms7XG4mIzQzO1x0YS1cdTAwM2VibGtzaXplID0gNDA5NjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogTWluaW1hbCBGVVNFIHNlcnZlci4gIEFkdmVydGlzZXMgRlVTRV9IQVNfU1lOQ0ZTIGluIGl0cyBJTklUIHJlcGx5IGlmZlxuJiM0MzsgKiBAYWR2ZXJ0aXNlIGlzIHNldC4gIFNpZ25hbHMgc3luY2ZzX2V2ZmQgd2hlbiBhIEZVU0VfU1lOQ0ZTIG9wY29kZSBhcnJpdmVzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBTRVJWRVJfTUFYX1dSSVRFIDY1NTM2XG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9zZXJ2ZXIoaW50IGZkLCBpbnQgYWR2ZXJ0aXNlKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUga2VybmVsIHJlamVjdHMgcmVhZHMgKEVJTlZBTCkgd2hvc2UgYnVmZmVyIGlzIHNtYWxsZXIgdGhhblxuJiM0MztcdCAqIG1heF93cml0ZSAmIzQzOyBoZWFkZXIsIHNvIHNpemUgZ2VuZXJvdXNseSBmb3IgdGhlIG1heF93cml0ZSB3ZVxuJiM0MztcdCAqIGFkdmVydGlzZSBpbiB0aGUgSU5JVCByZXBseSBiZWxvdy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdGF0aWMgY2hhciBidWZbU0VSVkVSX01BWF9XUklURSAmIzQzOyA0MDk2XTtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0c3NpemVfdCBuID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0XHRzdHJ1Y3QgZnVzZV9pbl9oZWFkZXIgKmloID0gKHZvaWQgKilidWY7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG4gXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0aWYgKGVycm5vID09IEVJTlRSIHx8IGVycm5vID09IEVBR0FJTilcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0cmV0dXJuO1x0XHQvKiBkZXZpY2UgY2xvc2VkIG9uIHVubW91bnQvYWJvcnQgKi9cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChuIFx1MDAzYyAoc3NpemVfdClzaXplb2YoKmloKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0c3dpdGNoIChpaC1cdTAwM2VvcGNvZGUpIHtcbiYjNDM7XHRcdGNhc2UgRlVTRV9JTklUOiB7XG4mIzQzO1x0XHRcdHN0cnVjdCBmdXNlX2luaXRfaW4gKmluID0gKHZvaWQgKikoaWggJiM0MzsgMSk7XG4mIzQzO1x0XHRcdHN0cnVjdCBmdXNlX2luaXRfb3V0IG91dCA9IHswfTtcbiYjNDM7XHRcdFx0dWludDY0X3QgZmxhZ3MgPSBGVVNFX0lOSVRfRVhUO1xuJiM0MztcbiYjNDM7XHRcdFx0b3V0Lm1ham9yID0gRlVTRV9LRVJORUxfVkVSU0lPTjtcbiYjNDM7XHRcdFx0b3V0Lm1pbm9yID0gRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTjtcbiYjNDM7XHRcdFx0b3V0Lm1heF9yZWFkYWhlYWQgPSBpbi1cdTAwM2VtYXhfcmVhZGFoZWFkO1xuJiM0MztcdFx0XHRvdXQubWF4X3dyaXRlID0gU0VSVkVSX01BWF9XUklURTtcbiYjNDM7XHRcdFx0b3V0Lm1heF9iYWNrZ3JvdW5kID0gMTY7XG4mIzQzO1x0XHRcdG91dC5jb25nZXN0aW9uX3RocmVzaG9sZCA9IDEyO1xuJiM0MztcdFx0XHRpZiAoYWR2ZXJ0aXNlKVxuJiM0MztcdFx0XHRcdGZsYWdzIHw9IEZVU0VfSEFTX1NZTkNGUztcbiYjNDM7XHRcdFx0b3V0LmZsYWdzID0gZmxhZ3M7XG4mIzQzO1x0XHRcdG91dC5mbGFnczIgPSBmbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4mIzQzO1x0XHRcdHJlcGx5KGZkLCBpaC1cdTAwM2V1bmlxdWUsIDAsIFx1MDAyNm91dCwgc2l6ZW9mKG91dCkpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNhc2UgRlVTRV9HRVRBVFRSOiB7XG4mIzQzO1x0XHRcdHN0cnVjdCBmdXNlX2F0dHJfb3V0IG91dCA9IHswfTtcbiYjNDM7XG4mIzQzO1x0XHRcdGZpbGxfYXR0cihcdTAwMjZvdXQuYXR0ciwgRlVTRV9ST09UX0lELCBTX0lGRElSIHwgMDc1NSwgMik7XG4mIzQzO1x0XHRcdHJlcGx5KGZkLCBpaC1cdTAwM2V1bmlxdWUsIDAsIFx1MDAyNm91dCwgc2l6ZW9mKG91dCkpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNhc2UgRlVTRV9TWU5DRlM6IHtcbiYjNDM7XHRcdFx0dWludDY0X3Qgb25lID0gMTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh3cml0ZShzeW5jZnNfZXZmZCwgXHUwMDI2b25lLCBzaXplb2Yob25lKSkgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7c2VydmVyIGV2ZW50ZmQgd3JpdGUgZmFpbGVkOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0XHRyZXBseShmZCwgaWgtXHUwMDNldW5pcXVlLCAwLCBOVUxMLCAwKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBbnl0aGluZyBlbHNlIChlLmcuIE9QRU5ESVIgZnJvbSBvcGVuaW5nIHRoZSBtb3VudFxuJiM0MztcdFx0XHQgKiByb290KSBpcyBub3QgbmVlZGVkIHRvIGRyaXZlIHRoaXMgdGVzdDsgLUVOT1NZUyBsZXRzXG4mIzQzO1x0XHRcdCAqIHRoZSBrZXJuZWwgcHJvY2VlZC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHJlcGx5KGZkLCBpaC1cdTAwM2V1bmlxdWUsIC1FTk9TWVMsIE5VTEwsIDApO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE1vdW50IGEgZnVzZSBmcyBiYWNrZWQgYnkgYSBmb3JrZWQgc2VydmVyLCBpc3N1ZSBzeW5jZnMoKSwgYW5kIHJlcG9ydFxuJiM0MzsgKiB3aGV0aGVyIHRoZSBzZXJ2ZXIgb2JzZXJ2ZWQgRlVTRV9TWU5DRlMuICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgaWYgdGhlXG4mIzQzOyAqIGVudmlyb25tZW50IGNvdWxkIG5vdCBzdXBwb3J0IHRoZSB0ZXN0IChjYWxsZXIgc2hvdWxkIHNraXApLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiBAdW5wcml2X29wZW4gaXMgc2V0LCAvZGV2L2Z1c2UgaXMgb3BlbmVkIHdpdGggQ0FQX1NZU19BRE1JTiBkcm9wcGVkXG4mIzQzOyAqIChyZWdhaW5lZCBvbmx5IGZvciB0aGUgbW91bnQoKSBzeXNjYWxsKSwgc28gdGhlIGRldmljZSBvcGVuZXIgLS0gdGhlXG4mIzQzOyAqIHNlcnZlciBwcmluY2lwYWwgRlVTRV9IQVNfU1lOQ0ZTIGlzIGdhdGVkIG9uIC0tIGxhY2tzIHRoZSBwcml2aWxlZ2UgZXZlblxuJiM0MzsgKiB0aG91Z2ggaXQgcmVtYWlucyBpbiB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZG9fbW91bnRfYW5kX3N5bmNmcyhjb25zdCBjaGFyICptbnQsIGludCBhZHZlcnRpc2UsIGludCB1bnByaXZfb3BlbixcbiYjNDM7XHRcdFx0ICAgICAgIGludCAqc2VlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwb2xsZmQgcGZkID0geyAuZXZlbnRzID0gUE9MTElOIH07XG4mIzQzO1x0Y2hhciBvcHRzWzI1Nl07XG4mIzQzO1x0aW50IGZkLCBtZmQgPSAtMSwgaTtcbiYjNDM7XHRwaWRfdCBwaWQ7XG4mIzQzO1xuJiM0MztcdHN5bmNmc19ldmZkID0gZXZlbnRmZCgwLCBFRkRfQ0xPRVhFQyk7XG4mIzQzO1x0aWYgKHN5bmNmc19ldmZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZiAodW5wcml2X29wZW4gXHUwMDI2XHUwMDI2IHNldF9zeXNhZG1pbigwKSlcbiYjNDM7XHRcdGdvdG8gb3V0X2V2ZmQ7XG4mIzQzO1x0ZmQgPSBvcGVuKFwmIzM0Oy9kZXYvZnVzZVwmIzM0OywgT19SRFdSKTtcbiYjNDM7XHRpZiAodW5wcml2X29wZW4gXHUwMDI2XHUwMDI2IHNldF9zeXNhZG1pbigxKSkge1xuJiM0MztcdFx0aWYgKGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0Z290byBvdXRfZXZmZDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXRfZXZmZDtcbiYjNDM7XG4mIzQzO1x0bWtkaXIobW50LCAwNzU1KTtcbiYjNDM7XHRzbnByaW50ZihvcHRzLCBzaXplb2Yob3B0cyksXG4mIzQzO1x0XHQgXCYjMzQ7ZmQ9JWQscm9vdG1vZGU9NDAwMDAsdXNlcl9pZD0lZCxncm91cF9pZD0lZFwmIzM0OyxcbiYjNDM7XHRcdCBmZCwgZ2V0dWlkKCksIGdldGdpZCgpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1vdW50KFwmIzM0O2Z1c2VcJiMzNDssIG1udCwgXCYjMzQ7ZnVzZVwmIzM0OywgMCwgb3B0cykgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dF9mZDtcbiYjNDM7XG4mIzQzO1x0cGlkID0gZm9yaygpO1xuJiM0MztcdGlmIChwaWQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dF91bW91bnQ7XG4mIzQzO1x0aWYgKHBpZCA9PSAwKSB7XG4mIzQzO1x0XHRydW5fc2VydmVyKGZkLCBhZHZlcnRpc2UpO1xuJiM0MztcdFx0X2V4aXQoMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBwYXJlbnQgZG9lcyBub3Qgc2VydmljZSB0aGUgZnVzZSBmZDsgdGhlIGNoaWxkIGRvZXMuICBDbG9zZSBvdXJcbiYjNDM7XHQgKiBjb3B5IHNvIHRoZSBrZXJuZWwgc2VlcyBhIHNpbmdsZSBzZXJ2ZXIsIGFuZCBzbyB0aGF0IGlmIHRoZSBjaGlsZFxuJiM0MztcdCAqIGRpZXMgdGhlIGNvbm5lY3Rpb24gYWJvcnRzIGluc3RlYWQgb2YgaGFuZ2luZyB1cyBmb3JldmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBtb3VudCgpIHJldHVybnMgYmVmb3JlIHRoZSBzZXJ2ZXIgaGFzIGFuc3dlcmVkIEZVU0VfSU5JVCwgc28gdGhlXG4mIzQzO1x0ICogZmlyc3Qgb3BlbigpIGNhbiByYWNlIGFuZCBmYWlsIHdpdGggRU5PVENPTk47IHJldHJ5IHVudGlsIHRoZVxuJiM0MztcdCAqIGhhbmRzaGFrZSBzZXR0bGVzLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRtZmQgPSBvcGVuKG1udCwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7XG4mIzQzO1x0XHRpZiAobWZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChtZmQgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRzeW5jZnMobWZkKTtcbiYjNDM7XHRcdGNsb3NlKG1mZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vIHdhaXRpbmcgaXMgbmVlZGVkOiB0aGUgc2VydmVyIHdyaXRlcyBzeW5jZnNfZXZmZCBiZWZvcmUgaXQgcmVwbGllc1xuJiM0MztcdCAqIHRvIEZVU0VfU1lOQ0ZTLCBhbmQgdGhhdCByZXBseSBpcyB3aGF0IHVuYmxvY2tzIHRoZSBzeW5jaHJvbm91c1xuJiM0MztcdCAqIHN5bmNmcygpIGFib3ZlLiAgU28gb25jZSBzeW5jZnMoKSBoYXMgcmV0dXJuZWQsIHRoZSBldmVudGZkIGlzIGFscmVhZHlcbiYjNDM7XHQgKiBzaWduYWxsZWQgaWYgdGhlIG9wY29kZSB3YXMgcHJvcGFnYXRlZCwgYW5kIHdpbGwgbmV2ZXIgYmUgb3RoZXJ3aXNlLlxuJiM0MztcdCAqIHBvbGwoKSB3aXRoIGEgemVybyB0aW1lb3V0IHRoZXJlZm9yZSBkZWNpZGVzIGJvdGggY2FzZXMgaW1tZWRpYXRlbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGZkLmZkID0gc3luY2ZzX2V2ZmQ7XG4mIzQzO1x0KnNlZW4gPSBwb2xsKFx1MDAyNnBmZCwgMSwgMCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IChwZmQucmV2ZW50cyBcdTAwMjYgUE9MTElOKTtcbiYjNDM7XG4mIzQzO1x0a2lsbChwaWQsIFNJR0tJTEwpO1xuJiM0MztcdHdhaXRwaWQocGlkLCBOVUxMLCAwKTtcbiYjNDM7XHR1bW91bnQyKG1udCwgTU5UX0RFVEFDSCk7XG4mIzQzO1x0Y2xvc2Uoc3luY2ZzX2V2ZmQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0X3Vtb3VudDpcbiYjNDM7XHR1bW91bnQyKG1udCwgTU5UX0RFVEFDSCk7XG4mIzQzO291dF9mZDpcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO291dF9ldmZkOlxuJiM0MztcdGNsb3NlKHN5bmNmc19ldmZkKTtcbiYjNDM7XHRyZXR1cm4gLTE7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFQ0OiBzYW1lIGFzIGFib3ZlIGJ1dCB0aGUgbW91bnQgaXMgY3JlYXRlZCBpbnNpZGUgYSBuZXcgdXNlciBuYW1lc3BhY2UuICovXG4mIzQzO3N0YXRpYyBpbnQgcnVuX2luX3VzZXJucyhjb25zdCBjaGFyICptbnQsIGludCBhZHZlcnRpc2UsIGludCAqc2VlbilcbiYjNDM7e1xuJiM0MztcdHVpZF90IHVpZCA9IGdldHVpZCgpO1xuJiM0MztcdGdpZF90IGdpZCA9IGdldGdpZCgpO1xuJiM0MztcdGNoYXIgbWFwWzY0XTtcbiYjNDM7XHRpbnQgZjtcbiYjNDM7XG4mIzQzO1x0aWYgKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUiB8IENMT05FX05FV05TKSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcdC8qIHVucHJpdmlsZWdlZCB1c2VybnMgbW91bnRzIHVuYXZhaWxhYmxlICovXG4mIzQzO1xuJiM0MztcdGYgPSBvcGVuKFwmIzM0Oy9wcm9jL3NlbGYvc2V0Z3JvdXBzXCYjMzQ7LCBPX1dST05MWSk7XG4mIzQzO1x0aWYgKGYgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRkcHJpbnRmKGYsIFwmIzM0O2RlbnlcJiMzNDspO1xuJiM0MztcdFx0Y2xvc2UoZik7XG4mIzQzO1x0fVxuJiM0MztcdHNucHJpbnRmKG1hcCwgc2l6ZW9mKG1hcCksIFwmIzM0OzAgJWQgMVwmIzM0OywgdWlkKTtcbiYjNDM7XHRmID0gb3BlbihcJiMzNDsvcHJvYy9zZWxmL3VpZF9tYXBcJiMzNDssIE9fV1JPTkxZKTtcbiYjNDM7XHRpZiAoZiBcdTAwM2MgMCB8fCBkcHJpbnRmKGYsIFwmIzM0OyVzXCYjMzQ7LCBtYXApIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdGNsb3NlKGYpO1xuJiM0MztcdHNucHJpbnRmKG1hcCwgc2l6ZW9mKG1hcCksIFwmIzM0OzAgJWQgMVwmIzM0OywgZ2lkKTtcbiYjNDM7XHRmID0gb3BlbihcJiMzNDsvcHJvYy9zZWxmL2dpZF9tYXBcJiMzNDssIE9fV1JPTkxZKTtcbiYjNDM7XHRpZiAoZiBcdTAwM2MgMCB8fCBkcHJpbnRmKGYsIFwmIzM0OyVzXCYjMzQ7LCBtYXApIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdGNsb3NlKGYpO1xuJiM0MztcbiYjNDM7XHQvKiBOZWVkIGEgbW91bnQgbmFtZXNwYWNlIHdoZXJlIHdlIGNhbiBtb3VudCBmdXNlIHVucHJpdmlsZWdlZC4gKi9cbiYjNDM7XHRpZiAobW91bnQoTlVMTCwgXCYjMzQ7L1wmIzM0OywgTlVMTCwgTVNfUkVDIHwgTVNfUFJJVkFURSwgTlVMTCkgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkb19tb3VudF9hbmRfc3luY2ZzKG1udCwgYWR2ZXJ0aXNlLCAwLCBzZWVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1haW4odm9pZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgbW50W10gPSBcJiMzNDsvdG1wL2Z1c2Vfc3luY2ZzX1hYWFhYWFwmIzM0OztcbiYjNDM7XHRpbnQgc2VlbiwgcmV0O1xuJiM0MztcbiYjNDM7XHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuJiM0MztcdGtzZnRfc2V0X3BsYW4oNCk7XG4mIzQzO1xuJiM0MztcdC8qIEhhcmQgd2F0Y2hkb2c6IG5ldmVyIGxldCBhIHN0dWNrIHN5bmNmcyBoYW5nIHRoZSB0ZXN0IHJ1bm5lci4gKi9cbiYjNDM7XHRzaWduYWwoU0lHQUxSTSwgU0lHX0RGTCk7XG4mIzQzO1x0YWxhcm0oNjApO1xuJiM0MztcbiYjNDM7XHRpZiAoZ2V0ZXVpZCgpICE9IDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDt0ZXN0IHJlcXVpcmVzIHJvb3QgdG8gbW91bnQgZnVzZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmICghbWtkdGVtcChtbnQpKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O21rZHRlbXAgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogVDE6IGhvc3Qtcm9vdCBtb3VudCwgc2VydmVyIG9wdHMgaW4gLVx1MDAzZSBzeW5jZnMgbXVzdCByZWFjaCBzZXJ2ZXIuICovXG4mIzQzO1x0cmV0ID0gZG9fbW91bnRfYW5kX3N5bmNmcyhtbnQsIDEsIDAsIFx1MDAyNnNlZW4pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7VDE6IGNvdWxkIG5vdCBtb3VudCBmdXNlXFxuXCYjMzQ7KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0KHNlZW4sXG4mIzQzO1x0XHRcdFx0IFwmIzM0O1QxIGhvc3Qtcm9vdCAmIzQzOyBGVVNFX0hBU19TWU5DRlM6IHNlcnZlciByZWNlaXZlcyBGVVNFX1NZTkNGU1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFQyOiBob3N0LXJvb3QgbW91bnQsIHNlcnZlciBkb2VzIE5PVCBvcHQgaW4gLVx1MDAzZSBubyBGVVNFX1NZTkNGUy4gKi9cbiYjNDM7XHRyZXQgPSBkb19tb3VudF9hbmRfc3luY2ZzKG1udCwgMCwgMCwgXHUwMDI2c2Vlbik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtUMjogY291bGQgbm90IG1vdW50IGZ1c2VcXG5cJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHQoIXNlZW4sXG4mIzQzO1x0XHRcdFx0IFwmIzM0O1QyIGhvc3Qtcm9vdCwgbm8gb3B0LWluOiBzZXJ2ZXIgZG9lcyBOT1QgcmVjZWl2ZSBGVVNFX1NZTkNGU1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVDM6IHNlcnZlciBvcHRzIGluIGJ1dCBvcGVuZWQgL2Rldi9mdXNlIHdpdGhvdXQgQ0FQX1NZU19BRE1JTiB3aGlsZVxuJiM0MztcdCAqIHN0aWxsIGluIHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlIC1cdTAwM2Uga2VybmVsIG11c3Qgd2l0aGhvbGRcbiYjNDM7XHQgKiBGVVNFX1NZTkNGUy4gIFRoaXMgaXMgdGhlIGNhc2UgdGhhdCBkaXN0aW5ndWlzaGVzIGdhdGluZyBvbiB0aGVcbiYjNDM7XHQgKiBzZXJ2ZXImIzM5O3MgcHJpdmlsZWdlIGZyb20gZ2F0aW5nIG9uIHRoZSBtb3VudCYjMzk7cyB1c2VyIG5hbWVzcGFjZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBkb19tb3VudF9hbmRfc3luY2ZzKG1udCwgMSwgMSwgXHUwMDI2c2Vlbik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtUMzogY291bGQgbm90IG1vdW50IGZ1c2UgdW5wcml2aWxlZ2VkXFxuXCYjMzQ7KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0KCFzZWVuLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtUMyBpbml0X3VzZXJucywgb3BlbmVyIGxhY2tzIENBUF9TWVNfQURNSU46IEZVU0VfU1lOQ0ZTIHdpdGhoZWxkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUNDogdW5wcml2aWxlZ2VkIHVzZXJucyBtb3VudCwgc2VydmVyIG9wdHMgaW4gLVx1MDAzZSBrZXJuZWwgbXVzdCBzdGlsbFxuJiM0MztcdCAqIHdpdGhob2xkIEZVU0VfU1lOQ0ZTLiAgUnVuIGluIGEgY2hpbGQgc2luY2UgaXQgdW5zaGFyZXMgbmFtZXNwYWNlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHR7XG4mIzQzO1x0XHRwaWRfdCBwID0gZm9yaygpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwID09IDApIHtcbiYjNDM7XHRcdFx0aW50IHMgPSAwO1xuJiM0MztcdFx0XHRpbnQgciA9IHJ1bl9pbl91c2VybnMobW50LCAxLCBcdTAwMjZzKTtcbiYjNDM7XG4mIzQzO1x0XHRcdF9leGl0KHIgXHUwMDNjIDAgPyAyIDogKHMgPyAxIDogMCkpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0aW50IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0XHRcdHdhaXRwaWQocCwgXHUwMDI2c3RhdHVzLCAwKTtcbiYjNDM7XHRcdFx0aWYgKCFXSUZFWElURUQoc3RhdHVzKSlcbiYjNDM7XHRcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X2Vycm9yKFwmIzM0O1Q0OiBjaGlsZCBjcmFzaGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZWxzZSBpZiAoV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAyKVxuJiM0MztcdFx0XHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtUNDogdXNlcm5zIGZ1c2UgbW91bnQgdW5hdmFpbGFibGVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0a3NmdF90ZXN0X3Jlc3VsdChXRVhJVFNUQVRVUyhzdGF0dXMpID09IDAsXG4mIzQzO1x0XHRcdFx0XHRcdCBcJiMzNDtUNCB1bnByaXYgdXNlcm5zICYjNDM7IG9wdC1pbjogRlVTRV9TWU5DRlMgd2l0aGhlbGRcXG5cJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cm1kaXIobW50KTtcbiYjNDM7XHRrc2Z0X2ZpbmlzaGVkKCk7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNzozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVNFX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnVzZV9vcHRfZmQmIzM0OywKICAgICYjMzQ7ZnVzZV9zeW5jZnNfZW5hYmxlJiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfaW5pdF9yZXBseSYjMzQ7LAogICAgJiMzNDtmdXNlX25ld19pbml0JiMzNDssCiAgICAmIzM0O2Z1c2VfZmlsbF9zdXBlcl9jb21tb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHRoZSBGVVNFIGZpbGVzeXN0ZW0sIGFsbG93aW5nIHByaXZpbGVnZWQgdXNlcnNwYWNlIHNlcnZlcnMgdG8gb3B0LWluIHRvIHJlY2VpdmluZyBGVVNFX1NZTkNGUyByZXF1ZXN0cy4gSXQgbW9kaWZpZXMgbW91bnQgcGFyYW1ldGVyIHBhcnNpbmcgYW5kIGNvbm5lY3Rpb24gaW5pdGlhbGl6YXRpb24gbG9naWMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc2MmUyM2U5Y2ZhODQ1NTk5MjZkMmFmYTA2YjlmNzA2Zjc3ZGQ1NWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1biAxOSAxNzozMzowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZnVzZV9pLmggYi9mcy9mdXNlL2Z1c2VfaS5oCmluZGV4IDg1ZjczOGM1MzEyMjVhLi4zZmJlNDk1N2U4MzliNCAxMDA2NDQKLS0tIGEvZnMvZnVzZS9mdXNlX2kuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9mdXNlL2Z1c2VfaS5oCkBAIC0zOTEsNiAmIzQzOzM5MSw3IEBAIHN0cnVjdCBmdXNlX2ZzX2NvbnRleHQgewogCWJvb2wgbm9fY29udHJvbDoxOwogCWJvb2wgbm9fZm9yY2VfdW1vdW50OjE7CiAJYm9vbCBsZWdhY3lfb3B0c19zaG93OjE7CiYjNDM7CWJvb2wgc3luY2ZzX2NhcGFibGU6MTsKIAllbnVtIGZ1c2VfZGF4X21vZGUgZGF4X21vZGU7CiAJdW5zaWduZWQgaW50IG1heF9yZWFkOwogCXVuc2lnbmVkIGludCBibGtzaXplOwpAQCAtNjc1LDYgJiM0Mzs2NzYsMTQgQEAgc3RydWN0IGZ1c2VfY29ubiB7CiAJLyoqIEBzeW5jX2ZzOiBQcm9wYWdhdGUgc3luY2ZzKCkgdG8gc2VydmVyICovCiAJdW5zaWduZWQgaW50IHN5bmNfZnM6MTsKIAomIzQzOwkvKioKJiM0MzsJICogQHN5bmNmc19jYXBhYmxlOiB0aGUgcHJpdmlsZWdlIHJlcXVpcmVkIHRvIGhvbm9yIEZVU0VfSEFTX1NZTkNGUyB3YXMKJiM0MzsJICogcHJlc2VudCB3aGVuIC9kZXYvZnVzZSB3YXMgb3BlbmVkIChDQVBfU1lTX0FETUlOIGluIHRoZSBpbml0aWFsIHVzZXIKJiM0MzsJICogbmFtZXNwYWNlKSwgaS5lLiB0aGUgc2FtZSBwcml2aWxlZ2UgdGhhdCBtb3VudGluZyB2aXJ0aW9mcy9mdXNlYmxrCiYjNDM7CSAqIHJlcXVpcmVzLgomIzQzOwkgKi8KJiM0MzsJdW5zaWduZWQgaW50IHN5bmNmc19jYXBhYmxlOjE7CiYjNDM7CiAJLyoqIEBpbml0X3NlY3VyaXR5OiBJbml0aWFsaXplIHNlY3VyaXR5IHhhdHRycyB3aGVuIGNyZWF0aW5nIGEgbmV3IGlub2RlICovCiAJdW5zaWduZWQgaW50IGluaXRfc2VjdXJpdHk6MTsKIApkaWZmIC0tZ2l0IGEvZnMvZnVzZS9pbm9kZS5jIGIvZnMvZnVzZS9pbm9kZS5jCmluZGV4IGQ5NzUwNzNjNjAyOTYzLi5iYTc1MDZiNTM5YWUwMyAxMDA2NDQKLS0tIGEvZnMvZnVzZS9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Z1c2UvaW5vZGUuYwpAQCAtODAwLDYgJiM0Mzs4MDAsMTUgQEAgc3RhdGljIGludCBmdXNlX29wdF9mZChzdHJ1Y3QgZnNfY29udGV4dCAqZnNjLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlpZiAoZmlsZS0mZ3Q7Zl9jcmVkLSZndDt1c2VyX25zICE9IGZzYy0mZ3Q7dXNlcl9ucykKIAkJcmV0dXJuIGludmFsZmMoZnNjLCAmIzM0O3dyb25nIHVzZXIgbmFtZXNwYWNlIGZvciBmdXNlIGRldmljZSYjMzQ7KTsKIAomIzQzOwkvKgomIzQzOwkgKiBSZWNvcmQgd2hldGhlciB0aGUgc2VydmVyIG9wZW5lZCAvZGV2L2Z1c2Ugd2l0aCBDQVBfU1lTX0FETUlOIGluIHRoZQomIzQzOwkgKiBpbml0aWFsIHVzZXIgbmFtZXNwYWNlIC0tIHRoZSBzYW1lIHByaXZpbGVnZSB0aGF0IG1vdW50aW5nIHZpcnRpb2ZzCiYjNDM7CSAqIG9yIGZ1c2VibGsgcmVxdWlyZXMuICBPbmx5IHN1Y2ggc2VydmVycyBhcmUgdHJ1c3RlZCB0byByZWNlaXZlCiYjNDM7CSAqIEZVU0VfU1lOQ0ZTIChzZWUgZnVzZV9zeW5jZnNfZW5hYmxlKCkpLgomIzQzOwkgKi8KJiM0MzsJY3R4LSZndDtzeW5jZnNfY2FwYWJsZSA9IGZpbGVfbnNfY2FwYWJsZShmaWxlLCAmYW1wO2luaXRfdXNlcl9ucywKJiM0MzsJCQkJCSAgICAgIENBUF9TWVNfQURNSU4pOwomIzQzOwogCWN0eC0mZ3Q7ZnVkID0gZnVzZV9kZXZfZ3JhYihmaWxlKTsKIAogCXJldHVybiAwOwpAQCAtMTI2Niw2ICYjNDM7MTI3NSwxNiBAQCBzdHJ1Y3QgZnVzZV9pbml0X2FyZ3MgewogCXN0cnVjdCBmdXNlX21vdW50ICpmbTsKIH07CiAKJiM0MzsvKgomIzQzOyAqIEEgc2VydmVyIGNhbiBzdGFsbCBzeW5jZnMoKS9zeW5jKCksIHNvIG9ubHkgaG9ub3IgRlVTRV9IQVNfU1lOQ0ZTIGZvcgomIzQzOyAqIHNlcnZlcnMgdGhhdCBvcGVuZWQgL2Rldi9mdXNlIHdpdGggQ0FQX1NZU19BRE1JTiBpbiB0aGUgaW5pdGlhbCB1c2VyCiYjNDM7ICogbmFtZXNwYWNlIC0tIHRoZSBzYW1lIHByaXZpbGVnZSByZXF1aXJlZCB0byBtb3VudCB2aXJ0aW9mcyBvciBmdXNlYmxrLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGZ1c2Vfc3luY2ZzX2VuYWJsZShzdHJ1Y3QgZnVzZV9jb25uICpmYywgdTY0IGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIChmbGFncyAmYW1wOyBGVVNFX0hBU19TWU5DRlMpICZhbXA7JmFtcDsgZmMtJmd0O3N5bmNmc19jYXBhYmxlOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHByb2Nlc3NfaW5pdF9yZXBseShzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCBpbnQgZXJyb3IpCiB7CiAJc3RydWN0IGZ1c2VfaW5pdF9hcmdzICppYSA9IGNvbnRhaW5lcl9vZihhcmdzLCB0eXBlb2YoKmlhKSwgYXJncyk7CkBAIC0xNDA2LDYgJiM0MzsxNDI1LDkgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19pbml0X3JlcGx5KHN0cnVjdCBmdXNlX2FyZ3MgKmFyZ3MsIGludCBlcnJvcikKIAogCQkJaWYgKGZsYWdzICZhbXA7IEZVU0VfUkVRVUVTVF9USU1FT1VUKQogCQkJCXRpbWVvdXQgPSBhcmctJmd0O3JlcXVlc3RfdGltZW91dDsKJiM0MzsKJiM0MzsJCQlpZiAoZnVzZV9zeW5jZnNfZW5hYmxlKGZjLCBmbGFncykpCiYjNDM7CQkJCWZjLSZndDtzeW5jX2ZzID0gMTsKIAkJfSBlbHNlIHsKIAkJCXJhX3BhZ2VzID0gZmMtJmd0O21heF9yZWFkIC8gUEFHRV9TSVpFOwogCQkJZmMtJmd0O25vX2xvY2sgPSAxOwpAQCAtMTQ3Myw2ICYjNDM7MTQ5NSwxMSBAQCBzdGF0aWMgc3RydWN0IGZ1c2VfaW5pdF9hcmdzICpmdXNlX25ld19pbml0KHN0cnVjdCBmdXNlX21vdW50ICpmbSkKIAkJZmxhZ3MgfD0gRlVTRV9TVUJNT1VOVFM7CiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpKQogCQlmbGFncyB8PSBGVVNFX1BBU1NUSFJPVUdIOwomIzQzOwkvKiBPbmx5IG9mZmVyZWQgdG8gc3VmZmljaWVudGx5IHByaXZpbGVnZWQgc2VydmVyczsgc2VlCiYjNDM7CSAqIGZ1c2Vfc3luY2ZzX2VuYWJsZSgpLgomIzQzOwkgKi8KJiM0MzsJaWYgKGZtLSZndDtmYy0mZ3Q7c3luY2ZzX2NhcGFibGUpCiYjNDM7CQlmbGFncyB8PSBGVVNFX0hBU19TWU5DRlM7CiAKIAkvKgogCSAqIFRoaXMgaXMganVzdCBhbiBpbmZvcm1hdGlvbiBmbGFnIGZvciBmdXNlIHNlcnZlci4gTm8gbmVlZCB0byBjaGVjawpAQCAtMTc2Niw2ICYjNDM7MTc5Myw3IEBAIGludCBmdXNlX2ZpbGxfc3VwZXJfY29tbW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmdXNlX2ZzX2NvbnRleHQgKmN0eCkKIAogCWZjLSZndDtkZWZhdWx0X3Blcm1pc3Npb25zID0gY3R4LSZndDtkZWZhdWx0X3Blcm1pc3Npb25zOwogCWZjLSZndDthbGxvd19vdGhlciA9IGN0eC0mZ3Q7YWxsb3dfb3RoZXI7CiYjNDM7CWZjLSZndDtzeW5jZnNfY2FwYWJsZSA9IGN0eC0mZ3Q7c3luY2ZzX2NhcGFibGU7CiAJZmMtJmd0O3VzZXJfaWQgPSBjdHgtJmd0O3VzZXJfaWQ7CiAJZmMtJmd0O2dyb3VwX2lkID0gY3R4LSZndDtncm91cF9pZDsKIAlmYy0mZ3Q7bGVnYWN5X29wdHNfc2hvdyA9IGN0eC0mZ3Q7bGVnYWN5X29wdHNfc2hvdzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9mdXNlLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oCmluZGV4IGMxM2UxZjlhMmYxMmJkLi5jMDc4YzVmMGY5NGVjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oCkBAIC0yNDAsNiAmIzQzOzI0MCw5IEBACiAgKiAgLSBhZGQgRlVTRV9DT1BZX0ZJTEVfUkFOR0VfNjQKICAqICAtIGFkZCBzdHJ1Y3QgZnVzZV9jb3B5X2ZpbGVfcmFuZ2Vfb3V0CiAgKiAgLSBhZGQgRlVTRV9OT1RJRllfUFJVTkUKJiM0MzsgKgomIzQzOyAqICA3LjQ2CiYjNDM7ICogIC0gYWRkIEZVU0VfSEFTX1NZTkNGUyBvcHQtaW4gZmxhZyBmb3IgcHJpdmlsZWdlZCB1c2Vyc3BhY2Ugc2VydmVycwogICovCiAKICNpZm5kZWYgX0xJTlVYX0ZVU0VfSApAQCAtMjc1LDcgJiM0MzsyNzgsNyBAQAogI2RlZmluZSBGVVNFX0tFUk5FTF9WRVJTSU9OIDcKIAogLyoqIE1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgaW50ZXJmYWNlICovCi0jZGVmaW5lIEZVU0VfS0VSTkVMX01JTk9SX1ZFUlNJT04gNDUKJiM0MzsjZGVmaW5lIEZVU0VfS0VSTkVMX01JTk9SX1ZFUlNJT04gNDYKIAogLyoqIFRoZSBub2RlIElEIG9mIHRoZSByb290IGlub2RlICovCiAjZGVmaW5lIEZVU0VfUk9PVF9JRCAxCkBAIC00NDgsNiAmIzQzOzQ1MSwxMiBAQCBzdHJ1Y3QgZnVzZV9maWxlX2xvY2sgewogICogRlVTRV9PVkVSX0lPX1VSSU5HOiBJbmRpY2F0ZSB0aGF0IGNsaWVudCBzdXBwb3J0cyBpby11cmluZwogICogRlVTRV9SRVFVRVNUX1RJTUVPVVQ6IGtlcm5lbCBzdXBwb3J0cyB0aW1pbmcgb3V0IHJlcXVlc3RzLgogICoJCQkgaW5pdF9vdXQucmVxdWVzdF90aW1lb3V0IGNvbnRhaW5zIHRoZSB0aW1lb3V0IChpbiBzZWNzKQomIzQzOyAqIEZVU0VfSEFTX1NZTkNGUzogc2VydmVyIHJlcXVlc3RzIHRoYXQgc3luY2ZzKCkvc3luYygpIGJlIHByb3BhZ2F0ZWQgYXMKJiM0MzsgKgkJRlVTRV9TWU5DRlMgcmVxdWVzdHMuICBTaW5jZSBhbiB1bnRydXN0ZWQgc2VydmVyIGNhbiB1c2UgdGhpcwomIzQzOyAqCQl0byBzdGFsbCBzeW5jKCksIGl0IGlzIG9ubHkgaG9ub3JlZCB3aGVuIC9kZXYvZnVzZSB3YXMgb3BlbmVkCiYjNDM7ICoJCXdpdGggQ0FQX1NZU19BRE1JTiBpbiB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAodGhlIHNhbWUKJiM0MzsgKgkJcHJpdmlsZWdlIHRoYXQgbW91bnRpbmcgdmlydGlvZnMgb3IgZnVzZWJsayByZXF1aXJlcykuCiYjNDM7ICoJCUluc3VmZmljaWVudGx5IHByaXZpbGVnZWQgc2VydmVycyBpZ25vcmUgaXQuCiAgKi8KICNkZWZpbmUgRlVTRV9BU1lOQ19SRUFECQkoMSAmbHQ7Jmx0OyAwKQogI2RlZmluZSBGVVNFX1BPU0lYX0xPQ0tTCSgxICZsdDsmbHQ7IDEpCkBAIC00OTUsNiAmIzQzOzUwNCw3IEBAIHN0cnVjdCBmdXNlX2ZpbGVfbG9jayB7CiAjZGVmaW5lIEZVU0VfQUxMT1dfSURNQVAJKDFVTEwgJmx0OyZsdDsgNDApCiAjZGVmaW5lIEZVU0VfT1ZFUl9JT19VUklORwkoMVVMTCAmbHQ7Jmx0OyA0MSkKICNkZWZpbmUgRlVTRV9SRVFVRVNUX1RJTUVPVVQJKDFVTEwgJmx0OyZsdDsgNDIpCiYjNDM7I2RlZmluZSBGVVNFX0hBU19TWU5DRlMJCSgxVUxMICZsdDsmbHQ7IDQzKQogCiAvKioKICAqIENVU0UgSU5JVCByZXF1ZXN0L3JlcGx5IGZsYWdzCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlLy5naXRpZ25vcmUKaW5kZXggM2U3MmU3NDJkMDhlOGMuLjRlOTJmMzYzYzc0YWIzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlLy5naXRpZ25vcmUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS8uZ2l0aWdub3JlCkBAIC0xLDMgJiM0MzsxLDQgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQogZnVzZV9tbnQKIGZ1c2VjdGxfdGVzdAomIzQzO3Rlc3Rfc3luY2ZzCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZQppbmRleCA2MTJhYWQ2OWE5M2FhNC4uY2JiYTAxNjM1MjI2ZGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZQpAQCAtMiw3ICYjNDM7Miw3IEBACiAKIENGTEFHUyAmIzQzOz0gLVdhbGwgLU8yIC1nICQoS0hEUl9JTkNMVURFUykKIAotVEVTVF9HRU5fUFJPR1MgOj0gZnVzZWN0bF90ZXN0CiYjNDM7VEVTVF9HRU5fUFJPR1MgOj0gZnVzZWN0bF90ZXN0IHRlc3Rfc3luY2ZzCiBURVNUX0dFTl9GSUxFUyA6PSBmdXNlX21udAogCiBpbmNsdWRlIC4uLy4uL2xpYi5tawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS90ZXN0X3N5bmNmcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS90ZXN0X3N5bmNmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MGZiMzQ3ODU1NGFmNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvdGVzdF9zeW5jZnMuYwpAQCAtMCwwICYjNDM7MSwzNzAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogVGVzdCB0aGF0IEZVU0VfU1lOQ0ZTIGlzIHByb3BhZ2F0ZWQgdG8gYSB1c2Vyc3BhY2Ugc2VydmVyIG9ubHkgd2hlbiB0aGUKJiM0MzsgKiBzZXJ2ZXIgb3B0cyBpbiB3aXRoIEZVU0VfSEFTX1NZTkNGUyAqYW5kKiBvcGVuZWQgL2Rldi9mdXNlIHdpdGgKJiM0MzsgKiBDQVBfU1lTX0FETUlOIGluIHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlLgomIzQzOyAqCiYjNDM7ICogVW5saWtlIHRoZSBsaWJmdXNlLWJhc2VkIHNlbGZ0ZXN0cywgdGhpcyB0YWxrcyB0aGUgcmF3IEZVU0Ugd2lyZSBwcm90b2NvbAomIzQzOyAqIG92ZXIgL2Rldi9mdXNlIHNvIGl0IGNhbiAoYSkgY2hvb3NlIHdoZXRoZXIgdG8gYWR2ZXJ0aXNlIEZVU0VfSEFTX1NZTkNGUyBpbgomIzQzOyAqIHRoZSBJTklUIHJlcGx5IGFuZCAoYikgb2JzZXJ2ZSBkaXJlY3RseSB3aGV0aGVyIGEgRlVTRV9TWU5DRlMgb3Bjb2RlIGFycml2ZXMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvZXZlbnRmZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvbW91bnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N5c2NhbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy91aW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2FwYWJpbGl0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mdXNlLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi8uLi9rc2VsZnRlc3QuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBGVVNFX1JPT1RfSUQgMQomIzQzOwomIzQzOy8qCiYjNDM7ICogQWRkIG9yIGRyb3AgQ0FQX1NZU19BRE1JTiBpbiB0aGUgZWZmZWN0aXZlIHNldCB2aWEgcmF3IGNhcGdldC9jYXBzZXQKJiM0MzsgKiAoYXZvaWRzIGEgbGliY2FwIGRlcGVuZGVuY3kpLiAgVXNlZCB0byBjb25zdHJ1Y3QgYSBzZXJ2ZXIgdGhhdCBvcGVucwomIzQzOyAqIC9kZXYvZnVzZSB3aXRob3V0IHRoZSBwcml2aWxlZ2UgRlVTRV9IQVNfU1lOQ0ZTIHJlcXVpcmVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgc2V0X3N5c2FkbWluKGludCBvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBfX3VzZXJfY2FwX2hlYWRlcl9zdHJ1Y3QgaGRyID0gewomIzQzOwkJLnZlcnNpb24gPSBfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OXzMsCiYjNDM7CQkucGlkID0gMCwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IF9fdXNlcl9jYXBfZGF0YV9zdHJ1Y3QgZGF0YVtfTElOVVhfQ0FQQUJJTElUWV9VMzJTXzNdID0ge307CiYjNDM7CXVuc2lnbmVkIGludCBpZHggPSBDQVBfU1lTX0FETUlOICZndDsmZ3Q7IDU7CiYjNDM7CV9fdTMyIGJpdCA9IDFVICZsdDsmbHQ7IChDQVBfU1lTX0FETUlOICZhbXA7IDMxKTsKJiM0MzsKJiM0MzsJaWYgKHN5c2NhbGwoU1lTX2NhcGdldCwgJmFtcDtoZHIsIGRhdGEpKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlpZiAob24pCiYjNDM7CQlkYXRhW2lkeF0uZWZmZWN0aXZlIHw9IGJpdDsKJiM0MzsJZWxzZQomIzQzOwkJZGF0YVtpZHhdLmVmZmVjdGl2ZSAmYW1wOz0gfmJpdDsKJiM0MzsJcmV0dXJuIHN5c2NhbGwoU1lTX2NhcHNldCwgJmFtcDtoZHIsIGRhdGEpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIGV2ZW50ZmQgdGhlIHNlcnZlciBjaGlsZCB3cml0ZXMgb25jZSB3aGVuIGl0IHJlY2VpdmVzIEZVU0VfU1lOQ0ZTOyB0aGUKJiM0MzsgKiBwYXJlbnQgcG9sbCgpcyBpdCB0byBvYnNlcnZlIChvciBydWxlIG91dCkgcHJvcGFnYXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBzeW5jZnNfZXZmZDsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZXBseShpbnQgZmQsIHVpbnQ2NF90IHVuaXF1ZSwgaW50IGVycm9yLCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IGZ1c2Vfb3V0X2hlYWRlciBvaCA9IHsKJiM0MzsJCS5sZW4gPSBzaXplb2Yob2gpICYjNDM7IGxlbiwKJiM0MzsJCS5lcnJvciA9IGVycm9yLAomIzQzOwkJLnVuaXF1ZSA9IHVuaXF1ZSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGlvdmVjIGlvdlsyXSA9IHsKJiM0MzsJCXsgJmFtcDtvaCwgc2l6ZW9mKG9oKSB9LAomIzQzOwkJeyBkYXRhLCBsZW4gfSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJaWYgKHdyaXRldihmZCwgaW92LCBkYXRhID8gMiA6IDEpICZsdDsgMCkKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7c2VydmVyIHdyaXRldiBmYWlsZWQ6ICVzXG4mIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZmlsbF9hdHRyKHN0cnVjdCBmdXNlX2F0dHIgKmEsIHVpbnQ2NF90IGlubywgdWludDMyX3QgbW9kZSwKJiM0MzsJCSAgICAgIHVpbnQzMl90IG5saW5rKQomIzQzO3sKJiM0MzsJbWVtc2V0KGEsIDAsIHNpemVvZigqYSkpOwomIzQzOwlhLSZndDtpbm8gPSBpbm87CiYjNDM7CWEtJmd0O21vZGUgPSBtb2RlOwomIzQzOwlhLSZndDtubGluayA9IG5saW5rOwomIzQzOwlhLSZndDtibGtzaXplID0gNDA5NjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBNaW5pbWFsIEZVU0Ugc2VydmVyLiAgQWR2ZXJ0aXNlcyBGVVNFX0hBU19TWU5DRlMgaW4gaXRzIElOSVQgcmVwbHkgaWZmCiYjNDM7ICogQGFkdmVydGlzZSBpcyBzZXQuICBTaWduYWxzIHN5bmNmc19ldmZkIHdoZW4gYSBGVVNFX1NZTkNGUyBvcGNvZGUgYXJyaXZlcy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFNFUlZFUl9NQVhfV1JJVEUgNjU1MzYKJiM0MztzdGF0aWMgdm9pZCBydW5fc2VydmVyKGludCBmZCwgaW50IGFkdmVydGlzZSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBrZXJuZWwgcmVqZWN0cyByZWFkcyAoRUlOVkFMKSB3aG9zZSBidWZmZXIgaXMgc21hbGxlciB0aGFuCiYjNDM7CSAqIG1heF93cml0ZSAmIzQzOyBoZWFkZXIsIHNvIHNpemUgZ2VuZXJvdXNseSBmb3IgdGhlIG1heF93cml0ZSB3ZQomIzQzOwkgKiBhZHZlcnRpc2UgaW4gdGhlIElOSVQgcmVwbHkgYmVsb3cuCiYjNDM7CSAqLwomIzQzOwlzdGF0aWMgY2hhciBidWZbU0VSVkVSX01BWF9XUklURSAmIzQzOyA0MDk2XTsKJiM0MzsKJiM0MzsJZm9yICg7OykgewomIzQzOwkJc3NpemVfdCBuID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CQlzdHJ1Y3QgZnVzZV9pbl9oZWFkZXIgKmloID0gKHZvaWQgKilidWY7CiYjNDM7CiYjNDM7CQlpZiAobiAmbHQ7IDApIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlyZXR1cm47CQkvKiBkZXZpY2UgY2xvc2VkIG9uIHVubW91bnQvYWJvcnQgKi8KJiM0MzsJCX0KJiM0MzsJCWlmIChuICZsdDsgKHNzaXplX3Qpc2l6ZW9mKCppaCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzd2l0Y2ggKGloLSZndDtvcGNvZGUpIHsKJiM0MzsJCWNhc2UgRlVTRV9JTklUOiB7CiYjNDM7CQkJc3RydWN0IGZ1c2VfaW5pdF9pbiAqaW4gPSAodm9pZCAqKShpaCAmIzQzOyAxKTsKJiM0MzsJCQlzdHJ1Y3QgZnVzZV9pbml0X291dCBvdXQgPSB7MH07CiYjNDM7CQkJdWludDY0X3QgZmxhZ3MgPSBGVVNFX0lOSVRfRVhUOwomIzQzOwomIzQzOwkJCW91dC5tYWpvciA9IEZVU0VfS0VSTkVMX1ZFUlNJT047CiYjNDM7CQkJb3V0Lm1pbm9yID0gRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTjsKJiM0MzsJCQlvdXQubWF4X3JlYWRhaGVhZCA9IGluLSZndDttYXhfcmVhZGFoZWFkOwomIzQzOwkJCW91dC5tYXhfd3JpdGUgPSBTRVJWRVJfTUFYX1dSSVRFOwomIzQzOwkJCW91dC5tYXhfYmFja2dyb3VuZCA9IDE2OwomIzQzOwkJCW91dC5jb25nZXN0aW9uX3RocmVzaG9sZCA9IDEyOwomIzQzOwkJCWlmIChhZHZlcnRpc2UpCiYjNDM7CQkJCWZsYWdzIHw9IEZVU0VfSEFTX1NZTkNGUzsKJiM0MzsJCQlvdXQuZmxhZ3MgPSBmbGFnczsKJiM0MzsJCQlvdXQuZmxhZ3MyID0gZmxhZ3MgJmd0OyZndDsgMzI7CiYjNDM7CQkJcmVwbHkoZmQsIGloLSZndDt1bmlxdWUsIDAsICZhbXA7b3V0LCBzaXplb2Yob3V0KSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQljYXNlIEZVU0VfR0VUQVRUUjogewomIzQzOwkJCXN0cnVjdCBmdXNlX2F0dHJfb3V0IG91dCA9IHswfTsKJiM0MzsKJiM0MzsJCQlmaWxsX2F0dHIoJmFtcDtvdXQuYXR0ciwgRlVTRV9ST09UX0lELCBTX0lGRElSIHwgMDc1NSwgMik7CiYjNDM7CQkJcmVwbHkoZmQsIGloLSZndDt1bmlxdWUsIDAsICZhbXA7b3V0LCBzaXplb2Yob3V0KSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQljYXNlIEZVU0VfU1lOQ0ZTOiB7CiYjNDM7CQkJdWludDY0X3Qgb25lID0gMTsKJiM0MzsKJiM0MzsJCQlpZiAod3JpdGUoc3luY2ZzX2V2ZmQsICZhbXA7b25lLCBzaXplb2Yob25lKSkgJmx0OyAwKQomIzQzOwkJCQlrc2Z0X3ByaW50X21zZygmIzM0O3NlcnZlciBldmVudGZkIHdyaXRlIGZhaWxlZDogJXNcbiYjMzQ7LAomIzQzOwkJCQkJICAgICAgIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQkJcmVwbHkoZmQsIGloLSZndDt1bmlxdWUsIDAsIE5VTEwsIDApOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEFueXRoaW5nIGVsc2UgKGUuZy4gT1BFTkRJUiBmcm9tIG9wZW5pbmcgdGhlIG1vdW50CiYjNDM7CQkJICogcm9vdCkgaXMgbm90IG5lZWRlZCB0byBkcml2ZSB0aGlzIHRlc3Q7IC1FTk9TWVMgbGV0cwomIzQzOwkJCSAqIHRoZSBrZXJuZWwgcHJvY2VlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlyZXBseShmZCwgaWgtJmd0O3VuaXF1ZSwgLUVOT1NZUywgTlVMTCwgMCk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBNb3VudCBhIGZ1c2UgZnMgYmFja2VkIGJ5IGEgZm9ya2VkIHNlcnZlciwgaXNzdWUgc3luY2ZzKCksIGFuZCByZXBvcnQKJiM0MzsgKiB3aGV0aGVyIHRoZSBzZXJ2ZXIgb2JzZXJ2ZWQgRlVTRV9TWU5DRlMuICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgaWYgdGhlCiYjNDM7ICogZW52aXJvbm1lbnQgY291bGQgbm90IHN1cHBvcnQgdGhlIHRlc3QgKGNhbGxlciBzaG91bGQgc2tpcCkuCiYjNDM7ICoKJiM0MzsgKiBJZiBAdW5wcml2X29wZW4gaXMgc2V0LCAvZGV2L2Z1c2UgaXMgb3BlbmVkIHdpdGggQ0FQX1NZU19BRE1JTiBkcm9wcGVkCiYjNDM7ICogKHJlZ2FpbmVkIG9ubHkgZm9yIHRoZSBtb3VudCgpIHN5c2NhbGwpLCBzbyB0aGUgZGV2aWNlIG9wZW5lciAtLSB0aGUKJiM0MzsgKiBzZXJ2ZXIgcHJpbmNpcGFsIEZVU0VfSEFTX1NZTkNGUyBpcyBnYXRlZCBvbiAtLSBsYWNrcyB0aGUgcHJpdmlsZWdlIGV2ZW4KJiM0MzsgKiB0aG91Z2ggaXQgcmVtYWlucyBpbiB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGRvX21vdW50X2FuZF9zeW5jZnMoY29uc3QgY2hhciAqbW50LCBpbnQgYWR2ZXJ0aXNlLCBpbnQgdW5wcml2X29wZW4sCiYjNDM7CQkJICAgICAgIGludCAqc2VlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwb2xsZmQgcGZkID0geyAuZXZlbnRzID0gUE9MTElOIH07CiYjNDM7CWNoYXIgb3B0c1syNTZdOwomIzQzOwlpbnQgZmQsIG1mZCA9IC0xLCBpOwomIzQzOwlwaWRfdCBwaWQ7CiYjNDM7CiYjNDM7CXN5bmNmc19ldmZkID0gZXZlbnRmZCgwLCBFRkRfQ0xPRVhFQyk7CiYjNDM7CWlmIChzeW5jZnNfZXZmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWlmICh1bnByaXZfb3BlbiAmYW1wOyZhbXA7IHNldF9zeXNhZG1pbigwKSkKJiM0MzsJCWdvdG8gb3V0X2V2ZmQ7CiYjNDM7CWZkID0gb3BlbigmIzM0Oy9kZXYvZnVzZSYjMzQ7LCBPX1JEV1IpOwomIzQzOwlpZiAodW5wcml2X29wZW4gJmFtcDsmYW1wOyBzZXRfc3lzYWRtaW4oMSkpIHsKJiM0MzsJCWlmIChmZCAmZ3Q7PSAwKQomIzQzOwkJCWNsb3NlKGZkKTsKJiM0MzsJCWdvdG8gb3V0X2V2ZmQ7CiYjNDM7CX0KJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0X2V2ZmQ7CiYjNDM7CiYjNDM7CW1rZGlyKG1udCwgMDc1NSk7CiYjNDM7CXNucHJpbnRmKG9wdHMsIHNpemVvZihvcHRzKSwKJiM0MzsJCSAmIzM0O2ZkPSVkLHJvb3Rtb2RlPTQwMDAwLHVzZXJfaWQ9JWQsZ3JvdXBfaWQ9JWQmIzM0OywKJiM0MzsJCSBmZCwgZ2V0dWlkKCksIGdldGdpZCgpKTsKJiM0MzsKJiM0MzsJaWYgKG1vdW50KCYjMzQ7ZnVzZSYjMzQ7LCBtbnQsICYjMzQ7ZnVzZSYjMzQ7LCAwLCBvcHRzKSAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dF9mZDsKJiM0MzsKJiM0MzsJcGlkID0gZm9yaygpOwomIzQzOwlpZiAocGlkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0X3Vtb3VudDsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlydW5fc2VydmVyKGZkLCBhZHZlcnRpc2UpOwomIzQzOwkJX2V4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHBhcmVudCBkb2VzIG5vdCBzZXJ2aWNlIHRoZSBmdXNlIGZkOyB0aGUgY2hpbGQgZG9lcy4gIENsb3NlIG91cgomIzQzOwkgKiBjb3B5IHNvIHRoZSBrZXJuZWwgc2VlcyBhIHNpbmdsZSBzZXJ2ZXIsIGFuZCBzbyB0aGF0IGlmIHRoZSBjaGlsZAomIzQzOwkgKiBkaWVzIHRoZSBjb25uZWN0aW9uIGFib3J0cyBpbnN0ZWFkIG9mIGhhbmdpbmcgdXMgZm9yZXZlci4KJiM0MzsJICovCiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogbW91bnQoKSByZXR1cm5zIGJlZm9yZSB0aGUgc2VydmVyIGhhcyBhbnN3ZXJlZCBGVVNFX0lOSVQsIHNvIHRoZQomIzQzOwkgKiBmaXJzdCBvcGVuKCkgY2FuIHJhY2UgYW5kIGZhaWwgd2l0aCBFTk9UQ09OTjsgcmV0cnkgdW50aWwgdGhlCiYjNDM7CSAqIGhhbmRzaGFrZSBzZXR0bGVzLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDEwMDA7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQltZmQgPSBvcGVuKG1udCwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7CiYjNDM7CQlpZiAobWZkICZndDs9IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl1c2xlZXAoMTAwMCk7CiYjNDM7CX0KJiM0MzsJaWYgKG1mZCAmZ3Q7PSAwKSB7CiYjNDM7CQlzeW5jZnMobWZkKTsKJiM0MzsJCWNsb3NlKG1mZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTm8gd2FpdGluZyBpcyBuZWVkZWQ6IHRoZSBzZXJ2ZXIgd3JpdGVzIHN5bmNmc19ldmZkIGJlZm9yZSBpdCByZXBsaWVzCiYjNDM7CSAqIHRvIEZVU0VfU1lOQ0ZTLCBhbmQgdGhhdCByZXBseSBpcyB3aGF0IHVuYmxvY2tzIHRoZSBzeW5jaHJvbm91cwomIzQzOwkgKiBzeW5jZnMoKSBhYm92ZS4gIFNvIG9uY2Ugc3luY2ZzKCkgaGFzIHJldHVybmVkLCB0aGUgZXZlbnRmZCBpcyBhbHJlYWR5CiYjNDM7CSAqIHNpZ25hbGxlZCBpZiB0aGUgb3Bjb2RlIHdhcyBwcm9wYWdhdGVkLCBhbmQgd2lsbCBuZXZlciBiZSBvdGhlcndpc2UuCiYjNDM7CSAqIHBvbGwoKSB3aXRoIGEgemVybyB0aW1lb3V0IHRoZXJlZm9yZSBkZWNpZGVzIGJvdGggY2FzZXMgaW1tZWRpYXRlbHkuCiYjNDM7CSAqLwomIzQzOwlwZmQuZmQgPSBzeW5jZnNfZXZmZDsKJiM0MzsJKnNlZW4gPSBwb2xsKCZhbXA7cGZkLCAxLCAwKSAmZ3Q7IDAgJmFtcDsmYW1wOyAocGZkLnJldmVudHMgJmFtcDsgUE9MTElOKTsKJiM0MzsKJiM0MzsJa2lsbChwaWQsIFNJR0tJTEwpOwomIzQzOwl3YWl0cGlkKHBpZCwgTlVMTCwgMCk7CiYjNDM7CXVtb3VudDIobW50LCBNTlRfREVUQUNIKTsKJiM0MzsJY2xvc2Uoc3luY2ZzX2V2ZmQpOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXRfdW1vdW50OgomIzQzOwl1bW91bnQyKG1udCwgTU5UX0RFVEFDSCk7CiYjNDM7b3V0X2ZkOgomIzQzOwljbG9zZShmZCk7CiYjNDM7b3V0X2V2ZmQ6CiYjNDM7CWNsb3NlKHN5bmNmc19ldmZkKTsKJiM0MzsJcmV0dXJuIC0xOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUNDogc2FtZSBhcyBhYm92ZSBidXQgdGhlIG1vdW50IGlzIGNyZWF0ZWQgaW5zaWRlIGEgbmV3IHVzZXIgbmFtZXNwYWNlLiAqLwomIzQzO3N0YXRpYyBpbnQgcnVuX2luX3VzZXJucyhjb25zdCBjaGFyICptbnQsIGludCBhZHZlcnRpc2UsIGludCAqc2VlbikKJiM0Mzt7CiYjNDM7CXVpZF90IHVpZCA9IGdldHVpZCgpOwomIzQzOwlnaWRfdCBnaWQgPSBnZXRnaWQoKTsKJiM0MzsJY2hhciBtYXBbNjRdOwomIzQzOwlpbnQgZjsKJiM0MzsKJiM0MzsJaWYgKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUiB8IENMT05FX05FV05TKSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CS8qIHVucHJpdmlsZWdlZCB1c2VybnMgbW91bnRzIHVuYXZhaWxhYmxlICovCiYjNDM7CiYjNDM7CWYgPSBvcGVuKCYjMzQ7L3Byb2Mvc2VsZi9zZXRncm91cHMmIzM0OywgT19XUk9OTFkpOwomIzQzOwlpZiAoZiAmZ3Q7PSAwKSB7CiYjNDM7CQlkcHJpbnRmKGYsICYjMzQ7ZGVueSYjMzQ7KTsKJiM0MzsJCWNsb3NlKGYpOwomIzQzOwl9CiYjNDM7CXNucHJpbnRmKG1hcCwgc2l6ZW9mKG1hcCksICYjMzQ7MCAlZCAxJiMzNDssIHVpZCk7CiYjNDM7CWYgPSBvcGVuKCYjMzQ7L3Byb2Mvc2VsZi91aWRfbWFwJiMzNDssIE9fV1JPTkxZKTsKJiM0MzsJaWYgKGYgJmx0OyAwIHx8IGRwcmludGYoZiwgJiMzNDslcyYjMzQ7LCBtYXApICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJY2xvc2UoZik7CiYjNDM7CXNucHJpbnRmKG1hcCwgc2l6ZW9mKG1hcCksICYjMzQ7MCAlZCAxJiMzNDssIGdpZCk7CiYjNDM7CWYgPSBvcGVuKCYjMzQ7L3Byb2Mvc2VsZi9naWRfbWFwJiMzNDssIE9fV1JPTkxZKTsKJiM0MzsJaWYgKGYgJmx0OyAwIHx8IGRwcmludGYoZiwgJiMzNDslcyYjMzQ7LCBtYXApICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJY2xvc2UoZik7CiYjNDM7CiYjNDM7CS8qIE5lZWQgYSBtb3VudCBuYW1lc3BhY2Ugd2hlcmUgd2UgY2FuIG1vdW50IGZ1c2UgdW5wcml2aWxlZ2VkLiAqLwomIzQzOwlpZiAobW91bnQoTlVMTCwgJiMzNDsvJiMzNDssIE5VTEwsIE1TX1JFQyB8IE1TX1BSSVZBVEUsIE5VTEwpICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRvX21vdW50X2FuZF9zeW5jZnMobW50LCBhZHZlcnRpc2UsIDAsIHNlZW4pOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbih2b2lkKQomIzQzO3sKJiM0MzsJY2hhciBtbnRbXSA9ICYjMzQ7L3RtcC9mdXNlX3N5bmNmc19YWFhYWFgmIzM0OzsKJiM0MzsJaW50IHNlZW4sIHJldDsKJiM0MzsKJiM0MzsJa3NmdF9wcmludF9oZWFkZXIoKTsKJiM0MzsJa3NmdF9zZXRfcGxhbig0KTsKJiM0MzsKJiM0MzsJLyogSGFyZCB3YXRjaGRvZzogbmV2ZXIgbGV0IGEgc3R1Y2sgc3luY2ZzIGhhbmcgdGhlIHRlc3QgcnVubmVyLiAqLwomIzQzOwlzaWduYWwoU0lHQUxSTSwgU0lHX0RGTCk7CiYjNDM7CWFsYXJtKDYwKTsKJiM0MzsKJiM0MzsJaWYgKGdldGV1aWQoKSAhPSAwKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDt0ZXN0IHJlcXVpcmVzIHJvb3QgdG8gbW91bnQgZnVzZVxuJiMzNDspOwomIzQzOwomIzQzOwlpZiAoIW1rZHRlbXAobW50KSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O21rZHRlbXAgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFQxOiBob3N0LXJvb3QgbW91bnQsIHNlcnZlciBvcHRzIGluIC0mZ3Q7IHN5bmNmcyBtdXN0IHJlYWNoIHNlcnZlci4gKi8KJiM0MzsJcmV0ID0gZG9fbW91bnRfYW5kX3N5bmNmcyhtbnQsIDEsIDAsICZhbXA7c2Vlbik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7VDE6IGNvdWxkIG5vdCBtb3VudCBmdXNlXG4mIzM0Oyk7CiYjNDM7CWVsc2UKJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHQoc2VlbiwKJiM0MzsJCQkJICYjMzQ7VDEgaG9zdC1yb290ICYjNDM7IEZVU0VfSEFTX1NZTkNGUzogc2VydmVyIHJlY2VpdmVzIEZVU0VfU1lOQ0ZTXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFQyOiBob3N0LXJvb3QgbW91bnQsIHNlcnZlciBkb2VzIE5PVCBvcHQgaW4gLSZndDsgbm8gRlVTRV9TWU5DRlMuICovCiYjNDM7CXJldCA9IGRvX21vdW50X2FuZF9zeW5jZnMobW50LCAwLCAwLCAmYW1wO3NlZW4pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0O1QyOiBjb3VsZCBub3QgbW91bnQgZnVzZVxuJiMzNDspOwomIzQzOwllbHNlCiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0KCFzZWVuLAomIzQzOwkJCQkgJiMzNDtUMiBob3N0LXJvb3QsIG5vIG9wdC1pbjogc2VydmVyIGRvZXMgTk9UIHJlY2VpdmUgRlVTRV9TWU5DRlNcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVDM6IHNlcnZlciBvcHRzIGluIGJ1dCBvcGVuZWQgL2Rldi9mdXNlIHdpdGhvdXQgQ0FQX1NZU19BRE1JTiB3aGlsZQomIzQzOwkgKiBzdGlsbCBpbiB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAtJmd0OyBrZXJuZWwgbXVzdCB3aXRoaG9sZAomIzQzOwkgKiBGVVNFX1NZTkNGUy4gIFRoaXMgaXMgdGhlIGNhc2UgdGhhdCBkaXN0aW5ndWlzaGVzIGdhdGluZyBvbiB0aGUKJiM0MzsJICogc2VydmVyJiMzOTtzIHByaXZpbGVnZSBmcm9tIGdhdGluZyBvbiB0aGUgbW91bnQmIzM5O3MgdXNlciBuYW1lc3BhY2UuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBkb19tb3VudF9hbmRfc3luY2ZzKG1udCwgMSwgMSwgJmFtcDtzZWVuKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDtUMzogY291bGQgbm90IG1vdW50IGZ1c2UgdW5wcml2aWxlZ2VkXG4mIzM0Oyk7CiYjNDM7CWVsc2UKJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHQoIXNlZW4sCiYjNDM7CQkJCSAmIzM0O1QzIGluaXRfdXNlcm5zLCBvcGVuZXIgbGFja3MgQ0FQX1NZU19BRE1JTjogRlVTRV9TWU5DRlMgd2l0aGhlbGRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVDQ6IHVucHJpdmlsZWdlZCB1c2VybnMgbW91bnQsIHNlcnZlciBvcHRzIGluIC0mZ3Q7IGtlcm5lbCBtdXN0IHN0aWxsCiYjNDM7CSAqIHdpdGhob2xkIEZVU0VfU1lOQ0ZTLiAgUnVuIGluIGEgY2hpbGQgc2luY2UgaXQgdW5zaGFyZXMgbmFtZXNwYWNlcy4KJiM0MzsJICovCiYjNDM7CXsKJiM0MzsJCXBpZF90IHAgPSBmb3JrKCk7CiYjNDM7CiYjNDM7CQlpZiAocCA9PSAwKSB7CiYjNDM7CQkJaW50IHMgPSAwOwomIzQzOwkJCWludCByID0gcnVuX2luX3VzZXJucyhtbnQsIDEsICZhbXA7cyk7CiYjNDM7CiYjNDM7CQkJX2V4aXQociAmbHQ7IDAgPyAyIDogKHMgPyAxIDogMCkpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlpbnQgc3RhdHVzOwomIzQzOwomIzQzOwkJCXdhaXRwaWQocCwgJmFtcDtzdGF0dXMsIDApOwomIzQzOwkJCWlmICghV0lGRVhJVEVEKHN0YXR1cykpCiYjNDM7CQkJCWtzZnRfdGVzdF9yZXN1bHRfZXJyb3IoJiMzNDtUNDogY2hpbGQgY3Jhc2hlZFxuJiMzNDspOwomIzQzOwkJCWVsc2UgaWYgKFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMikKJiM0MzsJCQkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7VDQ6IHVzZXJucyBmdXNlIG1vdW50IHVuYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlrc2Z0X3Rlc3RfcmVzdWx0KFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMCwKJiM0MzsJCQkJCQkgJiMzNDtUNCB1bnByaXYgdXNlcm5zICYjNDM7IG9wdC1pbjogRlVTRV9TWU5DRlMgd2l0aGhlbGRcbiYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlybWRpcihtbnQpOwomIzQzOwlrc2Z0X2ZpbmlzaGVkKCk7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTUwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBGVVNFIEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBgRlVTRV9IQVNfU1lOQ0ZTYCBmbGFnIHdpdGhpbiB0aGUgRlVTRSBmaWxlc3lzdGVtLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCBtb2RpZnlpbmcgYSBmZXcga2V5IGZpbGVzOiBgZnMvZnVzZS9mdXNlX2kuaGAsIGBmcy9mdXNlL2lub2RlLmNgLCBgaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaGAsIGFuZCwgaW1wb3J0YW50bHksIGFkZGluZyBhIG5ldyBzZWxmdGVzdC4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbiDigJMgd2UgbmVlZCByb2J1c3QgdGVzdGluZyBmb3IgdGhpcyBraW5kIG9mIGNoYW5nZS4KClRoZSBwYXRjaCYjMzk7cyBjb3JlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGFkZGluZyBhIGBzeW5jZnNfY2FwYWJsZWAgYml0IHRvIHRoZSBgZnVzZV9mc19jb250ZXh0YCBhbmQgYGZ1c2VfY29ubmAgc3RydWN0dXJlcy4gVGhpcyBjYXBhYmlsaXR5IGNoZWNrIGlzIGRvbmUgaW4gYGZ1c2Vfb3B0X2ZkYCwgd2hlcmUgaXQgdmVyaWZpZXMgaWYgdGhlIHNlcnZlciBoYXMgb3BlbmVkIGAvZGV2L2Z1c2VgIHdpdGggdGhlIGBDQVBfU1lTX0FETUlOYCBjYXBhYmlsaXR5IHdpdGhpbiB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZS4gVGhhdCBtYWtlcyBzZW5zZSwgY29udHJvbGxpbmcgc3luYyBvcGVyYXRpb25zIHJlcXVpcmVzIGEgbGV2ZWwgb2YgcHJpdmlsZWdlLiBgZnVzZV9zeW5jZnNfZW5hYmxlYCB0aGVuIGNoZWNrcyB0aGUgYEZVU0VfSEFTX1NZTkNGU2AgZmxhZyBhbG9uZyB3aXRoIHRoZSBgc3luY2ZzX2NhcGFibGVgIGZsYWcgYmVmb3JlIGVuYWJsaW5nIHRoZSBzeW5jIG9wZXJhdGlvbi4gRnVydGhlcm1vcmUsIHRoZSBgRlVTRV9IQVNfU1lOQ0ZTYCBmbGFnIGlzIHNldCBkdXJpbmcgdGhlIGBmdXNlX25ld19pbml0YCBmdW5jdGlvbi4KCkVzc2VudGlhbGx5LCB0aGlzIGFkZHMgZnVuY3Rpb25hbCBsb2dpYyBmb3IgYHN5bmNmc2AgcHJvcGFnYXRpb24sIHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBGVVNFIG1vdW50cy4gU2luY2UgaXQmIzM5O3MgdXNlci1mYWNpbmcsIGZ1enppbmcgd2lsbCBiZSAqY3J1Y2lhbCogdG8gZW5zdXJlIGl0cyBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlIGtleSBzeW1ib2xzIHRoaXMgcGF0Y2ggYWZmZWN0cy4gSSYjMzk7dmUgbm90ZWQgdGhhdCBgRlVTRV9GU2AgaXMgdGhlIHJlbGV2YW50IGNvbmZpZy4gVGhlIGZvY3VzIHN5bWJvbHMgYXJlIGBmdXNlX29wdF9mZGAsIGBmdXNlX3N5bmNmc19lbmFibGVgLCBgcHJvY2Vzc19pbml0X3JlcGx5YCwgYGZ1c2VfbmV3X2luaXRgLCBhbmQgYGZ1c2VfZmlsbF9zdXBlcl9jb21tb25gLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB3aGVyZSB0aGUgbmV3IGxvZ2ljIGlzIGludHJvZHVjZWQsIGFuZCB0aGVyZWZvcmUgd2hlcmUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBtaWdodCByZXNpZGUuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGVzZSBjYXJlZnVsbHkuCgpJIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayBgZnMvZnVzZS9pbm9kZS5jYCBqdXN0IGluIGNhc2UgdGhlcmUgYXJlIG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBJIGhhdmVuJiMzOTt0IHNwb3R0ZWQgeWV0LiBBbmQgZmluYWxseSwgSSYjMzk7bGwgbGV2ZXJhZ2UgdGhlIHRvb2xzIGF0IG15IGRpc3Bvc2FsIHRvIHZlcmlmeSB0aGlzIGltcGxlbWVudGF0aW9uJiMzOTtzIGNvcnJlY3RuZXNzIGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIGNvbmNlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVU0VfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xuZnMvZnVzZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMzIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgZnVzZS9pbm9kZS5jIGZvciBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgZnMvZnVzZS9pbm9kZS5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBGVVNFIGhhbmRsZXMgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGBmdXNlX29wdF9mZGAgYW5kIGBmdXNlX3N5bmNmc19lbmFibGVgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGZ1c2Vfb3B0X2ZkYCBpcyBjcml0aWNhbDsgaXQgZGVmaW5lcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHVzZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdXNlcnNwYWNlIEZVU0UgcHJvY2VzcyBhbmQgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IGl0JiMzOTtzIGhhbmRsZWQsIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byBob3cgaXQmIzM5O3MgcGFzc2VkLCB2ZXJpZmllZCwgYW5kIHVzZWQsIGdpdmVuIHRoZSBjb21wbGV4aXRpZXMgb2YgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uIHdpdGhpbiB0aGUgRlVTRSBmcmFtZXdvcmsuIEEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBjb3VsZCBiZSBoZXJlLgoKVGhlbiwgdGhlcmUmIzM5O3MgYGZ1c2Vfc3luY2ZzX2VuYWJsZWAuIFRoaXMgcmVsYXRlcyB0byBzeW5jaHJvbm91cyBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgaW1wbGljYXRpb25zIGlzIGNyaXRpY2FsIGZvciBjb3JyZWN0bHkgd29ya2luZyB3aXRoIEZVU0UuIEkgbmVlZCB0byBzZWUgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgbWFpbiBpbm9kZSBvcGVyYXRpb25zIGFuZCBpZiBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBmZWF0dXJlcy4gU3luY2hyb25vdXMgb3BlcmF0aW9ucyBhcmUgY3J1Y2lhbCBmb3IgdGhlIGludGVncml0eSBvZiBtYW55IGZpbGUgc3lzdGVtcywgYnV0IHRoZXkgY2FuIGJlIGEgcGVyZm9ybWFuY2Uga2lsbGVyIGlmIG5vdCBpbXBsZW1lbnRlZCBjb3JyZWN0bHkuIFRoaXMgcGFydCBtaWdodCBnaXZlIG1lIGluc2lnaHQgaW50byBwZXJmb3JtYW5jZSBpc3N1ZXMgb3IgZGF0YSBpbnRlZ3JpdHkgZ3VhcmFudGVlcy4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2NrcyB0aGF0IGNvdWxkIGFyaXNlIHdoZW4gY29tYmluaW5nIHRoaXMgZmVhdHVyZSB3aXRoIG90aGVyIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgcmVtaW5kIG15c2VsZiBvZiB0aGUgZGV0YWlscy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHRlbGxzIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1c2Vfb3B0X2ZkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvaW5vZGUuYz03NzY9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBmdXNlX2ZzX3BhcmFtZXRlcnNbXSA9IHtcbi0tXG5mcy9mdXNlL2lub2RlLmMtNzg5LVxuZnMvZnVzZS9pbm9kZS5jOjc5MDpzdGF0aWMgaW50IGZ1c2Vfb3B0X2ZkKHN0cnVjdCBmc19jb250ZXh0ICpmc2MsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvZnVzZS9pbm9kZS5jLTc5MS17XG4tLVxuZnMvZnVzZS9pbm9kZS5jPTgxNz1zdGF0aWMgaW50IGZ1c2VfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZzYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxuZnMvZnVzZS9pbm9kZS5jLTg1Ni1cdFx0aWYgKHBhcmFtLVx1MDAzZXR5cGUgPT0gZnNfdmFsdWVfaXNfZmlsZSkge1xuZnMvZnVzZS9pbm9kZS5jOjg1NzpcdFx0XHRyZXR1cm4gZnVzZV9vcHRfZmQoZnNjLCBwYXJhbS1cdTAwM2VmaWxlKTtcbmZzL2Z1c2UvaW5vZGUuYy04NTgtXHRcdH0gZWxzZSB7XG4tLVxuZnMvZnVzZS9pbm9kZS5jLTg2Mi1cbmZzL2Z1c2UvaW5vZGUuYzo4NjM6XHRcdFx0cmV0dXJuIGZ1c2Vfb3B0X2ZkKGZzYywgZmlsZSk7XG5mcy9mdXNlL2lub2RlLmMtODY0LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc3MAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSYjMzk7bSB0aGlua2luZyBpdDoKCioqQ2hlY2tpbmcgYGZ1c2Vfc3luY2ZzX2VuYWJsZWAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIExldCYjMzk7cyBzZWUuLi4gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBjb25maXJtIHRoZSBzdGF0ZSBvZiBgZnVzZV9zeW5jZnNfZW5hYmxlYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBmb3VuZGF0aW9uIG9mIHRoaXMgd2hvbGUgbGluZSBvZiB0aGlua2luZy4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgRlVTRSBzeW5jIGZpbGUgc3lzdGVtIGZ1bmN0aW9uYWxpdHksIG9yIHJhdGhlciwgaWYgd2UgZXZlbiAqYXJlKiBkZWFsaW5nIHdpdGggaXQuIFVuZGVyc3RhbmRpbmcgdGhlIHN0YXRlIG9mIHRoaXMgdmFyaWFibGUgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgZGVlcGVyIGFuYWx5c2lzIGhlcmUuIEl0JiMzOTtsbCBzaGFwZSB0aGUgY29udGV4dCBmb3IgZXZlcnl0aGluZyB0aGF0IGZvbGxvd3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnVzZV9zeW5jZnNfZW5hYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvaW5vZGUuYz03OTA9c3RhdGljIGludCBmdXNlX29wdF9mZChzdHJ1Y3QgZnNfY29udGV4dCAqZnNjLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9mdXNlL2lub2RlLmMtODA2LVx0ICogb3IgZnVzZWJsayByZXF1aXJlcy4gIE9ubHkgc3VjaCBzZXJ2ZXJzIGFyZSB0cnVzdGVkIHRvIHJlY2VpdmVcbmZzL2Z1c2UvaW5vZGUuYzo4MDc6XHQgKiBGVVNFX1NZTkNGUyAoc2VlIGZ1c2Vfc3luY2ZzX2VuYWJsZSgpKS5cbmZzL2Z1c2UvaW5vZGUuYy04MDgtXHQgKi9cbi0tXG5mcy9mdXNlL2lub2RlLmM9MTI3MT1zdHJ1Y3QgZnVzZV9pbml0X2FyZ3Mge1xuLS1cbmZzL2Z1c2UvaW5vZGUuYy0xMjgyLSAqL1xuZnMvZnVzZS9pbm9kZS5jOjEyODM6c3RhdGljIGJvb2wgZnVzZV9zeW5jZnNfZW5hYmxlKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCB1NjQgZmxhZ3MpXG5mcy9mdXNlL2lub2RlLmMtMTI4NC17XG4tLVxuZnMvZnVzZS9pbm9kZS5jPTEyODg9c3RhdGljIHZvaWQgcHJvY2Vzc19pbml0X3JlcGx5KHN0cnVjdCBmdXNlX2FyZ3MgKmFyZ3MsIGludCBlcnJvcilcbi0tXG5mcy9mdXNlL2lub2RlLmMtMTQyOC1cbmZzL2Z1c2UvaW5vZGUuYzoxNDI5Olx0XHRcdGlmIChmdXNlX3N5bmNmc19lbmFibGUoZmMsIGZsYWdzKSlcbmZzL2Z1c2UvaW5vZGUuYy0xNDMwLVx0XHRcdFx0ZmMtXHUwMDNlc3luY19mcyA9IDE7XG4tLVxuZnMvZnVzZS9pbm9kZS5jPTE0NjI9c3RhdGljIHN0cnVjdCBmdXNlX2luaXRfYXJncyAqZnVzZV9uZXdfaW5pdChzdHJ1Y3QgZnVzZV9tb3VudCAqZm0pXG4tLVxuZnMvZnVzZS9pbm9kZS5jLTE0OTgtXHQvKiBPbmx5IG9mZmVyZWQgdG8gc3VmZmljaWVudGx5IHByaXZpbGVnZWQgc2VydmVyczsgc2VlXG5mcy9mdXNlL2lub2RlLmM6MTQ5OTpcdCAqIGZ1c2Vfc3luY2ZzX2VuYWJsZSgpLlxuZnMvZnVzZS9pbm9kZS5jLTE1MDAtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM1NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEZVU0UgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB6ZXJvaW5nIGluIG9uIHNvbWUgY3JpdGljYWwgYXJlYXMgb2YgdGhlIEZVU0UgZnJhbWV3b3JrOiB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UgYW5kIHRoZSBwYXJzaW5nIG9mIHBhcmFtZXRlcnMuIEkgc2VlIG5ldyBmdW5jdGlvbnMgYWRkZWQsIG5hbWVseSBgZnVzZV9zeW5jZnNfZW5hYmxlYCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LCBhbmQgbW9kaWZpY2F0aW9ucyB0byBzb21lIG9mIHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzOiBgZnVzZV9vcHRfZmRgLCBgcHJvY2Vzc19pbml0X3JlcGx5YCwgYGZ1c2VfbmV3X2luaXRgLCBhbmQgYGZ1c2VfZmlsbF9zdXBlcl9jb21tb25gLiBHaXZlbiB0aGVzZSBjaGFuZ2VzLCBhbmQga25vd2luZyB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgaXNzdWVzIGluIGluaXRpYWxpemF0aW9uIGFuZCBvcHRpb24gaGFuZGxpbmcsIHRoZSB0aG91Z2h0IGltbWVkaWF0ZWx5IG9jY3VyczogdGhpcyBpcyBzY3JlYW1pbmcgZm9yIGZ1enppbmcuIFdlIG5lZWQgdG8gdGhyb3cgZXZlcnl0aGluZyB3ZSBjYW4gYXQgdGhpcy4KCk15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzOiBmaXJzdCwgSSB3YW50IHRvIGNvbmZpcm0gdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gYXNzb2NpYXRlZCBpcyBgRlVTRV9GU2AuIEkga25vdyB3aGVyZSB0aGF0IHNpdHMgaW4gdGhlIGFyY2hpdGVjdHVyZSwgYnV0IGNvbmZpcm1pbmcgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIG1ha2UgYSBub3RlIHRvIG15c2VsZiBhbmQgaG9uZSBpbiBvbiB0aG9zZSBzcGVjaWZpYyBzeW1ib2xzLiBgZnVzZV9vcHRfZmRgLCBgZnVzZV9zeW5jZnNfZW5hYmxlYCwgYHByb2Nlc3NfaW5pdF9yZXBseWAsIGBmdXNlX25ld19pbml0YCwgYW5kIGBmdXNlX2ZpbGxfc3VwZXJfY29tbW9uYCBhcmUgbXkgcHJpbWFyeSB0YXJnZXRzLCBhbmQgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHVwZGF0ZWQgbG9naWMgdmVyeSBwcmVjaXNlbHkuCgpCZWZvcmUgSSBjb21taXQgdG8gZGVlcCBkaXZpbmcgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgc2NhbiBmb3Igb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWF5IGJlIHJlbGV2YW50LCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgaW50ZXJhY3Qgd2l0aCBgRlVTRV9GU2AuIENvdWxkIGJlIGNydWNpYWwgZm9yIGVkZ2UgY2FzZSB0ZXN0aW5nLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RlVTRV9QQVNTVEhST1VHSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZS1wYXNzdGhyb3VnaC5yc3Q9MzE9VG8gdXNlIEZVU0UgcGFzc3Rocm91Z2g6XG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZS1wYXNzdGhyb3VnaC5yc3QtMzItXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZS1wYXNzdGhyb3VnaC5yc3Q6MzM6ICAxLiBUaGUgRlVTRSBmaWxlc3lzdGVtIG11c3QgYmUgY29tcGlsZWQgd2l0aCBgYENPTkZJR19GVVNFX1BBU1NUSFJPVUdIYGBcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS9mdXNlLXBhc3N0aHJvdWdoLnJzdC0zNC0gICAgIGVuYWJsZWQuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZS1wYXNzdGhyb3VnaC5yc3QtMzUtICAyLiBUaGUgRlVTRSBkYWVtb24sIGR1cmluZyB0aGUgYGBGVVNFX0lOSVRgYCBoYW5kc2hha2UsIG11c3QgbmVnb3RpYXRlIHRoZVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlL2Z1c2UtcGFzc3Rocm91Z2gucnN0OjM2OiAgICAgYGBGVVNFX1BBU1NUSFJPVUdIYGAgY2FwYWJpbGl0eSBhbmQgc3BlY2lmeSBpdHMgZGVzaXJlZFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlL2Z1c2UtcGFzc3Rocm91Z2gucnN0LTM3LSAgICAgYGBtYXhfc3RhY2tfZGVwdGhgYC5cbi0tXG5mcy9mdXNlL0tjb25maWc9NDM9Y29uZmlnIEZVU0VfREFYXG4tLVxuZnMvZnVzZS9LY29uZmlnLTU2LVxuZnMvZnVzZS9LY29uZmlnOjU3OmNvbmZpZyBGVVNFX1BBU1NUSFJPVUdIXG5mcy9mdXNlL0tjb25maWctNTgtXHRib29sIFwmIzM0O0ZVU0UgcGFzc3Rocm91Z2ggb3BlcmF0aW9ucyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZnVzZS9NYWtlZmlsZT0xNz1mdXNlLSQoQ09ORklHX0ZVU0VfREFYKSAmIzQzOz0gZGF4Lm9cbmZzL2Z1c2UvTWFrZWZpbGU6MTg6ZnVzZS0kKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSAmIzQzOz0gcGFzc3Rocm91Z2gubyBiYWNraW5nLm9cbmZzL2Z1c2UvTWFrZWZpbGUtMTktZnVzZS0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGwub1xuLS1cbmZzL2Z1c2UvZGV2LmM9MjI5OD1zdGF0aWMgbG9uZyBmdXNlX2Rldl9pb2N0bF9iYWNraW5nX29wZW4oc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvZnVzZS9kZXYuYy0yMzA2LVxuZnMvZnVzZS9kZXYuYzoyMzA3Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSlcbmZzL2Z1c2UvZGV2LmMtMjMwOC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmZzL2Z1c2UvZGV2LmM9MjMxNj1zdGF0aWMgbG9uZyBmdXNlX2Rldl9pb2N0bF9iYWNraW5nX2Nsb3NlKHN0cnVjdCBmaWxlICpmaWxlLCBfX3UzMiBfX3VzZXIgKmFyZ3ApXG4tLVxuZnMvZnVzZS9kZXYuYy0yMzIzLVxuZnMvZnVzZS9kZXYuYzoyMzI0Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSlcbmZzL2Z1c2UvZGV2LmMtMjMyNS1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmZzL2Z1c2UvZnVzZV9pLmg9MTAyPXN0cnVjdCBmdXNlX2lub2RlIHtcbi0tXG5mcy9mdXNlL2Z1c2VfaS5oLTIyOC1cdHN0cnVjdCBmdXNlX3N1Ym1vdW50X2xvb2t1cCAqc3VibW91bnRfbG9va3VwO1xuZnMvZnVzZS9mdXNlX2kuaDoyMjk6I2lmZGVmIENPTkZJR19GVVNFX1BBU1NUSFJPVUdIXG5mcy9mdXNlL2Z1c2VfaS5oLTIzMC1cdC8qKiBAZmI6IFJlZmVyZW5jZSB0byBiYWNraW5nIGZpbGUgaW4gcGFzc3Rocm91Z2ggbW9kZSAqL1xuLS1cbmZzL2Z1c2UvZnVzZV9pLmg9MjY5PXN0cnVjdCBmdXNlX2ZpbGUge1xuLS1cbmZzL2Z1c2UvZnVzZV9pLmgtMzE1LVxuZnMvZnVzZS9mdXNlX2kuaDozMTY6I2lmZGVmIENPTkZJR19GVVNFX1BBU1NUSFJPVUdIXG5mcy9mdXNlL2Z1c2VfaS5oLTMxNy1cdC8qKiBAcGFzc3Rocm91Z2g6IFJlZmVyZW5jZSB0byBiYWNraW5nIGZpbGUgaW4gcGFzc3Rocm91Z2ggbW9kZSAqL1xuLS1cbmZzL2Z1c2UvZnVzZV9pLmg9NDE4PXN0cnVjdCBmdXNlX2Nvbm4ge1xuLS1cbmZzL2Z1c2UvZnVzZV9pLmgtNzY5LVxuZnMvZnVzZS9mdXNlX2kuaDo3NzA6I2lmZGVmIENPTkZJR19GVVNFX1BBU1NUSFJPVUdIXG5mcy9mdXNlL2Z1c2VfaS5oLTc3MS1cdC8qKiBAYmFja2luZ19maWxlc19tYXA6IElEUiBmb3IgYmFja2luZyBmaWxlcyBpZHMgKi9cbi0tXG5mcy9mdXNlL2Z1c2VfaS5oPTEyNjM9dm9pZCBmdXNlX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZnVzZV9maWxlICpmZixcbi0tXG5mcy9mdXNlL2Z1c2VfaS5oLTEyNjYtLyogYmFja2luZy5jICovXG5mcy9mdXNlL2Z1c2VfaS5oOjEyNjc6I2lmZGVmIENPTkZJR19GVVNFX1BBU1NUSFJPVUdIXG5mcy9mdXNlL2Z1c2VfaS5oLTEyNjgtc3RydWN0IGZ1c2VfYmFja2luZyAqZnVzZV9iYWNraW5nX2dldChzdHJ1Y3QgZnVzZV9iYWNraW5nICpmYik7XG4tLVxuZnMvZnVzZS9mdXNlX2kuaD0xMjkyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGZ1c2VfYmFja2luZyAqZnVzZV9pbm9kZV9iYWNraW5nKHN0cnVjdCBmdXNlX2lub2RlICpmaSlcbmZzL2Z1c2UvZnVzZV9pLmgtMTI5My17XG5mcy9mdXNlL2Z1c2VfaS5oOjEyOTQ6I2lmZGVmIENPTkZJR19GVVNFX1BBU1NUSFJPVUdIXG5mcy9mdXNlL2Z1c2VfaS5oLTEyOTUtXHRyZXR1cm4gUkVBRF9PTkNFKGZpLVx1MDAzZWZiKTtcbi0tXG5mcy9mdXNlL2Z1c2VfaS5oPTEzMDE9c3RhdGljIGlubGluZSBzdHJ1Y3QgZnVzZV9iYWNraW5nICpmdXNlX2lub2RlX2JhY2tpbmdfc2V0KHN0cnVjdCBmdXNlX2lub2RlICpmaSxcbi0tXG5mcy9mdXNlL2Z1c2VfaS5oLTEzMDMte1xuZnMvZnVzZS9mdXNlX2kuaDoxMzA0OiNpZmRlZiBDT05GSUdfRlVTRV9QQVNTVEhST1VHSFxuZnMvZnVzZS9mdXNlX2kuaC0xMzA1LVx0cmV0dXJuIHhjaGcoXHUwMDI2ZmktXHUwMDNlZmIsIGZiKTtcbi0tXG5mcy9mdXNlL2Z1c2VfaS5oPTEzMTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgZmlsZSAqZnVzZV9maWxlX3Bhc3N0aHJvdWdoKHN0cnVjdCBmdXNlX2ZpbGUgKmZmKVxuZnMvZnVzZS9mdXNlX2kuaC0xMzE1LXtcbmZzL2Z1c2UvZnVzZV9pLmg6MTMxNjojaWZkZWYgQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0hcbmZzL2Z1c2UvZnVzZV9pLmgtMTMxNy1cdHJldHVybiBmZi1cdTAwM2VwYXNzdGhyb3VnaDtcbi0tXG5mcy9mdXNlL2lub2RlLmM9ODQ9c3RhdGljIHN0cnVjdCBpbm9kZSAqZnVzZV9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2Z1c2UvaW5vZGUuYy0xMDUtXG5mcy9mdXNlL2lub2RlLmM6MTA2Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpKVxuZnMvZnVzZS9pbm9kZS5jLTEwNy1cdFx0ZnVzZV9pbm9kZV9iYWNraW5nX3NldChmaSwgTlVMTCk7XG4tLVxuZnMvZnVzZS9pbm9kZS5jPTExOD1zdGF0aWMgdm9pZCBmdXNlX2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9mdXNlL2lub2RlLmMtMTI2LSNlbmRpZlxuZnMvZnVzZS9pbm9kZS5jOjEyNzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSlcbmZzL2Z1c2UvaW5vZGUuYy0xMjgtXHRcdGZ1c2VfYmFja2luZ19wdXQoZnVzZV9pbm9kZV9iYWNraW5nKGZpKSk7XG4tLVxuZnMvZnVzZS9pbm9kZS5jPTk2NT12b2lkIGZ1c2VfY29ubl9pbml0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9tb3VudCAqZm0sXG4tLVxuZnMvZnVzZS9pbm9kZS5jLTk4Ni1cbmZzL2Z1c2UvaW5vZGUuYzo5ODc6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkpXG5mcy9mdXNlL2lub2RlLmMtOTg4LVx0XHRmdXNlX2JhY2tpbmdfZmlsZXNfaW5pdChmYyk7XG4tLVxuZnMvZnVzZS9pbm9kZS5jPTEwMDk9dm9pZCBmdXNlX2Nvbm5fcHV0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjKVxuLS1cbmZzL2Z1c2UvaW5vZGUuYy0xMDI1LVx0fVxuZnMvZnVzZS9pbm9kZS5jOjEwMjY6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkpXG5mcy9mdXNlL2lub2RlLmMtMTAyNy1cdFx0ZnVzZV9iYWNraW5nX2ZpbGVzX2ZyZWUoZmMpO1xuLS1cbmZzL2Z1c2UvaW5vZGUuYz0xMjg4PXN0YXRpYyB2b2lkIHByb2Nlc3NfaW5pdF9yZXBseShzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCBpbnQgZXJyb3IpXG4tLVxuZnMvZnVzZS9pbm9kZS5jLTE0MDEtXHRcdFx0ICpcbmZzL2Z1c2UvaW5vZGUuYzoxNDAyOlx0XHRcdCAqIEFsc28gZG9uJiMzOTt0IGFsbG93IHRoZSBjb21iaW5hdGlvbiBvZiBGVVNFX1BBU1NUSFJPVUdIXG5mcy9mdXNlL2lub2RlLmMtMTQwMy1cdFx0XHQgKiBhbmQgRlVTRV9XUklURUJBQ0tfQ0FDSEUsIGN1cnJlbnQgZGVzaWduIGRvZXNuJiMzOTt0IGhhbmRsZVxuLS1cbmZzL2Z1c2UvaW5vZGUuYy0xNDA1LVx0XHRcdCAqL1xuZnMvZnVzZS9pbm9kZS5jOjE0MDY6XHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpIFx1MDAyNlx1MDAyNlxuZnMvZnVzZS9pbm9kZS5jOjE0MDc6XHRcdFx0ICAgIChmbGFncyBcdTAwMjYgRlVTRV9QQVNTVEhST1VHSCkgXHUwMDI2XHUwMDI2XG5mcy9mdXNlL2lub2RlLmMtMTQwOC1cdFx0XHQgICAgYXJnLVx1MDAzZW1heF9zdGFja19kZXB0aCBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbi0tXG5mcy9mdXNlL2lub2RlLmM9MTQ2Mj1zdGF0aWMgc3RydWN0IGZ1c2VfaW5pdF9hcmdzICpmdXNlX25ld19pbml0KHN0cnVjdCBmdXNlX21vdW50ICpmbSlcbi0tXG5mcy9mdXNlL2lub2RlLmMtMTQ5NS1cdFx0ZmxhZ3MgfD0gRlVTRV9TVUJNT1VOVFM7XG5mcy9mdXNlL2lub2RlLmM6MTQ5NjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSlcbmZzL2Z1c2UvaW5vZGUuYzoxNDk3Olx0XHRmbGFncyB8PSBGVVNFX1BBU1NUSFJPVUdIO1xuZnMvZnVzZS9pbm9kZS5jLTE0OTgtXHQvKiBPbmx5IG9mZmVyZWQgdG8gc3VmZmljaWVudGx5IHByaXZpbGVnZWQgc2VydmVyczsgc2VlXG4tLVxuZnMvZnVzZS9pb21vZGUuYz0xNjg9c3RhdGljIGludCBmdXNlX2ZpbGVfcGFzc3Rocm91Z2hfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9mdXNlL2lvbW9kZS5jLTE3NS1cdC8qIENoZWNrIGFsbG93ZWQgY29uZGl0aW9ucyBmb3IgZmlsZSBvcGVuIGluIHBhc3N0aHJvdWdoIG1vZGUgKi9cbmZzL2Z1c2UvaW9tb2RlLmM6MTc2Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSB8fCAhZmMtXHUwMDNlcGFzc3Rocm91Z2ggfHxcbmZzL2Z1c2UvaW9tb2RlLmMtMTc3LVx0ICAgIChmZi1cdTAwM2VvcGVuX2ZsYWdzIFx1MDAyNiB+Rk9QRU5fUEFTU1RIUk9VR0hfTUFTSykpXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaC0yMTUtICogIDcuNDBcbmluY2x1ZGUvdWFwaS9saW51eC9mdXNlLmg6MjE2OiAqICAtIGFkZCBtYXhfc3RhY2tfZGVwdGggdG8gZnVzZV9pbml0X291dCwgYWRkIEZVU0VfUEFTU1RIUk9VR0ggaW5pdCBmbGFnXG5pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oLTIxNy0gKiAgLSBhZGQgYmFja2luZ19pZCB0byBmdXNlX29wZW5fb3V0LCBhZGQgRk9QRU5fUEFTU1RIUk9VR0ggb3BlbiBmbGFnXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaD0zNTU9c3RydWN0IGZ1c2VfZmlsZV9sb2NrIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oLTQ5OC0jZGVmaW5lIEZVU0VfRElSRUNUX0lPX0FMTE9XX01NQVAgKDFVTEwgXHUwMDNjXHUwMDNjIDM2KVxuaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaDo0OTk6I2RlZmluZSBGVVNFX1BBU1NUSFJPVUdIXHQoMVVMTCBcdTAwM2NcdTAwM2MgMzcpXG5pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oLTUwMC0jZGVmaW5lIEZVU0VfTk9fRVhQT1JUX1NVUFBPUlRcdCgxVUxMIFx1MDAzY1x1MDAzYyAzOClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnZtPTU9Q09ORklHX0ZVU0VfRlM9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy52bTo2OkNPTkZJR19GVVNFX1BBU1NUSFJPVUdIPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcudm0tNy1DT05GSUdfTkVUXzlQX1ZJUlRJTz15XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDI5CgkJCQkJCQlvdXRwdXQ6IDEzMgoJCQkJCQkJdGhvdWdodHM6IDI5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZVU0UgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCB0aGFua2Z1bGx5LiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCBkb2VzbiYjMzk7dCAqcmVseSogb24gYENPTkZJR19GVVNFX1BBU1NUSFJPVUdIYCwgdGhvdWdoIGl0JiMzOTtzIHBsYWNlZCBpbiB0aGUgc2FtZSBmaWxlLiBBbGwgaXQgc2VlbXMgdG8gZG8gaXMgaW50cm9kdWNlIGBGVVNFX0hBU19TWU5DRlNgLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSBpcyBgRlVTRV9GU2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJJiMzOTtsbCBqdXN0IGRvdWJsZS1jaGVjayB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcyBsdXJraW5nLgoKQWxyaWdodCwgYSBxdWljayBzY2FuIG9mIHRoZSB0b3VjaGVkIGZpbGVzLCBgZnMvZnVzZS9mdXNlX2kuaGAsIGBmcy9mdXNlL2lub2RlLmNgLCBhbmQgYGluY2x1ZGUvdWFwaS9saW51eC9mdXNlLmhgLCBjb25maXJtcyB0aGF0IGBGVVNFX0ZTYCBpcyBpbmRlZWQgdGhlICpvbmx5KiByZXF1aXJlZCBjb25maWcuIFRoYXQmIzM5O3MgYSByZWxpZWY7IHNpbXBsZXIgaXMgYWx3YXlzIGJldHRlci4KCk5vdywgbGV0JiMzOTtzIHR1cm4gb3VyIGF0dGVudGlvbiB0byB0aGUga2V5IHN5bWJvbHMgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzLiBJJiMzOTt2ZSBnb3QgbXkgZm9jdXMgbmFycm93ZWQgZG93biB0bzogYGZ1c2Vfb3B0X2ZkYCwgYGZ1c2Vfc3luY2ZzX2VuYWJsZWAsIGBwcm9jZXNzX2luaXRfcmVwbHlgLCBgZnVzZV9uZXdfaW5pdGAsIGFuZCBgZnVzZV9maWxsX3N1cGVyX2NvbW1vbmAuIExldCYjMzk7cyBxdWlja2x5IGRldGVybWluZSBpZiBhbnkgb2YgdGhlc2UgYXJlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4KCmBmdXNlX29wdF9mZGAgaXMgdXNlZCBmb3IgbW91bnQgcGFyYW1ldGVyIHBhcnNpbmcg4oCTIG5vdCBhIGhvdCBwYXRoLiBHb29kLiBgZnVzZV9zeW5jZnNfZW5hYmxlYCBnZXRzIGNhbGxlZCB3aXRoaW4gYHByb2Nlc3NfaW5pdF9yZXBseWAsIHdoaWNoIGl0c2VsZiBpcyBvbmx5IGNhbGxlZCBvbmNlIHBlciBGVVNFIG1vdW50LiBUaGF0JiMzOTtzIG5vdCBsaWtlbHkgdG8gYmUgYSBwZXJmb3JtYW5jZSBjb25jZXJuIGVpdGhlci4gVGhlbiB0aGVyZSYjMzk7cyBgZnVzZV9uZXdfaW5pdGAgYW5kIGBmdXNlX2ZpbGxfc3VwZXJfY29tbW9uYCwgYm90aCBleGVjdXRlZCBvbmx5IG9uY2UgcGVyIG1vdW50LCBzaW1pbGFyIHRvIHRoZSBhYm92ZS4KCkxvb2tzIGxpa2UgYWxsIHRob3NlIGZvY3VzIHN5bWJvbHMgYXJlIGluIHRoZSBjbGVhciBpbiB0ZXJtcyBvZiBiZWluZyBob3QgcGF0aHMuIFRoYXQmIzM5O3MgZ29vZCBuZXdzOyB0aGUgcGF0Y2ggc2VlbXMgcmVsYXRpdmVseSBsb3ctaW1wYWN0IGluIHRlcm1zIG9mIHBlcmZvcm1hbmNlLgoKQWxyaWdodCwgYmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSByZWFkeSB0byBtYXJrIHRoZSByZXN1bHRzIGFzIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVU0VfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmdXNlX29wdF9mZCYjMzQ7LAogICAgJiMzNDtmdXNlX3N5bmNmc19lbmFibGUmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19pbml0X3JlcGx5JiMzNDssCiAgICAmIzM0O2Z1c2VfbmV3X2luaXQmIzM0OywKICAgICYjMzQ7ZnVzZV9maWxsX3N1cGVyX2NvbW1vbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gdGhlIEZVU0UgZmlsZXN5c3RlbSwgYWxsb3dpbmcgcHJpdmlsZWdlZCB1c2Vyc3BhY2Ugc2VydmVycyB0byBvcHQtaW4gdG8gcmVjZWl2aW5nIEZVU0VfU1lOQ0ZTIHJlcXVlc3RzLiBJdCBtb2RpZmllcyBtb3VudCBwYXJhbWV0ZXIgcGFyc2luZyBhbmQgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlVTRV9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1c2Vfb3B0X2ZkJiMzNDssCiAgICAmIzM0O2Z1c2Vfc3luY2ZzX2VuYWJsZSYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX2luaXRfcmVwbHkmIzM0OywKICAgICYjMzQ7ZnVzZV9uZXdfaW5pdCYjMzQ7LAogICAgJiMzNDtmdXNlX2ZpbGxfc3VwZXJfY29tbW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byB0aGUgRlVTRSBmaWxlc3lzdGVtLCBhbGxvd2luZyBwcml2aWxlZ2VkIHVzZXJzcGFjZSBzZXJ2ZXJzIHRvIG9wdC1pbiB0byByZWNlaXZpbmcgRlVTRV9TWU5DRlMgcmVxdWVzdHMuIEl0IG1vZGlmaWVzIG1vdW50IHBhcmFtZXRlciBwYXJzaW5nIGFuZCBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uIGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTc6MzM6MDcuMjc3NzQ4OTEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk5Njc4NTI4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVTRV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1c2Vfb3B0X2ZkXCIsXG4gICAgXCJmdXNlX3N5bmNmc19lbmFibGVcIixcbiAgICBcInByb2Nlc3NfaW5pdF9yZXBseVwiLFxuICAgIFwiZnVzZV9uZXdfaW5pdFwiLFxuICAgIFwiZnVzZV9maWxsX3N1cGVyX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byB0aGUgRlVTRSBmaWxlc3lzdGVtLCBhbGxvd2luZyBwcml2aWxlZ2VkIHVzZXJzcGFjZSBzZXJ2ZXJzIHRvIG9wdC1pbiB0byByZWNlaXZpbmcgRlVTRV9TWU5DRlMgcmVxdWVzdHMuIEl0IG1vZGlmaWVzIG1vdW50IHBhcmFtZXRlciBwYXJzaW5nIGFuZCBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uIGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNzozMzowNy4yNzc3NTU0ODNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MjExMDc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc2MmUyM2U5Y2ZhODQ1NTk5MjZkMmFmYTA2YjlmNzA2Zjc3ZGQ1NWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdW4gMTkgMTc6MzM6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZnVzZS9mdXNlX2kuaCBiL2ZzL2Z1c2UvZnVzZV9pLmhcXG5pbmRleCA4NWY3MzhjNTMxMjI1YS4uM2ZiZTQ5NTdlODM5YjQgMTAwNjQ0XFxuLS0tIGEvZnMvZnVzZS9mdXNlX2kuaFxcbisrKyBiL2ZzL2Z1c2UvZnVzZV9pLmhcXG5AQCAtMzkxLDYgKzM5MSw3IEBAIHN0cnVjdCBmdXNlX2ZzX2NvbnRleHQge1xcbiBcXHRib29sIG5vX2NvbnRyb2w6MTtcXG4gXFx0Ym9vbCBub19mb3JjZV91bW91bnQ6MTtcXG4gXFx0Ym9vbCBsZWdhY3lfb3B0c19zaG93OjE7XFxuK1xcdGJvb2wgc3luY2ZzX2NhcGFibGU6MTtcXG4gXFx0ZW51bSBmdXNlX2RheF9tb2RlIGRheF9tb2RlO1xcbiBcXHR1bnNpZ25lZCBpbnQgbWF4X3JlYWQ7XFxuIFxcdHVuc2lnbmVkIGludCBibGtzaXplO1xcbkBAIC02NzUsNiArNjc2LDE0IEBAIHN0cnVjdCBmdXNlX2Nvbm4ge1xcbiBcXHQvKiogQHN5bmNfZnM6IFByb3BhZ2F0ZSBzeW5jZnMoKSB0byBzZXJ2ZXIgKi9cXG4gXFx0dW5zaWduZWQgaW50IHN5bmNfZnM6MTtcXG4gXFxuK1xcdC8qKlxcbitcXHQgKiBAc3luY2ZzX2NhcGFibGU6IHRoZSBwcml2aWxlZ2UgcmVxdWlyZWQgdG8gaG9ub3IgRlVTRV9IQVNfU1lOQ0ZTIHdhc1xcbitcXHQgKiBwcmVzZW50IHdoZW4gL2Rldi9mdXNlIHdhcyBvcGVuZWQgKENBUF9TWVNfQURNSU4gaW4gdGhlIGluaXRpYWwgdXNlclxcbitcXHQgKiBuYW1lc3BhY2UpLCBpLmUuIHRoZSBzYW1lIHByaXZpbGVnZSB0aGF0IG1vdW50aW5nIHZpcnRpb2ZzL2Z1c2VibGtcXG4rXFx0ICogcmVxdWlyZXMuXFxuK1xcdCAqL1xcbitcXHR1bnNpZ25lZCBpbnQgc3luY2ZzX2NhcGFibGU6MTtcXG4rXFxuIFxcdC8qKiBAaW5pdF9zZWN1cml0eTogSW5pdGlhbGl6ZSBzZWN1cml0eSB4YXR0cnMgd2hlbiBjcmVhdGluZyBhIG5ldyBpbm9kZSAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgaW5pdF9zZWN1cml0eToxO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZnVzZS9pbm9kZS5jIGIvZnMvZnVzZS9pbm9kZS5jXFxuaW5kZXggZDk3NTA3M2M2MDI5NjMuLmJhNzUwNmI1MzlhZTAzIDEwMDY0NFxcbi0tLSBhL2ZzL2Z1c2UvaW5vZGUuY1xcbisrKyBiL2ZzL2Z1c2UvaW5vZGUuY1xcbkBAIC04MDAsNiArODAwLDE1IEBAIHN0YXRpYyBpbnQgZnVzZV9vcHRfZmQoc3RydWN0IGZzX2NvbnRleHQgKmZzYywgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdGlmIChmaWxlLVxcdTAwM2VmX2NyZWQtXFx1MDAzZXVzZXJfbnMgIT0gZnNjLVxcdTAwM2V1c2VyX25zKVxcbiBcXHRcXHRyZXR1cm4gaW52YWxmYyhmc2MsIFxcXCJ3cm9uZyB1c2VyIG5hbWVzcGFjZSBmb3IgZnVzZSBkZXZpY2VcXFwiKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFJlY29yZCB3aGV0aGVyIHRoZSBzZXJ2ZXIgb3BlbmVkIC9kZXYvZnVzZSB3aXRoIENBUF9TWVNfQURNSU4gaW4gdGhlXFxuK1xcdCAqIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgLS0gdGhlIHNhbWUgcHJpdmlsZWdlIHRoYXQgbW91bnRpbmcgdmlydGlvZnNcXG4rXFx0ICogb3IgZnVzZWJsayByZXF1aXJlcy4gIE9ubHkgc3VjaCBzZXJ2ZXJzIGFyZSB0cnVzdGVkIHRvIHJlY2VpdmVcXG4rXFx0ICogRlVTRV9TWU5DRlMgKHNlZSBmdXNlX3N5bmNmc19lbmFibGUoKSkuXFxuK1xcdCAqL1xcbitcXHRjdHgtXFx1MDAzZXN5bmNmc19jYXBhYmxlID0gZmlsZV9uc19jYXBhYmxlKGZpbGUsIFxcdTAwMjZpbml0X3VzZXJfbnMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIENBUF9TWVNfQURNSU4pO1xcbitcXG4gXFx0Y3R4LVxcdTAwM2VmdWQgPSBmdXNlX2Rldl9ncmFiKGZpbGUpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTEyNjYsNiArMTI3NSwxNiBAQCBzdHJ1Y3QgZnVzZV9pbml0X2FyZ3Mge1xcbiBcXHRzdHJ1Y3QgZnVzZV9tb3VudCAqZm07XFxuIH07XFxuIFxcbisvKlxcbisgKiBBIHNlcnZlciBjYW4gc3RhbGwgc3luY2ZzKCkvc3luYygpLCBzbyBvbmx5IGhvbm9yIEZVU0VfSEFTX1NZTkNGUyBmb3JcXG4rICogc2VydmVycyB0aGF0IG9wZW5lZCAvZGV2L2Z1c2Ugd2l0aCBDQVBfU1lTX0FETUlOIGluIHRoZSBpbml0aWFsIHVzZXJcXG4rICogbmFtZXNwYWNlIC0tIHRoZSBzYW1lIHByaXZpbGVnZSByZXF1aXJlZCB0byBtb3VudCB2aXJ0aW9mcyBvciBmdXNlYmxrLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgZnVzZV9zeW5jZnNfZW5hYmxlKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCB1NjQgZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIChmbGFncyBcXHUwMDI2IEZVU0VfSEFTX1NZTkNGUykgXFx1MDAyNlxcdTAwMjYgZmMtXFx1MDAzZXN5bmNmc19jYXBhYmxlO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBwcm9jZXNzX2luaXRfcmVwbHkoc3RydWN0IGZ1c2VfYXJncyAqYXJncywgaW50IGVycm9yKVxcbiB7XFxuIFxcdHN0cnVjdCBmdXNlX2luaXRfYXJncyAqaWEgPSBjb250YWluZXJfb2YoYXJncywgdHlwZW9mKCppYSksIGFyZ3MpO1xcbkBAIC0xNDA2LDYgKzE0MjUsOSBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2luaXRfcmVwbHkoc3RydWN0IGZ1c2VfYXJncyAqYXJncywgaW50IGVycm9yKVxcbiBcXG4gXFx0XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRlVTRV9SRVFVRVNUX1RJTUVPVVQpXFxuIFxcdFxcdFxcdFxcdHRpbWVvdXQgPSBhcmctXFx1MDAzZXJlcXVlc3RfdGltZW91dDtcXG4rXFxuK1xcdFxcdFxcdGlmIChmdXNlX3N5bmNmc19lbmFibGUoZmMsIGZsYWdzKSlcXG4rXFx0XFx0XFx0XFx0ZmMtXFx1MDAzZXN5bmNfZnMgPSAxO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRyYV9wYWdlcyA9IGZjLVxcdTAwM2VtYXhfcmVhZCAvIFBBR0VfU0laRTtcXG4gXFx0XFx0XFx0ZmMtXFx1MDAzZW5vX2xvY2sgPSAxO1xcbkBAIC0xNDczLDYgKzE0OTUsMTEgQEAgc3RhdGljIHN0cnVjdCBmdXNlX2luaXRfYXJncyAqZnVzZV9uZXdfaW5pdChzdHJ1Y3QgZnVzZV9tb3VudCAqZm0pXFxuIFxcdFxcdGZsYWdzIHw9IEZVU0VfU1VCTU9VTlRTO1xcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkpXFxuIFxcdFxcdGZsYWdzIHw9IEZVU0VfUEFTU1RIUk9VR0g7XFxuK1xcdC8qIE9ubHkgb2ZmZXJlZCB0byBzdWZmaWNpZW50bHkgcHJpdmlsZWdlZCBzZXJ2ZXJzOyBzZWVcXG4rXFx0ICogZnVzZV9zeW5jZnNfZW5hYmxlKCkuXFxuK1xcdCAqL1xcbitcXHRpZiAoZm0tXFx1MDAzZWZjLVxcdTAwM2VzeW5jZnNfY2FwYWJsZSlcXG4rXFx0XFx0ZmxhZ3MgfD0gRlVTRV9IQVNfU1lOQ0ZTO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogVGhpcyBpcyBqdXN0IGFuIGluZm9ybWF0aW9uIGZsYWcgZm9yIGZ1c2Ugc2VydmVyLiBObyBuZWVkIHRvIGNoZWNrXFxuQEAgLTE3NjYsNiArMTc5Myw3IEBAIGludCBmdXNlX2ZpbGxfc3VwZXJfY29tbW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmdXNlX2ZzX2NvbnRleHQgKmN0eClcXG4gXFxuIFxcdGZjLVxcdTAwM2VkZWZhdWx0X3Blcm1pc3Npb25zID0gY3R4LVxcdTAwM2VkZWZhdWx0X3Blcm1pc3Npb25zO1xcbiBcXHRmYy1cXHUwMDNlYWxsb3dfb3RoZXIgPSBjdHgtXFx1MDAzZWFsbG93X290aGVyO1xcbitcXHRmYy1cXHUwMDNlc3luY2ZzX2NhcGFibGUgPSBjdHgtXFx1MDAzZXN5bmNmc19jYXBhYmxlO1xcbiBcXHRmYy1cXHUwMDNldXNlcl9pZCA9IGN0eC1cXHUwMDNldXNlcl9pZDtcXG4gXFx0ZmMtXFx1MDAzZWdyb3VwX2lkID0gY3R4LVxcdTAwM2Vncm91cF9pZDtcXG4gXFx0ZmMtXFx1MDAzZWxlZ2FjeV9vcHRzX3Nob3cgPSBjdHgtXFx1MDAzZWxlZ2FjeV9vcHRzX3Nob3c7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9mdXNlLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oXFxuaW5kZXggYzEzZTFmOWEyZjEyYmQuLmMwNzhjNWYwZjk0ZWM5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9mdXNlLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oXFxuQEAgLTI0MCw2ICsyNDAsOSBAQFxcbiAgKiAgLSBhZGQgRlVTRV9DT1BZX0ZJTEVfUkFOR0VfNjRcXG4gICogIC0gYWRkIHN0cnVjdCBmdXNlX2NvcHlfZmlsZV9yYW5nZV9vdXRcXG4gICogIC0gYWRkIEZVU0VfTk9USUZZX1BSVU5FXFxuKyAqXFxuKyAqICA3LjQ2XFxuKyAqICAtIGFkZCBGVVNFX0hBU19TWU5DRlMgb3B0LWluIGZsYWcgZm9yIHByaXZpbGVnZWQgdXNlcnNwYWNlIHNlcnZlcnNcXG4gICovXFxuIFxcbiAjaWZuZGVmIF9MSU5VWF9GVVNFX0hcXG5AQCAtMjc1LDcgKzI3OCw3IEBAXFxuICNkZWZpbmUgRlVTRV9LRVJORUxfVkVSU0lPTiA3XFxuIFxcbiAvKiogTWlub3IgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBpbnRlcmZhY2UgKi9cXG4tI2RlZmluZSBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OIDQ1XFxuKyNkZWZpbmUgRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTiA0NlxcbiBcXG4gLyoqIFRoZSBub2RlIElEIG9mIHRoZSByb290IGlub2RlICovXFxuICNkZWZpbmUgRlVTRV9ST09UX0lEIDFcXG5AQCAtNDQ4LDYgKzQ1MSwxMiBAQCBzdHJ1Y3QgZnVzZV9maWxlX2xvY2sge1xcbiAgKiBGVVNFX09WRVJfSU9fVVJJTkc6IEluZGljYXRlIHRoYXQgY2xpZW50IHN1cHBvcnRzIGlvLXVyaW5nXFxuICAqIEZVU0VfUkVRVUVTVF9USU1FT1VUOiBrZXJuZWwgc3VwcG9ydHMgdGltaW5nIG91dCByZXF1ZXN0cy5cXG4gICpcXHRcXHRcXHQgaW5pdF9vdXQucmVxdWVzdF90aW1lb3V0IGNvbnRhaW5zIHRoZSB0aW1lb3V0IChpbiBzZWNzKVxcbisgKiBGVVNFX0hBU19TWU5DRlM6IHNlcnZlciByZXF1ZXN0cyB0aGF0IHN5bmNmcygpL3N5bmMoKSBiZSBwcm9wYWdhdGVkIGFzXFxuKyAqXFx0XFx0RlVTRV9TWU5DRlMgcmVxdWVzdHMuICBTaW5jZSBhbiB1bnRydXN0ZWQgc2VydmVyIGNhbiB1c2UgdGhpc1xcbisgKlxcdFxcdHRvIHN0YWxsIHN5bmMoKSwgaXQgaXMgb25seSBob25vcmVkIHdoZW4gL2Rldi9mdXNlIHdhcyBvcGVuZWRcXG4rICpcXHRcXHR3aXRoIENBUF9TWVNfQURNSU4gaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgKHRoZSBzYW1lXFxuKyAqXFx0XFx0cHJpdmlsZWdlIHRoYXQgbW91bnRpbmcgdmlydGlvZnMgb3IgZnVzZWJsayByZXF1aXJlcykuXFxuKyAqXFx0XFx0SW5zdWZmaWNpZW50bHkgcHJpdmlsZWdlZCBzZXJ2ZXJzIGlnbm9yZSBpdC5cXG4gICovXFxuICNkZWZpbmUgRlVTRV9BU1lOQ19SRUFEXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMClcXG4gI2RlZmluZSBGVVNFX1BPU0lYX0xPQ0tTXFx0KDEgXFx1MDAzY1xcdTAwM2MgMSlcXG5AQCAtNDk1LDYgKzUwNCw3IEBAIHN0cnVjdCBmdXNlX2ZpbGVfbG9jayB7XFxuICNkZWZpbmUgRlVTRV9BTExPV19JRE1BUFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDQwKVxcbiAjZGVmaW5lIEZVU0VfT1ZFUl9JT19VUklOR1xcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDQxKVxcbiAjZGVmaW5lIEZVU0VfUkVRVUVTVF9USU1FT1VUXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgNDIpXFxuKyNkZWZpbmUgRlVTRV9IQVNfU1lOQ0ZTXFx0XFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgNDMpXFxuIFxcbiAvKipcXG4gICogQ1VTRSBJTklUIHJlcXVlc3QvcmVwbHkgZmxhZ3NcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS8uZ2l0aWdub3JlXFxuaW5kZXggM2U3MmU3NDJkMDhlOGMuLjRlOTJmMzYzYzc0YWIzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvLmdpdGlnbm9yZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvLmdpdGlnbm9yZVxcbkBAIC0xLDMgKzEsNCBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gZnVzZV9tbnRcXG4gZnVzZWN0bF90ZXN0XFxuK3Rlc3Rfc3luY2ZzXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlXFxuaW5kZXggNjEyYWFkNjlhOTNhYTQuLmNiYmEwMTYzNTIyNmRjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlXFxuQEAgLTIsNyArMiw3IEBAXFxuIFxcbiBDRkxBR1MgKz0gLVdhbGwgLU8yIC1nICQoS0hEUl9JTkNMVURFUylcXG4gXFxuLVRFU1RfR0VOX1BST0dTIDo9IGZ1c2VjdGxfdGVzdFxcbitURVNUX0dFTl9QUk9HUyA6PSBmdXNlY3RsX3Rlc3QgdGVzdF9zeW5jZnNcXG4gVEVTVF9HRU5fRklMRVMgOj0gZnVzZV9tbnRcXG4gXFxuIGluY2x1ZGUgLi4vLi4vbGliLm1rXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvdGVzdF9zeW5jZnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvdGVzdF9zeW5jZnMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwZmIzNDc4NTU0YWY1XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvdGVzdF9zeW5jZnMuY1xcbkBAIC0wLDAgKzEsMzcwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIFRlc3QgdGhhdCBGVVNFX1NZTkNGUyBpcyBwcm9wYWdhdGVkIHRvIGEgdXNlcnNwYWNlIHNlcnZlciBvbmx5IHdoZW4gdGhlXFxuKyAqIHNlcnZlciBvcHRzIGluIHdpdGggRlVTRV9IQVNfU1lOQ0ZTICphbmQqIG9wZW5lZCAvZGV2L2Z1c2Ugd2l0aFxcbisgKiBDQVBfU1lTX0FETUlOIGluIHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlLlxcbisgKlxcbisgKiBVbmxpa2UgdGhlIGxpYmZ1c2UtYmFzZWQgc2VsZnRlc3RzLCB0aGlzIHRhbGtzIHRoZSByYXcgRlVTRSB3aXJlIHByb3RvY29sXFxuKyAqIG92ZXIgL2Rldi9mdXNlIHNvIGl0IGNhbiAoYSkgY2hvb3NlIHdoZXRoZXIgdG8gYWR2ZXJ0aXNlIEZVU0VfSEFTX1NZTkNGUyBpblxcbisgKiB0aGUgSU5JVCByZXBseSBhbmQgKGIpIG9ic2VydmUgZGlyZWN0bHkgd2hldGhlciBhIEZVU0VfU1lOQ0ZTIG9wY29kZSBhcnJpdmVzLlxcbisgKi9cXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nwb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL2V2ZW50ZmQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tb3VudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N0YXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9zeXNjYWxsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy91aW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYXBhYmlsaXR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mdXNlLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiLi4vLi4va3NlbGZ0ZXN0LmhcXFwiXFxuK1xcbisjZGVmaW5lIEZVU0VfUk9PVF9JRCAxXFxuK1xcbisvKlxcbisgKiBBZGQgb3IgZHJvcCBDQVBfU1lTX0FETUlOIGluIHRoZSBlZmZlY3RpdmUgc2V0IHZpYSByYXcgY2FwZ2V0L2NhcHNldFxcbisgKiAoYXZvaWRzIGEgbGliY2FwIGRlcGVuZGVuY3kpLiAgVXNlZCB0byBjb25zdHJ1Y3QgYSBzZXJ2ZXIgdGhhdCBvcGVuc1xcbisgKiAvZGV2L2Z1c2Ugd2l0aG91dCB0aGUgcHJpdmlsZWdlIEZVU0VfSEFTX1NZTkNGUyByZXF1aXJlcy5cXG4rICovXFxuK3N0YXRpYyBpbnQgc2V0X3N5c2FkbWluKGludCBvbilcXG4re1xcbitcXHRzdHJ1Y3QgX191c2VyX2NhcF9oZWFkZXJfc3RydWN0IGhkciA9IHtcXG4rXFx0XFx0LnZlcnNpb24gPSBfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OXzMsXFxuK1xcdFxcdC5waWQgPSAwLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgX191c2VyX2NhcF9kYXRhX3N0cnVjdCBkYXRhW19MSU5VWF9DQVBBQklMSVRZX1UzMlNfM10gPSB7fTtcXG4rXFx0dW5zaWduZWQgaW50IGlkeCA9IENBUF9TWVNfQURNSU4gXFx1MDAzZVxcdTAwM2UgNTtcXG4rXFx0X191MzIgYml0ID0gMVUgXFx1MDAzY1xcdTAwM2MgKENBUF9TWVNfQURNSU4gXFx1MDAyNiAzMSk7XFxuK1xcbitcXHRpZiAoc3lzY2FsbChTWVNfY2FwZ2V0LCBcXHUwMDI2aGRyLCBkYXRhKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRpZiAob24pXFxuK1xcdFxcdGRhdGFbaWR4XS5lZmZlY3RpdmUgfD0gYml0O1xcbitcXHRlbHNlXFxuK1xcdFxcdGRhdGFbaWR4XS5lZmZlY3RpdmUgXFx1MDAyNj0gfmJpdDtcXG4rXFx0cmV0dXJuIHN5c2NhbGwoU1lTX2NhcHNldCwgXFx1MDAyNmhkciwgZGF0YSk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIGV2ZW50ZmQgdGhlIHNlcnZlciBjaGlsZCB3cml0ZXMgb25jZSB3aGVuIGl0IHJlY2VpdmVzIEZVU0VfU1lOQ0ZTOyB0aGVcXG4rICogcGFyZW50IHBvbGwoKXMgaXQgdG8gb2JzZXJ2ZSAob3IgcnVsZSBvdXQpIHByb3BhZ2F0aW9uLlxcbisgKi9cXG4rc3RhdGljIGludCBzeW5jZnNfZXZmZDtcXG4rXFxuK3N0YXRpYyB2b2lkIHJlcGx5KGludCBmZCwgdWludDY0X3QgdW5pcXVlLCBpbnQgZXJyb3IsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0c3RydWN0IGZ1c2Vfb3V0X2hlYWRlciBvaCA9IHtcXG4rXFx0XFx0LmxlbiA9IHNpemVvZihvaCkgKyBsZW4sXFxuK1xcdFxcdC5lcnJvciA9IGVycm9yLFxcbitcXHRcXHQudW5pcXVlID0gdW5pcXVlLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgaW92ZWMgaW92WzJdID0ge1xcbitcXHRcXHR7IFxcdTAwMjZvaCwgc2l6ZW9mKG9oKSB9LFxcbitcXHRcXHR7IGRhdGEsIGxlbiB9LFxcbitcXHR9O1xcbitcXG4rXFx0aWYgKHdyaXRldihmZCwgaW92LCBkYXRhID8gMiA6IDEpIFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcInNlcnZlciB3cml0ZXYgZmFpbGVkOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZmlsbF9hdHRyKHN0cnVjdCBmdXNlX2F0dHIgKmEsIHVpbnQ2NF90IGlubywgdWludDMyX3QgbW9kZSxcXG4rXFx0XFx0ICAgICAgdWludDMyX3QgbmxpbmspXFxuK3tcXG4rXFx0bWVtc2V0KGEsIDAsIHNpemVvZigqYSkpO1xcbitcXHRhLVxcdTAwM2Vpbm8gPSBpbm87XFxuK1xcdGEtXFx1MDAzZW1vZGUgPSBtb2RlO1xcbitcXHRhLVxcdTAwM2VubGluayA9IG5saW5rO1xcbitcXHRhLVxcdTAwM2VibGtzaXplID0gNDA5NjtcXG4rfVxcbitcXG4rLypcXG4rICogTWluaW1hbCBGVVNFIHNlcnZlci4gIEFkdmVydGlzZXMgRlVTRV9IQVNfU1lOQ0ZTIGluIGl0cyBJTklUIHJlcGx5IGlmZlxcbisgKiBAYWR2ZXJ0aXNlIGlzIHNldC4gIFNpZ25hbHMgc3luY2ZzX2V2ZmQgd2hlbiBhIEZVU0VfU1lOQ0ZTIG9wY29kZSBhcnJpdmVzLlxcbisgKi9cXG4rI2RlZmluZSBTRVJWRVJfTUFYX1dSSVRFIDY1NTM2XFxuK3N0YXRpYyB2b2lkIHJ1bl9zZXJ2ZXIoaW50IGZkLCBpbnQgYWR2ZXJ0aXNlKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBrZXJuZWwgcmVqZWN0cyByZWFkcyAoRUlOVkFMKSB3aG9zZSBidWZmZXIgaXMgc21hbGxlciB0aGFuXFxuK1xcdCAqIG1heF93cml0ZSArIGhlYWRlciwgc28gc2l6ZSBnZW5lcm91c2x5IGZvciB0aGUgbWF4X3dyaXRlIHdlXFxuK1xcdCAqIGFkdmVydGlzZSBpbiB0aGUgSU5JVCByZXBseSBiZWxvdy5cXG4rXFx0ICovXFxuK1xcdHN0YXRpYyBjaGFyIGJ1ZltTRVJWRVJfTUFYX1dSSVRFICsgNDA5Nl07XFxuK1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdHNzaXplX3QgbiA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRcXHRzdHJ1Y3QgZnVzZV9pbl9oZWFkZXIgKmloID0gKHZvaWQgKilidWY7XFxuK1xcbitcXHRcXHRpZiAobiBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0aWYgKGVycm5vID09IEVJTlRSIHx8IGVycm5vID09IEVBR0FJTilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdHJldHVybjtcXHRcXHQvKiBkZXZpY2UgY2xvc2VkIG9uIHVubW91bnQvYWJvcnQgKi9cXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAobiBcXHUwMDNjIChzc2l6ZV90KXNpemVvZigqaWgpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN3aXRjaCAoaWgtXFx1MDAzZW9wY29kZSkge1xcbitcXHRcXHRjYXNlIEZVU0VfSU5JVDoge1xcbitcXHRcXHRcXHRzdHJ1Y3QgZnVzZV9pbml0X2luICppbiA9ICh2b2lkICopKGloICsgMSk7XFxuK1xcdFxcdFxcdHN0cnVjdCBmdXNlX2luaXRfb3V0IG91dCA9IHswfTtcXG4rXFx0XFx0XFx0dWludDY0X3QgZmxhZ3MgPSBGVVNFX0lOSVRfRVhUO1xcbitcXG4rXFx0XFx0XFx0b3V0Lm1ham9yID0gRlVTRV9LRVJORUxfVkVSU0lPTjtcXG4rXFx0XFx0XFx0b3V0Lm1pbm9yID0gRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTjtcXG4rXFx0XFx0XFx0b3V0Lm1heF9yZWFkYWhlYWQgPSBpbi1cXHUwMDNlbWF4X3JlYWRhaGVhZDtcXG4rXFx0XFx0XFx0b3V0Lm1heF93cml0ZSA9IFNFUlZFUl9NQVhfV1JJVEU7XFxuK1xcdFxcdFxcdG91dC5tYXhfYmFja2dyb3VuZCA9IDE2O1xcbitcXHRcXHRcXHRvdXQuY29uZ2VzdGlvbl90aHJlc2hvbGQgPSAxMjtcXG4rXFx0XFx0XFx0aWYgKGFkdmVydGlzZSlcXG4rXFx0XFx0XFx0XFx0ZmxhZ3MgfD0gRlVTRV9IQVNfU1lOQ0ZTO1xcbitcXHRcXHRcXHRvdXQuZmxhZ3MgPSBmbGFncztcXG4rXFx0XFx0XFx0b3V0LmZsYWdzMiA9IGZsYWdzIFxcdTAwM2VcXHUwMDNlIDMyO1xcbitcXHRcXHRcXHRyZXBseShmZCwgaWgtXFx1MDAzZXVuaXF1ZSwgMCwgXFx1MDAyNm91dCwgc2l6ZW9mKG91dCkpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRjYXNlIEZVU0VfR0VUQVRUUjoge1xcbitcXHRcXHRcXHRzdHJ1Y3QgZnVzZV9hdHRyX291dCBvdXQgPSB7MH07XFxuK1xcbitcXHRcXHRcXHRmaWxsX2F0dHIoXFx1MDAyNm91dC5hdHRyLCBGVVNFX1JPT1RfSUQsIFNfSUZESVIgfCAwNzU1LCAyKTtcXG4rXFx0XFx0XFx0cmVwbHkoZmQsIGloLVxcdTAwM2V1bmlxdWUsIDAsIFxcdTAwMjZvdXQsIHNpemVvZihvdXQpKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Y2FzZSBGVVNFX1NZTkNGUzoge1xcbitcXHRcXHRcXHR1aW50NjRfdCBvbmUgPSAxO1xcbitcXG4rXFx0XFx0XFx0aWYgKHdyaXRlKHN5bmNmc19ldmZkLCBcXHUwMDI2b25lLCBzaXplb2Yob25lKSkgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwic2VydmVyIGV2ZW50ZmQgd3JpdGUgZmFpbGVkOiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdFxcdHJlcGx5KGZkLCBpaC1cXHUwMDNldW5pcXVlLCAwLCBOVUxMLCAwKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQW55dGhpbmcgZWxzZSAoZS5nLiBPUEVORElSIGZyb20gb3BlbmluZyB0aGUgbW91bnRcXG4rXFx0XFx0XFx0ICogcm9vdCkgaXMgbm90IG5lZWRlZCB0byBkcml2ZSB0aGlzIHRlc3Q7IC1FTk9TWVMgbGV0c1xcbitcXHRcXHRcXHQgKiB0aGUga2VybmVsIHByb2NlZWQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRyZXBseShmZCwgaWgtXFx1MDAzZXVuaXF1ZSwgLUVOT1NZUywgTlVMTCwgMCk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4rLypcXG4rICogTW91bnQgYSBmdXNlIGZzIGJhY2tlZCBieSBhIGZvcmtlZCBzZXJ2ZXIsIGlzc3VlIHN5bmNmcygpLCBhbmQgcmVwb3J0XFxuKyAqIHdoZXRoZXIgdGhlIHNlcnZlciBvYnNlcnZlZCBGVVNFX1NZTkNGUy4gIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBpZiB0aGVcXG4rICogZW52aXJvbm1lbnQgY291bGQgbm90IHN1cHBvcnQgdGhlIHRlc3QgKGNhbGxlciBzaG91bGQgc2tpcCkuXFxuKyAqXFxuKyAqIElmIEB1bnByaXZfb3BlbiBpcyBzZXQsIC9kZXYvZnVzZSBpcyBvcGVuZWQgd2l0aCBDQVBfU1lTX0FETUlOIGRyb3BwZWRcXG4rICogKHJlZ2FpbmVkIG9ubHkgZm9yIHRoZSBtb3VudCgpIHN5c2NhbGwpLCBzbyB0aGUgZGV2aWNlIG9wZW5lciAtLSB0aGVcXG4rICogc2VydmVyIHByaW5jaXBhbCBGVVNFX0hBU19TWU5DRlMgaXMgZ2F0ZWQgb24gLS0gbGFja3MgdGhlIHByaXZpbGVnZSBldmVuXFxuKyAqIHRob3VnaCBpdCByZW1haW5zIGluIHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlLlxcbisgKi9cXG4rc3RhdGljIGludCBkb19tb3VudF9hbmRfc3luY2ZzKGNvbnN0IGNoYXIgKm1udCwgaW50IGFkdmVydGlzZSwgaW50IHVucHJpdl9vcGVuLFxcbitcXHRcXHRcXHQgICAgICAgaW50ICpzZWVuKVxcbit7XFxuK1xcdHN0cnVjdCBwb2xsZmQgcGZkID0geyAuZXZlbnRzID0gUE9MTElOIH07XFxuK1xcdGNoYXIgb3B0c1syNTZdO1xcbitcXHRpbnQgZmQsIG1mZCA9IC0xLCBpO1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcbitcXHRzeW5jZnNfZXZmZCA9IGV2ZW50ZmQoMCwgRUZEX0NMT0VYRUMpO1xcbitcXHRpZiAoc3luY2ZzX2V2ZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRpZiAodW5wcml2X29wZW4gXFx1MDAyNlxcdTAwMjYgc2V0X3N5c2FkbWluKDApKVxcbitcXHRcXHRnb3RvIG91dF9ldmZkO1xcbitcXHRmZCA9IG9wZW4oXFxcIi9kZXYvZnVzZVxcXCIsIE9fUkRXUik7XFxuK1xcdGlmICh1bnByaXZfb3BlbiBcXHUwMDI2XFx1MDAyNiBzZXRfc3lzYWRtaW4oMSkpIHtcXG4rXFx0XFx0aWYgKGZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0Z290byBvdXRfZXZmZDtcXG4rXFx0fVxcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dF9ldmZkO1xcbitcXG4rXFx0bWtkaXIobW50LCAwNzU1KTtcXG4rXFx0c25wcmludGYob3B0cywgc2l6ZW9mKG9wdHMpLFxcbitcXHRcXHQgXFxcImZkPSVkLHJvb3Rtb2RlPTQwMDAwLHVzZXJfaWQ9JWQsZ3JvdXBfaWQ9JWRcXFwiLFxcbitcXHRcXHQgZmQsIGdldHVpZCgpLCBnZXRnaWQoKSk7XFxuK1xcbitcXHRpZiAobW91bnQoXFxcImZ1c2VcXFwiLCBtbnQsIFxcXCJmdXNlXFxcIiwgMCwgb3B0cykgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dF9mZDtcXG4rXFxuK1xcdHBpZCA9IGZvcmsoKTtcXG4rXFx0aWYgKHBpZCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0X3Vtb3VudDtcXG4rXFx0aWYgKHBpZCA9PSAwKSB7XFxuK1xcdFxcdHJ1bl9zZXJ2ZXIoZmQsIGFkdmVydGlzZSk7XFxuK1xcdFxcdF9leGl0KDApO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcGFyZW50IGRvZXMgbm90IHNlcnZpY2UgdGhlIGZ1c2UgZmQ7IHRoZSBjaGlsZCBkb2VzLiAgQ2xvc2Ugb3VyXFxuK1xcdCAqIGNvcHkgc28gdGhlIGtlcm5lbCBzZWVzIGEgc2luZ2xlIHNlcnZlciwgYW5kIHNvIHRoYXQgaWYgdGhlIGNoaWxkXFxuK1xcdCAqIGRpZXMgdGhlIGNvbm5lY3Rpb24gYWJvcnRzIGluc3RlYWQgb2YgaGFuZ2luZyB1cyBmb3JldmVyLlxcbitcXHQgKi9cXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogbW91bnQoKSByZXR1cm5zIGJlZm9yZSB0aGUgc2VydmVyIGhhcyBhbnN3ZXJlZCBGVVNFX0lOSVQsIHNvIHRoZVxcbitcXHQgKiBmaXJzdCBvcGVuKCkgY2FuIHJhY2UgYW5kIGZhaWwgd2l0aCBFTk9UQ09OTjsgcmV0cnkgdW50aWwgdGhlXFxuK1xcdCAqIGhhbmRzaGFrZSBzZXR0bGVzLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDEwMDA7IGkrKykge1xcbitcXHRcXHRtZmQgPSBvcGVuKG1udCwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7XFxuK1xcdFxcdGlmIChtZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdHVzbGVlcCgxMDAwKTtcXG4rXFx0fVxcbitcXHRpZiAobWZkIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0c3luY2ZzKG1mZCk7XFxuK1xcdFxcdGNsb3NlKG1mZCk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE5vIHdhaXRpbmcgaXMgbmVlZGVkOiB0aGUgc2VydmVyIHdyaXRlcyBzeW5jZnNfZXZmZCBiZWZvcmUgaXQgcmVwbGllc1xcbitcXHQgKiB0byBGVVNFX1NZTkNGUywgYW5kIHRoYXQgcmVwbHkgaXMgd2hhdCB1bmJsb2NrcyB0aGUgc3luY2hyb25vdXNcXG4rXFx0ICogc3luY2ZzKCkgYWJvdmUuICBTbyBvbmNlIHN5bmNmcygpIGhhcyByZXR1cm5lZCwgdGhlIGV2ZW50ZmQgaXMgYWxyZWFkeVxcbitcXHQgKiBzaWduYWxsZWQgaWYgdGhlIG9wY29kZSB3YXMgcHJvcGFnYXRlZCwgYW5kIHdpbGwgbmV2ZXIgYmUgb3RoZXJ3aXNlLlxcbitcXHQgKiBwb2xsKCkgd2l0aCBhIHplcm8gdGltZW91dCB0aGVyZWZvcmUgZGVjaWRlcyBib3RoIGNhc2VzIGltbWVkaWF0ZWx5LlxcbitcXHQgKi9cXG4rXFx0cGZkLmZkID0gc3luY2ZzX2V2ZmQ7XFxuK1xcdCpzZWVuID0gcG9sbChcXHUwMDI2cGZkLCAxLCAwKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgKHBmZC5yZXZlbnRzIFxcdTAwMjYgUE9MTElOKTtcXG4rXFxuK1xcdGtpbGwocGlkLCBTSUdLSUxMKTtcXG4rXFx0d2FpdHBpZChwaWQsIE5VTEwsIDApO1xcbitcXHR1bW91bnQyKG1udCwgTU5UX0RFVEFDSCk7XFxuK1xcdGNsb3NlKHN5bmNmc19ldmZkKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfdW1vdW50OlxcbitcXHR1bW91bnQyKG1udCwgTU5UX0RFVEFDSCk7XFxuK291dF9mZDpcXG4rXFx0Y2xvc2UoZmQpO1xcbitvdXRfZXZmZDpcXG4rXFx0Y2xvc2Uoc3luY2ZzX2V2ZmQpO1xcbitcXHRyZXR1cm4gLTE7XFxuK31cXG4rXFxuKy8qIFQ0OiBzYW1lIGFzIGFib3ZlIGJ1dCB0aGUgbW91bnQgaXMgY3JlYXRlZCBpbnNpZGUgYSBuZXcgdXNlciBuYW1lc3BhY2UuICovXFxuK3N0YXRpYyBpbnQgcnVuX2luX3VzZXJucyhjb25zdCBjaGFyICptbnQsIGludCBhZHZlcnRpc2UsIGludCAqc2VlbilcXG4re1xcbitcXHR1aWRfdCB1aWQgPSBnZXR1aWQoKTtcXG4rXFx0Z2lkX3QgZ2lkID0gZ2V0Z2lkKCk7XFxuK1xcdGNoYXIgbWFwWzY0XTtcXG4rXFx0aW50IGY7XFxuK1xcbitcXHRpZiAodW5zaGFyZShDTE9ORV9ORVdVU0VSIHwgQ0xPTkVfTkVXTlMpIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcdC8qIHVucHJpdmlsZWdlZCB1c2VybnMgbW91bnRzIHVuYXZhaWxhYmxlICovXFxuK1xcbitcXHRmID0gb3BlbihcXFwiL3Byb2Mvc2VsZi9zZXRncm91cHNcXFwiLCBPX1dST05MWSk7XFxuK1xcdGlmIChmIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0ZHByaW50ZihmLCBcXFwiZGVueVxcXCIpO1xcbitcXHRcXHRjbG9zZShmKTtcXG4rXFx0fVxcbitcXHRzbnByaW50ZihtYXAsIHNpemVvZihtYXApLCBcXFwiMCAlZCAxXFxcIiwgdWlkKTtcXG4rXFx0ZiA9IG9wZW4oXFxcIi9wcm9jL3NlbGYvdWlkX21hcFxcXCIsIE9fV1JPTkxZKTtcXG4rXFx0aWYgKGYgXFx1MDAzYyAwIHx8IGRwcmludGYoZiwgXFxcIiVzXFxcIiwgbWFwKSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0Y2xvc2UoZik7XFxuK1xcdHNucHJpbnRmKG1hcCwgc2l6ZW9mKG1hcCksIFxcXCIwICVkIDFcXFwiLCBnaWQpO1xcbitcXHRmID0gb3BlbihcXFwiL3Byb2Mvc2VsZi9naWRfbWFwXFxcIiwgT19XUk9OTFkpO1xcbitcXHRpZiAoZiBcXHUwMDNjIDAgfHwgZHByaW50ZihmLCBcXFwiJXNcXFwiLCBtYXApIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRjbG9zZShmKTtcXG4rXFxuK1xcdC8qIE5lZWQgYSBtb3VudCBuYW1lc3BhY2Ugd2hlcmUgd2UgY2FuIG1vdW50IGZ1c2UgdW5wcml2aWxlZ2VkLiAqL1xcbitcXHRpZiAobW91bnQoTlVMTCwgXFxcIi9cXFwiLCBOVUxMLCBNU19SRUMgfCBNU19QUklWQVRFLCBOVUxMKSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHJldHVybiBkb19tb3VudF9hbmRfc3luY2ZzKG1udCwgYWR2ZXJ0aXNlLCAwLCBzZWVuKTtcXG4rfVxcbitcXG4raW50IG1haW4odm9pZClcXG4re1xcbitcXHRjaGFyIG1udFtdID0gXFxcIi90bXAvZnVzZV9zeW5jZnNfWFhYWFhYXFxcIjtcXG4rXFx0aW50IHNlZW4sIHJldDtcXG4rXFxuK1xcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcdGtzZnRfc2V0X3BsYW4oNCk7XFxuK1xcbitcXHQvKiBIYXJkIHdhdGNoZG9nOiBuZXZlciBsZXQgYSBzdHVjayBzeW5jZnMgaGFuZyB0aGUgdGVzdCBydW5uZXIuICovXFxuK1xcdHNpZ25hbChTSUdBTFJNLCBTSUdfREZMKTtcXG4rXFx0YWxhcm0oNjApO1xcbitcXG4rXFx0aWYgKGdldGV1aWQoKSAhPSAwKVxcbitcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwidGVzdCByZXF1aXJlcyByb290IHRvIG1vdW50IGZ1c2VcXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKCFta2R0ZW1wKG1udCkpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwibWtkdGVtcCBmYWlsZWRcXFxcblxcXCIpO1xcbitcXG4rXFx0LyogVDE6IGhvc3Qtcm9vdCBtb3VudCwgc2VydmVyIG9wdHMgaW4gLVxcdTAwM2Ugc3luY2ZzIG11c3QgcmVhY2ggc2VydmVyLiAqL1xcbitcXHRyZXQgPSBkb19tb3VudF9hbmRfc3luY2ZzKG1udCwgMSwgMCwgXFx1MDAyNnNlZW4pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCJUMTogY291bGQgbm90IG1vdW50IGZ1c2VcXFxcblxcXCIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHQoc2VlbixcXG4rXFx0XFx0XFx0XFx0IFxcXCJUMSBob3N0LXJvb3QgKyBGVVNFX0hBU19TWU5DRlM6IHNlcnZlciByZWNlaXZlcyBGVVNFX1NZTkNGU1xcXFxuXFxcIik7XFxuK1xcbitcXHQvKiBUMjogaG9zdC1yb290IG1vdW50LCBzZXJ2ZXIgZG9lcyBOT1Qgb3B0IGluIC1cXHUwMDNlIG5vIEZVU0VfU1lOQ0ZTLiAqL1xcbitcXHRyZXQgPSBkb19tb3VudF9hbmRfc3luY2ZzKG1udCwgMCwgMCwgXFx1MDAyNnNlZW4pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCJUMjogY291bGQgbm90IG1vdW50IGZ1c2VcXFxcblxcXCIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHQoIXNlZW4sXFxuK1xcdFxcdFxcdFxcdCBcXFwiVDIgaG9zdC1yb290LCBubyBvcHQtaW46IHNlcnZlciBkb2VzIE5PVCByZWNlaXZlIEZVU0VfU1lOQ0ZTXFxcXG5cXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFQzOiBzZXJ2ZXIgb3B0cyBpbiBidXQgb3BlbmVkIC9kZXYvZnVzZSB3aXRob3V0IENBUF9TWVNfQURNSU4gd2hpbGVcXG4rXFx0ICogc3RpbGwgaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgLVxcdTAwM2Uga2VybmVsIG11c3Qgd2l0aGhvbGRcXG4rXFx0ICogRlVTRV9TWU5DRlMuICBUaGlzIGlzIHRoZSBjYXNlIHRoYXQgZGlzdGluZ3Vpc2hlcyBnYXRpbmcgb24gdGhlXFxuK1xcdCAqIHNlcnZlcidzIHByaXZpbGVnZSBmcm9tIGdhdGluZyBvbiB0aGUgbW91bnQncyB1c2VyIG5hbWVzcGFjZS5cXG4rXFx0ICovXFxuK1xcdHJldCA9IGRvX21vdW50X2FuZF9zeW5jZnMobW50LCAxLCAxLCBcXHUwMDI2c2Vlbik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIlQzOiBjb3VsZCBub3QgbW91bnQgZnVzZSB1bnByaXZpbGVnZWRcXFxcblxcXCIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHQoIXNlZW4sXFxuK1xcdFxcdFxcdFxcdCBcXFwiVDMgaW5pdF91c2VybnMsIG9wZW5lciBsYWNrcyBDQVBfU1lTX0FETUlOOiBGVVNFX1NZTkNGUyB3aXRoaGVsZFxcXFxuXFxcIik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUNDogdW5wcml2aWxlZ2VkIHVzZXJucyBtb3VudCwgc2VydmVyIG9wdHMgaW4gLVxcdTAwM2Uga2VybmVsIG11c3Qgc3RpbGxcXG4rXFx0ICogd2l0aGhvbGQgRlVTRV9TWU5DRlMuICBSdW4gaW4gYSBjaGlsZCBzaW5jZSBpdCB1bnNoYXJlcyBuYW1lc3BhY2VzLlxcbitcXHQgKi9cXG4rXFx0e1xcbitcXHRcXHRwaWRfdCBwID0gZm9yaygpO1xcbitcXG4rXFx0XFx0aWYgKHAgPT0gMCkge1xcbitcXHRcXHRcXHRpbnQgcyA9IDA7XFxuK1xcdFxcdFxcdGludCByID0gcnVuX2luX3VzZXJucyhtbnQsIDEsIFxcdTAwMjZzKTtcXG4rXFxuK1xcdFxcdFxcdF9leGl0KHIgXFx1MDAzYyAwID8gMiA6IChzID8gMSA6IDApKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0aW50IHN0YXR1cztcXG4rXFxuK1xcdFxcdFxcdHdhaXRwaWQocCwgXFx1MDAyNnN0YXR1cywgMCk7XFxuK1xcdFxcdFxcdGlmICghV0lGRVhJVEVEKHN0YXR1cykpXFxuK1xcdFxcdFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfZXJyb3IoXFxcIlQ0OiBjaGlsZCBjcmFzaGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZWxzZSBpZiAoV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAyKVxcbitcXHRcXHRcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIlQ0OiB1c2VybnMgZnVzZSBtb3VudCB1bmF2YWlsYWJsZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0a3NmdF90ZXN0X3Jlc3VsdChXRVhJVFNUQVRVUyhzdGF0dXMpID09IDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBcXFwiVDQgdW5wcml2IHVzZXJucyArIG9wdC1pbjogRlVTRV9TWU5DRlMgd2l0aGhlbGRcXFxcblxcXCIpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJtZGlyKG1udCk7XFxuK1xcdGtzZnRfZmluaXNoZWQoKTtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNzozMzowNy45MjA3NTA5MTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzI0ODE4MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVU0VfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdXNlX29wdF9mZFwiLFxuICAgIFwiZnVzZV9zeW5jZnNfZW5hYmxlXCIsXG4gICAgXCJwcm9jZXNzX2luaXRfcmVwbHlcIixcbiAgICBcImZ1c2VfbmV3X2luaXRcIixcbiAgICBcImZ1c2VfZmlsbF9zdXBlcl9jb21tb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gdGhlIEZVU0UgZmlsZXN5c3RlbSwgYWxsb3dpbmcgcHJpdmlsZWdlZCB1c2Vyc3BhY2Ugc2VydmVycyB0byBvcHQtaW4gdG8gcmVjZWl2aW5nIEZVU0VfU1lOQ0ZTIHJlcXVlc3RzLiBJdCBtb2RpZmllcyBtb3VudCBwYXJhbWV0ZXIgcGFyc2luZyBhbmQgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3NjJlMjNlOWNmYTg0NTU5OTI2ZDJhZmEwNmI5ZjcwNmY3N2RkNTVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMTkgMTc6MzM6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Z1c2VfaS5oIGIvZnMvZnVzZS9mdXNlX2kuaFxuaW5kZXggODVmNzM4YzUzMTIyNWEuLjNmYmU0OTU3ZTgzOWI0IDEwMDY0NFxuLS0tIGEvZnMvZnVzZS9mdXNlX2kuaFxuKysrIGIvZnMvZnVzZS9mdXNlX2kuaFxuQEAgLTM5MSw2ICszOTEsNyBAQCBzdHJ1Y3QgZnVzZV9mc19jb250ZXh0IHtcbiBcdGJvb2wgbm9fY29udHJvbDoxO1xuIFx0Ym9vbCBub19mb3JjZV91bW91bnQ6MTtcbiBcdGJvb2wgbGVnYWN5X29wdHNfc2hvdzoxO1xuK1x0Ym9vbCBzeW5jZnNfY2FwYWJsZToxO1xuIFx0ZW51bSBmdXNlX2RheF9tb2RlIGRheF9tb2RlO1xuIFx0dW5zaWduZWQgaW50IG1heF9yZWFkO1xuIFx0dW5zaWduZWQgaW50IGJsa3NpemU7XG5AQCAtNjc1LDYgKzY3NiwxNCBAQCBzdHJ1Y3QgZnVzZV9jb25uIHtcbiBcdC8qKiBAc3luY19mczogUHJvcGFnYXRlIHN5bmNmcygpIHRvIHNlcnZlciAqL1xuIFx0dW5zaWduZWQgaW50IHN5bmNfZnM6MTtcbiBcbitcdC8qKlxuK1x0ICogQHN5bmNmc19jYXBhYmxlOiB0aGUgcHJpdmlsZWdlIHJlcXVpcmVkIHRvIGhvbm9yIEZVU0VfSEFTX1NZTkNGUyB3YXNcbitcdCAqIHByZXNlbnQgd2hlbiAvZGV2L2Z1c2Ugd2FzIG9wZW5lZCAoQ0FQX1NZU19BRE1JTiBpbiB0aGUgaW5pdGlhbCB1c2VyXG4rXHQgKiBuYW1lc3BhY2UpLCBpLmUuIHRoZSBzYW1lIHByaXZpbGVnZSB0aGF0IG1vdW50aW5nIHZpcnRpb2ZzL2Z1c2VibGtcbitcdCAqIHJlcXVpcmVzLlxuK1x0ICovXG4rXHR1bnNpZ25lZCBpbnQgc3luY2ZzX2NhcGFibGU6MTtcbitcbiBcdC8qKiBAaW5pdF9zZWN1cml0eTogSW5pdGlhbGl6ZSBzZWN1cml0eSB4YXR0cnMgd2hlbiBjcmVhdGluZyBhIG5ldyBpbm9kZSAqL1xuIFx0dW5zaWduZWQgaW50IGluaXRfc2VjdXJpdHk6MTtcbiBcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2lub2RlLmMgYi9mcy9mdXNlL2lub2RlLmNcbmluZGV4IGQ5NzUwNzNjNjAyOTYzLi5iYTc1MDZiNTM5YWUwMyAxMDA2NDRcbi0tLSBhL2ZzL2Z1c2UvaW5vZGUuY1xuKysrIGIvZnMvZnVzZS9pbm9kZS5jXG5AQCAtODAwLDYgKzgwMCwxNSBAQCBzdGF0aWMgaW50IGZ1c2Vfb3B0X2ZkKHN0cnVjdCBmc19jb250ZXh0ICpmc2MsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0aWYgKGZpbGUtXHUwMDNlZl9jcmVkLVx1MDAzZXVzZXJfbnMgIT0gZnNjLVx1MDAzZXVzZXJfbnMpXG4gXHRcdHJldHVybiBpbnZhbGZjKGZzYywgXCJ3cm9uZyB1c2VyIG5hbWVzcGFjZSBmb3IgZnVzZSBkZXZpY2VcIik7XG4gXG4rXHQvKlxuK1x0ICogUmVjb3JkIHdoZXRoZXIgdGhlIHNlcnZlciBvcGVuZWQgL2Rldi9mdXNlIHdpdGggQ0FQX1NZU19BRE1JTiBpbiB0aGVcbitcdCAqIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgLS0gdGhlIHNhbWUgcHJpdmlsZWdlIHRoYXQgbW91bnRpbmcgdmlydGlvZnNcbitcdCAqIG9yIGZ1c2VibGsgcmVxdWlyZXMuICBPbmx5IHN1Y2ggc2VydmVycyBhcmUgdHJ1c3RlZCB0byByZWNlaXZlXG4rXHQgKiBGVVNFX1NZTkNGUyAoc2VlIGZ1c2Vfc3luY2ZzX2VuYWJsZSgpKS5cbitcdCAqL1xuK1x0Y3R4LVx1MDAzZXN5bmNmc19jYXBhYmxlID0gZmlsZV9uc19jYXBhYmxlKGZpbGUsIFx1MDAyNmluaXRfdXNlcl9ucyxcbitcdFx0XHRcdFx0ICAgICAgQ0FQX1NZU19BRE1JTik7XG4rXG4gXHRjdHgtXHUwMDNlZnVkID0gZnVzZV9kZXZfZ3JhYihmaWxlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTEyNjYsNiArMTI3NSwxNiBAQCBzdHJ1Y3QgZnVzZV9pbml0X2FyZ3Mge1xuIFx0c3RydWN0IGZ1c2VfbW91bnQgKmZtO1xuIH07XG4gXG4rLypcbisgKiBBIHNlcnZlciBjYW4gc3RhbGwgc3luY2ZzKCkvc3luYygpLCBzbyBvbmx5IGhvbm9yIEZVU0VfSEFTX1NZTkNGUyBmb3JcbisgKiBzZXJ2ZXJzIHRoYXQgb3BlbmVkIC9kZXYvZnVzZSB3aXRoIENBUF9TWVNfQURNSU4gaW4gdGhlIGluaXRpYWwgdXNlclxuKyAqIG5hbWVzcGFjZSAtLSB0aGUgc2FtZSBwcml2aWxlZ2UgcmVxdWlyZWQgdG8gbW91bnQgdmlydGlvZnMgb3IgZnVzZWJsay5cbisgKi9cbitzdGF0aWMgYm9vbCBmdXNlX3N5bmNmc19lbmFibGUoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHU2NCBmbGFncylcbit7XG4rXHRyZXR1cm4gKGZsYWdzIFx1MDAyNiBGVVNFX0hBU19TWU5DRlMpIFx1MDAyNlx1MDAyNiBmYy1cdTAwM2VzeW5jZnNfY2FwYWJsZTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcHJvY2Vzc19pbml0X3JlcGx5KHN0cnVjdCBmdXNlX2FyZ3MgKmFyZ3MsIGludCBlcnJvcilcbiB7XG4gXHRzdHJ1Y3QgZnVzZV9pbml0X2FyZ3MgKmlhID0gY29udGFpbmVyX29mKGFyZ3MsIHR5cGVvZigqaWEpLCBhcmdzKTtcbkBAIC0xNDA2LDYgKzE0MjUsOSBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2luaXRfcmVwbHkoc3RydWN0IGZ1c2VfYXJncyAqYXJncywgaW50IGVycm9yKVxuIFxuIFx0XHRcdGlmIChmbGFncyBcdTAwMjYgRlVTRV9SRVFVRVNUX1RJTUVPVVQpXG4gXHRcdFx0XHR0aW1lb3V0ID0gYXJnLVx1MDAzZXJlcXVlc3RfdGltZW91dDtcbitcbitcdFx0XHRpZiAoZnVzZV9zeW5jZnNfZW5hYmxlKGZjLCBmbGFncykpXG4rXHRcdFx0XHRmYy1cdTAwM2VzeW5jX2ZzID0gMTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRyYV9wYWdlcyA9IGZjLVx1MDAzZW1heF9yZWFkIC8gUEFHRV9TSVpFO1xuIFx0XHRcdGZjLVx1MDAzZW5vX2xvY2sgPSAxO1xuQEAgLTE0NzMsNiArMTQ5NSwxMSBAQCBzdGF0aWMgc3RydWN0IGZ1c2VfaW5pdF9hcmdzICpmdXNlX25ld19pbml0KHN0cnVjdCBmdXNlX21vdW50ICpmbSlcbiBcdFx0ZmxhZ3MgfD0gRlVTRV9TVUJNT1VOVFM7XG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkpXG4gXHRcdGZsYWdzIHw9IEZVU0VfUEFTU1RIUk9VR0g7XG4rXHQvKiBPbmx5IG9mZmVyZWQgdG8gc3VmZmljaWVudGx5IHByaXZpbGVnZWQgc2VydmVyczsgc2VlXG4rXHQgKiBmdXNlX3N5bmNmc19lbmFibGUoKS5cbitcdCAqL1xuK1x0aWYgKGZtLVx1MDAzZWZjLVx1MDAzZXN5bmNmc19jYXBhYmxlKVxuK1x0XHRmbGFncyB8PSBGVVNFX0hBU19TWU5DRlM7XG4gXG4gXHQvKlxuIFx0ICogVGhpcyBpcyBqdXN0IGFuIGluZm9ybWF0aW9uIGZsYWcgZm9yIGZ1c2Ugc2VydmVyLiBObyBuZWVkIHRvIGNoZWNrXG5AQCAtMTc2Niw2ICsxNzkzLDcgQEAgaW50IGZ1c2VfZmlsbF9zdXBlcl9jb21tb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZ1c2VfZnNfY29udGV4dCAqY3R4KVxuIFxuIFx0ZmMtXHUwMDNlZGVmYXVsdF9wZXJtaXNzaW9ucyA9IGN0eC1cdTAwM2VkZWZhdWx0X3Blcm1pc3Npb25zO1xuIFx0ZmMtXHUwMDNlYWxsb3dfb3RoZXIgPSBjdHgtXHUwMDNlYWxsb3dfb3RoZXI7XG4rXHRmYy1cdTAwM2VzeW5jZnNfY2FwYWJsZSA9IGN0eC1cdTAwM2VzeW5jZnNfY2FwYWJsZTtcbiBcdGZjLVx1MDAzZXVzZXJfaWQgPSBjdHgtXHUwMDNldXNlcl9pZDtcbiBcdGZjLVx1MDAzZWdyb3VwX2lkID0gY3R4LVx1MDAzZWdyb3VwX2lkO1xuIFx0ZmMtXHUwMDNlbGVnYWN5X29wdHNfc2hvdyA9IGN0eC1cdTAwM2VsZWdhY3lfb3B0c19zaG93O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9mdXNlLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oXG5pbmRleCBjMTNlMWY5YTJmMTJiZC4uYzA3OGM1ZjBmOTRlYzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oXG5AQCAtMjQwLDYgKzI0MCw5IEBAXG4gICogIC0gYWRkIEZVU0VfQ09QWV9GSUxFX1JBTkdFXzY0XG4gICogIC0gYWRkIHN0cnVjdCBmdXNlX2NvcHlfZmlsZV9yYW5nZV9vdXRcbiAgKiAgLSBhZGQgRlVTRV9OT1RJRllfUFJVTkVcbisgKlxuKyAqICA3LjQ2XG4rICogIC0gYWRkIEZVU0VfSEFTX1NZTkNGUyBvcHQtaW4gZmxhZyBmb3IgcHJpdmlsZWdlZCB1c2Vyc3BhY2Ugc2VydmVyc1xuICAqL1xuIFxuICNpZm5kZWYgX0xJTlVYX0ZVU0VfSFxuQEAgLTI3NSw3ICsyNzgsNyBAQFxuICNkZWZpbmUgRlVTRV9LRVJORUxfVkVSU0lPTiA3XG4gXG4gLyoqIE1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgaW50ZXJmYWNlICovXG4tI2RlZmluZSBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OIDQ1XG4rI2RlZmluZSBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OIDQ2XG4gXG4gLyoqIFRoZSBub2RlIElEIG9mIHRoZSByb290IGlub2RlICovXG4gI2RlZmluZSBGVVNFX1JPT1RfSUQgMVxuQEAgLTQ0OCw2ICs0NTEsMTIgQEAgc3RydWN0IGZ1c2VfZmlsZV9sb2NrIHtcbiAgKiBGVVNFX09WRVJfSU9fVVJJTkc6IEluZGljYXRlIHRoYXQgY2xpZW50IHN1cHBvcnRzIGlvLXVyaW5nXG4gICogRlVTRV9SRVFVRVNUX1RJTUVPVVQ6IGtlcm5lbCBzdXBwb3J0cyB0aW1pbmcgb3V0IHJlcXVlc3RzLlxuICAqXHRcdFx0IGluaXRfb3V0LnJlcXVlc3RfdGltZW91dCBjb250YWlucyB0aGUgdGltZW91dCAoaW4gc2VjcylcbisgKiBGVVNFX0hBU19TWU5DRlM6IHNlcnZlciByZXF1ZXN0cyB0aGF0IHN5bmNmcygpL3N5bmMoKSBiZSBwcm9wYWdhdGVkIGFzXG4rICpcdFx0RlVTRV9TWU5DRlMgcmVxdWVzdHMuICBTaW5jZSBhbiB1bnRydXN0ZWQgc2VydmVyIGNhbiB1c2UgdGhpc1xuKyAqXHRcdHRvIHN0YWxsIHN5bmMoKSwgaXQgaXMgb25seSBob25vcmVkIHdoZW4gL2Rldi9mdXNlIHdhcyBvcGVuZWRcbisgKlx0XHR3aXRoIENBUF9TWVNfQURNSU4gaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgKHRoZSBzYW1lXG4rICpcdFx0cHJpdmlsZWdlIHRoYXQgbW91bnRpbmcgdmlydGlvZnMgb3IgZnVzZWJsayByZXF1aXJlcykuXG4rICpcdFx0SW5zdWZmaWNpZW50bHkgcHJpdmlsZWdlZCBzZXJ2ZXJzIGlnbm9yZSBpdC5cbiAgKi9cbiAjZGVmaW5lIEZVU0VfQVNZTkNfUkVBRFx0XHQoMSBcdTAwM2NcdTAwM2MgMClcbiAjZGVmaW5lIEZVU0VfUE9TSVhfTE9DS1NcdCgxIFx1MDAzY1x1MDAzYyAxKVxuQEAgLTQ5NSw2ICs1MDQsNyBAQCBzdHJ1Y3QgZnVzZV9maWxlX2xvY2sge1xuICNkZWZpbmUgRlVTRV9BTExPV19JRE1BUFx0KDFVTEwgXHUwMDNjXHUwMDNjIDQwKVxuICNkZWZpbmUgRlVTRV9PVkVSX0lPX1VSSU5HXHQoMVVMTCBcdTAwM2NcdTAwM2MgNDEpXG4gI2RlZmluZSBGVVNFX1JFUVVFU1RfVElNRU9VVFx0KDFVTEwgXHUwMDNjXHUwMDNjIDQyKVxuKyNkZWZpbmUgRlVTRV9IQVNfU1lOQ0ZTXHRcdCgxVUxMIFx1MDAzY1x1MDAzYyA0MylcbiBcbiAvKipcbiAgKiBDVVNFIElOSVQgcmVxdWVzdC9yZXBseSBmbGFnc1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvLmdpdGlnbm9yZVxuaW5kZXggM2U3MmU3NDJkMDhlOGMuLjRlOTJmMzYzYzc0YWIzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS8uZ2l0aWdub3JlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlLy5naXRpZ25vcmVcbkBAIC0xLDMgKzEsNCBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIGZ1c2VfbW50XG4gZnVzZWN0bF90ZXN0XG4rdGVzdF9zeW5jZnNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuaW5kZXggNjEyYWFkNjlhOTNhYTQuLmNiYmEwMTYzNTIyNmRjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuQEAgLTIsNyArMiw3IEBAXG4gXG4gQ0ZMQUdTICs9IC1XYWxsIC1PMiAtZyAkKEtIRFJfSU5DTFVERVMpXG4gXG4tVEVTVF9HRU5fUFJPR1MgOj0gZnVzZWN0bF90ZXN0XG4rVEVTVF9HRU5fUFJPR1MgOj0gZnVzZWN0bF90ZXN0IHRlc3Rfc3luY2ZzXG4gVEVTVF9HRU5fRklMRVMgOj0gZnVzZV9tbnRcbiBcbiBpbmNsdWRlIC4uLy4uL2xpYi5ta1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvdGVzdF9zeW5jZnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvdGVzdF9zeW5jZnMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MGZiMzQ3ODU1NGFmNVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS90ZXN0X3N5bmNmcy5jXG5AQCAtMCwwICsxLDM3MCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBUZXN0IHRoYXQgRlVTRV9TWU5DRlMgaXMgcHJvcGFnYXRlZCB0byBhIHVzZXJzcGFjZSBzZXJ2ZXIgb25seSB3aGVuIHRoZVxuKyAqIHNlcnZlciBvcHRzIGluIHdpdGggRlVTRV9IQVNfU1lOQ0ZTICphbmQqIG9wZW5lZCAvZGV2L2Z1c2Ugd2l0aFxuKyAqIENBUF9TWVNfQURNSU4gaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UuXG4rICpcbisgKiBVbmxpa2UgdGhlIGxpYmZ1c2UtYmFzZWQgc2VsZnRlc3RzLCB0aGlzIHRhbGtzIHRoZSByYXcgRlVTRSB3aXJlIHByb3RvY29sXG4rICogb3ZlciAvZGV2L2Z1c2Ugc28gaXQgY2FuIChhKSBjaG9vc2Ugd2hldGhlciB0byBhZHZlcnRpc2UgRlVTRV9IQVNfU1lOQ0ZTIGluXG4rICogdGhlIElOSVQgcmVwbHkgYW5kIChiKSBvYnNlcnZlIGRpcmVjdGx5IHdoZXRoZXIgYSBGVVNFX1NZTkNGUyBvcGNvZGUgYXJyaXZlcy5cbisgKi9cbisjZGVmaW5lIF9HTlVfU09VUkNFXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL2V2ZW50ZmQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tb3VudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy91aW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jYXBhYmlsaXR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mdXNlLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcIi4uLy4uL2tzZWxmdGVzdC5oXCJcbitcbisjZGVmaW5lIEZVU0VfUk9PVF9JRCAxXG4rXG4rLypcbisgKiBBZGQgb3IgZHJvcCBDQVBfU1lTX0FETUlOIGluIHRoZSBlZmZlY3RpdmUgc2V0IHZpYSByYXcgY2FwZ2V0L2NhcHNldFxuKyAqIChhdm9pZHMgYSBsaWJjYXAgZGVwZW5kZW5jeSkuICBVc2VkIHRvIGNvbnN0cnVjdCBhIHNlcnZlciB0aGF0IG9wZW5zXG4rICogL2Rldi9mdXNlIHdpdGhvdXQgdGhlIHByaXZpbGVnZSBGVVNFX0hBU19TWU5DRlMgcmVxdWlyZXMuXG4rICovXG4rc3RhdGljIGludCBzZXRfc3lzYWRtaW4oaW50IG9uKVxuK3tcbitcdHN0cnVjdCBfX3VzZXJfY2FwX2hlYWRlcl9zdHJ1Y3QgaGRyID0ge1xuK1x0XHQudmVyc2lvbiA9IF9MSU5VWF9DQVBBQklMSVRZX1ZFUlNJT05fMyxcbitcdFx0LnBpZCA9IDAsXG4rXHR9O1xuK1x0c3RydWN0IF9fdXNlcl9jYXBfZGF0YV9zdHJ1Y3QgZGF0YVtfTElOVVhfQ0FQQUJJTElUWV9VMzJTXzNdID0ge307XG4rXHR1bnNpZ25lZCBpbnQgaWR4ID0gQ0FQX1NZU19BRE1JTiBcdTAwM2VcdTAwM2UgNTtcbitcdF9fdTMyIGJpdCA9IDFVIFx1MDAzY1x1MDAzYyAoQ0FQX1NZU19BRE1JTiBcdTAwMjYgMzEpO1xuK1xuK1x0aWYgKHN5c2NhbGwoU1lTX2NhcGdldCwgXHUwMDI2aGRyLCBkYXRhKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0aWYgKG9uKVxuK1x0XHRkYXRhW2lkeF0uZWZmZWN0aXZlIHw9IGJpdDtcbitcdGVsc2VcbitcdFx0ZGF0YVtpZHhdLmVmZmVjdGl2ZSBcdTAwMjY9IH5iaXQ7XG4rXHRyZXR1cm4gc3lzY2FsbChTWVNfY2Fwc2V0LCBcdTAwMjZoZHIsIGRhdGEpO1xuK31cbitcbisvKlxuKyAqIGV2ZW50ZmQgdGhlIHNlcnZlciBjaGlsZCB3cml0ZXMgb25jZSB3aGVuIGl0IHJlY2VpdmVzIEZVU0VfU1lOQ0ZTOyB0aGVcbisgKiBwYXJlbnQgcG9sbCgpcyBpdCB0byBvYnNlcnZlIChvciBydWxlIG91dCkgcHJvcGFnYXRpb24uXG4rICovXG4rc3RhdGljIGludCBzeW5jZnNfZXZmZDtcbitcbitzdGF0aWMgdm9pZCByZXBseShpbnQgZmQsIHVpbnQ2NF90IHVuaXF1ZSwgaW50IGVycm9yLCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKVxuK3tcbitcdHN0cnVjdCBmdXNlX291dF9oZWFkZXIgb2ggPSB7XG4rXHRcdC5sZW4gPSBzaXplb2Yob2gpICsgbGVuLFxuK1x0XHQuZXJyb3IgPSBlcnJvcixcbitcdFx0LnVuaXF1ZSA9IHVuaXF1ZSxcbitcdH07XG4rXHRzdHJ1Y3QgaW92ZWMgaW92WzJdID0ge1xuK1x0XHR7IFx1MDAyNm9oLCBzaXplb2Yob2gpIH0sXG4rXHRcdHsgZGF0YSwgbGVuIH0sXG4rXHR9O1xuK1xuK1x0aWYgKHdyaXRldihmZCwgaW92LCBkYXRhID8gMiA6IDEpIFx1MDAzYyAwKVxuK1x0XHRrc2Z0X3ByaW50X21zZyhcInNlcnZlciB3cml0ZXYgZmFpbGVkOiAlc1xcblwiLCBzdHJlcnJvcihlcnJubykpO1xuK31cbitcbitzdGF0aWMgdm9pZCBmaWxsX2F0dHIoc3RydWN0IGZ1c2VfYXR0ciAqYSwgdWludDY0X3QgaW5vLCB1aW50MzJfdCBtb2RlLFxuK1x0XHQgICAgICB1aW50MzJfdCBubGluaylcbit7XG4rXHRtZW1zZXQoYSwgMCwgc2l6ZW9mKCphKSk7XG4rXHRhLVx1MDAzZWlubyA9IGlubztcbitcdGEtXHUwMDNlbW9kZSA9IG1vZGU7XG4rXHRhLVx1MDAzZW5saW5rID0gbmxpbms7XG4rXHRhLVx1MDAzZWJsa3NpemUgPSA0MDk2O1xuK31cbitcbisvKlxuKyAqIE1pbmltYWwgRlVTRSBzZXJ2ZXIuICBBZHZlcnRpc2VzIEZVU0VfSEFTX1NZTkNGUyBpbiBpdHMgSU5JVCByZXBseSBpZmZcbisgKiBAYWR2ZXJ0aXNlIGlzIHNldC4gIFNpZ25hbHMgc3luY2ZzX2V2ZmQgd2hlbiBhIEZVU0VfU1lOQ0ZTIG9wY29kZSBhcnJpdmVzLlxuKyAqL1xuKyNkZWZpbmUgU0VSVkVSX01BWF9XUklURSA2NTUzNlxuK3N0YXRpYyB2b2lkIHJ1bl9zZXJ2ZXIoaW50IGZkLCBpbnQgYWR2ZXJ0aXNlKVxuK3tcbitcdC8qXG4rXHQgKiBUaGUga2VybmVsIHJlamVjdHMgcmVhZHMgKEVJTlZBTCkgd2hvc2UgYnVmZmVyIGlzIHNtYWxsZXIgdGhhblxuK1x0ICogbWF4X3dyaXRlICsgaGVhZGVyLCBzbyBzaXplIGdlbmVyb3VzbHkgZm9yIHRoZSBtYXhfd3JpdGUgd2VcbitcdCAqIGFkdmVydGlzZSBpbiB0aGUgSU5JVCByZXBseSBiZWxvdy5cbitcdCAqL1xuK1x0c3RhdGljIGNoYXIgYnVmW1NFUlZFUl9NQVhfV1JJVEUgKyA0MDk2XTtcbitcbitcdGZvciAoOzspIHtcbitcdFx0c3NpemVfdCBuID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRcdHN0cnVjdCBmdXNlX2luX2hlYWRlciAqaWggPSAodm9pZCAqKWJ1ZjtcbitcbitcdFx0aWYgKG4gXHUwMDNjIDApIHtcbitcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0cmV0dXJuO1x0XHQvKiBkZXZpY2UgY2xvc2VkIG9uIHVubW91bnQvYWJvcnQgKi9cbitcdFx0fVxuK1x0XHRpZiAobiBcdTAwM2MgKHNzaXplX3Qpc2l6ZW9mKCppaCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHN3aXRjaCAoaWgtXHUwMDNlb3Bjb2RlKSB7XG4rXHRcdGNhc2UgRlVTRV9JTklUOiB7XG4rXHRcdFx0c3RydWN0IGZ1c2VfaW5pdF9pbiAqaW4gPSAodm9pZCAqKShpaCArIDEpO1xuK1x0XHRcdHN0cnVjdCBmdXNlX2luaXRfb3V0IG91dCA9IHswfTtcbitcdFx0XHR1aW50NjRfdCBmbGFncyA9IEZVU0VfSU5JVF9FWFQ7XG4rXG4rXHRcdFx0b3V0Lm1ham9yID0gRlVTRV9LRVJORUxfVkVSU0lPTjtcbitcdFx0XHRvdXQubWlub3IgPSBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OO1xuK1x0XHRcdG91dC5tYXhfcmVhZGFoZWFkID0gaW4tXHUwMDNlbWF4X3JlYWRhaGVhZDtcbitcdFx0XHRvdXQubWF4X3dyaXRlID0gU0VSVkVSX01BWF9XUklURTtcbitcdFx0XHRvdXQubWF4X2JhY2tncm91bmQgPSAxNjtcbitcdFx0XHRvdXQuY29uZ2VzdGlvbl90aHJlc2hvbGQgPSAxMjtcbitcdFx0XHRpZiAoYWR2ZXJ0aXNlKVxuK1x0XHRcdFx0ZmxhZ3MgfD0gRlVTRV9IQVNfU1lOQ0ZTO1xuK1x0XHRcdG91dC5mbGFncyA9IGZsYWdzO1xuK1x0XHRcdG91dC5mbGFnczIgPSBmbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4rXHRcdFx0cmVwbHkoZmQsIGloLVx1MDAzZXVuaXF1ZSwgMCwgXHUwMDI2b3V0LCBzaXplb2Yob3V0KSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0Y2FzZSBGVVNFX0dFVEFUVFI6IHtcbitcdFx0XHRzdHJ1Y3QgZnVzZV9hdHRyX291dCBvdXQgPSB7MH07XG4rXG4rXHRcdFx0ZmlsbF9hdHRyKFx1MDAyNm91dC5hdHRyLCBGVVNFX1JPT1RfSUQsIFNfSUZESVIgfCAwNzU1LCAyKTtcbitcdFx0XHRyZXBseShmZCwgaWgtXHUwMDNldW5pcXVlLCAwLCBcdTAwMjZvdXQsIHNpemVvZihvdXQpKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRjYXNlIEZVU0VfU1lOQ0ZTOiB7XG4rXHRcdFx0dWludDY0X3Qgb25lID0gMTtcbitcbitcdFx0XHRpZiAod3JpdGUoc3luY2ZzX2V2ZmQsIFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpIFx1MDAzYyAwKVxuK1x0XHRcdFx0a3NmdF9wcmludF9tc2coXCJzZXJ2ZXIgZXZlbnRmZCB3cml0ZSBmYWlsZWQ6ICVzXFxuXCIsXG4rXHRcdFx0XHRcdCAgICAgICBzdHJlcnJvcihlcnJubykpO1xuK1x0XHRcdHJlcGx5KGZkLCBpaC1cdTAwM2V1bmlxdWUsIDAsIE5VTEwsIDApO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBbnl0aGluZyBlbHNlIChlLmcuIE9QRU5ESVIgZnJvbSBvcGVuaW5nIHRoZSBtb3VudFxuK1x0XHRcdCAqIHJvb3QpIGlzIG5vdCBuZWVkZWQgdG8gZHJpdmUgdGhpcyB0ZXN0OyAtRU5PU1lTIGxldHNcbitcdFx0XHQgKiB0aGUga2VybmVsIHByb2NlZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0cmVwbHkoZmQsIGloLVx1MDAzZXVuaXF1ZSwgLUVOT1NZUywgTlVMTCwgMCk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4rLypcbisgKiBNb3VudCBhIGZ1c2UgZnMgYmFja2VkIGJ5IGEgZm9ya2VkIHNlcnZlciwgaXNzdWUgc3luY2ZzKCksIGFuZCByZXBvcnRcbisgKiB3aGV0aGVyIHRoZSBzZXJ2ZXIgb2JzZXJ2ZWQgRlVTRV9TWU5DRlMuICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgaWYgdGhlXG4rICogZW52aXJvbm1lbnQgY291bGQgbm90IHN1cHBvcnQgdGhlIHRlc3QgKGNhbGxlciBzaG91bGQgc2tpcCkuXG4rICpcbisgKiBJZiBAdW5wcml2X29wZW4gaXMgc2V0LCAvZGV2L2Z1c2UgaXMgb3BlbmVkIHdpdGggQ0FQX1NZU19BRE1JTiBkcm9wcGVkXG4rICogKHJlZ2FpbmVkIG9ubHkgZm9yIHRoZSBtb3VudCgpIHN5c2NhbGwpLCBzbyB0aGUgZGV2aWNlIG9wZW5lciAtLSB0aGVcbisgKiBzZXJ2ZXIgcHJpbmNpcGFsIEZVU0VfSEFTX1NZTkNGUyBpcyBnYXRlZCBvbiAtLSBsYWNrcyB0aGUgcHJpdmlsZWdlIGV2ZW5cbisgKiB0aG91Z2ggaXQgcmVtYWlucyBpbiB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZS5cbisgKi9cbitzdGF0aWMgaW50IGRvX21vdW50X2FuZF9zeW5jZnMoY29uc3QgY2hhciAqbW50LCBpbnQgYWR2ZXJ0aXNlLCBpbnQgdW5wcml2X29wZW4sXG4rXHRcdFx0ICAgICAgIGludCAqc2Vlbilcbit7XG4rXHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHsgLmV2ZW50cyA9IFBPTExJTiB9O1xuK1x0Y2hhciBvcHRzWzI1Nl07XG4rXHRpbnQgZmQsIG1mZCA9IC0xLCBpO1xuK1x0cGlkX3QgcGlkO1xuK1xuK1x0c3luY2ZzX2V2ZmQgPSBldmVudGZkKDAsIEVGRF9DTE9FWEVDKTtcbitcdGlmIChzeW5jZnNfZXZmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0aWYgKHVucHJpdl9vcGVuIFx1MDAyNlx1MDAyNiBzZXRfc3lzYWRtaW4oMCkpXG4rXHRcdGdvdG8gb3V0X2V2ZmQ7XG4rXHRmZCA9IG9wZW4oXCIvZGV2L2Z1c2VcIiwgT19SRFdSKTtcbitcdGlmICh1bnByaXZfb3BlbiBcdTAwMjZcdTAwMjYgc2V0X3N5c2FkbWluKDEpKSB7XG4rXHRcdGlmIChmZCBcdTAwM2U9IDApXG4rXHRcdFx0Y2xvc2UoZmQpO1xuK1x0XHRnb3RvIG91dF9ldmZkO1xuK1x0fVxuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dF9ldmZkO1xuK1xuK1x0bWtkaXIobW50LCAwNzU1KTtcbitcdHNucHJpbnRmKG9wdHMsIHNpemVvZihvcHRzKSxcbitcdFx0IFwiZmQ9JWQscm9vdG1vZGU9NDAwMDAsdXNlcl9pZD0lZCxncm91cF9pZD0lZFwiLFxuK1x0XHQgZmQsIGdldHVpZCgpLCBnZXRnaWQoKSk7XG4rXG4rXHRpZiAobW91bnQoXCJmdXNlXCIsIG1udCwgXCJmdXNlXCIsIDAsIG9wdHMpIFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dF9mZDtcbitcbitcdHBpZCA9IGZvcmsoKTtcbitcdGlmIChwaWQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0X3Vtb3VudDtcbitcdGlmIChwaWQgPT0gMCkge1xuK1x0XHRydW5fc2VydmVyKGZkLCBhZHZlcnRpc2UpO1xuK1x0XHRfZXhpdCgwKTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGUgcGFyZW50IGRvZXMgbm90IHNlcnZpY2UgdGhlIGZ1c2UgZmQ7IHRoZSBjaGlsZCBkb2VzLiAgQ2xvc2Ugb3VyXG4rXHQgKiBjb3B5IHNvIHRoZSBrZXJuZWwgc2VlcyBhIHNpbmdsZSBzZXJ2ZXIsIGFuZCBzbyB0aGF0IGlmIHRoZSBjaGlsZFxuK1x0ICogZGllcyB0aGUgY29ubmVjdGlvbiBhYm9ydHMgaW5zdGVhZCBvZiBoYW5naW5nIHVzIGZvcmV2ZXIuXG4rXHQgKi9cbitcdGNsb3NlKGZkKTtcbitcbitcdC8qXG4rXHQgKiBtb3VudCgpIHJldHVybnMgYmVmb3JlIHRoZSBzZXJ2ZXIgaGFzIGFuc3dlcmVkIEZVU0VfSU5JVCwgc28gdGhlXG4rXHQgKiBmaXJzdCBvcGVuKCkgY2FuIHJhY2UgYW5kIGZhaWwgd2l0aCBFTk9UQ09OTjsgcmV0cnkgdW50aWwgdGhlXG4rXHQgKiBoYW5kc2hha2Ugc2V0dGxlcy5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMTAwMDsgaSsrKSB7XG4rXHRcdG1mZCA9IG9wZW4obW50LCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTtcbitcdFx0aWYgKG1mZCBcdTAwM2U9IDApXG4rXHRcdFx0YnJlYWs7XG4rXHRcdHVzbGVlcCgxMDAwKTtcbitcdH1cbitcdGlmIChtZmQgXHUwMDNlPSAwKSB7XG4rXHRcdHN5bmNmcyhtZmQpO1xuK1x0XHRjbG9zZShtZmQpO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIE5vIHdhaXRpbmcgaXMgbmVlZGVkOiB0aGUgc2VydmVyIHdyaXRlcyBzeW5jZnNfZXZmZCBiZWZvcmUgaXQgcmVwbGllc1xuK1x0ICogdG8gRlVTRV9TWU5DRlMsIGFuZCB0aGF0IHJlcGx5IGlzIHdoYXQgdW5ibG9ja3MgdGhlIHN5bmNocm9ub3VzXG4rXHQgKiBzeW5jZnMoKSBhYm92ZS4gIFNvIG9uY2Ugc3luY2ZzKCkgaGFzIHJldHVybmVkLCB0aGUgZXZlbnRmZCBpcyBhbHJlYWR5XG4rXHQgKiBzaWduYWxsZWQgaWYgdGhlIG9wY29kZSB3YXMgcHJvcGFnYXRlZCwgYW5kIHdpbGwgbmV2ZXIgYmUgb3RoZXJ3aXNlLlxuK1x0ICogcG9sbCgpIHdpdGggYSB6ZXJvIHRpbWVvdXQgdGhlcmVmb3JlIGRlY2lkZXMgYm90aCBjYXNlcyBpbW1lZGlhdGVseS5cbitcdCAqL1xuK1x0cGZkLmZkID0gc3luY2ZzX2V2ZmQ7XG4rXHQqc2VlbiA9IHBvbGwoXHUwMDI2cGZkLCAxLCAwKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgKHBmZC5yZXZlbnRzIFx1MDAyNiBQT0xMSU4pO1xuK1xuK1x0a2lsbChwaWQsIFNJR0tJTEwpO1xuK1x0d2FpdHBpZChwaWQsIE5VTEwsIDApO1xuK1x0dW1vdW50MihtbnQsIE1OVF9ERVRBQ0gpO1xuK1x0Y2xvc2Uoc3luY2ZzX2V2ZmQpO1xuK1x0cmV0dXJuIDA7XG4rXG4rb3V0X3Vtb3VudDpcbitcdHVtb3VudDIobW50LCBNTlRfREVUQUNIKTtcbitvdXRfZmQ6XG4rXHRjbG9zZShmZCk7XG4rb3V0X2V2ZmQ6XG4rXHRjbG9zZShzeW5jZnNfZXZmZCk7XG4rXHRyZXR1cm4gLTE7XG4rfVxuK1xuKy8qIFQ0OiBzYW1lIGFzIGFib3ZlIGJ1dCB0aGUgbW91bnQgaXMgY3JlYXRlZCBpbnNpZGUgYSBuZXcgdXNlciBuYW1lc3BhY2UuICovXG4rc3RhdGljIGludCBydW5faW5fdXNlcm5zKGNvbnN0IGNoYXIgKm1udCwgaW50IGFkdmVydGlzZSwgaW50ICpzZWVuKVxuK3tcbitcdHVpZF90IHVpZCA9IGdldHVpZCgpO1xuK1x0Z2lkX3QgZ2lkID0gZ2V0Z2lkKCk7XG4rXHRjaGFyIG1hcFs2NF07XG4rXHRpbnQgZjtcbitcbitcdGlmICh1bnNoYXJlKENMT05FX05FV1VTRVIgfCBDTE9ORV9ORVdOUykgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcdC8qIHVucHJpdmlsZWdlZCB1c2VybnMgbW91bnRzIHVuYXZhaWxhYmxlICovXG4rXG4rXHRmID0gb3BlbihcIi9wcm9jL3NlbGYvc2V0Z3JvdXBzXCIsIE9fV1JPTkxZKTtcbitcdGlmIChmIFx1MDAzZT0gMCkge1xuK1x0XHRkcHJpbnRmKGYsIFwiZGVueVwiKTtcbitcdFx0Y2xvc2UoZik7XG4rXHR9XG4rXHRzbnByaW50ZihtYXAsIHNpemVvZihtYXApLCBcIjAgJWQgMVwiLCB1aWQpO1xuK1x0ZiA9IG9wZW4oXCIvcHJvYy9zZWxmL3VpZF9tYXBcIiwgT19XUk9OTFkpO1xuK1x0aWYgKGYgXHUwMDNjIDAgfHwgZHByaW50ZihmLCBcIiVzXCIsIG1hcCkgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcdGNsb3NlKGYpO1xuK1x0c25wcmludGYobWFwLCBzaXplb2YobWFwKSwgXCIwICVkIDFcIiwgZ2lkKTtcbitcdGYgPSBvcGVuKFwiL3Byb2Mvc2VsZi9naWRfbWFwXCIsIE9fV1JPTkxZKTtcbitcdGlmIChmIFx1MDAzYyAwIHx8IGRwcmludGYoZiwgXCIlc1wiLCBtYXApIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRjbG9zZShmKTtcbitcbitcdC8qIE5lZWQgYSBtb3VudCBuYW1lc3BhY2Ugd2hlcmUgd2UgY2FuIG1vdW50IGZ1c2UgdW5wcml2aWxlZ2VkLiAqL1xuK1x0aWYgKG1vdW50KE5VTEwsIFwiL1wiLCBOVUxMLCBNU19SRUMgfCBNU19QUklWQVRFLCBOVUxMKSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIGRvX21vdW50X2FuZF9zeW5jZnMobW50LCBhZHZlcnRpc2UsIDAsIHNlZW4pO1xuK31cbitcbitpbnQgbWFpbih2b2lkKVxuK3tcbitcdGNoYXIgbW50W10gPSBcIi90bXAvZnVzZV9zeW5jZnNfWFhYWFhYXCI7XG4rXHRpbnQgc2VlbiwgcmV0O1xuK1xuK1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbitcdGtzZnRfc2V0X3BsYW4oNCk7XG4rXG4rXHQvKiBIYXJkIHdhdGNoZG9nOiBuZXZlciBsZXQgYSBzdHVjayBzeW5jZnMgaGFuZyB0aGUgdGVzdCBydW5uZXIuICovXG4rXHRzaWduYWwoU0lHQUxSTSwgU0lHX0RGTCk7XG4rXHRhbGFybSg2MCk7XG4rXG4rXHRpZiAoZ2V0ZXVpZCgpICE9IDApXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwidGVzdCByZXF1aXJlcyByb290IHRvIG1vdW50IGZ1c2VcXG5cIik7XG4rXG4rXHRpZiAoIW1rZHRlbXAobW50KSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwibWtkdGVtcCBmYWlsZWRcXG5cIik7XG4rXG4rXHQvKiBUMTogaG9zdC1yb290IG1vdW50LCBzZXJ2ZXIgb3B0cyBpbiAtXHUwMDNlIHN5bmNmcyBtdXN0IHJlYWNoIHNlcnZlci4gKi9cbitcdHJldCA9IGRvX21vdW50X2FuZF9zeW5jZnMobW50LCAxLCAwLCBcdTAwMjZzZWVuKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIlQxOiBjb3VsZCBub3QgbW91bnQgZnVzZVxcblwiKTtcbitcdGVsc2VcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdChzZWVuLFxuK1x0XHRcdFx0IFwiVDEgaG9zdC1yb290ICsgRlVTRV9IQVNfU1lOQ0ZTOiBzZXJ2ZXIgcmVjZWl2ZXMgRlVTRV9TWU5DRlNcXG5cIik7XG4rXG4rXHQvKiBUMjogaG9zdC1yb290IG1vdW50LCBzZXJ2ZXIgZG9lcyBOT1Qgb3B0IGluIC1cdTAwM2Ugbm8gRlVTRV9TWU5DRlMuICovXG4rXHRyZXQgPSBkb19tb3VudF9hbmRfc3luY2ZzKG1udCwgMCwgMCwgXHUwMDI2c2Vlbik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCJUMjogY291bGQgbm90IG1vdW50IGZ1c2VcXG5cIik7XG4rXHRlbHNlXG4rXHRcdGtzZnRfdGVzdF9yZXN1bHQoIXNlZW4sXG4rXHRcdFx0XHQgXCJUMiBob3N0LXJvb3QsIG5vIG9wdC1pbjogc2VydmVyIGRvZXMgTk9UIHJlY2VpdmUgRlVTRV9TWU5DRlNcXG5cIik7XG4rXG4rXHQvKlxuK1x0ICogVDM6IHNlcnZlciBvcHRzIGluIGJ1dCBvcGVuZWQgL2Rldi9mdXNlIHdpdGhvdXQgQ0FQX1NZU19BRE1JTiB3aGlsZVxuK1x0ICogc3RpbGwgaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgLVx1MDAzZSBrZXJuZWwgbXVzdCB3aXRoaG9sZFxuK1x0ICogRlVTRV9TWU5DRlMuICBUaGlzIGlzIHRoZSBjYXNlIHRoYXQgZGlzdGluZ3Vpc2hlcyBnYXRpbmcgb24gdGhlXG4rXHQgKiBzZXJ2ZXIncyBwcml2aWxlZ2UgZnJvbSBnYXRpbmcgb24gdGhlIG1vdW50J3MgdXNlciBuYW1lc3BhY2UuXG4rXHQgKi9cbitcdHJldCA9IGRvX21vdW50X2FuZF9zeW5jZnMobW50LCAxLCAxLCBcdTAwMjZzZWVuKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIlQzOiBjb3VsZCBub3QgbW91bnQgZnVzZSB1bnByaXZpbGVnZWRcXG5cIik7XG4rXHRlbHNlXG4rXHRcdGtzZnRfdGVzdF9yZXN1bHQoIXNlZW4sXG4rXHRcdFx0XHQgXCJUMyBpbml0X3VzZXJucywgb3BlbmVyIGxhY2tzIENBUF9TWVNfQURNSU46IEZVU0VfU1lOQ0ZTIHdpdGhoZWxkXFxuXCIpO1xuK1xuK1x0LypcbitcdCAqIFQ0OiB1bnByaXZpbGVnZWQgdXNlcm5zIG1vdW50LCBzZXJ2ZXIgb3B0cyBpbiAtXHUwMDNlIGtlcm5lbCBtdXN0IHN0aWxsXG4rXHQgKiB3aXRoaG9sZCBGVVNFX1NZTkNGUy4gIFJ1biBpbiBhIGNoaWxkIHNpbmNlIGl0IHVuc2hhcmVzIG5hbWVzcGFjZXMuXG4rXHQgKi9cbitcdHtcbitcdFx0cGlkX3QgcCA9IGZvcmsoKTtcbitcbitcdFx0aWYgKHAgPT0gMCkge1xuK1x0XHRcdGludCBzID0gMDtcbitcdFx0XHRpbnQgciA9IHJ1bl9pbl91c2VybnMobW50LCAxLCBcdTAwMjZzKTtcbitcbitcdFx0XHRfZXhpdChyIFx1MDAzYyAwID8gMiA6IChzID8gMSA6IDApKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRpbnQgc3RhdHVzO1xuK1xuK1x0XHRcdHdhaXRwaWQocCwgXHUwMDI2c3RhdHVzLCAwKTtcbitcdFx0XHRpZiAoIVdJRkVYSVRFRChzdGF0dXMpKVxuK1x0XHRcdFx0a3NmdF90ZXN0X3Jlc3VsdF9lcnJvcihcIlQ0OiBjaGlsZCBjcmFzaGVkXFxuXCIpO1xuK1x0XHRcdGVsc2UgaWYgKFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMilcbitcdFx0XHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIlQ0OiB1c2VybnMgZnVzZSBtb3VudCB1bmF2YWlsYWJsZVxcblwiKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0KFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMCxcbitcdFx0XHRcdFx0XHQgXCJUNCB1bnByaXYgdXNlcm5zICsgb3B0LWluOiBGVVNFX1NZTkNGUyB3aXRoaGVsZFxcblwiKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cm1kaXIobW50KTtcbitcdGtzZnRfZmluaXNoZWQoKTtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNzozMzowNy45MjA3NTMwNzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjAxMTk2ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBGVVNFIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgYEZVU0VfSEFTX1NZTkNGU2AgZmxhZyB3aXRoaW4gdGhlIEZVU0UgZmlsZXN5c3RlbS4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSwgbW9kaWZ5aW5nIGEgZmV3IGtleSBmaWxlczogYGZzL2Z1c2UvZnVzZV9pLmhgLCBgZnMvZnVzZS9pbm9kZS5jYCwgYGluY2x1ZGUvdWFwaS9saW51eC9mdXNlLmhgLCBhbmQsIGltcG9ydGFudGx5LCBhZGRpbmcgYSBuZXcgc2VsZnRlc3QuIFRoYXQncyBhIGdvb2Qgc2lnbiDigJMgd2UgbmVlZCByb2J1c3QgdGVzdGluZyBmb3IgdGhpcyBraW5kIG9mIGNoYW5nZS5cblxuVGhlIHBhdGNoJ3MgY29yZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBhZGRpbmcgYSBgc3luY2ZzX2NhcGFibGVgIGJpdCB0byB0aGUgYGZ1c2VfZnNfY29udGV4dGAgYW5kIGBmdXNlX2Nvbm5gIHN0cnVjdHVyZXMuIFRoaXMgY2FwYWJpbGl0eSBjaGVjayBpcyBkb25lIGluIGBmdXNlX29wdF9mZGAsIHdoZXJlIGl0IHZlcmlmaWVzIGlmIHRoZSBzZXJ2ZXIgaGFzIG9wZW5lZCBgL2Rldi9mdXNlYCB3aXRoIHRoZSBgQ0FQX1NZU19BRE1JTmAgY2FwYWJpbGl0eSB3aXRoaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UuIFRoYXQgbWFrZXMgc2Vuc2UsIGNvbnRyb2xsaW5nIHN5bmMgb3BlcmF0aW9ucyByZXF1aXJlcyBhIGxldmVsIG9mIHByaXZpbGVnZS4gYGZ1c2Vfc3luY2ZzX2VuYWJsZWAgdGhlbiBjaGVja3MgdGhlIGBGVVNFX0hBU19TWU5DRlNgIGZsYWcgYWxvbmcgd2l0aCB0aGUgYHN5bmNmc19jYXBhYmxlYCBmbGFnIGJlZm9yZSBlbmFibGluZyB0aGUgc3luYyBvcGVyYXRpb24uIEZ1cnRoZXJtb3JlLCB0aGUgYEZVU0VfSEFTX1NZTkNGU2AgZmxhZyBpcyBzZXQgZHVyaW5nIHRoZSBgZnVzZV9uZXdfaW5pdGAgZnVuY3Rpb24uXG5cbkVzc2VudGlhbGx5LCB0aGlzIGFkZHMgZnVuY3Rpb25hbCBsb2dpYyBmb3IgYHN5bmNmc2AgcHJvcGFnYXRpb24sIHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBGVVNFIG1vdW50cy4gU2luY2UgaXQncyB1c2VyLWZhY2luZywgZnV6emluZyB3aWxsIGJlICpjcnVjaWFsKiB0byBlbnN1cmUgaXRzIHN0YWJpbGl0eSBhbmQgc2VjdXJpdHkuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlIGtleSBzeW1ib2xzIHRoaXMgcGF0Y2ggYWZmZWN0cy4gSSd2ZSBub3RlZCB0aGF0IGBGVVNFX0ZTYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgYGZ1c2Vfb3B0X2ZkYCwgYGZ1c2Vfc3luY2ZzX2VuYWJsZWAsIGBwcm9jZXNzX2luaXRfcmVwbHlgLCBgZnVzZV9uZXdfaW5pdGAsIGFuZCBgZnVzZV9maWxsX3N1cGVyX2NvbW1vbmAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoZSBuZXcgbG9naWMgaXMgaW50cm9kdWNlZCwgYW5kIHRoZXJlZm9yZSB3aGVyZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG1pZ2h0IHJlc2lkZS4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlc2UgY2FyZWZ1bGx5LlxuXG5JIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayBgZnMvZnVzZS9pbm9kZS5jYCBqdXN0IGluIGNhc2UgdGhlcmUgYXJlIG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBJIGhhdmVuJ3Qgc3BvdHRlZCB5ZXQuIEFuZCBmaW5hbGx5LCBJJ2xsIGxldmVyYWdlIHRoZSB0b29scyBhdCBteSBkaXNwb3NhbCB0byB2ZXJpZnkgdGhpcyBpbXBsZW1lbnRhdGlvbidzIGNvcnJlY3RuZXNzIGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIGNvbmNlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNzozMzoxNS4xMjE5NTI2ODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3NjY0OTIxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlVTRV9GU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xcbmZzL2Z1c2UvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTc6MzM6MTguMTk4NjA3NjgyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2MDY2MzA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgZnVzZS9pbm9kZS5jIGZvciBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGZzL2Z1c2UvaW5vZGUuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgRlVTRSBoYW5kbGVzIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBgZnVzZV9vcHRfZmRgIGFuZCBgZnVzZV9zeW5jZnNfZW5hYmxlYC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBmdXNlX29wdF9mZGAgaXMgY3JpdGljYWw7IGl0IGRlZmluZXMgdGhlIGZpbGUgZGVzY3JpcHRvciB1c2VkIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHVzZXJzcGFjZSBGVVNFIHByb2Nlc3MgYW5kIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyBpdCdzIGhhbmRsZWQsIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byBob3cgaXQncyBwYXNzZWQsIHZlcmlmaWVkLCBhbmQgdXNlZCwgZ2l2ZW4gdGhlIGNvbXBsZXhpdGllcyBvZiBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gd2l0aGluIHRoZSBGVVNFIGZyYW1ld29yay4gQSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGNvdWxkIGJlIGhlcmUuXG5cblRoZW4sIHRoZXJlJ3MgYGZ1c2Vfc3luY2ZzX2VuYWJsZWAuIFRoaXMgcmVsYXRlcyB0byBzeW5jaHJvbm91cyBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgaW1wbGljYXRpb25zIGlzIGNyaXRpY2FsIGZvciBjb3JyZWN0bHkgd29ya2luZyB3aXRoIEZVU0UuIEkgbmVlZCB0byBzZWUgaG93IGl0J3MgaW50ZWdyYXRlZCB3aXRoIHRoZSBtYWluIGlub2RlIG9wZXJhdGlvbnMgYW5kIGlmIGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZlYXR1cmVzLiBTeW5jaHJvbm91cyBvcGVyYXRpb25zIGFyZSBjcnVjaWFsIGZvciB0aGUgaW50ZWdyaXR5IG9mIG1hbnkgZmlsZSBzeXN0ZW1zLCBidXQgdGhleSBjYW4gYmUgYSBwZXJmb3JtYW5jZSBraWxsZXIgaWYgbm90IGltcGxlbWVudGVkIGNvcnJlY3RseS4gVGhpcyBwYXJ0IG1pZ2h0IGdpdmUgbWUgaW5zaWdodCBpbnRvIHBlcmZvcm1hbmNlIGlzc3VlcyBvciBkYXRhIGludGVncml0eSBndWFyYW50ZWVzLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzIHRoYXQgY291bGQgYXJpc2Ugd2hlbiBjb21iaW5pbmcgdGhpcyBmZWF0dXJlIHdpdGggb3RoZXIgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHJlbWluZCBteXNlbGYgb2YgdGhlIGRldGFpbHMuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHRlbGxzIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTMyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTc6MzM6MjEuODU5Mjc0MTg1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjkxNzU0ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnVzZV9vcHRfZmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnVzZS9pbm9kZS5jPTc3Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGZ1c2VfZnNfcGFyYW1ldGVyc1tdID0ge1xcbi0tXFxuZnMvZnVzZS9pbm9kZS5jLTc4OS1cXG5mcy9mdXNlL2lub2RlLmM6NzkwOnN0YXRpYyBpbnQgZnVzZV9vcHRfZmQoc3RydWN0IGZzX2NvbnRleHQgKmZzYywgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvZnVzZS9pbm9kZS5jLTc5MS17XFxuLS1cXG5mcy9mdXNlL2lub2RlLmM9ODE3PXN0YXRpYyBpbnQgZnVzZV9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZnNjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy04NTYtXFx0XFx0aWYgKHBhcmFtLVxcdTAwM2V0eXBlID09IGZzX3ZhbHVlX2lzX2ZpbGUpIHtcXG5mcy9mdXNlL2lub2RlLmM6ODU3OlxcdFxcdFxcdHJldHVybiBmdXNlX29wdF9mZChmc2MsIHBhcmFtLVxcdTAwM2VmaWxlKTtcXG5mcy9mdXNlL2lub2RlLmMtODU4LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5mcy9mdXNlL2lub2RlLmMtODYyLVxcbmZzL2Z1c2UvaW5vZGUuYzo4NjM6XFx0XFx0XFx0cmV0dXJuIGZ1c2Vfb3B0X2ZkKGZzYywgZmlsZSk7XFxuZnMvZnVzZS9pbm9kZS5jLTg2NC1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE3OjMzOjIzLjk4ODQ1ODMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIzODc1MDI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSdtIHRoaW5raW5nIGl0OlxuXG4qKkNoZWNraW5nIGBmdXNlX3N5bmNmc19lbmFibGVgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIExldCdzIHNlZS4uLiB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGNvbmZpcm0gdGhlIHN0YXRlIG9mIGBmdXNlX3N5bmNmc19lbmFibGVgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgZm91bmRhdGlvbiBvZiB0aGlzIHdob2xlIGxpbmUgb2YgdGhpbmtpbmcuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBGVVNFIHN5bmMgZmlsZSBzeXN0ZW0gZnVuY3Rpb25hbGl0eSwgb3IgcmF0aGVyLCBpZiB3ZSBldmVuICphcmUqIGRlYWxpbmcgd2l0aCBpdC4gVW5kZXJzdGFuZGluZyB0aGUgc3RhdGUgb2YgdGhpcyB2YXJpYWJsZSBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBkZWVwZXIgYW5hbHlzaXMgaGVyZS4gSXQnbGwgc2hhcGUgdGhlIGNvbnRleHQgZm9yIGV2ZXJ5dGhpbmcgdGhhdCBmb2xsb3dzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzcwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTc6MzM6MjguMjI3MjExMDM5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjk2Njg2NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnVzZV9zeW5jZnNfZW5hYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Z1c2UvaW5vZGUuYz03OTA9c3RhdGljIGludCBmdXNlX29wdF9mZChzdHJ1Y3QgZnNfY29udGV4dCAqZnNjLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy04MDYtXFx0ICogb3IgZnVzZWJsayByZXF1aXJlcy4gIE9ubHkgc3VjaCBzZXJ2ZXJzIGFyZSB0cnVzdGVkIHRvIHJlY2VpdmVcXG5mcy9mdXNlL2lub2RlLmM6ODA3OlxcdCAqIEZVU0VfU1lOQ0ZTIChzZWUgZnVzZV9zeW5jZnNfZW5hYmxlKCkpLlxcbmZzL2Z1c2UvaW5vZGUuYy04MDgtXFx0ICovXFxuLS1cXG5mcy9mdXNlL2lub2RlLmM9MTI3MT1zdHJ1Y3QgZnVzZV9pbml0X2FyZ3Mge1xcbi0tXFxuZnMvZnVzZS9pbm9kZS5jLTEyODItICovXFxuZnMvZnVzZS9pbm9kZS5jOjEyODM6c3RhdGljIGJvb2wgZnVzZV9zeW5jZnNfZW5hYmxlKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCB1NjQgZmxhZ3MpXFxuZnMvZnVzZS9pbm9kZS5jLTEyODQte1xcbi0tXFxuZnMvZnVzZS9pbm9kZS5jPTEyODg9c3RhdGljIHZvaWQgcHJvY2Vzc19pbml0X3JlcGx5KHN0cnVjdCBmdXNlX2FyZ3MgKmFyZ3MsIGludCBlcnJvcilcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xNDI4LVxcbmZzL2Z1c2UvaW5vZGUuYzoxNDI5OlxcdFxcdFxcdGlmIChmdXNlX3N5bmNmc19lbmFibGUoZmMsIGZsYWdzKSlcXG5mcy9mdXNlL2lub2RlLmMtMTQzMC1cXHRcXHRcXHRcXHRmYy1cXHUwMDNlc3luY19mcyA9IDE7XFxuLS1cXG5mcy9mdXNlL2lub2RlLmM9MTQ2Mj1zdGF0aWMgc3RydWN0IGZ1c2VfaW5pdF9hcmdzICpmdXNlX25ld19pbml0KHN0cnVjdCBmdXNlX21vdW50ICpmbSlcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xNDk4LVxcdC8qIE9ubHkgb2ZmZXJlZCB0byBzdWZmaWNpZW50bHkgcHJpdmlsZWdlZCBzZXJ2ZXJzOyBzZWVcXG5mcy9mdXNlL2lub2RlLmM6MTQ5OTpcXHQgKiBmdXNlX3N5bmNmc19lbmFibGUoKS5cXG5mcy9mdXNlL2lub2RlLmMtMTUwMC1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTc6MzM6MzAuMzU2ODg1NTE0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk0ODE4NDk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEZVU0UgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgemVyb2luZyBpbiBvbiBzb21lIGNyaXRpY2FsIGFyZWFzIG9mIHRoZSBGVVNFIGZyYW1ld29yazogdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlIGFuZCB0aGUgcGFyc2luZyBvZiBwYXJhbWV0ZXJzLiBJIHNlZSBuZXcgZnVuY3Rpb25zIGFkZGVkLCBuYW1lbHkgYGZ1c2Vfc3luY2ZzX2VuYWJsZWAsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gc29tZSBvZiB0aGUgY29yZSBpbml0aWFsaXphdGlvbiByb3V0aW5lczogYGZ1c2Vfb3B0X2ZkYCwgYHByb2Nlc3NfaW5pdF9yZXBseWAsIGBmdXNlX25ld19pbml0YCwgYW5kIGBmdXNlX2ZpbGxfc3VwZXJfY29tbW9uYC4gR2l2ZW4gdGhlc2UgY2hhbmdlcywgYW5kIGtub3dpbmcgdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGlzc3VlcyBpbiBpbml0aWFsaXphdGlvbiBhbmQgb3B0aW9uIGhhbmRsaW5nLCB0aGUgdGhvdWdodCBpbW1lZGlhdGVseSBvY2N1cnM6IHRoaXMgaXMgc2NyZWFtaW5nIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIHRocm93IGV2ZXJ5dGhpbmcgd2UgY2FuIGF0IHRoaXMuXG5cbk15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzOiBmaXJzdCwgSSB3YW50IHRvIGNvbmZpcm0gdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gYXNzb2NpYXRlZCBpcyBgRlVTRV9GU2AuIEkga25vdyB3aGVyZSB0aGF0IHNpdHMgaW4gdGhlIGFyY2hpdGVjdHVyZSwgYnV0IGNvbmZpcm1pbmcgaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEJleW9uZCB0aGF0LCBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgdG8gbXlzZWxmIGFuZCBob25lIGluIG9uIHRob3NlIHNwZWNpZmljIHN5bWJvbHMuIGBmdXNlX29wdF9mZGAsIGBmdXNlX3N5bmNmc19lbmFibGVgLCBgcHJvY2Vzc19pbml0X3JlcGx5YCwgYGZ1c2VfbmV3X2luaXRgLCBhbmQgYGZ1c2VfZmlsbF9zdXBlcl9jb21tb25gIGFyZSBteSBwcmltYXJ5IHRhcmdldHMsIGFuZCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciB1cGRhdGVkIGxvZ2ljIHZlcnkgcHJlY2lzZWx5LlxuXG5CZWZvcmUgSSBjb21taXQgdG8gZGVlcCBkaXZpbmcgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEknbGwgdGFrZSBhIHF1aWNrIHNjYW4gZm9yIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1heSBiZSByZWxldmFudCwgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGludGVyYWN0IHdpdGggYEZVU0VfRlNgLiBDb3VsZCBiZSBjcnVjaWFsIGZvciBlZGdlIGNhc2UgdGVzdGluZy4gSXQncyB0aW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTc6MzM6MzguMzA1MDczMjA2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM5NDQzMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkZVU0VfUEFTU1RIUk9VR0hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlL2Z1c2UtcGFzc3Rocm91Z2gucnN0PTMxPVRvIHVzZSBGVVNFIHBhc3N0aHJvdWdoOlxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS9mdXNlLXBhc3N0aHJvdWdoLnJzdC0zMi1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZS1wYXNzdGhyb3VnaC5yc3Q6MzM6ICAxLiBUaGUgRlVTRSBmaWxlc3lzdGVtIG11c3QgYmUgY29tcGlsZWQgd2l0aCBgYENPTkZJR19GVVNFX1BBU1NUSFJPVUdIYGBcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZS1wYXNzdGhyb3VnaC5yc3QtMzQtICAgICBlbmFibGVkLlxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS9mdXNlLXBhc3N0aHJvdWdoLnJzdC0zNS0gIDIuIFRoZSBGVVNFIGRhZW1vbiwgZHVyaW5nIHRoZSBgYEZVU0VfSU5JVGBgIGhhbmRzaGFrZSwgbXVzdCBuZWdvdGlhdGUgdGhlXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlL2Z1c2UtcGFzc3Rocm91Z2gucnN0OjM2OiAgICAgYGBGVVNFX1BBU1NUSFJPVUdIYGAgY2FwYWJpbGl0eSBhbmQgc3BlY2lmeSBpdHMgZGVzaXJlZFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS9mdXNlLXBhc3N0aHJvdWdoLnJzdC0zNy0gICAgIGBgbWF4X3N0YWNrX2RlcHRoYGAuXFxuLS1cXG5mcy9mdXNlL0tjb25maWc9NDM9Y29uZmlnIEZVU0VfREFYXFxuLS1cXG5mcy9mdXNlL0tjb25maWctNTYtXFxuZnMvZnVzZS9LY29uZmlnOjU3OmNvbmZpZyBGVVNFX1BBU1NUSFJPVUdIXFxuZnMvZnVzZS9LY29uZmlnLTU4LVxcdGJvb2wgXFxcIkZVU0UgcGFzc3Rocm91Z2ggb3BlcmF0aW9ucyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZnVzZS9NYWtlZmlsZT0xNz1mdXNlLSQoQ09ORklHX0ZVU0VfREFYKSArPSBkYXgub1xcbmZzL2Z1c2UvTWFrZWZpbGU6MTg6ZnVzZS0kKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSArPSBwYXNzdGhyb3VnaC5vIGJhY2tpbmcub1xcbmZzL2Z1c2UvTWFrZWZpbGUtMTktZnVzZS0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bC5vXFxuLS1cXG5mcy9mdXNlL2Rldi5jPTIyOTg9c3RhdGljIGxvbmcgZnVzZV9kZXZfaW9jdGxfYmFja2luZ19vcGVuKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvZnVzZS9kZXYuYy0yMzA2LVxcbmZzL2Z1c2UvZGV2LmM6MjMwNzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpKVxcbmZzL2Z1c2UvZGV2LmMtMjMwOC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTIzMTY9c3RhdGljIGxvbmcgZnVzZV9kZXZfaW9jdGxfYmFja2luZ19jbG9zZShzdHJ1Y3QgZmlsZSAqZmlsZSwgX191MzIgX191c2VyICphcmdwKVxcbi0tXFxuZnMvZnVzZS9kZXYuYy0yMzIzLVxcbmZzL2Z1c2UvZGV2LmM6MjMyNDpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpKVxcbmZzL2Z1c2UvZGV2LmMtMjMyNS1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5mcy9mdXNlL2Z1c2VfaS5oPTEwMj1zdHJ1Y3QgZnVzZV9pbm9kZSB7XFxuLS1cXG5mcy9mdXNlL2Z1c2VfaS5oLTIyOC1cXHRzdHJ1Y3QgZnVzZV9zdWJtb3VudF9sb29rdXAgKnN1Ym1vdW50X2xvb2t1cDtcXG5mcy9mdXNlL2Z1c2VfaS5oOjIyOTojaWZkZWYgQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0hcXG5mcy9mdXNlL2Z1c2VfaS5oLTIzMC1cXHQvKiogQGZiOiBSZWZlcmVuY2UgdG8gYmFja2luZyBmaWxlIGluIHBhc3N0aHJvdWdoIG1vZGUgKi9cXG4tLVxcbmZzL2Z1c2UvZnVzZV9pLmg9MjY5PXN0cnVjdCBmdXNlX2ZpbGUge1xcbi0tXFxuZnMvZnVzZS9mdXNlX2kuaC0zMTUtXFxuZnMvZnVzZS9mdXNlX2kuaDozMTY6I2lmZGVmIENPTkZJR19GVVNFX1BBU1NUSFJPVUdIXFxuZnMvZnVzZS9mdXNlX2kuaC0zMTctXFx0LyoqIEBwYXNzdGhyb3VnaDogUmVmZXJlbmNlIHRvIGJhY2tpbmcgZmlsZSBpbiBwYXNzdGhyb3VnaCBtb2RlICovXFxuLS1cXG5mcy9mdXNlL2Z1c2VfaS5oPTQxOD1zdHJ1Y3QgZnVzZV9jb25uIHtcXG4tLVxcbmZzL2Z1c2UvZnVzZV9pLmgtNzY5LVxcbmZzL2Z1c2UvZnVzZV9pLmg6NzcwOiNpZmRlZiBDT05GSUdfRlVTRV9QQVNTVEhST1VHSFxcbmZzL2Z1c2UvZnVzZV9pLmgtNzcxLVxcdC8qKiBAYmFja2luZ19maWxlc19tYXA6IElEUiBmb3IgYmFja2luZyBmaWxlcyBpZHMgKi9cXG4tLVxcbmZzL2Z1c2UvZnVzZV9pLmg9MTI2Mz12b2lkIGZ1c2VfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmdXNlX2ZpbGUgKmZmLFxcbi0tXFxuZnMvZnVzZS9mdXNlX2kuaC0xMjY2LS8qIGJhY2tpbmcuYyAqL1xcbmZzL2Z1c2UvZnVzZV9pLmg6MTI2NzojaWZkZWYgQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0hcXG5mcy9mdXNlL2Z1c2VfaS5oLTEyNjgtc3RydWN0IGZ1c2VfYmFja2luZyAqZnVzZV9iYWNraW5nX2dldChzdHJ1Y3QgZnVzZV9iYWNraW5nICpmYik7XFxuLS1cXG5mcy9mdXNlL2Z1c2VfaS5oPTEyOTI9c3RhdGljIGlubGluZSBzdHJ1Y3QgZnVzZV9iYWNraW5nICpmdXNlX2lub2RlX2JhY2tpbmcoc3RydWN0IGZ1c2VfaW5vZGUgKmZpKVxcbmZzL2Z1c2UvZnVzZV9pLmgtMTI5My17XFxuZnMvZnVzZS9mdXNlX2kuaDoxMjk0OiNpZmRlZiBDT05GSUdfRlVTRV9QQVNTVEhST1VHSFxcbmZzL2Z1c2UvZnVzZV9pLmgtMTI5NS1cXHRyZXR1cm4gUkVBRF9PTkNFKGZpLVxcdTAwM2VmYik7XFxuLS1cXG5mcy9mdXNlL2Z1c2VfaS5oPTEzMDE9c3RhdGljIGlubGluZSBzdHJ1Y3QgZnVzZV9iYWNraW5nICpmdXNlX2lub2RlX2JhY2tpbmdfc2V0KHN0cnVjdCBmdXNlX2lub2RlICpmaSxcXG4tLVxcbmZzL2Z1c2UvZnVzZV9pLmgtMTMwMy17XFxuZnMvZnVzZS9mdXNlX2kuaDoxMzA0OiNpZmRlZiBDT05GSUdfRlVTRV9QQVNTVEhST1VHSFxcbmZzL2Z1c2UvZnVzZV9pLmgtMTMwNS1cXHRyZXR1cm4geGNoZyhcXHUwMDI2ZmktXFx1MDAzZWZiLCBmYik7XFxuLS1cXG5mcy9mdXNlL2Z1c2VfaS5oPTEzMTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgZmlsZSAqZnVzZV9maWxlX3Bhc3N0aHJvdWdoKHN0cnVjdCBmdXNlX2ZpbGUgKmZmKVxcbmZzL2Z1c2UvZnVzZV9pLmgtMTMxNS17XFxuZnMvZnVzZS9mdXNlX2kuaDoxMzE2OiNpZmRlZiBDT05GSUdfRlVTRV9QQVNTVEhST1VHSFxcbmZzL2Z1c2UvZnVzZV9pLmgtMTMxNy1cXHRyZXR1cm4gZmYtXFx1MDAzZXBhc3N0aHJvdWdoO1xcbi0tXFxuZnMvZnVzZS9pbm9kZS5jPTg0PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmZ1c2VfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xMDUtXFxuZnMvZnVzZS9pbm9kZS5jOjEwNjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkpXFxuZnMvZnVzZS9pbm9kZS5jLTEwNy1cXHRcXHRmdXNlX2lub2RlX2JhY2tpbmdfc2V0KGZpLCBOVUxMKTtcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYz0xMTg9c3RhdGljIHZvaWQgZnVzZV9mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9mdXNlL2lub2RlLmMtMTI2LSNlbmRpZlxcbmZzL2Z1c2UvaW5vZGUuYzoxMjc6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpKVxcbmZzL2Z1c2UvaW5vZGUuYy0xMjgtXFx0XFx0ZnVzZV9iYWNraW5nX3B1dChmdXNlX2lub2RlX2JhY2tpbmcoZmkpKTtcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYz05NjU9dm9pZCBmdXNlX2Nvbm5faW5pdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfbW91bnQgKmZtLFxcbi0tXFxuZnMvZnVzZS9pbm9kZS5jLTk4Ni1cXG5mcy9mdXNlL2lub2RlLmM6OTg3OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSlcXG5mcy9mdXNlL2lub2RlLmMtOTg4LVxcdFxcdGZ1c2VfYmFja2luZ19maWxlc19pbml0KGZjKTtcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYz0xMDA5PXZvaWQgZnVzZV9jb25uX3B1dChzdHJ1Y3QgZnVzZV9jb25uICpmYylcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xMDI1LVxcdH1cXG5mcy9mdXNlL2lub2RlLmM6MTAyNjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkpXFxuZnMvZnVzZS9pbm9kZS5jLTEwMjctXFx0XFx0ZnVzZV9iYWNraW5nX2ZpbGVzX2ZyZWUoZmMpO1xcbi0tXFxuZnMvZnVzZS9pbm9kZS5jPTEyODg9c3RhdGljIHZvaWQgcHJvY2Vzc19pbml0X3JlcGx5KHN0cnVjdCBmdXNlX2FyZ3MgKmFyZ3MsIGludCBlcnJvcilcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xNDAxLVxcdFxcdFxcdCAqXFxuZnMvZnVzZS9pbm9kZS5jOjE0MDI6XFx0XFx0XFx0ICogQWxzbyBkb24ndCBhbGxvdyB0aGUgY29tYmluYXRpb24gb2YgRlVTRV9QQVNTVEhST1VHSFxcbmZzL2Z1c2UvaW5vZGUuYy0xNDAzLVxcdFxcdFxcdCAqIGFuZCBGVVNFX1dSSVRFQkFDS19DQUNIRSwgY3VycmVudCBkZXNpZ24gZG9lc24ndCBoYW5kbGVcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xNDA1LVxcdFxcdFxcdCAqL1xcbmZzL2Z1c2UvaW5vZGUuYzoxNDA2OlxcdFxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2Z1c2UvaW5vZGUuYzoxNDA3OlxcdFxcdFxcdCAgICAoZmxhZ3MgXFx1MDAyNiBGVVNFX1BBU1NUSFJPVUdIKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2Z1c2UvaW5vZGUuYy0xNDA4LVxcdFxcdFxcdCAgICBhcmctXFx1MDAzZW1heF9zdGFja19kZXB0aCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYz0xNDYyPXN0YXRpYyBzdHJ1Y3QgZnVzZV9pbml0X2FyZ3MgKmZ1c2VfbmV3X2luaXQoc3RydWN0IGZ1c2VfbW91bnQgKmZtKVxcbi0tXFxuZnMvZnVzZS9pbm9kZS5jLTE0OTUtXFx0XFx0ZmxhZ3MgfD0gRlVTRV9TVUJNT1VOVFM7XFxuZnMvZnVzZS9pbm9kZS5jOjE0OTY6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpKVxcbmZzL2Z1c2UvaW5vZGUuYzoxNDk3OlxcdFxcdGZsYWdzIHw9IEZVU0VfUEFTU1RIUk9VR0g7XFxuZnMvZnVzZS9pbm9kZS5jLTE0OTgtXFx0LyogT25seSBvZmZlcmVkIHRvIHN1ZmZpY2llbnRseSBwcml2aWxlZ2VkIHNlcnZlcnM7IHNlZVxcbi0tXFxuZnMvZnVzZS9pb21vZGUuYz0xNjg9c3RhdGljIGludCBmdXNlX2ZpbGVfcGFzc3Rocm91Z2hfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL2Z1c2UvaW9tb2RlLmMtMTc1LVxcdC8qIENoZWNrIGFsbG93ZWQgY29uZGl0aW9ucyBmb3IgZmlsZSBvcGVuIGluIHBhc3N0aHJvdWdoIG1vZGUgKi9cXG5mcy9mdXNlL2lvbW9kZS5jOjE3NjpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpIHx8ICFmYy1cXHUwMDNlcGFzc3Rocm91Z2ggfHxcXG5mcy9mdXNlL2lvbW9kZS5jLTE3Ny1cXHQgICAgKGZmLVxcdTAwM2VvcGVuX2ZsYWdzIFxcdTAwMjYgfkZPUEVOX1BBU1NUSFJPVUdIX01BU0spKVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaC0yMTUtICogIDcuNDBcXG5pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oOjIxNjogKiAgLSBhZGQgbWF4X3N0YWNrX2RlcHRoIHRvIGZ1c2VfaW5pdF9vdXQsIGFkZCBGVVNFX1BBU1NUSFJPVUdIIGluaXQgZmxhZ1xcbmluY2x1ZGUvdWFwaS9saW51eC9mdXNlLmgtMjE3LSAqICAtIGFkZCBiYWNraW5nX2lkIHRvIGZ1c2Vfb3Blbl9vdXQsIGFkZCBGT1BFTl9QQVNTVEhST1VHSCBvcGVuIGZsYWdcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9mdXNlLmg9MzU1PXN0cnVjdCBmdXNlX2ZpbGVfbG9jayB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oLTQ5OC0jZGVmaW5lIEZVU0VfRElSRUNUX0lPX0FMTE9XX01NQVAgKDFVTEwgXFx1MDAzY1xcdTAwM2MgMzYpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaDo0OTk6I2RlZmluZSBGVVNFX1BBU1NUSFJPVUdIXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgMzcpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaC01MDAtI2RlZmluZSBGVVNFX05PX0VYUE9SVF9TVVBQT1JUXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgMzgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnZtPTU9Q09ORklHX0ZVU0VfRlM9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcudm06NjpDT05GSUdfRlVTRV9QQVNTVEhST1VHSD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy52bS03LUNPTkZJR19ORVRfOVBfVklSVElPPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTc6MzM6NDAuNDQ0NTI0NzcxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MTI3MjE5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGVVNFIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCB0aGFua2Z1bGx5LiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCBkb2Vzbid0ICpyZWx5KiBvbiBgQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0hgLCB0aG91Z2ggaXQncyBwbGFjZWQgaW4gdGhlIHNhbWUgZmlsZS4gQWxsIGl0IHNlZW1zIHRvIGRvIGlzIGludHJvZHVjZSBgRlVTRV9IQVNfU1lOQ0ZTYC4gVGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgaXMgYEZVU0VfRlNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSdsbCBqdXN0IGRvdWJsZS1jaGVjayB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgYXJlbid0IGFueSBvdGhlciBjb25maWcgZGVwZW5kZW5jaWVzIGx1cmtpbmcuXG5cbkFscmlnaHQsIGEgcXVpY2sgc2NhbiBvZiB0aGUgdG91Y2hlZCBmaWxlcywgYGZzL2Z1c2UvZnVzZV9pLmhgLCBgZnMvZnVzZS9pbm9kZS5jYCwgYW5kIGBpbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oYCwgY29uZmlybXMgdGhhdCBgRlVTRV9GU2AgaXMgaW5kZWVkIHRoZSAqb25seSogcmVxdWlyZWQgY29uZmlnLiBUaGF0J3MgYSByZWxpZWY7IHNpbXBsZXIgaXMgYWx3YXlzIGJldHRlci5cblxuTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gdGhlIGtleSBzeW1ib2xzIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcy4gSSd2ZSBnb3QgbXkgZm9jdXMgbmFycm93ZWQgZG93biB0bzogYGZ1c2Vfb3B0X2ZkYCwgYGZ1c2Vfc3luY2ZzX2VuYWJsZWAsIGBwcm9jZXNzX2luaXRfcmVwbHlgLCBgZnVzZV9uZXdfaW5pdGAsIGFuZCBgZnVzZV9maWxsX3N1cGVyX2NvbW1vbmAuIExldCdzIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGVzZSBhcmUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLlxuXG5gZnVzZV9vcHRfZmRgIGlzIHVzZWQgZm9yIG1vdW50IHBhcmFtZXRlciBwYXJzaW5nIOKAkyBub3QgYSBob3QgcGF0aC4gR29vZC4gYGZ1c2Vfc3luY2ZzX2VuYWJsZWAgZ2V0cyBjYWxsZWQgd2l0aGluIGBwcm9jZXNzX2luaXRfcmVwbHlgLCB3aGljaCBpdHNlbGYgaXMgb25seSBjYWxsZWQgb25jZSBwZXIgRlVTRSBtb3VudC4gVGhhdCdzIG5vdCBsaWtlbHkgdG8gYmUgYSBwZXJmb3JtYW5jZSBjb25jZXJuIGVpdGhlci4gVGhlbiB0aGVyZSdzIGBmdXNlX25ld19pbml0YCBhbmQgYGZ1c2VfZmlsbF9zdXBlcl9jb21tb25gLCBib3RoIGV4ZWN1dGVkIG9ubHkgb25jZSBwZXIgbW91bnQsIHNpbWlsYXIgdG8gdGhlIGFib3ZlLlxuXG5Mb29rcyBsaWtlIGFsbCB0aG9zZSBmb2N1cyBzeW1ib2xzIGFyZSBpbiB0aGUgY2xlYXIgaW4gdGVybXMgb2YgYmVpbmcgaG90IHBhdGhzLiBUaGF0J3MgZ29vZCBuZXdzOyB0aGUgcGF0Y2ggc2VlbXMgcmVsYXRpdmVseSBsb3ctaW1wYWN0IGluIHRlcm1zIG9mIHBlcmZvcm1hbmNlLlxuXG5BbHJpZ2h0LCBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gcmVhZHkgdG8gbWFyayB0aGUgcmVzdWx0cyBhcyBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDI5LCJPdXRwdXRUb2tlbnMiOjEzMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNzozMzo0Ny4xNTcyNTEzNzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODMxMDczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVTRV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1c2Vfb3B0X2ZkXCIsXG4gICAgXCJmdXNlX3N5bmNmc19lbmFibGVcIixcbiAgICBcInByb2Nlc3NfaW5pdF9yZXBseVwiLFxuICAgIFwiZnVzZV9uZXdfaW5pdFwiLFxuICAgIFwiZnVzZV9maWxsX3N1cGVyX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byB0aGUgRlVTRSBmaWxlc3lzdGVtLCBhbGxvd2luZyBwcml2aWxlZ2VkIHVzZXJzcGFjZSBzZXJ2ZXJzIHRvIG9wdC1pbiB0byByZWNlaXZpbmcgRlVTRV9TWU5DRlMgcmVxdWVzdHMuIEl0IG1vZGlmaWVzIG1vdW50IHBhcmFtZXRlciBwYXJzaW5nIGFuZCBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uIGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVU0VfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdXNlX29wdF9mZFwiLFxuICAgIFwiZnVzZV9zeW5jZnNfZW5hYmxlXCIsXG4gICAgXCJwcm9jZXNzX2luaXRfcmVwbHlcIixcbiAgICBcImZ1c2VfbmV3X2luaXRcIixcbiAgICBcImZ1c2VfZmlsbF9zdXBlcl9jb21tb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gdGhlIEZVU0UgZmlsZXN5c3RlbSwgYWxsb3dpbmcgcHJpdmlsZWdlZCB1c2Vyc3BhY2Ugc2VydmVycyB0byBvcHQtaW4gdG8gcmVjZWl2aW5nIEZVU0VfU1lOQ0ZTIHJlcXVlc3RzLiBJdCBtb2RpZmllcyBtb3VudCBwYXJhbWV0ZXIgcGFyc2luZyBhbmQgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflows9c5t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-19 17:22:36 +0000 UTC FinishedAt: 2026-06-19 17:33:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "7d87a5a284bb34edb3f4e7e312ef403b3385a7b7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUSE_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "7d87a5a284bb34edb3f4e7e312ef403b3385a7b7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUSE_FS" ], "series_id": "1764156d-e8b0-471c-ae50-4c6c9a7cf040" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "fuse_opt_fd", "fuse_syncfs_enable", "process_init_reply", "fuse_new_init", "fuse_fill_super_common" ], "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+CgkJCTx0ZD4yMDI2LzA2LzE5IDE3OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVU0VfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmdXNlX29wdF9mZCYjMzQ7LAogICAgJiMzNDtmdXNlX3N5bmNmc19lbmFibGUmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19pbml0X3JlcGx5JiMzNDssCiAgICAmIzM0O2Z1c2VfbmV3X2luaXQmIzM0OywKICAgICYjMzQ7ZnVzZV9maWxsX3N1cGVyX2NvbW1vbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gdGhlIEZVU0UgZmlsZXN5c3RlbSwgYWxsb3dpbmcgcHJpdmlsZWdlZCB1c2Vyc3BhY2Ugc2VydmVycyB0byBvcHQtaW4gdG8gcmVjZWl2aW5nIEZVU0VfU1lOQ0ZTIHJlcXVlc3RzLiBJdCBtb2RpZmllcyBtb3VudCBwYXJhbWV0ZXIgcGFyc2luZyBhbmQgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNzozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc2MmUyM2U5Y2ZhODQ1NTk5MjZkMmFmYTA2YjlmNzA2Zjc3ZGQ1NWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAxOSAxNzozMzowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Z1c2VfaS5oIGIvZnMvZnVzZS9mdXNlX2kuaFxuaW5kZXggODVmNzM4YzUzMTIyNWEuLjNmYmU0OTU3ZTgzOWI0IDEwMDY0NFxuLS0tIGEvZnMvZnVzZS9mdXNlX2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnVzZS9mdXNlX2kuaFxuQEAgLTM5MSw2ICYjNDM7MzkxLDcgQEAgc3RydWN0IGZ1c2VfZnNfY29udGV4dCB7XG4gXHRib29sIG5vX2NvbnRyb2w6MTtcbiBcdGJvb2wgbm9fZm9yY2VfdW1vdW50OjE7XG4gXHRib29sIGxlZ2FjeV9vcHRzX3Nob3c6MTtcbiYjNDM7XHRib29sIHN5bmNmc19jYXBhYmxlOjE7XG4gXHRlbnVtIGZ1c2VfZGF4X21vZGUgZGF4X21vZGU7XG4gXHR1bnNpZ25lZCBpbnQgbWF4X3JlYWQ7XG4gXHR1bnNpZ25lZCBpbnQgYmxrc2l6ZTtcbkBAIC02NzUsNiAmIzQzOzY3NiwxNCBAQCBzdHJ1Y3QgZnVzZV9jb25uIHtcbiBcdC8qKiBAc3luY19mczogUHJvcGFnYXRlIHN5bmNmcygpIHRvIHNlcnZlciAqL1xuIFx0dW5zaWduZWQgaW50IHN5bmNfZnM6MTtcbiBcbiYjNDM7XHQvKipcbiYjNDM7XHQgKiBAc3luY2ZzX2NhcGFibGU6IHRoZSBwcml2aWxlZ2UgcmVxdWlyZWQgdG8gaG9ub3IgRlVTRV9IQVNfU1lOQ0ZTIHdhc1xuJiM0MztcdCAqIHByZXNlbnQgd2hlbiAvZGV2L2Z1c2Ugd2FzIG9wZW5lZCAoQ0FQX1NZU19BRE1JTiBpbiB0aGUgaW5pdGlhbCB1c2VyXG4mIzQzO1x0ICogbmFtZXNwYWNlKSwgaS5lLiB0aGUgc2FtZSBwcml2aWxlZ2UgdGhhdCBtb3VudGluZyB2aXJ0aW9mcy9mdXNlYmxrXG4mIzQzO1x0ICogcmVxdWlyZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0dW5zaWduZWQgaW50IHN5bmNmc19jYXBhYmxlOjE7XG4mIzQzO1xuIFx0LyoqIEBpbml0X3NlY3VyaXR5OiBJbml0aWFsaXplIHNlY3VyaXR5IHhhdHRycyB3aGVuIGNyZWF0aW5nIGEgbmV3IGlub2RlICovXG4gXHR1bnNpZ25lZCBpbnQgaW5pdF9zZWN1cml0eToxO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuY1xuaW5kZXggZDk3NTA3M2M2MDI5NjMuLmJhNzUwNmI1MzlhZTAzIDEwMDY0NFxuLS0tIGEvZnMvZnVzZS9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mdXNlL2lub2RlLmNcbkBAIC04MDAsNiAmIzQzOzgwMCwxNSBAQCBzdGF0aWMgaW50IGZ1c2Vfb3B0X2ZkKHN0cnVjdCBmc19jb250ZXh0ICpmc2MsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0aWYgKGZpbGUtXHUwMDNlZl9jcmVkLVx1MDAzZXVzZXJfbnMgIT0gZnNjLVx1MDAzZXVzZXJfbnMpXG4gXHRcdHJldHVybiBpbnZhbGZjKGZzYywgXCYjMzQ7d3JvbmcgdXNlciBuYW1lc3BhY2UgZm9yIGZ1c2UgZGV2aWNlXCYjMzQ7KTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlY29yZCB3aGV0aGVyIHRoZSBzZXJ2ZXIgb3BlbmVkIC9kZXYvZnVzZSB3aXRoIENBUF9TWVNfQURNSU4gaW4gdGhlXG4mIzQzO1x0ICogaW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAtLSB0aGUgc2FtZSBwcml2aWxlZ2UgdGhhdCBtb3VudGluZyB2aXJ0aW9mc1xuJiM0MztcdCAqIG9yIGZ1c2VibGsgcmVxdWlyZXMuICBPbmx5IHN1Y2ggc2VydmVycyBhcmUgdHJ1c3RlZCB0byByZWNlaXZlXG4mIzQzO1x0ICogRlVTRV9TWU5DRlMgKHNlZSBmdXNlX3N5bmNmc19lbmFibGUoKSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3R4LVx1MDAzZXN5bmNmc19jYXBhYmxlID0gZmlsZV9uc19jYXBhYmxlKGZpbGUsIFx1MDAyNmluaXRfdXNlcl9ucyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIENBUF9TWVNfQURNSU4pO1xuJiM0MztcbiBcdGN0eC1cdTAwM2VmdWQgPSBmdXNlX2Rldl9ncmFiKGZpbGUpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTI2Niw2ICYjNDM7MTI3NSwxNiBAQCBzdHJ1Y3QgZnVzZV9pbml0X2FyZ3Mge1xuIFx0c3RydWN0IGZ1c2VfbW91bnQgKmZtO1xuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEEgc2VydmVyIGNhbiBzdGFsbCBzeW5jZnMoKS9zeW5jKCksIHNvIG9ubHkgaG9ub3IgRlVTRV9IQVNfU1lOQ0ZTIGZvclxuJiM0MzsgKiBzZXJ2ZXJzIHRoYXQgb3BlbmVkIC9kZXYvZnVzZSB3aXRoIENBUF9TWVNfQURNSU4gaW4gdGhlIGluaXRpYWwgdXNlclxuJiM0MzsgKiBuYW1lc3BhY2UgLS0gdGhlIHNhbWUgcHJpdmlsZWdlIHJlcXVpcmVkIHRvIG1vdW50IHZpcnRpb2ZzIG9yIGZ1c2VibGsuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBmdXNlX3N5bmNmc19lbmFibGUoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHU2NCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAoZmxhZ3MgXHUwMDI2IEZVU0VfSEFTX1NZTkNGUykgXHUwMDI2XHUwMDI2IGZjLVx1MDAzZXN5bmNmc19jYXBhYmxlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHByb2Nlc3NfaW5pdF9yZXBseShzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCBpbnQgZXJyb3IpXG4ge1xuIFx0c3RydWN0IGZ1c2VfaW5pdF9hcmdzICppYSA9IGNvbnRhaW5lcl9vZihhcmdzLCB0eXBlb2YoKmlhKSwgYXJncyk7XG5AQCAtMTQwNiw2ICYjNDM7MTQyNSw5IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfaW5pdF9yZXBseShzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCBpbnQgZXJyb3IpXG4gXG4gXHRcdFx0aWYgKGZsYWdzIFx1MDAyNiBGVVNFX1JFUVVFU1RfVElNRU9VVClcbiBcdFx0XHRcdHRpbWVvdXQgPSBhcmctXHUwMDNlcmVxdWVzdF90aW1lb3V0O1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGZ1c2Vfc3luY2ZzX2VuYWJsZShmYywgZmxhZ3MpKVxuJiM0MztcdFx0XHRcdGZjLVx1MDAzZXN5bmNfZnMgPSAxO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHJhX3BhZ2VzID0gZmMtXHUwMDNlbWF4X3JlYWQgLyBQQUdFX1NJWkU7XG4gXHRcdFx0ZmMtXHUwMDNlbm9fbG9jayA9IDE7XG5AQCAtMTQ3Myw2ICYjNDM7MTQ5NSwxMSBAQCBzdGF0aWMgc3RydWN0IGZ1c2VfaW5pdF9hcmdzICpmdXNlX25ld19pbml0KHN0cnVjdCBmdXNlX21vdW50ICpmbSlcbiBcdFx0ZmxhZ3MgfD0gRlVTRV9TVUJNT1VOVFM7XG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkpXG4gXHRcdGZsYWdzIHw9IEZVU0VfUEFTU1RIUk9VR0g7XG4mIzQzO1x0LyogT25seSBvZmZlcmVkIHRvIHN1ZmZpY2llbnRseSBwcml2aWxlZ2VkIHNlcnZlcnM7IHNlZVxuJiM0MztcdCAqIGZ1c2Vfc3luY2ZzX2VuYWJsZSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmbS1cdTAwM2VmYy1cdTAwM2VzeW5jZnNfY2FwYWJsZSlcbiYjNDM7XHRcdGZsYWdzIHw9IEZVU0VfSEFTX1NZTkNGUztcbiBcbiBcdC8qXG4gXHQgKiBUaGlzIGlzIGp1c3QgYW4gaW5mb3JtYXRpb24gZmxhZyBmb3IgZnVzZSBzZXJ2ZXIuIE5vIG5lZWQgdG8gY2hlY2tcbkBAIC0xNzY2LDYgJiM0MzsxNzkzLDcgQEAgaW50IGZ1c2VfZmlsbF9zdXBlcl9jb21tb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZ1c2VfZnNfY29udGV4dCAqY3R4KVxuIFxuIFx0ZmMtXHUwMDNlZGVmYXVsdF9wZXJtaXNzaW9ucyA9IGN0eC1cdTAwM2VkZWZhdWx0X3Blcm1pc3Npb25zO1xuIFx0ZmMtXHUwMDNlYWxsb3dfb3RoZXIgPSBjdHgtXHUwMDNlYWxsb3dfb3RoZXI7XG4mIzQzO1x0ZmMtXHUwMDNlc3luY2ZzX2NhcGFibGUgPSBjdHgtXHUwMDNlc3luY2ZzX2NhcGFibGU7XG4gXHRmYy1cdTAwM2V1c2VyX2lkID0gY3R4LVx1MDAzZXVzZXJfaWQ7XG4gXHRmYy1cdTAwM2Vncm91cF9pZCA9IGN0eC1cdTAwM2Vncm91cF9pZDtcbiBcdGZjLVx1MDAzZWxlZ2FjeV9vcHRzX3Nob3cgPSBjdHgtXHUwMDNlbGVnYWN5X29wdHNfc2hvdztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaFxuaW5kZXggYzEzZTFmOWEyZjEyYmQuLmMwNzhjNWYwZjk0ZWM5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaFxuQEAgLTI0MCw2ICYjNDM7MjQwLDkgQEBcbiAgKiAgLSBhZGQgRlVTRV9DT1BZX0ZJTEVfUkFOR0VfNjRcbiAgKiAgLSBhZGQgc3RydWN0IGZ1c2VfY29weV9maWxlX3JhbmdlX291dFxuICAqICAtIGFkZCBGVVNFX05PVElGWV9QUlVORVxuJiM0MzsgKlxuJiM0MzsgKiAgNy40NlxuJiM0MzsgKiAgLSBhZGQgRlVTRV9IQVNfU1lOQ0ZTIG9wdC1pbiBmbGFnIGZvciBwcml2aWxlZ2VkIHVzZXJzcGFjZSBzZXJ2ZXJzXG4gICovXG4gXG4gI2lmbmRlZiBfTElOVVhfRlVTRV9IXG5AQCAtMjc1LDcgJiM0MzsyNzgsNyBAQFxuICNkZWZpbmUgRlVTRV9LRVJORUxfVkVSU0lPTiA3XG4gXG4gLyoqIE1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgaW50ZXJmYWNlICovXG4tI2RlZmluZSBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OIDQ1XG4mIzQzOyNkZWZpbmUgRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTiA0NlxuIFxuIC8qKiBUaGUgbm9kZSBJRCBvZiB0aGUgcm9vdCBpbm9kZSAqL1xuICNkZWZpbmUgRlVTRV9ST09UX0lEIDFcbkBAIC00NDgsNiAmIzQzOzQ1MSwxMiBAQCBzdHJ1Y3QgZnVzZV9maWxlX2xvY2sge1xuICAqIEZVU0VfT1ZFUl9JT19VUklORzogSW5kaWNhdGUgdGhhdCBjbGllbnQgc3VwcG9ydHMgaW8tdXJpbmdcbiAgKiBGVVNFX1JFUVVFU1RfVElNRU9VVDoga2VybmVsIHN1cHBvcnRzIHRpbWluZyBvdXQgcmVxdWVzdHMuXG4gICpcdFx0XHQgaW5pdF9vdXQucmVxdWVzdF90aW1lb3V0IGNvbnRhaW5zIHRoZSB0aW1lb3V0IChpbiBzZWNzKVxuJiM0MzsgKiBGVVNFX0hBU19TWU5DRlM6IHNlcnZlciByZXF1ZXN0cyB0aGF0IHN5bmNmcygpL3N5bmMoKSBiZSBwcm9wYWdhdGVkIGFzXG4mIzQzOyAqXHRcdEZVU0VfU1lOQ0ZTIHJlcXVlc3RzLiAgU2luY2UgYW4gdW50cnVzdGVkIHNlcnZlciBjYW4gdXNlIHRoaXNcbiYjNDM7ICpcdFx0dG8gc3RhbGwgc3luYygpLCBpdCBpcyBvbmx5IGhvbm9yZWQgd2hlbiAvZGV2L2Z1c2Ugd2FzIG9wZW5lZFxuJiM0MzsgKlx0XHR3aXRoIENBUF9TWVNfQURNSU4gaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgKHRoZSBzYW1lXG4mIzQzOyAqXHRcdHByaXZpbGVnZSB0aGF0IG1vdW50aW5nIHZpcnRpb2ZzIG9yIGZ1c2VibGsgcmVxdWlyZXMpLlxuJiM0MzsgKlx0XHRJbnN1ZmZpY2llbnRseSBwcml2aWxlZ2VkIHNlcnZlcnMgaWdub3JlIGl0LlxuICAqL1xuICNkZWZpbmUgRlVTRV9BU1lOQ19SRUFEXHRcdCgxIFx1MDAzY1x1MDAzYyAwKVxuICNkZWZpbmUgRlVTRV9QT1NJWF9MT0NLU1x0KDEgXHUwMDNjXHUwMDNjIDEpXG5AQCAtNDk1LDYgJiM0Mzs1MDQsNyBAQCBzdHJ1Y3QgZnVzZV9maWxlX2xvY2sge1xuICNkZWZpbmUgRlVTRV9BTExPV19JRE1BUFx0KDFVTEwgXHUwMDNjXHUwMDNjIDQwKVxuICNkZWZpbmUgRlVTRV9PVkVSX0lPX1VSSU5HXHQoMVVMTCBcdTAwM2NcdTAwM2MgNDEpXG4gI2RlZmluZSBGVVNFX1JFUVVFU1RfVElNRU9VVFx0KDFVTEwgXHUwMDNjXHUwMDNjIDQyKVxuJiM0MzsjZGVmaW5lIEZVU0VfSEFTX1NZTkNGU1x0XHQoMVVMTCBcdTAwM2NcdTAwM2MgNDMpXG4gXG4gLyoqXG4gICogQ1VTRSBJTklUIHJlcXVlc3QvcmVwbHkgZmxhZ3NcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlLy5naXRpZ25vcmVcbmluZGV4IDNlNzJlNzQyZDA4ZThjLi40ZTkyZjM2M2M3NGFiMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvLmdpdGlnbm9yZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS8uZ2l0aWdub3JlXG5AQCAtMSwzICYjNDM7MSw0IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gZnVzZV9tbnRcbiBmdXNlY3RsX3Rlc3RcbiYjNDM7dGVzdF9zeW5jZnNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuaW5kZXggNjEyYWFkNjlhOTNhYTQuLmNiYmEwMTYzNTIyNmRjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuQEAgLTIsNyAmIzQzOzIsNyBAQFxuIFxuIENGTEFHUyAmIzQzOz0gLVdhbGwgLU8yIC1nICQoS0hEUl9JTkNMVURFUylcbiBcbi1URVNUX0dFTl9QUk9HUyA6PSBmdXNlY3RsX3Rlc3RcbiYjNDM7VEVTVF9HRU5fUFJPR1MgOj0gZnVzZWN0bF90ZXN0IHRlc3Rfc3luY2ZzXG4gVEVTVF9HRU5fRklMRVMgOj0gZnVzZV9tbnRcbiBcbiBpbmNsdWRlIC4uLy4uL2xpYi5ta1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvdGVzdF9zeW5jZnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvdGVzdF9zeW5jZnMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MGZiMzQ3ODU1NGFmNVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS90ZXN0X3N5bmNmcy5jXG5AQCAtMCwwICYjNDM7MSwzNzAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogVGVzdCB0aGF0IEZVU0VfU1lOQ0ZTIGlzIHByb3BhZ2F0ZWQgdG8gYSB1c2Vyc3BhY2Ugc2VydmVyIG9ubHkgd2hlbiB0aGVcbiYjNDM7ICogc2VydmVyIG9wdHMgaW4gd2l0aCBGVVNFX0hBU19TWU5DRlMgKmFuZCogb3BlbmVkIC9kZXYvZnVzZSB3aXRoXG4mIzQzOyAqIENBUF9TWVNfQURNSU4gaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIFVubGlrZSB0aGUgbGliZnVzZS1iYXNlZCBzZWxmdGVzdHMsIHRoaXMgdGFsa3MgdGhlIHJhdyBGVVNFIHdpcmUgcHJvdG9jb2xcbiYjNDM7ICogb3ZlciAvZGV2L2Z1c2Ugc28gaXQgY2FuIChhKSBjaG9vc2Ugd2hldGhlciB0byBhZHZlcnRpc2UgRlVTRV9IQVNfU1lOQ0ZTIGluXG4mIzQzOyAqIHRoZSBJTklUIHJlcGx5IGFuZCAoYikgb2JzZXJ2ZSBkaXJlY3RseSB3aGV0aGVyIGEgRlVTRV9TWU5DRlMgb3Bjb2RlIGFycml2ZXMuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9ldmVudGZkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL21vdW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy91aW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NhcGFiaWxpdHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mdXNlLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uLy4uL2tzZWxmdGVzdC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEZVU0VfUk9PVF9JRCAxXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBZGQgb3IgZHJvcCBDQVBfU1lTX0FETUlOIGluIHRoZSBlZmZlY3RpdmUgc2V0IHZpYSByYXcgY2FwZ2V0L2NhcHNldFxuJiM0MzsgKiAoYXZvaWRzIGEgbGliY2FwIGRlcGVuZGVuY3kpLiAgVXNlZCB0byBjb25zdHJ1Y3QgYSBzZXJ2ZXIgdGhhdCBvcGVuc1xuJiM0MzsgKiAvZGV2L2Z1c2Ugd2l0aG91dCB0aGUgcHJpdmlsZWdlIEZVU0VfSEFTX1NZTkNGUyByZXF1aXJlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgc2V0X3N5c2FkbWluKGludCBvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBfX3VzZXJfY2FwX2hlYWRlcl9zdHJ1Y3QgaGRyID0ge1xuJiM0MztcdFx0LnZlcnNpb24gPSBfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OXzMsXG4mIzQzO1x0XHQucGlkID0gMCxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBfX3VzZXJfY2FwX2RhdGFfc3RydWN0IGRhdGFbX0xJTlVYX0NBUEFCSUxJVFlfVTMyU18zXSA9IHt9O1xuJiM0MztcdHVuc2lnbmVkIGludCBpZHggPSBDQVBfU1lTX0FETUlOIFx1MDAzZVx1MDAzZSA1O1xuJiM0MztcdF9fdTMyIGJpdCA9IDFVIFx1MDAzY1x1MDAzYyAoQ0FQX1NZU19BRE1JTiBcdTAwMjYgMzEpO1xuJiM0MztcbiYjNDM7XHRpZiAoc3lzY2FsbChTWVNfY2FwZ2V0LCBcdTAwMjZoZHIsIGRhdGEpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdGlmIChvbilcbiYjNDM7XHRcdGRhdGFbaWR4XS5lZmZlY3RpdmUgfD0gYml0O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGRhdGFbaWR4XS5lZmZlY3RpdmUgXHUwMDI2PSB+Yml0O1xuJiM0MztcdHJldHVybiBzeXNjYWxsKFNZU19jYXBzZXQsIFx1MDAyNmhkciwgZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIGV2ZW50ZmQgdGhlIHNlcnZlciBjaGlsZCB3cml0ZXMgb25jZSB3aGVuIGl0IHJlY2VpdmVzIEZVU0VfU1lOQ0ZTOyB0aGVcbiYjNDM7ICogcGFyZW50IHBvbGwoKXMgaXQgdG8gb2JzZXJ2ZSAob3IgcnVsZSBvdXQpIHByb3BhZ2F0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBzeW5jZnNfZXZmZDtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlcGx5KGludCBmZCwgdWludDY0X3QgdW5pcXVlLCBpbnQgZXJyb3IsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZnVzZV9vdXRfaGVhZGVyIG9oID0ge1xuJiM0MztcdFx0LmxlbiA9IHNpemVvZihvaCkgJiM0MzsgbGVuLFxuJiM0MztcdFx0LmVycm9yID0gZXJyb3IsXG4mIzQzO1x0XHQudW5pcXVlID0gdW5pcXVlLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGlvdmVjIGlvdlsyXSA9IHtcbiYjNDM7XHRcdHsgXHUwMDI2b2gsIHNpemVvZihvaCkgfSxcbiYjNDM7XHRcdHsgZGF0YSwgbGVuIH0sXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0aWYgKHdyaXRldihmZCwgaW92LCBkYXRhID8gMiA6IDEpIFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7c2VydmVyIHdyaXRldiBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBmaWxsX2F0dHIoc3RydWN0IGZ1c2VfYXR0ciAqYSwgdWludDY0X3QgaW5vLCB1aW50MzJfdCBtb2RlLFxuJiM0MztcdFx0ICAgICAgdWludDMyX3QgbmxpbmspXG4mIzQzO3tcbiYjNDM7XHRtZW1zZXQoYSwgMCwgc2l6ZW9mKCphKSk7XG4mIzQzO1x0YS1cdTAwM2Vpbm8gPSBpbm87XG4mIzQzO1x0YS1cdTAwM2Vtb2RlID0gbW9kZTtcbiYjNDM7XHRhLVx1MDAzZW5saW5rID0gbmxpbms7XG4mIzQzO1x0YS1cdTAwM2VibGtzaXplID0gNDA5NjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogTWluaW1hbCBGVVNFIHNlcnZlci4gIEFkdmVydGlzZXMgRlVTRV9IQVNfU1lOQ0ZTIGluIGl0cyBJTklUIHJlcGx5IGlmZlxuJiM0MzsgKiBAYWR2ZXJ0aXNlIGlzIHNldC4gIFNpZ25hbHMgc3luY2ZzX2V2ZmQgd2hlbiBhIEZVU0VfU1lOQ0ZTIG9wY29kZSBhcnJpdmVzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBTRVJWRVJfTUFYX1dSSVRFIDY1NTM2XG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9zZXJ2ZXIoaW50IGZkLCBpbnQgYWR2ZXJ0aXNlKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUga2VybmVsIHJlamVjdHMgcmVhZHMgKEVJTlZBTCkgd2hvc2UgYnVmZmVyIGlzIHNtYWxsZXIgdGhhblxuJiM0MztcdCAqIG1heF93cml0ZSAmIzQzOyBoZWFkZXIsIHNvIHNpemUgZ2VuZXJvdXNseSBmb3IgdGhlIG1heF93cml0ZSB3ZVxuJiM0MztcdCAqIGFkdmVydGlzZSBpbiB0aGUgSU5JVCByZXBseSBiZWxvdy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdGF0aWMgY2hhciBidWZbU0VSVkVSX01BWF9XUklURSAmIzQzOyA0MDk2XTtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0c3NpemVfdCBuID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0XHRzdHJ1Y3QgZnVzZV9pbl9oZWFkZXIgKmloID0gKHZvaWQgKilidWY7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG4gXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0aWYgKGVycm5vID09IEVJTlRSIHx8IGVycm5vID09IEVBR0FJTilcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0cmV0dXJuO1x0XHQvKiBkZXZpY2UgY2xvc2VkIG9uIHVubW91bnQvYWJvcnQgKi9cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChuIFx1MDAzYyAoc3NpemVfdClzaXplb2YoKmloKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0c3dpdGNoIChpaC1cdTAwM2VvcGNvZGUpIHtcbiYjNDM7XHRcdGNhc2UgRlVTRV9JTklUOiB7XG4mIzQzO1x0XHRcdHN0cnVjdCBmdXNlX2luaXRfaW4gKmluID0gKHZvaWQgKikoaWggJiM0MzsgMSk7XG4mIzQzO1x0XHRcdHN0cnVjdCBmdXNlX2luaXRfb3V0IG91dCA9IHswfTtcbiYjNDM7XHRcdFx0dWludDY0X3QgZmxhZ3MgPSBGVVNFX0lOSVRfRVhUO1xuJiM0MztcbiYjNDM7XHRcdFx0b3V0Lm1ham9yID0gRlVTRV9LRVJORUxfVkVSU0lPTjtcbiYjNDM7XHRcdFx0b3V0Lm1pbm9yID0gRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTjtcbiYjNDM7XHRcdFx0b3V0Lm1heF9yZWFkYWhlYWQgPSBpbi1cdTAwM2VtYXhfcmVhZGFoZWFkO1xuJiM0MztcdFx0XHRvdXQubWF4X3dyaXRlID0gU0VSVkVSX01BWF9XUklURTtcbiYjNDM7XHRcdFx0b3V0Lm1heF9iYWNrZ3JvdW5kID0gMTY7XG4mIzQzO1x0XHRcdG91dC5jb25nZXN0aW9uX3RocmVzaG9sZCA9IDEyO1xuJiM0MztcdFx0XHRpZiAoYWR2ZXJ0aXNlKVxuJiM0MztcdFx0XHRcdGZsYWdzIHw9IEZVU0VfSEFTX1NZTkNGUztcbiYjNDM7XHRcdFx0b3V0LmZsYWdzID0gZmxhZ3M7XG4mIzQzO1x0XHRcdG91dC5mbGFnczIgPSBmbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4mIzQzO1x0XHRcdHJlcGx5KGZkLCBpaC1cdTAwM2V1bmlxdWUsIDAsIFx1MDAyNm91dCwgc2l6ZW9mKG91dCkpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNhc2UgRlVTRV9HRVRBVFRSOiB7XG4mIzQzO1x0XHRcdHN0cnVjdCBmdXNlX2F0dHJfb3V0IG91dCA9IHswfTtcbiYjNDM7XG4mIzQzO1x0XHRcdGZpbGxfYXR0cihcdTAwMjZvdXQuYXR0ciwgRlVTRV9ST09UX0lELCBTX0lGRElSIHwgMDc1NSwgMik7XG4mIzQzO1x0XHRcdHJlcGx5KGZkLCBpaC1cdTAwM2V1bmlxdWUsIDAsIFx1MDAyNm91dCwgc2l6ZW9mKG91dCkpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNhc2UgRlVTRV9TWU5DRlM6IHtcbiYjNDM7XHRcdFx0dWludDY0X3Qgb25lID0gMTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh3cml0ZShzeW5jZnNfZXZmZCwgXHUwMDI2b25lLCBzaXplb2Yob25lKSkgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7c2VydmVyIGV2ZW50ZmQgd3JpdGUgZmFpbGVkOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0XHRyZXBseShmZCwgaWgtXHUwMDNldW5pcXVlLCAwLCBOVUxMLCAwKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBbnl0aGluZyBlbHNlIChlLmcuIE9QRU5ESVIgZnJvbSBvcGVuaW5nIHRoZSBtb3VudFxuJiM0MztcdFx0XHQgKiByb290KSBpcyBub3QgbmVlZGVkIHRvIGRyaXZlIHRoaXMgdGVzdDsgLUVOT1NZUyBsZXRzXG4mIzQzO1x0XHRcdCAqIHRoZSBrZXJuZWwgcHJvY2VlZC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHJlcGx5KGZkLCBpaC1cdTAwM2V1bmlxdWUsIC1FTk9TWVMsIE5VTEwsIDApO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE1vdW50IGEgZnVzZSBmcyBiYWNrZWQgYnkgYSBmb3JrZWQgc2VydmVyLCBpc3N1ZSBzeW5jZnMoKSwgYW5kIHJlcG9ydFxuJiM0MzsgKiB3aGV0aGVyIHRoZSBzZXJ2ZXIgb2JzZXJ2ZWQgRlVTRV9TWU5DRlMuICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgaWYgdGhlXG4mIzQzOyAqIGVudmlyb25tZW50IGNvdWxkIG5vdCBzdXBwb3J0IHRoZSB0ZXN0IChjYWxsZXIgc2hvdWxkIHNraXApLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiBAdW5wcml2X29wZW4gaXMgc2V0LCAvZGV2L2Z1c2UgaXMgb3BlbmVkIHdpdGggQ0FQX1NZU19BRE1JTiBkcm9wcGVkXG4mIzQzOyAqIChyZWdhaW5lZCBvbmx5IGZvciB0aGUgbW91bnQoKSBzeXNjYWxsKSwgc28gdGhlIGRldmljZSBvcGVuZXIgLS0gdGhlXG4mIzQzOyAqIHNlcnZlciBwcmluY2lwYWwgRlVTRV9IQVNfU1lOQ0ZTIGlzIGdhdGVkIG9uIC0tIGxhY2tzIHRoZSBwcml2aWxlZ2UgZXZlblxuJiM0MzsgKiB0aG91Z2ggaXQgcmVtYWlucyBpbiB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZG9fbW91bnRfYW5kX3N5bmNmcyhjb25zdCBjaGFyICptbnQsIGludCBhZHZlcnRpc2UsIGludCB1bnByaXZfb3BlbixcbiYjNDM7XHRcdFx0ICAgICAgIGludCAqc2VlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwb2xsZmQgcGZkID0geyAuZXZlbnRzID0gUE9MTElOIH07XG4mIzQzO1x0Y2hhciBvcHRzWzI1Nl07XG4mIzQzO1x0aW50IGZkLCBtZmQgPSAtMSwgaTtcbiYjNDM7XHRwaWRfdCBwaWQ7XG4mIzQzO1xuJiM0MztcdHN5bmNmc19ldmZkID0gZXZlbnRmZCgwLCBFRkRfQ0xPRVhFQyk7XG4mIzQzO1x0aWYgKHN5bmNmc19ldmZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZiAodW5wcml2X29wZW4gXHUwMDI2XHUwMDI2IHNldF9zeXNhZG1pbigwKSlcbiYjNDM7XHRcdGdvdG8gb3V0X2V2ZmQ7XG4mIzQzO1x0ZmQgPSBvcGVuKFwmIzM0Oy9kZXYvZnVzZVwmIzM0OywgT19SRFdSKTtcbiYjNDM7XHRpZiAodW5wcml2X29wZW4gXHUwMDI2XHUwMDI2IHNldF9zeXNhZG1pbigxKSkge1xuJiM0MztcdFx0aWYgKGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0Z290byBvdXRfZXZmZDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXRfZXZmZDtcbiYjNDM7XG4mIzQzO1x0bWtkaXIobW50LCAwNzU1KTtcbiYjNDM7XHRzbnByaW50ZihvcHRzLCBzaXplb2Yob3B0cyksXG4mIzQzO1x0XHQgXCYjMzQ7ZmQ9JWQscm9vdG1vZGU9NDAwMDAsdXNlcl9pZD0lZCxncm91cF9pZD0lZFwmIzM0OyxcbiYjNDM7XHRcdCBmZCwgZ2V0dWlkKCksIGdldGdpZCgpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1vdW50KFwmIzM0O2Z1c2VcJiMzNDssIG1udCwgXCYjMzQ7ZnVzZVwmIzM0OywgMCwgb3B0cykgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dF9mZDtcbiYjNDM7XG4mIzQzO1x0cGlkID0gZm9yaygpO1xuJiM0MztcdGlmIChwaWQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dF91bW91bnQ7XG4mIzQzO1x0aWYgKHBpZCA9PSAwKSB7XG4mIzQzO1x0XHRydW5fc2VydmVyKGZkLCBhZHZlcnRpc2UpO1xuJiM0MztcdFx0X2V4aXQoMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBwYXJlbnQgZG9lcyBub3Qgc2VydmljZSB0aGUgZnVzZSBmZDsgdGhlIGNoaWxkIGRvZXMuICBDbG9zZSBvdXJcbiYjNDM7XHQgKiBjb3B5IHNvIHRoZSBrZXJuZWwgc2VlcyBhIHNpbmdsZSBzZXJ2ZXIsIGFuZCBzbyB0aGF0IGlmIHRoZSBjaGlsZFxuJiM0MztcdCAqIGRpZXMgdGhlIGNvbm5lY3Rpb24gYWJvcnRzIGluc3RlYWQgb2YgaGFuZ2luZyB1cyBmb3JldmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBtb3VudCgpIHJldHVybnMgYmVmb3JlIHRoZSBzZXJ2ZXIgaGFzIGFuc3dlcmVkIEZVU0VfSU5JVCwgc28gdGhlXG4mIzQzO1x0ICogZmlyc3Qgb3BlbigpIGNhbiByYWNlIGFuZCBmYWlsIHdpdGggRU5PVENPTk47IHJldHJ5IHVudGlsIHRoZVxuJiM0MztcdCAqIGhhbmRzaGFrZSBzZXR0bGVzLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRtZmQgPSBvcGVuKG1udCwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7XG4mIzQzO1x0XHRpZiAobWZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChtZmQgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRzeW5jZnMobWZkKTtcbiYjNDM7XHRcdGNsb3NlKG1mZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vIHdhaXRpbmcgaXMgbmVlZGVkOiB0aGUgc2VydmVyIHdyaXRlcyBzeW5jZnNfZXZmZCBiZWZvcmUgaXQgcmVwbGllc1xuJiM0MztcdCAqIHRvIEZVU0VfU1lOQ0ZTLCBhbmQgdGhhdCByZXBseSBpcyB3aGF0IHVuYmxvY2tzIHRoZSBzeW5jaHJvbm91c1xuJiM0MztcdCAqIHN5bmNmcygpIGFib3ZlLiAgU28gb25jZSBzeW5jZnMoKSBoYXMgcmV0dXJuZWQsIHRoZSBldmVudGZkIGlzIGFscmVhZHlcbiYjNDM7XHQgKiBzaWduYWxsZWQgaWYgdGhlIG9wY29kZSB3YXMgcHJvcGFnYXRlZCwgYW5kIHdpbGwgbmV2ZXIgYmUgb3RoZXJ3aXNlLlxuJiM0MztcdCAqIHBvbGwoKSB3aXRoIGEgemVybyB0aW1lb3V0IHRoZXJlZm9yZSBkZWNpZGVzIGJvdGggY2FzZXMgaW1tZWRpYXRlbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGZkLmZkID0gc3luY2ZzX2V2ZmQ7XG4mIzQzO1x0KnNlZW4gPSBwb2xsKFx1MDAyNnBmZCwgMSwgMCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IChwZmQucmV2ZW50cyBcdTAwMjYgUE9MTElOKTtcbiYjNDM7XG4mIzQzO1x0a2lsbChwaWQsIFNJR0tJTEwpO1xuJiM0MztcdHdhaXRwaWQocGlkLCBOVUxMLCAwKTtcbiYjNDM7XHR1bW91bnQyKG1udCwgTU5UX0RFVEFDSCk7XG4mIzQzO1x0Y2xvc2Uoc3luY2ZzX2V2ZmQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0X3Vtb3VudDpcbiYjNDM7XHR1bW91bnQyKG1udCwgTU5UX0RFVEFDSCk7XG4mIzQzO291dF9mZDpcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO291dF9ldmZkOlxuJiM0MztcdGNsb3NlKHN5bmNmc19ldmZkKTtcbiYjNDM7XHRyZXR1cm4gLTE7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFQ0OiBzYW1lIGFzIGFib3ZlIGJ1dCB0aGUgbW91bnQgaXMgY3JlYXRlZCBpbnNpZGUgYSBuZXcgdXNlciBuYW1lc3BhY2UuICovXG4mIzQzO3N0YXRpYyBpbnQgcnVuX2luX3VzZXJucyhjb25zdCBjaGFyICptbnQsIGludCBhZHZlcnRpc2UsIGludCAqc2VlbilcbiYjNDM7e1xuJiM0MztcdHVpZF90IHVpZCA9IGdldHVpZCgpO1xuJiM0MztcdGdpZF90IGdpZCA9IGdldGdpZCgpO1xuJiM0MztcdGNoYXIgbWFwWzY0XTtcbiYjNDM7XHRpbnQgZjtcbiYjNDM7XG4mIzQzO1x0aWYgKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUiB8IENMT05FX05FV05TKSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcdC8qIHVucHJpdmlsZWdlZCB1c2VybnMgbW91bnRzIHVuYXZhaWxhYmxlICovXG4mIzQzO1xuJiM0MztcdGYgPSBvcGVuKFwmIzM0Oy9wcm9jL3NlbGYvc2V0Z3JvdXBzXCYjMzQ7LCBPX1dST05MWSk7XG4mIzQzO1x0aWYgKGYgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRkcHJpbnRmKGYsIFwmIzM0O2RlbnlcJiMzNDspO1xuJiM0MztcdFx0Y2xvc2UoZik7XG4mIzQzO1x0fVxuJiM0MztcdHNucHJpbnRmKG1hcCwgc2l6ZW9mKG1hcCksIFwmIzM0OzAgJWQgMVwmIzM0OywgdWlkKTtcbiYjNDM7XHRmID0gb3BlbihcJiMzNDsvcHJvYy9zZWxmL3VpZF9tYXBcJiMzNDssIE9fV1JPTkxZKTtcbiYjNDM7XHRpZiAoZiBcdTAwM2MgMCB8fCBkcHJpbnRmKGYsIFwmIzM0OyVzXCYjMzQ7LCBtYXApIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdGNsb3NlKGYpO1xuJiM0MztcdHNucHJpbnRmKG1hcCwgc2l6ZW9mKG1hcCksIFwmIzM0OzAgJWQgMVwmIzM0OywgZ2lkKTtcbiYjNDM7XHRmID0gb3BlbihcJiMzNDsvcHJvYy9zZWxmL2dpZF9tYXBcJiMzNDssIE9fV1JPTkxZKTtcbiYjNDM7XHRpZiAoZiBcdTAwM2MgMCB8fCBkcHJpbnRmKGYsIFwmIzM0OyVzXCYjMzQ7LCBtYXApIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdGNsb3NlKGYpO1xuJiM0MztcbiYjNDM7XHQvKiBOZWVkIGEgbW91bnQgbmFtZXNwYWNlIHdoZXJlIHdlIGNhbiBtb3VudCBmdXNlIHVucHJpdmlsZWdlZC4gKi9cbiYjNDM7XHRpZiAobW91bnQoTlVMTCwgXCYjMzQ7L1wmIzM0OywgTlVMTCwgTVNfUkVDIHwgTVNfUFJJVkFURSwgTlVMTCkgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkb19tb3VudF9hbmRfc3luY2ZzKG1udCwgYWR2ZXJ0aXNlLCAwLCBzZWVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1haW4odm9pZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgbW50W10gPSBcJiMzNDsvdG1wL2Z1c2Vfc3luY2ZzX1hYWFhYWFwmIzM0OztcbiYjNDM7XHRpbnQgc2VlbiwgcmV0O1xuJiM0MztcbiYjNDM7XHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuJiM0MztcdGtzZnRfc2V0X3BsYW4oNCk7XG4mIzQzO1xuJiM0MztcdC8qIEhhcmQgd2F0Y2hkb2c6IG5ldmVyIGxldCBhIHN0dWNrIHN5bmNmcyBoYW5nIHRoZSB0ZXN0IHJ1bm5lci4gKi9cbiYjNDM7XHRzaWduYWwoU0lHQUxSTSwgU0lHX0RGTCk7XG4mIzQzO1x0YWxhcm0oNjApO1xuJiM0MztcbiYjNDM7XHRpZiAoZ2V0ZXVpZCgpICE9IDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDt0ZXN0IHJlcXVpcmVzIHJvb3QgdG8gbW91bnQgZnVzZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmICghbWtkdGVtcChtbnQpKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O21rZHRlbXAgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogVDE6IGhvc3Qtcm9vdCBtb3VudCwgc2VydmVyIG9wdHMgaW4gLVx1MDAzZSBzeW5jZnMgbXVzdCByZWFjaCBzZXJ2ZXIuICovXG4mIzQzO1x0cmV0ID0gZG9fbW91bnRfYW5kX3N5bmNmcyhtbnQsIDEsIDAsIFx1MDAyNnNlZW4pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7VDE6IGNvdWxkIG5vdCBtb3VudCBmdXNlXFxuXCYjMzQ7KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0KHNlZW4sXG4mIzQzO1x0XHRcdFx0IFwmIzM0O1QxIGhvc3Qtcm9vdCAmIzQzOyBGVVNFX0hBU19TWU5DRlM6IHNlcnZlciByZWNlaXZlcyBGVVNFX1NZTkNGU1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFQyOiBob3N0LXJvb3QgbW91bnQsIHNlcnZlciBkb2VzIE5PVCBvcHQgaW4gLVx1MDAzZSBubyBGVVNFX1NZTkNGUy4gKi9cbiYjNDM7XHRyZXQgPSBkb19tb3VudF9hbmRfc3luY2ZzKG1udCwgMCwgMCwgXHUwMDI2c2Vlbik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtUMjogY291bGQgbm90IG1vdW50IGZ1c2VcXG5cJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHQoIXNlZW4sXG4mIzQzO1x0XHRcdFx0IFwmIzM0O1QyIGhvc3Qtcm9vdCwgbm8gb3B0LWluOiBzZXJ2ZXIgZG9lcyBOT1QgcmVjZWl2ZSBGVVNFX1NZTkNGU1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVDM6IHNlcnZlciBvcHRzIGluIGJ1dCBvcGVuZWQgL2Rldi9mdXNlIHdpdGhvdXQgQ0FQX1NZU19BRE1JTiB3aGlsZVxuJiM0MztcdCAqIHN0aWxsIGluIHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlIC1cdTAwM2Uga2VybmVsIG11c3Qgd2l0aGhvbGRcbiYjNDM7XHQgKiBGVVNFX1NZTkNGUy4gIFRoaXMgaXMgdGhlIGNhc2UgdGhhdCBkaXN0aW5ndWlzaGVzIGdhdGluZyBvbiB0aGVcbiYjNDM7XHQgKiBzZXJ2ZXImIzM5O3MgcHJpdmlsZWdlIGZyb20gZ2F0aW5nIG9uIHRoZSBtb3VudCYjMzk7cyB1c2VyIG5hbWVzcGFjZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBkb19tb3VudF9hbmRfc3luY2ZzKG1udCwgMSwgMSwgXHUwMDI2c2Vlbik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtUMzogY291bGQgbm90IG1vdW50IGZ1c2UgdW5wcml2aWxlZ2VkXFxuXCYjMzQ7KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0KCFzZWVuLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtUMyBpbml0X3VzZXJucywgb3BlbmVyIGxhY2tzIENBUF9TWVNfQURNSU46IEZVU0VfU1lOQ0ZTIHdpdGhoZWxkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUNDogdW5wcml2aWxlZ2VkIHVzZXJucyBtb3VudCwgc2VydmVyIG9wdHMgaW4gLVx1MDAzZSBrZXJuZWwgbXVzdCBzdGlsbFxuJiM0MztcdCAqIHdpdGhob2xkIEZVU0VfU1lOQ0ZTLiAgUnVuIGluIGEgY2hpbGQgc2luY2UgaXQgdW5zaGFyZXMgbmFtZXNwYWNlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHR7XG4mIzQzO1x0XHRwaWRfdCBwID0gZm9yaygpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwID09IDApIHtcbiYjNDM7XHRcdFx0aW50IHMgPSAwO1xuJiM0MztcdFx0XHRpbnQgciA9IHJ1bl9pbl91c2VybnMobW50LCAxLCBcdTAwMjZzKTtcbiYjNDM7XG4mIzQzO1x0XHRcdF9leGl0KHIgXHUwMDNjIDAgPyAyIDogKHMgPyAxIDogMCkpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0aW50IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0XHRcdHdhaXRwaWQocCwgXHUwMDI2c3RhdHVzLCAwKTtcbiYjNDM7XHRcdFx0aWYgKCFXSUZFWElURUQoc3RhdHVzKSlcbiYjNDM7XHRcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X2Vycm9yKFwmIzM0O1Q0OiBjaGlsZCBjcmFzaGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZWxzZSBpZiAoV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAyKVxuJiM0MztcdFx0XHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtUNDogdXNlcm5zIGZ1c2UgbW91bnQgdW5hdmFpbGFibGVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0a3NmdF90ZXN0X3Jlc3VsdChXRVhJVFNUQVRVUyhzdGF0dXMpID09IDAsXG4mIzQzO1x0XHRcdFx0XHRcdCBcJiMzNDtUNCB1bnByaXYgdXNlcm5zICYjNDM7IG9wdC1pbjogRlVTRV9TWU5DRlMgd2l0aGhlbGRcXG5cJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cm1kaXIobW50KTtcbiYjNDM7XHRrc2Z0X2ZpbmlzaGVkKCk7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNzozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVNFX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnVzZV9vcHRfZmQmIzM0OywKICAgICYjMzQ7ZnVzZV9zeW5jZnNfZW5hYmxlJiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfaW5pdF9yZXBseSYjMzQ7LAogICAgJiMzNDtmdXNlX25ld19pbml0JiMzNDssCiAgICAmIzM0O2Z1c2VfZmlsbF9zdXBlcl9jb21tb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIHRoZSBGVVNFIGZpbGVzeXN0ZW0sIGFsbG93aW5nIHByaXZpbGVnZWQgdXNlcnNwYWNlIHNlcnZlcnMgdG8gb3B0LWluIHRvIHJlY2VpdmluZyBGVVNFX1NZTkNGUyByZXF1ZXN0cy4gSXQgbW9kaWZpZXMgbW91bnQgcGFyYW1ldGVyIHBhcnNpbmcgYW5kIGNvbm5lY3Rpb24gaW5pdGlhbGl6YXRpb24gbG9naWMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc2MmUyM2U5Y2ZhODQ1NTk5MjZkMmFmYTA2YjlmNzA2Zjc3ZGQ1NWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1biAxOSAxNzozMzowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZnVzZV9pLmggYi9mcy9mdXNlL2Z1c2VfaS5oCmluZGV4IDg1ZjczOGM1MzEyMjVhLi4zZmJlNDk1N2U4MzliNCAxMDA2NDQKLS0tIGEvZnMvZnVzZS9mdXNlX2kuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9mdXNlL2Z1c2VfaS5oCkBAIC0zOTEsNiAmIzQzOzM5MSw3IEBAIHN0cnVjdCBmdXNlX2ZzX2NvbnRleHQgewogCWJvb2wgbm9fY29udHJvbDoxOwogCWJvb2wgbm9fZm9yY2VfdW1vdW50OjE7CiAJYm9vbCBsZWdhY3lfb3B0c19zaG93OjE7CiYjNDM7CWJvb2wgc3luY2ZzX2NhcGFibGU6MTsKIAllbnVtIGZ1c2VfZGF4X21vZGUgZGF4X21vZGU7CiAJdW5zaWduZWQgaW50IG1heF9yZWFkOwogCXVuc2lnbmVkIGludCBibGtzaXplOwpAQCAtNjc1LDYgJiM0Mzs2NzYsMTQgQEAgc3RydWN0IGZ1c2VfY29ubiB7CiAJLyoqIEBzeW5jX2ZzOiBQcm9wYWdhdGUgc3luY2ZzKCkgdG8gc2VydmVyICovCiAJdW5zaWduZWQgaW50IHN5bmNfZnM6MTsKIAomIzQzOwkvKioKJiM0MzsJICogQHN5bmNmc19jYXBhYmxlOiB0aGUgcHJpdmlsZWdlIHJlcXVpcmVkIHRvIGhvbm9yIEZVU0VfSEFTX1NZTkNGUyB3YXMKJiM0MzsJICogcHJlc2VudCB3aGVuIC9kZXYvZnVzZSB3YXMgb3BlbmVkIChDQVBfU1lTX0FETUlOIGluIHRoZSBpbml0aWFsIHVzZXIKJiM0MzsJICogbmFtZXNwYWNlKSwgaS5lLiB0aGUgc2FtZSBwcml2aWxlZ2UgdGhhdCBtb3VudGluZyB2aXJ0aW9mcy9mdXNlYmxrCiYjNDM7CSAqIHJlcXVpcmVzLgomIzQzOwkgKi8KJiM0MzsJdW5zaWduZWQgaW50IHN5bmNmc19jYXBhYmxlOjE7CiYjNDM7CiAJLyoqIEBpbml0X3NlY3VyaXR5OiBJbml0aWFsaXplIHNlY3VyaXR5IHhhdHRycyB3aGVuIGNyZWF0aW5nIGEgbmV3IGlub2RlICovCiAJdW5zaWduZWQgaW50IGluaXRfc2VjdXJpdHk6MTsKIApkaWZmIC0tZ2l0IGEvZnMvZnVzZS9pbm9kZS5jIGIvZnMvZnVzZS9pbm9kZS5jCmluZGV4IGQ5NzUwNzNjNjAyOTYzLi5iYTc1MDZiNTM5YWUwMyAxMDA2NDQKLS0tIGEvZnMvZnVzZS9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Z1c2UvaW5vZGUuYwpAQCAtODAwLDYgJiM0Mzs4MDAsMTUgQEAgc3RhdGljIGludCBmdXNlX29wdF9mZChzdHJ1Y3QgZnNfY29udGV4dCAqZnNjLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlpZiAoZmlsZS0mZ3Q7Zl9jcmVkLSZndDt1c2VyX25zICE9IGZzYy0mZ3Q7dXNlcl9ucykKIAkJcmV0dXJuIGludmFsZmMoZnNjLCAmIzM0O3dyb25nIHVzZXIgbmFtZXNwYWNlIGZvciBmdXNlIGRldmljZSYjMzQ7KTsKIAomIzQzOwkvKgomIzQzOwkgKiBSZWNvcmQgd2hldGhlciB0aGUgc2VydmVyIG9wZW5lZCAvZGV2L2Z1c2Ugd2l0aCBDQVBfU1lTX0FETUlOIGluIHRoZQomIzQzOwkgKiBpbml0aWFsIHVzZXIgbmFtZXNwYWNlIC0tIHRoZSBzYW1lIHByaXZpbGVnZSB0aGF0IG1vdW50aW5nIHZpcnRpb2ZzCiYjNDM7CSAqIG9yIGZ1c2VibGsgcmVxdWlyZXMuICBPbmx5IHN1Y2ggc2VydmVycyBhcmUgdHJ1c3RlZCB0byByZWNlaXZlCiYjNDM7CSAqIEZVU0VfU1lOQ0ZTIChzZWUgZnVzZV9zeW5jZnNfZW5hYmxlKCkpLgomIzQzOwkgKi8KJiM0MzsJY3R4LSZndDtzeW5jZnNfY2FwYWJsZSA9IGZpbGVfbnNfY2FwYWJsZShmaWxlLCAmYW1wO2luaXRfdXNlcl9ucywKJiM0MzsJCQkJCSAgICAgIENBUF9TWVNfQURNSU4pOwomIzQzOwogCWN0eC0mZ3Q7ZnVkID0gZnVzZV9kZXZfZ3JhYihmaWxlKTsKIAogCXJldHVybiAwOwpAQCAtMTI2Niw2ICYjNDM7MTI3NSwxNiBAQCBzdHJ1Y3QgZnVzZV9pbml0X2FyZ3MgewogCXN0cnVjdCBmdXNlX21vdW50ICpmbTsKIH07CiAKJiM0MzsvKgomIzQzOyAqIEEgc2VydmVyIGNhbiBzdGFsbCBzeW5jZnMoKS9zeW5jKCksIHNvIG9ubHkgaG9ub3IgRlVTRV9IQVNfU1lOQ0ZTIGZvcgomIzQzOyAqIHNlcnZlcnMgdGhhdCBvcGVuZWQgL2Rldi9mdXNlIHdpdGggQ0FQX1NZU19BRE1JTiBpbiB0aGUgaW5pdGlhbCB1c2VyCiYjNDM7ICogbmFtZXNwYWNlIC0tIHRoZSBzYW1lIHByaXZpbGVnZSByZXF1aXJlZCB0byBtb3VudCB2aXJ0aW9mcyBvciBmdXNlYmxrLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGZ1c2Vfc3luY2ZzX2VuYWJsZShzdHJ1Y3QgZnVzZV9jb25uICpmYywgdTY0IGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIChmbGFncyAmYW1wOyBGVVNFX0hBU19TWU5DRlMpICZhbXA7JmFtcDsgZmMtJmd0O3N5bmNmc19jYXBhYmxlOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHByb2Nlc3NfaW5pdF9yZXBseShzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCBpbnQgZXJyb3IpCiB7CiAJc3RydWN0IGZ1c2VfaW5pdF9hcmdzICppYSA9IGNvbnRhaW5lcl9vZihhcmdzLCB0eXBlb2YoKmlhKSwgYXJncyk7CkBAIC0xNDA2LDYgJiM0MzsxNDI1LDkgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19pbml0X3JlcGx5KHN0cnVjdCBmdXNlX2FyZ3MgKmFyZ3MsIGludCBlcnJvcikKIAogCQkJaWYgKGZsYWdzICZhbXA7IEZVU0VfUkVRVUVTVF9USU1FT1VUKQogCQkJCXRpbWVvdXQgPSBhcmctJmd0O3JlcXVlc3RfdGltZW91dDsKJiM0MzsKJiM0MzsJCQlpZiAoZnVzZV9zeW5jZnNfZW5hYmxlKGZjLCBmbGFncykpCiYjNDM7CQkJCWZjLSZndDtzeW5jX2ZzID0gMTsKIAkJfSBlbHNlIHsKIAkJCXJhX3BhZ2VzID0gZmMtJmd0O21heF9yZWFkIC8gUEFHRV9TSVpFOwogCQkJZmMtJmd0O25vX2xvY2sgPSAxOwpAQCAtMTQ3Myw2ICYjNDM7MTQ5NSwxMSBAQCBzdGF0aWMgc3RydWN0IGZ1c2VfaW5pdF9hcmdzICpmdXNlX25ld19pbml0KHN0cnVjdCBmdXNlX21vdW50ICpmbSkKIAkJZmxhZ3MgfD0gRlVTRV9TVUJNT1VOVFM7CiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpKQogCQlmbGFncyB8PSBGVVNFX1BBU1NUSFJPVUdIOwomIzQzOwkvKiBPbmx5IG9mZmVyZWQgdG8gc3VmZmljaWVudGx5IHByaXZpbGVnZWQgc2VydmVyczsgc2VlCiYjNDM7CSAqIGZ1c2Vfc3luY2ZzX2VuYWJsZSgpLgomIzQzOwkgKi8KJiM0MzsJaWYgKGZtLSZndDtmYy0mZ3Q7c3luY2ZzX2NhcGFibGUpCiYjNDM7CQlmbGFncyB8PSBGVVNFX0hBU19TWU5DRlM7CiAKIAkvKgogCSAqIFRoaXMgaXMganVzdCBhbiBpbmZvcm1hdGlvbiBmbGFnIGZvciBmdXNlIHNlcnZlci4gTm8gbmVlZCB0byBjaGVjawpAQCAtMTc2Niw2ICYjNDM7MTc5Myw3IEBAIGludCBmdXNlX2ZpbGxfc3VwZXJfY29tbW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmdXNlX2ZzX2NvbnRleHQgKmN0eCkKIAogCWZjLSZndDtkZWZhdWx0X3Blcm1pc3Npb25zID0gY3R4LSZndDtkZWZhdWx0X3Blcm1pc3Npb25zOwogCWZjLSZndDthbGxvd19vdGhlciA9IGN0eC0mZ3Q7YWxsb3dfb3RoZXI7CiYjNDM7CWZjLSZndDtzeW5jZnNfY2FwYWJsZSA9IGN0eC0mZ3Q7c3luY2ZzX2NhcGFibGU7CiAJZmMtJmd0O3VzZXJfaWQgPSBjdHgtJmd0O3VzZXJfaWQ7CiAJZmMtJmd0O2dyb3VwX2lkID0gY3R4LSZndDtncm91cF9pZDsKIAlmYy0mZ3Q7bGVnYWN5X29wdHNfc2hvdyA9IGN0eC0mZ3Q7bGVnYWN5X29wdHNfc2hvdzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9mdXNlLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oCmluZGV4IGMxM2UxZjlhMmYxMmJkLi5jMDc4YzVmMGY5NGVjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oCkBAIC0yNDAsNiAmIzQzOzI0MCw5IEBACiAgKiAgLSBhZGQgRlVTRV9DT1BZX0ZJTEVfUkFOR0VfNjQKICAqICAtIGFkZCBzdHJ1Y3QgZnVzZV9jb3B5X2ZpbGVfcmFuZ2Vfb3V0CiAgKiAgLSBhZGQgRlVTRV9OT1RJRllfUFJVTkUKJiM0MzsgKgomIzQzOyAqICA3LjQ2CiYjNDM7ICogIC0gYWRkIEZVU0VfSEFTX1NZTkNGUyBvcHQtaW4gZmxhZyBmb3IgcHJpdmlsZWdlZCB1c2Vyc3BhY2Ugc2VydmVycwogICovCiAKICNpZm5kZWYgX0xJTlVYX0ZVU0VfSApAQCAtMjc1LDcgJiM0MzsyNzgsNyBAQAogI2RlZmluZSBGVVNFX0tFUk5FTF9WRVJTSU9OIDcKIAogLyoqIE1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgaW50ZXJmYWNlICovCi0jZGVmaW5lIEZVU0VfS0VSTkVMX01JTk9SX1ZFUlNJT04gNDUKJiM0MzsjZGVmaW5lIEZVU0VfS0VSTkVMX01JTk9SX1ZFUlNJT04gNDYKIAogLyoqIFRoZSBub2RlIElEIG9mIHRoZSByb290IGlub2RlICovCiAjZGVmaW5lIEZVU0VfUk9PVF9JRCAxCkBAIC00NDgsNiAmIzQzOzQ1MSwxMiBAQCBzdHJ1Y3QgZnVzZV9maWxlX2xvY2sgewogICogRlVTRV9PVkVSX0lPX1VSSU5HOiBJbmRpY2F0ZSB0aGF0IGNsaWVudCBzdXBwb3J0cyBpby11cmluZwogICogRlVTRV9SRVFVRVNUX1RJTUVPVVQ6IGtlcm5lbCBzdXBwb3J0cyB0aW1pbmcgb3V0IHJlcXVlc3RzLgogICoJCQkgaW5pdF9vdXQucmVxdWVzdF90aW1lb3V0IGNvbnRhaW5zIHRoZSB0aW1lb3V0IChpbiBzZWNzKQomIzQzOyAqIEZVU0VfSEFTX1NZTkNGUzogc2VydmVyIHJlcXVlc3RzIHRoYXQgc3luY2ZzKCkvc3luYygpIGJlIHByb3BhZ2F0ZWQgYXMKJiM0MzsgKgkJRlVTRV9TWU5DRlMgcmVxdWVzdHMuICBTaW5jZSBhbiB1bnRydXN0ZWQgc2VydmVyIGNhbiB1c2UgdGhpcwomIzQzOyAqCQl0byBzdGFsbCBzeW5jKCksIGl0IGlzIG9ubHkgaG9ub3JlZCB3aGVuIC9kZXYvZnVzZSB3YXMgb3BlbmVkCiYjNDM7ICoJCXdpdGggQ0FQX1NZU19BRE1JTiBpbiB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAodGhlIHNhbWUKJiM0MzsgKgkJcHJpdmlsZWdlIHRoYXQgbW91bnRpbmcgdmlydGlvZnMgb3IgZnVzZWJsayByZXF1aXJlcykuCiYjNDM7ICoJCUluc3VmZmljaWVudGx5IHByaXZpbGVnZWQgc2VydmVycyBpZ25vcmUgaXQuCiAgKi8KICNkZWZpbmUgRlVTRV9BU1lOQ19SRUFECQkoMSAmbHQ7Jmx0OyAwKQogI2RlZmluZSBGVVNFX1BPU0lYX0xPQ0tTCSgxICZsdDsmbHQ7IDEpCkBAIC00OTUsNiAmIzQzOzUwNCw3IEBAIHN0cnVjdCBmdXNlX2ZpbGVfbG9jayB7CiAjZGVmaW5lIEZVU0VfQUxMT1dfSURNQVAJKDFVTEwgJmx0OyZsdDsgNDApCiAjZGVmaW5lIEZVU0VfT1ZFUl9JT19VUklORwkoMVVMTCAmbHQ7Jmx0OyA0MSkKICNkZWZpbmUgRlVTRV9SRVFVRVNUX1RJTUVPVVQJKDFVTEwgJmx0OyZsdDsgNDIpCiYjNDM7I2RlZmluZSBGVVNFX0hBU19TWU5DRlMJCSgxVUxMICZsdDsmbHQ7IDQzKQogCiAvKioKICAqIENVU0UgSU5JVCByZXF1ZXN0L3JlcGx5IGZsYWdzCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlLy5naXRpZ25vcmUKaW5kZXggM2U3MmU3NDJkMDhlOGMuLjRlOTJmMzYzYzc0YWIzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlLy5naXRpZ25vcmUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS8uZ2l0aWdub3JlCkBAIC0xLDMgJiM0MzsxLDQgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQogZnVzZV9tbnQKIGZ1c2VjdGxfdGVzdAomIzQzO3Rlc3Rfc3luY2ZzCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZQppbmRleCA2MTJhYWQ2OWE5M2FhNC4uY2JiYTAxNjM1MjI2ZGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZQpAQCAtMiw3ICYjNDM7Miw3IEBACiAKIENGTEFHUyAmIzQzOz0gLVdhbGwgLU8yIC1nICQoS0hEUl9JTkNMVURFUykKIAotVEVTVF9HRU5fUFJPR1MgOj0gZnVzZWN0bF90ZXN0CiYjNDM7VEVTVF9HRU5fUFJPR1MgOj0gZnVzZWN0bF90ZXN0IHRlc3Rfc3luY2ZzCiBURVNUX0dFTl9GSUxFUyA6PSBmdXNlX21udAogCiBpbmNsdWRlIC4uLy4uL2xpYi5tawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS90ZXN0X3N5bmNmcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS90ZXN0X3N5bmNmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MGZiMzQ3ODU1NGFmNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvdGVzdF9zeW5jZnMuYwpAQCAtMCwwICYjNDM7MSwzNzAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogVGVzdCB0aGF0IEZVU0VfU1lOQ0ZTIGlzIHByb3BhZ2F0ZWQgdG8gYSB1c2Vyc3BhY2Ugc2VydmVyIG9ubHkgd2hlbiB0aGUKJiM0MzsgKiBzZXJ2ZXIgb3B0cyBpbiB3aXRoIEZVU0VfSEFTX1NZTkNGUyAqYW5kKiBvcGVuZWQgL2Rldi9mdXNlIHdpdGgKJiM0MzsgKiBDQVBfU1lTX0FETUlOIGluIHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlLgomIzQzOyAqCiYjNDM7ICogVW5saWtlIHRoZSBsaWJmdXNlLWJhc2VkIHNlbGZ0ZXN0cywgdGhpcyB0YWxrcyB0aGUgcmF3IEZVU0Ugd2lyZSBwcm90b2NvbAomIzQzOyAqIG92ZXIgL2Rldi9mdXNlIHNvIGl0IGNhbiAoYSkgY2hvb3NlIHdoZXRoZXIgdG8gYWR2ZXJ0aXNlIEZVU0VfSEFTX1NZTkNGUyBpbgomIzQzOyAqIHRoZSBJTklUIHJlcGx5IGFuZCAoYikgb2JzZXJ2ZSBkaXJlY3RseSB3aGV0aGVyIGEgRlVTRV9TWU5DRlMgb3Bjb2RlIGFycml2ZXMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvZXZlbnRmZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvbW91bnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N5c2NhbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy91aW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2FwYWJpbGl0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mdXNlLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi8uLi9rc2VsZnRlc3QuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBGVVNFX1JPT1RfSUQgMQomIzQzOwomIzQzOy8qCiYjNDM7ICogQWRkIG9yIGRyb3AgQ0FQX1NZU19BRE1JTiBpbiB0aGUgZWZmZWN0aXZlIHNldCB2aWEgcmF3IGNhcGdldC9jYXBzZXQKJiM0MzsgKiAoYXZvaWRzIGEgbGliY2FwIGRlcGVuZGVuY3kpLiAgVXNlZCB0byBjb25zdHJ1Y3QgYSBzZXJ2ZXIgdGhhdCBvcGVucwomIzQzOyAqIC9kZXYvZnVzZSB3aXRob3V0IHRoZSBwcml2aWxlZ2UgRlVTRV9IQVNfU1lOQ0ZTIHJlcXVpcmVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgc2V0X3N5c2FkbWluKGludCBvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBfX3VzZXJfY2FwX2hlYWRlcl9zdHJ1Y3QgaGRyID0gewomIzQzOwkJLnZlcnNpb24gPSBfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OXzMsCiYjNDM7CQkucGlkID0gMCwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IF9fdXNlcl9jYXBfZGF0YV9zdHJ1Y3QgZGF0YVtfTElOVVhfQ0FQQUJJTElUWV9VMzJTXzNdID0ge307CiYjNDM7CXVuc2lnbmVkIGludCBpZHggPSBDQVBfU1lTX0FETUlOICZndDsmZ3Q7IDU7CiYjNDM7CV9fdTMyIGJpdCA9IDFVICZsdDsmbHQ7IChDQVBfU1lTX0FETUlOICZhbXA7IDMxKTsKJiM0MzsKJiM0MzsJaWYgKHN5c2NhbGwoU1lTX2NhcGdldCwgJmFtcDtoZHIsIGRhdGEpKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlpZiAob24pCiYjNDM7CQlkYXRhW2lkeF0uZWZmZWN0aXZlIHw9IGJpdDsKJiM0MzsJZWxzZQomIzQzOwkJZGF0YVtpZHhdLmVmZmVjdGl2ZSAmYW1wOz0gfmJpdDsKJiM0MzsJcmV0dXJuIHN5c2NhbGwoU1lTX2NhcHNldCwgJmFtcDtoZHIsIGRhdGEpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIGV2ZW50ZmQgdGhlIHNlcnZlciBjaGlsZCB3cml0ZXMgb25jZSB3aGVuIGl0IHJlY2VpdmVzIEZVU0VfU1lOQ0ZTOyB0aGUKJiM0MzsgKiBwYXJlbnQgcG9sbCgpcyBpdCB0byBvYnNlcnZlIChvciBydWxlIG91dCkgcHJvcGFnYXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBzeW5jZnNfZXZmZDsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZXBseShpbnQgZmQsIHVpbnQ2NF90IHVuaXF1ZSwgaW50IGVycm9yLCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IGZ1c2Vfb3V0X2hlYWRlciBvaCA9IHsKJiM0MzsJCS5sZW4gPSBzaXplb2Yob2gpICYjNDM7IGxlbiwKJiM0MzsJCS5lcnJvciA9IGVycm9yLAomIzQzOwkJLnVuaXF1ZSA9IHVuaXF1ZSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGlvdmVjIGlvdlsyXSA9IHsKJiM0MzsJCXsgJmFtcDtvaCwgc2l6ZW9mKG9oKSB9LAomIzQzOwkJeyBkYXRhLCBsZW4gfSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJaWYgKHdyaXRldihmZCwgaW92LCBkYXRhID8gMiA6IDEpICZsdDsgMCkKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7c2VydmVyIHdyaXRldiBmYWlsZWQ6ICVzXG4mIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZmlsbF9hdHRyKHN0cnVjdCBmdXNlX2F0dHIgKmEsIHVpbnQ2NF90IGlubywgdWludDMyX3QgbW9kZSwKJiM0MzsJCSAgICAgIHVpbnQzMl90IG5saW5rKQomIzQzO3sKJiM0MzsJbWVtc2V0KGEsIDAsIHNpemVvZigqYSkpOwomIzQzOwlhLSZndDtpbm8gPSBpbm87CiYjNDM7CWEtJmd0O21vZGUgPSBtb2RlOwomIzQzOwlhLSZndDtubGluayA9IG5saW5rOwomIzQzOwlhLSZndDtibGtzaXplID0gNDA5NjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBNaW5pbWFsIEZVU0Ugc2VydmVyLiAgQWR2ZXJ0aXNlcyBGVVNFX0hBU19TWU5DRlMgaW4gaXRzIElOSVQgcmVwbHkgaWZmCiYjNDM7ICogQGFkdmVydGlzZSBpcyBzZXQuICBTaWduYWxzIHN5bmNmc19ldmZkIHdoZW4gYSBGVVNFX1NZTkNGUyBvcGNvZGUgYXJyaXZlcy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFNFUlZFUl9NQVhfV1JJVEUgNjU1MzYKJiM0MztzdGF0aWMgdm9pZCBydW5fc2VydmVyKGludCBmZCwgaW50IGFkdmVydGlzZSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBrZXJuZWwgcmVqZWN0cyByZWFkcyAoRUlOVkFMKSB3aG9zZSBidWZmZXIgaXMgc21hbGxlciB0aGFuCiYjNDM7CSAqIG1heF93cml0ZSAmIzQzOyBoZWFkZXIsIHNvIHNpemUgZ2VuZXJvdXNseSBmb3IgdGhlIG1heF93cml0ZSB3ZQomIzQzOwkgKiBhZHZlcnRpc2UgaW4gdGhlIElOSVQgcmVwbHkgYmVsb3cuCiYjNDM7CSAqLwomIzQzOwlzdGF0aWMgY2hhciBidWZbU0VSVkVSX01BWF9XUklURSAmIzQzOyA0MDk2XTsKJiM0MzsKJiM0MzsJZm9yICg7OykgewomIzQzOwkJc3NpemVfdCBuID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CQlzdHJ1Y3QgZnVzZV9pbl9oZWFkZXIgKmloID0gKHZvaWQgKilidWY7CiYjNDM7CiYjNDM7CQlpZiAobiAmbHQ7IDApIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlyZXR1cm47CQkvKiBkZXZpY2UgY2xvc2VkIG9uIHVubW91bnQvYWJvcnQgKi8KJiM0MzsJCX0KJiM0MzsJCWlmIChuICZsdDsgKHNzaXplX3Qpc2l6ZW9mKCppaCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzd2l0Y2ggKGloLSZndDtvcGNvZGUpIHsKJiM0MzsJCWNhc2UgRlVTRV9JTklUOiB7CiYjNDM7CQkJc3RydWN0IGZ1c2VfaW5pdF9pbiAqaW4gPSAodm9pZCAqKShpaCAmIzQzOyAxKTsKJiM0MzsJCQlzdHJ1Y3QgZnVzZV9pbml0X291dCBvdXQgPSB7MH07CiYjNDM7CQkJdWludDY0X3QgZmxhZ3MgPSBGVVNFX0lOSVRfRVhUOwomIzQzOwomIzQzOwkJCW91dC5tYWpvciA9IEZVU0VfS0VSTkVMX1ZFUlNJT047CiYjNDM7CQkJb3V0Lm1pbm9yID0gRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTjsKJiM0MzsJCQlvdXQubWF4X3JlYWRhaGVhZCA9IGluLSZndDttYXhfcmVhZGFoZWFkOwomIzQzOwkJCW91dC5tYXhfd3JpdGUgPSBTRVJWRVJfTUFYX1dSSVRFOwomIzQzOwkJCW91dC5tYXhfYmFja2dyb3VuZCA9IDE2OwomIzQzOwkJCW91dC5jb25nZXN0aW9uX3RocmVzaG9sZCA9IDEyOwomIzQzOwkJCWlmIChhZHZlcnRpc2UpCiYjNDM7CQkJCWZsYWdzIHw9IEZVU0VfSEFTX1NZTkNGUzsKJiM0MzsJCQlvdXQuZmxhZ3MgPSBmbGFnczsKJiM0MzsJCQlvdXQuZmxhZ3MyID0gZmxhZ3MgJmd0OyZndDsgMzI7CiYjNDM7CQkJcmVwbHkoZmQsIGloLSZndDt1bmlxdWUsIDAsICZhbXA7b3V0LCBzaXplb2Yob3V0KSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQljYXNlIEZVU0VfR0VUQVRUUjogewomIzQzOwkJCXN0cnVjdCBmdXNlX2F0dHJfb3V0IG91dCA9IHswfTsKJiM0MzsKJiM0MzsJCQlmaWxsX2F0dHIoJmFtcDtvdXQuYXR0ciwgRlVTRV9ST09UX0lELCBTX0lGRElSIHwgMDc1NSwgMik7CiYjNDM7CQkJcmVwbHkoZmQsIGloLSZndDt1bmlxdWUsIDAsICZhbXA7b3V0LCBzaXplb2Yob3V0KSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQljYXNlIEZVU0VfU1lOQ0ZTOiB7CiYjNDM7CQkJdWludDY0X3Qgb25lID0gMTsKJiM0MzsKJiM0MzsJCQlpZiAod3JpdGUoc3luY2ZzX2V2ZmQsICZhbXA7b25lLCBzaXplb2Yob25lKSkgJmx0OyAwKQomIzQzOwkJCQlrc2Z0X3ByaW50X21zZygmIzM0O3NlcnZlciBldmVudGZkIHdyaXRlIGZhaWxlZDogJXNcbiYjMzQ7LAomIzQzOwkJCQkJICAgICAgIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQkJcmVwbHkoZmQsIGloLSZndDt1bmlxdWUsIDAsIE5VTEwsIDApOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEFueXRoaW5nIGVsc2UgKGUuZy4gT1BFTkRJUiBmcm9tIG9wZW5pbmcgdGhlIG1vdW50CiYjNDM7CQkJICogcm9vdCkgaXMgbm90IG5lZWRlZCB0byBkcml2ZSB0aGlzIHRlc3Q7IC1FTk9TWVMgbGV0cwomIzQzOwkJCSAqIHRoZSBrZXJuZWwgcHJvY2VlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlyZXBseShmZCwgaWgtJmd0O3VuaXF1ZSwgLUVOT1NZUywgTlVMTCwgMCk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBNb3VudCBhIGZ1c2UgZnMgYmFja2VkIGJ5IGEgZm9ya2VkIHNlcnZlciwgaXNzdWUgc3luY2ZzKCksIGFuZCByZXBvcnQKJiM0MzsgKiB3aGV0aGVyIHRoZSBzZXJ2ZXIgb2JzZXJ2ZWQgRlVTRV9TWU5DRlMuICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgaWYgdGhlCiYjNDM7ICogZW52aXJvbm1lbnQgY291bGQgbm90IHN1cHBvcnQgdGhlIHRlc3QgKGNhbGxlciBzaG91bGQgc2tpcCkuCiYjNDM7ICoKJiM0MzsgKiBJZiBAdW5wcml2X29wZW4gaXMgc2V0LCAvZGV2L2Z1c2UgaXMgb3BlbmVkIHdpdGggQ0FQX1NZU19BRE1JTiBkcm9wcGVkCiYjNDM7ICogKHJlZ2FpbmVkIG9ubHkgZm9yIHRoZSBtb3VudCgpIHN5c2NhbGwpLCBzbyB0aGUgZGV2aWNlIG9wZW5lciAtLSB0aGUKJiM0MzsgKiBzZXJ2ZXIgcHJpbmNpcGFsIEZVU0VfSEFTX1NZTkNGUyBpcyBnYXRlZCBvbiAtLSBsYWNrcyB0aGUgcHJpdmlsZWdlIGV2ZW4KJiM0MzsgKiB0aG91Z2ggaXQgcmVtYWlucyBpbiB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGRvX21vdW50X2FuZF9zeW5jZnMoY29uc3QgY2hhciAqbW50LCBpbnQgYWR2ZXJ0aXNlLCBpbnQgdW5wcml2X29wZW4sCiYjNDM7CQkJICAgICAgIGludCAqc2VlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwb2xsZmQgcGZkID0geyAuZXZlbnRzID0gUE9MTElOIH07CiYjNDM7CWNoYXIgb3B0c1syNTZdOwomIzQzOwlpbnQgZmQsIG1mZCA9IC0xLCBpOwomIzQzOwlwaWRfdCBwaWQ7CiYjNDM7CiYjNDM7CXN5bmNmc19ldmZkID0gZXZlbnRmZCgwLCBFRkRfQ0xPRVhFQyk7CiYjNDM7CWlmIChzeW5jZnNfZXZmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWlmICh1bnByaXZfb3BlbiAmYW1wOyZhbXA7IHNldF9zeXNhZG1pbigwKSkKJiM0MzsJCWdvdG8gb3V0X2V2ZmQ7CiYjNDM7CWZkID0gb3BlbigmIzM0Oy9kZXYvZnVzZSYjMzQ7LCBPX1JEV1IpOwomIzQzOwlpZiAodW5wcml2X29wZW4gJmFtcDsmYW1wOyBzZXRfc3lzYWRtaW4oMSkpIHsKJiM0MzsJCWlmIChmZCAmZ3Q7PSAwKQomIzQzOwkJCWNsb3NlKGZkKTsKJiM0MzsJCWdvdG8gb3V0X2V2ZmQ7CiYjNDM7CX0KJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0X2V2ZmQ7CiYjNDM7CiYjNDM7CW1rZGlyKG1udCwgMDc1NSk7CiYjNDM7CXNucHJpbnRmKG9wdHMsIHNpemVvZihvcHRzKSwKJiM0MzsJCSAmIzM0O2ZkPSVkLHJvb3Rtb2RlPTQwMDAwLHVzZXJfaWQ9JWQsZ3JvdXBfaWQ9JWQmIzM0OywKJiM0MzsJCSBmZCwgZ2V0dWlkKCksIGdldGdpZCgpKTsKJiM0MzsKJiM0MzsJaWYgKG1vdW50KCYjMzQ7ZnVzZSYjMzQ7LCBtbnQsICYjMzQ7ZnVzZSYjMzQ7LCAwLCBvcHRzKSAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dF9mZDsKJiM0MzsKJiM0MzsJcGlkID0gZm9yaygpOwomIzQzOwlpZiAocGlkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0X3Vtb3VudDsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlydW5fc2VydmVyKGZkLCBhZHZlcnRpc2UpOwomIzQzOwkJX2V4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHBhcmVudCBkb2VzIG5vdCBzZXJ2aWNlIHRoZSBmdXNlIGZkOyB0aGUgY2hpbGQgZG9lcy4gIENsb3NlIG91cgomIzQzOwkgKiBjb3B5IHNvIHRoZSBrZXJuZWwgc2VlcyBhIHNpbmdsZSBzZXJ2ZXIsIGFuZCBzbyB0aGF0IGlmIHRoZSBjaGlsZAomIzQzOwkgKiBkaWVzIHRoZSBjb25uZWN0aW9uIGFib3J0cyBpbnN0ZWFkIG9mIGhhbmdpbmcgdXMgZm9yZXZlci4KJiM0MzsJICovCiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogbW91bnQoKSByZXR1cm5zIGJlZm9yZSB0aGUgc2VydmVyIGhhcyBhbnN3ZXJlZCBGVVNFX0lOSVQsIHNvIHRoZQomIzQzOwkgKiBmaXJzdCBvcGVuKCkgY2FuIHJhY2UgYW5kIGZhaWwgd2l0aCBFTk9UQ09OTjsgcmV0cnkgdW50aWwgdGhlCiYjNDM7CSAqIGhhbmRzaGFrZSBzZXR0bGVzLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDEwMDA7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQltZmQgPSBvcGVuKG1udCwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7CiYjNDM7CQlpZiAobWZkICZndDs9IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl1c2xlZXAoMTAwMCk7CiYjNDM7CX0KJiM0MzsJaWYgKG1mZCAmZ3Q7PSAwKSB7CiYjNDM7CQlzeW5jZnMobWZkKTsKJiM0MzsJCWNsb3NlKG1mZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTm8gd2FpdGluZyBpcyBuZWVkZWQ6IHRoZSBzZXJ2ZXIgd3JpdGVzIHN5bmNmc19ldmZkIGJlZm9yZSBpdCByZXBsaWVzCiYjNDM7CSAqIHRvIEZVU0VfU1lOQ0ZTLCBhbmQgdGhhdCByZXBseSBpcyB3aGF0IHVuYmxvY2tzIHRoZSBzeW5jaHJvbm91cwomIzQzOwkgKiBzeW5jZnMoKSBhYm92ZS4gIFNvIG9uY2Ugc3luY2ZzKCkgaGFzIHJldHVybmVkLCB0aGUgZXZlbnRmZCBpcyBhbHJlYWR5CiYjNDM7CSAqIHNpZ25hbGxlZCBpZiB0aGUgb3Bjb2RlIHdhcyBwcm9wYWdhdGVkLCBhbmQgd2lsbCBuZXZlciBiZSBvdGhlcndpc2UuCiYjNDM7CSAqIHBvbGwoKSB3aXRoIGEgemVybyB0aW1lb3V0IHRoZXJlZm9yZSBkZWNpZGVzIGJvdGggY2FzZXMgaW1tZWRpYXRlbHkuCiYjNDM7CSAqLwomIzQzOwlwZmQuZmQgPSBzeW5jZnNfZXZmZDsKJiM0MzsJKnNlZW4gPSBwb2xsKCZhbXA7cGZkLCAxLCAwKSAmZ3Q7IDAgJmFtcDsmYW1wOyAocGZkLnJldmVudHMgJmFtcDsgUE9MTElOKTsKJiM0MzsKJiM0MzsJa2lsbChwaWQsIFNJR0tJTEwpOwomIzQzOwl3YWl0cGlkKHBpZCwgTlVMTCwgMCk7CiYjNDM7CXVtb3VudDIobW50LCBNTlRfREVUQUNIKTsKJiM0MzsJY2xvc2Uoc3luY2ZzX2V2ZmQpOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXRfdW1vdW50OgomIzQzOwl1bW91bnQyKG1udCwgTU5UX0RFVEFDSCk7CiYjNDM7b3V0X2ZkOgomIzQzOwljbG9zZShmZCk7CiYjNDM7b3V0X2V2ZmQ6CiYjNDM7CWNsb3NlKHN5bmNmc19ldmZkKTsKJiM0MzsJcmV0dXJuIC0xOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUNDogc2FtZSBhcyBhYm92ZSBidXQgdGhlIG1vdW50IGlzIGNyZWF0ZWQgaW5zaWRlIGEgbmV3IHVzZXIgbmFtZXNwYWNlLiAqLwomIzQzO3N0YXRpYyBpbnQgcnVuX2luX3VzZXJucyhjb25zdCBjaGFyICptbnQsIGludCBhZHZlcnRpc2UsIGludCAqc2VlbikKJiM0Mzt7CiYjNDM7CXVpZF90IHVpZCA9IGdldHVpZCgpOwomIzQzOwlnaWRfdCBnaWQgPSBnZXRnaWQoKTsKJiM0MzsJY2hhciBtYXBbNjRdOwomIzQzOwlpbnQgZjsKJiM0MzsKJiM0MzsJaWYgKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUiB8IENMT05FX05FV05TKSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CS8qIHVucHJpdmlsZWdlZCB1c2VybnMgbW91bnRzIHVuYXZhaWxhYmxlICovCiYjNDM7CiYjNDM7CWYgPSBvcGVuKCYjMzQ7L3Byb2Mvc2VsZi9zZXRncm91cHMmIzM0OywgT19XUk9OTFkpOwomIzQzOwlpZiAoZiAmZ3Q7PSAwKSB7CiYjNDM7CQlkcHJpbnRmKGYsICYjMzQ7ZGVueSYjMzQ7KTsKJiM0MzsJCWNsb3NlKGYpOwomIzQzOwl9CiYjNDM7CXNucHJpbnRmKG1hcCwgc2l6ZW9mKG1hcCksICYjMzQ7MCAlZCAxJiMzNDssIHVpZCk7CiYjNDM7CWYgPSBvcGVuKCYjMzQ7L3Byb2Mvc2VsZi91aWRfbWFwJiMzNDssIE9fV1JPTkxZKTsKJiM0MzsJaWYgKGYgJmx0OyAwIHx8IGRwcmludGYoZiwgJiMzNDslcyYjMzQ7LCBtYXApICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJY2xvc2UoZik7CiYjNDM7CXNucHJpbnRmKG1hcCwgc2l6ZW9mKG1hcCksICYjMzQ7MCAlZCAxJiMzNDssIGdpZCk7CiYjNDM7CWYgPSBvcGVuKCYjMzQ7L3Byb2Mvc2VsZi9naWRfbWFwJiMzNDssIE9fV1JPTkxZKTsKJiM0MzsJaWYgKGYgJmx0OyAwIHx8IGRwcmludGYoZiwgJiMzNDslcyYjMzQ7LCBtYXApICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJY2xvc2UoZik7CiYjNDM7CiYjNDM7CS8qIE5lZWQgYSBtb3VudCBuYW1lc3BhY2Ugd2hlcmUgd2UgY2FuIG1vdW50IGZ1c2UgdW5wcml2aWxlZ2VkLiAqLwomIzQzOwlpZiAobW91bnQoTlVMTCwgJiMzNDsvJiMzNDssIE5VTEwsIE1TX1JFQyB8IE1TX1BSSVZBVEUsIE5VTEwpICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRvX21vdW50X2FuZF9zeW5jZnMobW50LCBhZHZlcnRpc2UsIDAsIHNlZW4pOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbih2b2lkKQomIzQzO3sKJiM0MzsJY2hhciBtbnRbXSA9ICYjMzQ7L3RtcC9mdXNlX3N5bmNmc19YWFhYWFgmIzM0OzsKJiM0MzsJaW50IHNlZW4sIHJldDsKJiM0MzsKJiM0MzsJa3NmdF9wcmludF9oZWFkZXIoKTsKJiM0MzsJa3NmdF9zZXRfcGxhbig0KTsKJiM0MzsKJiM0MzsJLyogSGFyZCB3YXRjaGRvZzogbmV2ZXIgbGV0IGEgc3R1Y2sgc3luY2ZzIGhhbmcgdGhlIHRlc3QgcnVubmVyLiAqLwomIzQzOwlzaWduYWwoU0lHQUxSTSwgU0lHX0RGTCk7CiYjNDM7CWFsYXJtKDYwKTsKJiM0MzsKJiM0MzsJaWYgKGdldGV1aWQoKSAhPSAwKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDt0ZXN0IHJlcXVpcmVzIHJvb3QgdG8gbW91bnQgZnVzZVxuJiMzNDspOwomIzQzOwomIzQzOwlpZiAoIW1rZHRlbXAobW50KSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O21rZHRlbXAgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFQxOiBob3N0LXJvb3QgbW91bnQsIHNlcnZlciBvcHRzIGluIC0mZ3Q7IHN5bmNmcyBtdXN0IHJlYWNoIHNlcnZlci4gKi8KJiM0MzsJcmV0ID0gZG9fbW91bnRfYW5kX3N5bmNmcyhtbnQsIDEsIDAsICZhbXA7c2Vlbik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7VDE6IGNvdWxkIG5vdCBtb3VudCBmdXNlXG4mIzM0Oyk7CiYjNDM7CWVsc2UKJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHQoc2VlbiwKJiM0MzsJCQkJICYjMzQ7VDEgaG9zdC1yb290ICYjNDM7IEZVU0VfSEFTX1NZTkNGUzogc2VydmVyIHJlY2VpdmVzIEZVU0VfU1lOQ0ZTXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFQyOiBob3N0LXJvb3QgbW91bnQsIHNlcnZlciBkb2VzIE5PVCBvcHQgaW4gLSZndDsgbm8gRlVTRV9TWU5DRlMuICovCiYjNDM7CXJldCA9IGRvX21vdW50X2FuZF9zeW5jZnMobW50LCAwLCAwLCAmYW1wO3NlZW4pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0O1QyOiBjb3VsZCBub3QgbW91bnQgZnVzZVxuJiMzNDspOwomIzQzOwllbHNlCiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0KCFzZWVuLAomIzQzOwkJCQkgJiMzNDtUMiBob3N0LXJvb3QsIG5vIG9wdC1pbjogc2VydmVyIGRvZXMgTk9UIHJlY2VpdmUgRlVTRV9TWU5DRlNcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVDM6IHNlcnZlciBvcHRzIGluIGJ1dCBvcGVuZWQgL2Rldi9mdXNlIHdpdGhvdXQgQ0FQX1NZU19BRE1JTiB3aGlsZQomIzQzOwkgKiBzdGlsbCBpbiB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAtJmd0OyBrZXJuZWwgbXVzdCB3aXRoaG9sZAomIzQzOwkgKiBGVVNFX1NZTkNGUy4gIFRoaXMgaXMgdGhlIGNhc2UgdGhhdCBkaXN0aW5ndWlzaGVzIGdhdGluZyBvbiB0aGUKJiM0MzsJICogc2VydmVyJiMzOTtzIHByaXZpbGVnZSBmcm9tIGdhdGluZyBvbiB0aGUgbW91bnQmIzM5O3MgdXNlciBuYW1lc3BhY2UuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBkb19tb3VudF9hbmRfc3luY2ZzKG1udCwgMSwgMSwgJmFtcDtzZWVuKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDtUMzogY291bGQgbm90IG1vdW50IGZ1c2UgdW5wcml2aWxlZ2VkXG4mIzM0Oyk7CiYjNDM7CWVsc2UKJiM0MzsJCWtzZnRfdGVzdF9yZXN1bHQoIXNlZW4sCiYjNDM7CQkJCSAmIzM0O1QzIGluaXRfdXNlcm5zLCBvcGVuZXIgbGFja3MgQ0FQX1NZU19BRE1JTjogRlVTRV9TWU5DRlMgd2l0aGhlbGRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVDQ6IHVucHJpdmlsZWdlZCB1c2VybnMgbW91bnQsIHNlcnZlciBvcHRzIGluIC0mZ3Q7IGtlcm5lbCBtdXN0IHN0aWxsCiYjNDM7CSAqIHdpdGhob2xkIEZVU0VfU1lOQ0ZTLiAgUnVuIGluIGEgY2hpbGQgc2luY2UgaXQgdW5zaGFyZXMgbmFtZXNwYWNlcy4KJiM0MzsJICovCiYjNDM7CXsKJiM0MzsJCXBpZF90IHAgPSBmb3JrKCk7CiYjNDM7CiYjNDM7CQlpZiAocCA9PSAwKSB7CiYjNDM7CQkJaW50IHMgPSAwOwomIzQzOwkJCWludCByID0gcnVuX2luX3VzZXJucyhtbnQsIDEsICZhbXA7cyk7CiYjNDM7CiYjNDM7CQkJX2V4aXQociAmbHQ7IDAgPyAyIDogKHMgPyAxIDogMCkpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlpbnQgc3RhdHVzOwomIzQzOwomIzQzOwkJCXdhaXRwaWQocCwgJmFtcDtzdGF0dXMsIDApOwomIzQzOwkJCWlmICghV0lGRVhJVEVEKHN0YXR1cykpCiYjNDM7CQkJCWtzZnRfdGVzdF9yZXN1bHRfZXJyb3IoJiMzNDtUNDogY2hpbGQgY3Jhc2hlZFxuJiMzNDspOwomIzQzOwkJCWVsc2UgaWYgKFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMikKJiM0MzsJCQkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7VDQ6IHVzZXJucyBmdXNlIG1vdW50IHVuYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlrc2Z0X3Rlc3RfcmVzdWx0KFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMCwKJiM0MzsJCQkJCQkgJiMzNDtUNCB1bnByaXYgdXNlcm5zICYjNDM7IG9wdC1pbjogRlVTRV9TWU5DRlMgd2l0aGhlbGRcbiYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlybWRpcihtbnQpOwomIzQzOwlrc2Z0X2ZpbmlzaGVkKCk7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTUwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBGVVNFIEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBgRlVTRV9IQVNfU1lOQ0ZTYCBmbGFnIHdpdGhpbiB0aGUgRlVTRSBmaWxlc3lzdGVtLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCBtb2RpZnlpbmcgYSBmZXcga2V5IGZpbGVzOiBgZnMvZnVzZS9mdXNlX2kuaGAsIGBmcy9mdXNlL2lub2RlLmNgLCBgaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaGAsIGFuZCwgaW1wb3J0YW50bHksIGFkZGluZyBhIG5ldyBzZWxmdGVzdC4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbiDigJMgd2UgbmVlZCByb2J1c3QgdGVzdGluZyBmb3IgdGhpcyBraW5kIG9mIGNoYW5nZS4KClRoZSBwYXRjaCYjMzk7cyBjb3JlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGFkZGluZyBhIGBzeW5jZnNfY2FwYWJsZWAgYml0IHRvIHRoZSBgZnVzZV9mc19jb250ZXh0YCBhbmQgYGZ1c2VfY29ubmAgc3RydWN0dXJlcy4gVGhpcyBjYXBhYmlsaXR5IGNoZWNrIGlzIGRvbmUgaW4gYGZ1c2Vfb3B0X2ZkYCwgd2hlcmUgaXQgdmVyaWZpZXMgaWYgdGhlIHNlcnZlciBoYXMgb3BlbmVkIGAvZGV2L2Z1c2VgIHdpdGggdGhlIGBDQVBfU1lTX0FETUlOYCBjYXBhYmlsaXR5IHdpdGhpbiB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZS4gVGhhdCBtYWtlcyBzZW5zZSwgY29udHJvbGxpbmcgc3luYyBvcGVyYXRpb25zIHJlcXVpcmVzIGEgbGV2ZWwgb2YgcHJpdmlsZWdlLiBgZnVzZV9zeW5jZnNfZW5hYmxlYCB0aGVuIGNoZWNrcyB0aGUgYEZVU0VfSEFTX1NZTkNGU2AgZmxhZyBhbG9uZyB3aXRoIHRoZSBgc3luY2ZzX2NhcGFibGVgIGZsYWcgYmVmb3JlIGVuYWJsaW5nIHRoZSBzeW5jIG9wZXJhdGlvbi4gRnVydGhlcm1vcmUsIHRoZSBgRlVTRV9IQVNfU1lOQ0ZTYCBmbGFnIGlzIHNldCBkdXJpbmcgdGhlIGBmdXNlX25ld19pbml0YCBmdW5jdGlvbi4KCkVzc2VudGlhbGx5LCB0aGlzIGFkZHMgZnVuY3Rpb25hbCBsb2dpYyBmb3IgYHN5bmNmc2AgcHJvcGFnYXRpb24sIHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBGVVNFIG1vdW50cy4gU2luY2UgaXQmIzM5O3MgdXNlci1mYWNpbmcsIGZ1enppbmcgd2lsbCBiZSAqY3J1Y2lhbCogdG8gZW5zdXJlIGl0cyBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlIGtleSBzeW1ib2xzIHRoaXMgcGF0Y2ggYWZmZWN0cy4gSSYjMzk7dmUgbm90ZWQgdGhhdCBgRlVTRV9GU2AgaXMgdGhlIHJlbGV2YW50IGNvbmZpZy4gVGhlIGZvY3VzIHN5bWJvbHMgYXJlIGBmdXNlX29wdF9mZGAsIGBmdXNlX3N5bmNmc19lbmFibGVgLCBgcHJvY2Vzc19pbml0X3JlcGx5YCwgYGZ1c2VfbmV3X2luaXRgLCBhbmQgYGZ1c2VfZmlsbF9zdXBlcl9jb21tb25gLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB3aGVyZSB0aGUgbmV3IGxvZ2ljIGlzIGludHJvZHVjZWQsIGFuZCB0aGVyZWZvcmUgd2hlcmUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBtaWdodCByZXNpZGUuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGVzZSBjYXJlZnVsbHkuCgpJIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayBgZnMvZnVzZS9pbm9kZS5jYCBqdXN0IGluIGNhc2UgdGhlcmUgYXJlIG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBJIGhhdmVuJiMzOTt0IHNwb3R0ZWQgeWV0LiBBbmQgZmluYWxseSwgSSYjMzk7bGwgbGV2ZXJhZ2UgdGhlIHRvb2xzIGF0IG15IGRpc3Bvc2FsIHRvIHZlcmlmeSB0aGlzIGltcGxlbWVudGF0aW9uJiMzOTtzIGNvcnJlY3RuZXNzIGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIGNvbmNlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVU0VfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xuZnMvZnVzZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMzIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgZnVzZS9pbm9kZS5jIGZvciBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgZnMvZnVzZS9pbm9kZS5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBGVVNFIGhhbmRsZXMgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGBmdXNlX29wdF9mZGAgYW5kIGBmdXNlX3N5bmNmc19lbmFibGVgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGZ1c2Vfb3B0X2ZkYCBpcyBjcml0aWNhbDsgaXQgZGVmaW5lcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHVzZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdXNlcnNwYWNlIEZVU0UgcHJvY2VzcyBhbmQgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IGl0JiMzOTtzIGhhbmRsZWQsIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byBob3cgaXQmIzM5O3MgcGFzc2VkLCB2ZXJpZmllZCwgYW5kIHVzZWQsIGdpdmVuIHRoZSBjb21wbGV4aXRpZXMgb2YgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uIHdpdGhpbiB0aGUgRlVTRSBmcmFtZXdvcmsuIEEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBjb3VsZCBiZSBoZXJlLgoKVGhlbiwgdGhlcmUmIzM5O3MgYGZ1c2Vfc3luY2ZzX2VuYWJsZWAuIFRoaXMgcmVsYXRlcyB0byBzeW5jaHJvbm91cyBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgaW1wbGljYXRpb25zIGlzIGNyaXRpY2FsIGZvciBjb3JyZWN0bHkgd29ya2luZyB3aXRoIEZVU0UuIEkgbmVlZCB0byBzZWUgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgbWFpbiBpbm9kZSBvcGVyYXRpb25zIGFuZCBpZiBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBmZWF0dXJlcy4gU3luY2hyb25vdXMgb3BlcmF0aW9ucyBhcmUgY3J1Y2lhbCBmb3IgdGhlIGludGVncml0eSBvZiBtYW55IGZpbGUgc3lzdGVtcywgYnV0IHRoZXkgY2FuIGJlIGEgcGVyZm9ybWFuY2Uga2lsbGVyIGlmIG5vdCBpbXBsZW1lbnRlZCBjb3JyZWN0bHkuIFRoaXMgcGFydCBtaWdodCBnaXZlIG1lIGluc2lnaHQgaW50byBwZXJmb3JtYW5jZSBpc3N1ZXMgb3IgZGF0YSBpbnRlZ3JpdHkgZ3VhcmFudGVlcy4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2NrcyB0aGF0IGNvdWxkIGFyaXNlIHdoZW4gY29tYmluaW5nIHRoaXMgZmVhdHVyZSB3aXRoIG90aGVyIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgcmVtaW5kIG15c2VsZiBvZiB0aGUgZGV0YWlscy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHRlbGxzIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1c2Vfb3B0X2ZkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvaW5vZGUuYz03NzY9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBmdXNlX2ZzX3BhcmFtZXRlcnNbXSA9IHtcbi0tXG5mcy9mdXNlL2lub2RlLmMtNzg5LVxuZnMvZnVzZS9pbm9kZS5jOjc5MDpzdGF0aWMgaW50IGZ1c2Vfb3B0X2ZkKHN0cnVjdCBmc19jb250ZXh0ICpmc2MsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvZnVzZS9pbm9kZS5jLTc5MS17XG4tLVxuZnMvZnVzZS9pbm9kZS5jPTgxNz1zdGF0aWMgaW50IGZ1c2VfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZzYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxuZnMvZnVzZS9pbm9kZS5jLTg1Ni1cdFx0aWYgKHBhcmFtLVx1MDAzZXR5cGUgPT0gZnNfdmFsdWVfaXNfZmlsZSkge1xuZnMvZnVzZS9pbm9kZS5jOjg1NzpcdFx0XHRyZXR1cm4gZnVzZV9vcHRfZmQoZnNjLCBwYXJhbS1cdTAwM2VmaWxlKTtcbmZzL2Z1c2UvaW5vZGUuYy04NTgtXHRcdH0gZWxzZSB7XG4tLVxuZnMvZnVzZS9pbm9kZS5jLTg2Mi1cbmZzL2Z1c2UvaW5vZGUuYzo4NjM6XHRcdFx0cmV0dXJuIGZ1c2Vfb3B0X2ZkKGZzYywgZmlsZSk7XG5mcy9mdXNlL2lub2RlLmMtODY0LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc3MAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSYjMzk7bSB0aGlua2luZyBpdDoKCioqQ2hlY2tpbmcgYGZ1c2Vfc3luY2ZzX2VuYWJsZWAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIExldCYjMzk7cyBzZWUuLi4gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBjb25maXJtIHRoZSBzdGF0ZSBvZiBgZnVzZV9zeW5jZnNfZW5hYmxlYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBmb3VuZGF0aW9uIG9mIHRoaXMgd2hvbGUgbGluZSBvZiB0aGlua2luZy4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgRlVTRSBzeW5jIGZpbGUgc3lzdGVtIGZ1bmN0aW9uYWxpdHksIG9yIHJhdGhlciwgaWYgd2UgZXZlbiAqYXJlKiBkZWFsaW5nIHdpdGggaXQuIFVuZGVyc3RhbmRpbmcgdGhlIHN0YXRlIG9mIHRoaXMgdmFyaWFibGUgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgZGVlcGVyIGFuYWx5c2lzIGhlcmUuIEl0JiMzOTtsbCBzaGFwZSB0aGUgY29udGV4dCBmb3IgZXZlcnl0aGluZyB0aGF0IGZvbGxvd3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnVzZV9zeW5jZnNfZW5hYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvaW5vZGUuYz03OTA9c3RhdGljIGludCBmdXNlX29wdF9mZChzdHJ1Y3QgZnNfY29udGV4dCAqZnNjLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9mdXNlL2lub2RlLmMtODA2LVx0ICogb3IgZnVzZWJsayByZXF1aXJlcy4gIE9ubHkgc3VjaCBzZXJ2ZXJzIGFyZSB0cnVzdGVkIHRvIHJlY2VpdmVcbmZzL2Z1c2UvaW5vZGUuYzo4MDc6XHQgKiBGVVNFX1NZTkNGUyAoc2VlIGZ1c2Vfc3luY2ZzX2VuYWJsZSgpKS5cbmZzL2Z1c2UvaW5vZGUuYy04MDgtXHQgKi9cbi0tXG5mcy9mdXNlL2lub2RlLmM9MTI3MT1zdHJ1Y3QgZnVzZV9pbml0X2FyZ3Mge1xuLS1cbmZzL2Z1c2UvaW5vZGUuYy0xMjgyLSAqL1xuZnMvZnVzZS9pbm9kZS5jOjEyODM6c3RhdGljIGJvb2wgZnVzZV9zeW5jZnNfZW5hYmxlKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCB1NjQgZmxhZ3MpXG5mcy9mdXNlL2lub2RlLmMtMTI4NC17XG4tLVxuZnMvZnVzZS9pbm9kZS5jPTEyODg9c3RhdGljIHZvaWQgcHJvY2Vzc19pbml0X3JlcGx5KHN0cnVjdCBmdXNlX2FyZ3MgKmFyZ3MsIGludCBlcnJvcilcbi0tXG5mcy9mdXNlL2lub2RlLmMtMTQyOC1cbmZzL2Z1c2UvaW5vZGUuYzoxNDI5Olx0XHRcdGlmIChmdXNlX3N5bmNmc19lbmFibGUoZmMsIGZsYWdzKSlcbmZzL2Z1c2UvaW5vZGUuYy0xNDMwLVx0XHRcdFx0ZmMtXHUwMDNlc3luY19mcyA9IDE7XG4tLVxuZnMvZnVzZS9pbm9kZS5jPTE0NjI9c3RhdGljIHN0cnVjdCBmdXNlX2luaXRfYXJncyAqZnVzZV9uZXdfaW5pdChzdHJ1Y3QgZnVzZV9tb3VudCAqZm0pXG4tLVxuZnMvZnVzZS9pbm9kZS5jLTE0OTgtXHQvKiBPbmx5IG9mZmVyZWQgdG8gc3VmZmljaWVudGx5IHByaXZpbGVnZWQgc2VydmVyczsgc2VlXG5mcy9mdXNlL2lub2RlLmM6MTQ5OTpcdCAqIGZ1c2Vfc3luY2ZzX2VuYWJsZSgpLlxuZnMvZnVzZS9pbm9kZS5jLTE1MDAtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM1NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEZVU0UgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB6ZXJvaW5nIGluIG9uIHNvbWUgY3JpdGljYWwgYXJlYXMgb2YgdGhlIEZVU0UgZnJhbWV3b3JrOiB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UgYW5kIHRoZSBwYXJzaW5nIG9mIHBhcmFtZXRlcnMuIEkgc2VlIG5ldyBmdW5jdGlvbnMgYWRkZWQsIG5hbWVseSBgZnVzZV9zeW5jZnNfZW5hYmxlYCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LCBhbmQgbW9kaWZpY2F0aW9ucyB0byBzb21lIG9mIHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzOiBgZnVzZV9vcHRfZmRgLCBgcHJvY2Vzc19pbml0X3JlcGx5YCwgYGZ1c2VfbmV3X2luaXRgLCBhbmQgYGZ1c2VfZmlsbF9zdXBlcl9jb21tb25gLiBHaXZlbiB0aGVzZSBjaGFuZ2VzLCBhbmQga25vd2luZyB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgaXNzdWVzIGluIGluaXRpYWxpemF0aW9uIGFuZCBvcHRpb24gaGFuZGxpbmcsIHRoZSB0aG91Z2h0IGltbWVkaWF0ZWx5IG9jY3VyczogdGhpcyBpcyBzY3JlYW1pbmcgZm9yIGZ1enppbmcuIFdlIG5lZWQgdG8gdGhyb3cgZXZlcnl0aGluZyB3ZSBjYW4gYXQgdGhpcy4KCk15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzOiBmaXJzdCwgSSB3YW50IHRvIGNvbmZpcm0gdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gYXNzb2NpYXRlZCBpcyBgRlVTRV9GU2AuIEkga25vdyB3aGVyZSB0aGF0IHNpdHMgaW4gdGhlIGFyY2hpdGVjdHVyZSwgYnV0IGNvbmZpcm1pbmcgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIG1ha2UgYSBub3RlIHRvIG15c2VsZiBhbmQgaG9uZSBpbiBvbiB0aG9zZSBzcGVjaWZpYyBzeW1ib2xzLiBgZnVzZV9vcHRfZmRgLCBgZnVzZV9zeW5jZnNfZW5hYmxlYCwgYHByb2Nlc3NfaW5pdF9yZXBseWAsIGBmdXNlX25ld19pbml0YCwgYW5kIGBmdXNlX2ZpbGxfc3VwZXJfY29tbW9uYCBhcmUgbXkgcHJpbWFyeSB0YXJnZXRzLCBhbmQgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHVwZGF0ZWQgbG9naWMgdmVyeSBwcmVjaXNlbHkuCgpCZWZvcmUgSSBjb21taXQgdG8gZGVlcCBkaXZpbmcgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgc2NhbiBmb3Igb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWF5IGJlIHJlbGV2YW50LCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgaW50ZXJhY3Qgd2l0aCBgRlVTRV9GU2AuIENvdWxkIGJlIGNydWNpYWwgZm9yIGVkZ2UgY2FzZSB0ZXN0aW5nLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RlVTRV9QQVNTVEhST1VHSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZS1wYXNzdGhyb3VnaC5yc3Q9MzE9VG8gdXNlIEZVU0UgcGFzc3Rocm91Z2g6XG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZS1wYXNzdGhyb3VnaC5yc3QtMzItXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZS1wYXNzdGhyb3VnaC5yc3Q6MzM6ICAxLiBUaGUgRlVTRSBmaWxlc3lzdGVtIG11c3QgYmUgY29tcGlsZWQgd2l0aCBgYENPTkZJR19GVVNFX1BBU1NUSFJPVUdIYGBcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS9mdXNlLXBhc3N0aHJvdWdoLnJzdC0zNC0gICAgIGVuYWJsZWQuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZS1wYXNzdGhyb3VnaC5yc3QtMzUtICAyLiBUaGUgRlVTRSBkYWVtb24sIGR1cmluZyB0aGUgYGBGVVNFX0lOSVRgYCBoYW5kc2hha2UsIG11c3QgbmVnb3RpYXRlIHRoZVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlL2Z1c2UtcGFzc3Rocm91Z2gucnN0OjM2OiAgICAgYGBGVVNFX1BBU1NUSFJPVUdIYGAgY2FwYWJpbGl0eSBhbmQgc3BlY2lmeSBpdHMgZGVzaXJlZFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlL2Z1c2UtcGFzc3Rocm91Z2gucnN0LTM3LSAgICAgYGBtYXhfc3RhY2tfZGVwdGhgYC5cbi0tXG5mcy9mdXNlL0tjb25maWc9NDM9Y29uZmlnIEZVU0VfREFYXG4tLVxuZnMvZnVzZS9LY29uZmlnLTU2LVxuZnMvZnVzZS9LY29uZmlnOjU3OmNvbmZpZyBGVVNFX1BBU1NUSFJPVUdIXG5mcy9mdXNlL0tjb25maWctNTgtXHRib29sIFwmIzM0O0ZVU0UgcGFzc3Rocm91Z2ggb3BlcmF0aW9ucyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZnVzZS9NYWtlZmlsZT0xNz1mdXNlLSQoQ09ORklHX0ZVU0VfREFYKSAmIzQzOz0gZGF4Lm9cbmZzL2Z1c2UvTWFrZWZpbGU6MTg6ZnVzZS0kKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSAmIzQzOz0gcGFzc3Rocm91Z2gubyBiYWNraW5nLm9cbmZzL2Z1c2UvTWFrZWZpbGUtMTktZnVzZS0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGwub1xuLS1cbmZzL2Z1c2UvZGV2LmM9MjI5OD1zdGF0aWMgbG9uZyBmdXNlX2Rldl9pb2N0bF9iYWNraW5nX29wZW4oc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvZnVzZS9kZXYuYy0yMzA2LVxuZnMvZnVzZS9kZXYuYzoyMzA3Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSlcbmZzL2Z1c2UvZGV2LmMtMjMwOC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmZzL2Z1c2UvZGV2LmM9MjMxNj1zdGF0aWMgbG9uZyBmdXNlX2Rldl9pb2N0bF9iYWNraW5nX2Nsb3NlKHN0cnVjdCBmaWxlICpmaWxlLCBfX3UzMiBfX3VzZXIgKmFyZ3ApXG4tLVxuZnMvZnVzZS9kZXYuYy0yMzIzLVxuZnMvZnVzZS9kZXYuYzoyMzI0Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSlcbmZzL2Z1c2UvZGV2LmMtMjMyNS1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmZzL2Z1c2UvZnVzZV9pLmg9MTAyPXN0cnVjdCBmdXNlX2lub2RlIHtcbi0tXG5mcy9mdXNlL2Z1c2VfaS5oLTIyOC1cdHN0cnVjdCBmdXNlX3N1Ym1vdW50X2xvb2t1cCAqc3VibW91bnRfbG9va3VwO1xuZnMvZnVzZS9mdXNlX2kuaDoyMjk6I2lmZGVmIENPTkZJR19GVVNFX1BBU1NUSFJPVUdIXG5mcy9mdXNlL2Z1c2VfaS5oLTIzMC1cdC8qKiBAZmI6IFJlZmVyZW5jZSB0byBiYWNraW5nIGZpbGUgaW4gcGFzc3Rocm91Z2ggbW9kZSAqL1xuLS1cbmZzL2Z1c2UvZnVzZV9pLmg9MjY5PXN0cnVjdCBmdXNlX2ZpbGUge1xuLS1cbmZzL2Z1c2UvZnVzZV9pLmgtMzE1LVxuZnMvZnVzZS9mdXNlX2kuaDozMTY6I2lmZGVmIENPTkZJR19GVVNFX1BBU1NUSFJPVUdIXG5mcy9mdXNlL2Z1c2VfaS5oLTMxNy1cdC8qKiBAcGFzc3Rocm91Z2g6IFJlZmVyZW5jZSB0byBiYWNraW5nIGZpbGUgaW4gcGFzc3Rocm91Z2ggbW9kZSAqL1xuLS1cbmZzL2Z1c2UvZnVzZV9pLmg9NDE4PXN0cnVjdCBmdXNlX2Nvbm4ge1xuLS1cbmZzL2Z1c2UvZnVzZV9pLmgtNzY5LVxuZnMvZnVzZS9mdXNlX2kuaDo3NzA6I2lmZGVmIENPTkZJR19GVVNFX1BBU1NUSFJPVUdIXG5mcy9mdXNlL2Z1c2VfaS5oLTc3MS1cdC8qKiBAYmFja2luZ19maWxlc19tYXA6IElEUiBmb3IgYmFja2luZyBmaWxlcyBpZHMgKi9cbi0tXG5mcy9mdXNlL2Z1c2VfaS5oPTEyNjM9dm9pZCBmdXNlX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZnVzZV9maWxlICpmZixcbi0tXG5mcy9mdXNlL2Z1c2VfaS5oLTEyNjYtLyogYmFja2luZy5jICovXG5mcy9mdXNlL2Z1c2VfaS5oOjEyNjc6I2lmZGVmIENPTkZJR19GVVNFX1BBU1NUSFJPVUdIXG5mcy9mdXNlL2Z1c2VfaS5oLTEyNjgtc3RydWN0IGZ1c2VfYmFja2luZyAqZnVzZV9iYWNraW5nX2dldChzdHJ1Y3QgZnVzZV9iYWNraW5nICpmYik7XG4tLVxuZnMvZnVzZS9mdXNlX2kuaD0xMjkyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGZ1c2VfYmFja2luZyAqZnVzZV9pbm9kZV9iYWNraW5nKHN0cnVjdCBmdXNlX2lub2RlICpmaSlcbmZzL2Z1c2UvZnVzZV9pLmgtMTI5My17XG5mcy9mdXNlL2Z1c2VfaS5oOjEyOTQ6I2lmZGVmIENPTkZJR19GVVNFX1BBU1NUSFJPVUdIXG5mcy9mdXNlL2Z1c2VfaS5oLTEyOTUtXHRyZXR1cm4gUkVBRF9PTkNFKGZpLVx1MDAzZWZiKTtcbi0tXG5mcy9mdXNlL2Z1c2VfaS5oPTEzMDE9c3RhdGljIGlubGluZSBzdHJ1Y3QgZnVzZV9iYWNraW5nICpmdXNlX2lub2RlX2JhY2tpbmdfc2V0KHN0cnVjdCBmdXNlX2lub2RlICpmaSxcbi0tXG5mcy9mdXNlL2Z1c2VfaS5oLTEzMDMte1xuZnMvZnVzZS9mdXNlX2kuaDoxMzA0OiNpZmRlZiBDT05GSUdfRlVTRV9QQVNTVEhST1VHSFxuZnMvZnVzZS9mdXNlX2kuaC0xMzA1LVx0cmV0dXJuIHhjaGcoXHUwMDI2ZmktXHUwMDNlZmIsIGZiKTtcbi0tXG5mcy9mdXNlL2Z1c2VfaS5oPTEzMTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgZmlsZSAqZnVzZV9maWxlX3Bhc3N0aHJvdWdoKHN0cnVjdCBmdXNlX2ZpbGUgKmZmKVxuZnMvZnVzZS9mdXNlX2kuaC0xMzE1LXtcbmZzL2Z1c2UvZnVzZV9pLmg6MTMxNjojaWZkZWYgQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0hcbmZzL2Z1c2UvZnVzZV9pLmgtMTMxNy1cdHJldHVybiBmZi1cdTAwM2VwYXNzdGhyb3VnaDtcbi0tXG5mcy9mdXNlL2lub2RlLmM9ODQ9c3RhdGljIHN0cnVjdCBpbm9kZSAqZnVzZV9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2Z1c2UvaW5vZGUuYy0xMDUtXG5mcy9mdXNlL2lub2RlLmM6MTA2Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpKVxuZnMvZnVzZS9pbm9kZS5jLTEwNy1cdFx0ZnVzZV9pbm9kZV9iYWNraW5nX3NldChmaSwgTlVMTCk7XG4tLVxuZnMvZnVzZS9pbm9kZS5jPTExOD1zdGF0aWMgdm9pZCBmdXNlX2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9mdXNlL2lub2RlLmMtMTI2LSNlbmRpZlxuZnMvZnVzZS9pbm9kZS5jOjEyNzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSlcbmZzL2Z1c2UvaW5vZGUuYy0xMjgtXHRcdGZ1c2VfYmFja2luZ19wdXQoZnVzZV9pbm9kZV9iYWNraW5nKGZpKSk7XG4tLVxuZnMvZnVzZS9pbm9kZS5jPTk2NT12b2lkIGZ1c2VfY29ubl9pbml0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9tb3VudCAqZm0sXG4tLVxuZnMvZnVzZS9pbm9kZS5jLTk4Ni1cbmZzL2Z1c2UvaW5vZGUuYzo5ODc6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkpXG5mcy9mdXNlL2lub2RlLmMtOTg4LVx0XHRmdXNlX2JhY2tpbmdfZmlsZXNfaW5pdChmYyk7XG4tLVxuZnMvZnVzZS9pbm9kZS5jPTEwMDk9dm9pZCBmdXNlX2Nvbm5fcHV0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjKVxuLS1cbmZzL2Z1c2UvaW5vZGUuYy0xMDI1LVx0fVxuZnMvZnVzZS9pbm9kZS5jOjEwMjY6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkpXG5mcy9mdXNlL2lub2RlLmMtMTAyNy1cdFx0ZnVzZV9iYWNraW5nX2ZpbGVzX2ZyZWUoZmMpO1xuLS1cbmZzL2Z1c2UvaW5vZGUuYz0xMjg4PXN0YXRpYyB2b2lkIHByb2Nlc3NfaW5pdF9yZXBseShzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCBpbnQgZXJyb3IpXG4tLVxuZnMvZnVzZS9pbm9kZS5jLTE0MDEtXHRcdFx0ICpcbmZzL2Z1c2UvaW5vZGUuYzoxNDAyOlx0XHRcdCAqIEFsc28gZG9uJiMzOTt0IGFsbG93IHRoZSBjb21iaW5hdGlvbiBvZiBGVVNFX1BBU1NUSFJPVUdIXG5mcy9mdXNlL2lub2RlLmMtMTQwMy1cdFx0XHQgKiBhbmQgRlVTRV9XUklURUJBQ0tfQ0FDSEUsIGN1cnJlbnQgZGVzaWduIGRvZXNuJiMzOTt0IGhhbmRsZVxuLS1cbmZzL2Z1c2UvaW5vZGUuYy0xNDA1LVx0XHRcdCAqL1xuZnMvZnVzZS9pbm9kZS5jOjE0MDY6XHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpIFx1MDAyNlx1MDAyNlxuZnMvZnVzZS9pbm9kZS5jOjE0MDc6XHRcdFx0ICAgIChmbGFncyBcdTAwMjYgRlVTRV9QQVNTVEhST1VHSCkgXHUwMDI2XHUwMDI2XG5mcy9mdXNlL2lub2RlLmMtMTQwOC1cdFx0XHQgICAgYXJnLVx1MDAzZW1heF9zdGFja19kZXB0aCBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbi0tXG5mcy9mdXNlL2lub2RlLmM9MTQ2Mj1zdGF0aWMgc3RydWN0IGZ1c2VfaW5pdF9hcmdzICpmdXNlX25ld19pbml0KHN0cnVjdCBmdXNlX21vdW50ICpmbSlcbi0tXG5mcy9mdXNlL2lub2RlLmMtMTQ5NS1cdFx0ZmxhZ3MgfD0gRlVTRV9TVUJNT1VOVFM7XG5mcy9mdXNlL2lub2RlLmM6MTQ5NjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSlcbmZzL2Z1c2UvaW5vZGUuYzoxNDk3Olx0XHRmbGFncyB8PSBGVVNFX1BBU1NUSFJPVUdIO1xuZnMvZnVzZS9pbm9kZS5jLTE0OTgtXHQvKiBPbmx5IG9mZmVyZWQgdG8gc3VmZmljaWVudGx5IHByaXZpbGVnZWQgc2VydmVyczsgc2VlXG4tLVxuZnMvZnVzZS9pb21vZGUuYz0xNjg9c3RhdGljIGludCBmdXNlX2ZpbGVfcGFzc3Rocm91Z2hfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9mdXNlL2lvbW9kZS5jLTE3NS1cdC8qIENoZWNrIGFsbG93ZWQgY29uZGl0aW9ucyBmb3IgZmlsZSBvcGVuIGluIHBhc3N0aHJvdWdoIG1vZGUgKi9cbmZzL2Z1c2UvaW9tb2RlLmM6MTc2Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSB8fCAhZmMtXHUwMDNlcGFzc3Rocm91Z2ggfHxcbmZzL2Z1c2UvaW9tb2RlLmMtMTc3LVx0ICAgIChmZi1cdTAwM2VvcGVuX2ZsYWdzIFx1MDAyNiB+Rk9QRU5fUEFTU1RIUk9VR0hfTUFTSykpXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaC0yMTUtICogIDcuNDBcbmluY2x1ZGUvdWFwaS9saW51eC9mdXNlLmg6MjE2OiAqICAtIGFkZCBtYXhfc3RhY2tfZGVwdGggdG8gZnVzZV9pbml0X291dCwgYWRkIEZVU0VfUEFTU1RIUk9VR0ggaW5pdCBmbGFnXG5pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oLTIxNy0gKiAgLSBhZGQgYmFja2luZ19pZCB0byBmdXNlX29wZW5fb3V0LCBhZGQgRk9QRU5fUEFTU1RIUk9VR0ggb3BlbiBmbGFnXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaD0zNTU9c3RydWN0IGZ1c2VfZmlsZV9sb2NrIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oLTQ5OC0jZGVmaW5lIEZVU0VfRElSRUNUX0lPX0FMTE9XX01NQVAgKDFVTEwgXHUwMDNjXHUwMDNjIDM2KVxuaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaDo0OTk6I2RlZmluZSBGVVNFX1BBU1NUSFJPVUdIXHQoMVVMTCBcdTAwM2NcdTAwM2MgMzcpXG5pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oLTUwMC0jZGVmaW5lIEZVU0VfTk9fRVhQT1JUX1NVUFBPUlRcdCgxVUxMIFx1MDAzY1x1MDAzYyAzOClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnZtPTU9Q09ORklHX0ZVU0VfRlM9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy52bTo2OkNPTkZJR19GVVNFX1BBU1NUSFJPVUdIPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcudm0tNy1DT05GSUdfTkVUXzlQX1ZJUlRJTz15XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDE3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDI5CgkJCQkJCQlvdXRwdXQ6IDEzMgoJCQkJCQkJdGhvdWdodHM6IDI5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZVU0UgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCB0aGFua2Z1bGx5LiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCBkb2VzbiYjMzk7dCAqcmVseSogb24gYENPTkZJR19GVVNFX1BBU1NUSFJPVUdIYCwgdGhvdWdoIGl0JiMzOTtzIHBsYWNlZCBpbiB0aGUgc2FtZSBmaWxlLiBBbGwgaXQgc2VlbXMgdG8gZG8gaXMgaW50cm9kdWNlIGBGVVNFX0hBU19TWU5DRlNgLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSBpcyBgRlVTRV9GU2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJJiMzOTtsbCBqdXN0IGRvdWJsZS1jaGVjayB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcyBsdXJraW5nLgoKQWxyaWdodCwgYSBxdWljayBzY2FuIG9mIHRoZSB0b3VjaGVkIGZpbGVzLCBgZnMvZnVzZS9mdXNlX2kuaGAsIGBmcy9mdXNlL2lub2RlLmNgLCBhbmQgYGluY2x1ZGUvdWFwaS9saW51eC9mdXNlLmhgLCBjb25maXJtcyB0aGF0IGBGVVNFX0ZTYCBpcyBpbmRlZWQgdGhlICpvbmx5KiByZXF1aXJlZCBjb25maWcuIFRoYXQmIzM5O3MgYSByZWxpZWY7IHNpbXBsZXIgaXMgYWx3YXlzIGJldHRlci4KCk5vdywgbGV0JiMzOTtzIHR1cm4gb3VyIGF0dGVudGlvbiB0byB0aGUga2V5IHN5bWJvbHMgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzLiBJJiMzOTt2ZSBnb3QgbXkgZm9jdXMgbmFycm93ZWQgZG93biB0bzogYGZ1c2Vfb3B0X2ZkYCwgYGZ1c2Vfc3luY2ZzX2VuYWJsZWAsIGBwcm9jZXNzX2luaXRfcmVwbHlgLCBgZnVzZV9uZXdfaW5pdGAsIGFuZCBgZnVzZV9maWxsX3N1cGVyX2NvbW1vbmAuIExldCYjMzk7cyBxdWlja2x5IGRldGVybWluZSBpZiBhbnkgb2YgdGhlc2UgYXJlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4KCmBmdXNlX29wdF9mZGAgaXMgdXNlZCBmb3IgbW91bnQgcGFyYW1ldGVyIHBhcnNpbmcg4oCTIG5vdCBhIGhvdCBwYXRoLiBHb29kLiBgZnVzZV9zeW5jZnNfZW5hYmxlYCBnZXRzIGNhbGxlZCB3aXRoaW4gYHByb2Nlc3NfaW5pdF9yZXBseWAsIHdoaWNoIGl0c2VsZiBpcyBvbmx5IGNhbGxlZCBvbmNlIHBlciBGVVNFIG1vdW50LiBUaGF0JiMzOTtzIG5vdCBsaWtlbHkgdG8gYmUgYSBwZXJmb3JtYW5jZSBjb25jZXJuIGVpdGhlci4gVGhlbiB0aGVyZSYjMzk7cyBgZnVzZV9uZXdfaW5pdGAgYW5kIGBmdXNlX2ZpbGxfc3VwZXJfY29tbW9uYCwgYm90aCBleGVjdXRlZCBvbmx5IG9uY2UgcGVyIG1vdW50LCBzaW1pbGFyIHRvIHRoZSBhYm92ZS4KCkxvb2tzIGxpa2UgYWxsIHRob3NlIGZvY3VzIHN5bWJvbHMgYXJlIGluIHRoZSBjbGVhciBpbiB0ZXJtcyBvZiBiZWluZyBob3QgcGF0aHMuIFRoYXQmIzM5O3MgZ29vZCBuZXdzOyB0aGUgcGF0Y2ggc2VlbXMgcmVsYXRpdmVseSBsb3ctaW1wYWN0IGluIHRlcm1zIG9mIHBlcmZvcm1hbmNlLgoKQWxyaWdodCwgYmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSByZWFkeSB0byBtYXJrIHRoZSByZXN1bHRzIGFzIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVU0VfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmdXNlX29wdF9mZCYjMzQ7LAogICAgJiMzNDtmdXNlX3N5bmNmc19lbmFibGUmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19pbml0X3JlcGx5JiMzNDssCiAgICAmIzM0O2Z1c2VfbmV3X2luaXQmIzM0OywKICAgICYjMzQ7ZnVzZV9maWxsX3N1cGVyX2NvbW1vbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gdGhlIEZVU0UgZmlsZXN5c3RlbSwgYWxsb3dpbmcgcHJpdmlsZWdlZCB1c2Vyc3BhY2Ugc2VydmVycyB0byBvcHQtaW4gdG8gcmVjZWl2aW5nIEZVU0VfU1lOQ0ZTIHJlcXVlc3RzLiBJdCBtb2RpZmllcyBtb3VudCBwYXJhbWV0ZXIgcGFyc2luZyBhbmQgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlVTRV9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1c2Vfb3B0X2ZkJiMzNDssCiAgICAmIzM0O2Z1c2Vfc3luY2ZzX2VuYWJsZSYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX2luaXRfcmVwbHkmIzM0OywKICAgICYjMzQ7ZnVzZV9uZXdfaW5pdCYjMzQ7LAogICAgJiMzNDtmdXNlX2ZpbGxfc3VwZXJfY29tbW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byB0aGUgRlVTRSBmaWxlc3lzdGVtLCBhbGxvd2luZyBwcml2aWxlZ2VkIHVzZXJzcGFjZSBzZXJ2ZXJzIHRvIG9wdC1pbiB0byByZWNlaXZpbmcgRlVTRV9TWU5DRlMgcmVxdWVzdHMuIEl0IG1vZGlmaWVzIG1vdW50IHBhcmFtZXRlciBwYXJzaW5nIGFuZCBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uIGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTc6MzM6MDcuMjc3NzQ4OTEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk5Njc4NTI4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVTRV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1c2Vfb3B0X2ZkXCIsXG4gICAgXCJmdXNlX3N5bmNmc19lbmFibGVcIixcbiAgICBcInByb2Nlc3NfaW5pdF9yZXBseVwiLFxuICAgIFwiZnVzZV9uZXdfaW5pdFwiLFxuICAgIFwiZnVzZV9maWxsX3N1cGVyX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byB0aGUgRlVTRSBmaWxlc3lzdGVtLCBhbGxvd2luZyBwcml2aWxlZ2VkIHVzZXJzcGFjZSBzZXJ2ZXJzIHRvIG9wdC1pbiB0byByZWNlaXZpbmcgRlVTRV9TWU5DRlMgcmVxdWVzdHMuIEl0IG1vZGlmaWVzIG1vdW50IHBhcmFtZXRlciBwYXJzaW5nIGFuZCBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uIGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNzozMzowNy4yNzc3NTU0ODNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MjExMDc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc2MmUyM2U5Y2ZhODQ1NTk5MjZkMmFmYTA2YjlmNzA2Zjc3ZGQ1NWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdW4gMTkgMTc6MzM6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZnVzZS9mdXNlX2kuaCBiL2ZzL2Z1c2UvZnVzZV9pLmhcXG5pbmRleCA4NWY3MzhjNTMxMjI1YS4uM2ZiZTQ5NTdlODM5YjQgMTAwNjQ0XFxuLS0tIGEvZnMvZnVzZS9mdXNlX2kuaFxcbisrKyBiL2ZzL2Z1c2UvZnVzZV9pLmhcXG5AQCAtMzkxLDYgKzM5MSw3IEBAIHN0cnVjdCBmdXNlX2ZzX2NvbnRleHQge1xcbiBcXHRib29sIG5vX2NvbnRyb2w6MTtcXG4gXFx0Ym9vbCBub19mb3JjZV91bW91bnQ6MTtcXG4gXFx0Ym9vbCBsZWdhY3lfb3B0c19zaG93OjE7XFxuK1xcdGJvb2wgc3luY2ZzX2NhcGFibGU6MTtcXG4gXFx0ZW51bSBmdXNlX2RheF9tb2RlIGRheF9tb2RlO1xcbiBcXHR1bnNpZ25lZCBpbnQgbWF4X3JlYWQ7XFxuIFxcdHVuc2lnbmVkIGludCBibGtzaXplO1xcbkBAIC02NzUsNiArNjc2LDE0IEBAIHN0cnVjdCBmdXNlX2Nvbm4ge1xcbiBcXHQvKiogQHN5bmNfZnM6IFByb3BhZ2F0ZSBzeW5jZnMoKSB0byBzZXJ2ZXIgKi9cXG4gXFx0dW5zaWduZWQgaW50IHN5bmNfZnM6MTtcXG4gXFxuK1xcdC8qKlxcbitcXHQgKiBAc3luY2ZzX2NhcGFibGU6IHRoZSBwcml2aWxlZ2UgcmVxdWlyZWQgdG8gaG9ub3IgRlVTRV9IQVNfU1lOQ0ZTIHdhc1xcbitcXHQgKiBwcmVzZW50IHdoZW4gL2Rldi9mdXNlIHdhcyBvcGVuZWQgKENBUF9TWVNfQURNSU4gaW4gdGhlIGluaXRpYWwgdXNlclxcbitcXHQgKiBuYW1lc3BhY2UpLCBpLmUuIHRoZSBzYW1lIHByaXZpbGVnZSB0aGF0IG1vdW50aW5nIHZpcnRpb2ZzL2Z1c2VibGtcXG4rXFx0ICogcmVxdWlyZXMuXFxuK1xcdCAqL1xcbitcXHR1bnNpZ25lZCBpbnQgc3luY2ZzX2NhcGFibGU6MTtcXG4rXFxuIFxcdC8qKiBAaW5pdF9zZWN1cml0eTogSW5pdGlhbGl6ZSBzZWN1cml0eSB4YXR0cnMgd2hlbiBjcmVhdGluZyBhIG5ldyBpbm9kZSAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgaW5pdF9zZWN1cml0eToxO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZnVzZS9pbm9kZS5jIGIvZnMvZnVzZS9pbm9kZS5jXFxuaW5kZXggZDk3NTA3M2M2MDI5NjMuLmJhNzUwNmI1MzlhZTAzIDEwMDY0NFxcbi0tLSBhL2ZzL2Z1c2UvaW5vZGUuY1xcbisrKyBiL2ZzL2Z1c2UvaW5vZGUuY1xcbkBAIC04MDAsNiArODAwLDE1IEBAIHN0YXRpYyBpbnQgZnVzZV9vcHRfZmQoc3RydWN0IGZzX2NvbnRleHQgKmZzYywgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdGlmIChmaWxlLVxcdTAwM2VmX2NyZWQtXFx1MDAzZXVzZXJfbnMgIT0gZnNjLVxcdTAwM2V1c2VyX25zKVxcbiBcXHRcXHRyZXR1cm4gaW52YWxmYyhmc2MsIFxcXCJ3cm9uZyB1c2VyIG5hbWVzcGFjZSBmb3IgZnVzZSBkZXZpY2VcXFwiKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFJlY29yZCB3aGV0aGVyIHRoZSBzZXJ2ZXIgb3BlbmVkIC9kZXYvZnVzZSB3aXRoIENBUF9TWVNfQURNSU4gaW4gdGhlXFxuK1xcdCAqIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgLS0gdGhlIHNhbWUgcHJpdmlsZWdlIHRoYXQgbW91bnRpbmcgdmlydGlvZnNcXG4rXFx0ICogb3IgZnVzZWJsayByZXF1aXJlcy4gIE9ubHkgc3VjaCBzZXJ2ZXJzIGFyZSB0cnVzdGVkIHRvIHJlY2VpdmVcXG4rXFx0ICogRlVTRV9TWU5DRlMgKHNlZSBmdXNlX3N5bmNmc19lbmFibGUoKSkuXFxuK1xcdCAqL1xcbitcXHRjdHgtXFx1MDAzZXN5bmNmc19jYXBhYmxlID0gZmlsZV9uc19jYXBhYmxlKGZpbGUsIFxcdTAwMjZpbml0X3VzZXJfbnMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIENBUF9TWVNfQURNSU4pO1xcbitcXG4gXFx0Y3R4LVxcdTAwM2VmdWQgPSBmdXNlX2Rldl9ncmFiKGZpbGUpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTEyNjYsNiArMTI3NSwxNiBAQCBzdHJ1Y3QgZnVzZV9pbml0X2FyZ3Mge1xcbiBcXHRzdHJ1Y3QgZnVzZV9tb3VudCAqZm07XFxuIH07XFxuIFxcbisvKlxcbisgKiBBIHNlcnZlciBjYW4gc3RhbGwgc3luY2ZzKCkvc3luYygpLCBzbyBvbmx5IGhvbm9yIEZVU0VfSEFTX1NZTkNGUyBmb3JcXG4rICogc2VydmVycyB0aGF0IG9wZW5lZCAvZGV2L2Z1c2Ugd2l0aCBDQVBfU1lTX0FETUlOIGluIHRoZSBpbml0aWFsIHVzZXJcXG4rICogbmFtZXNwYWNlIC0tIHRoZSBzYW1lIHByaXZpbGVnZSByZXF1aXJlZCB0byBtb3VudCB2aXJ0aW9mcyBvciBmdXNlYmxrLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgZnVzZV9zeW5jZnNfZW5hYmxlKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCB1NjQgZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIChmbGFncyBcXHUwMDI2IEZVU0VfSEFTX1NZTkNGUykgXFx1MDAyNlxcdTAwMjYgZmMtXFx1MDAzZXN5bmNmc19jYXBhYmxlO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBwcm9jZXNzX2luaXRfcmVwbHkoc3RydWN0IGZ1c2VfYXJncyAqYXJncywgaW50IGVycm9yKVxcbiB7XFxuIFxcdHN0cnVjdCBmdXNlX2luaXRfYXJncyAqaWEgPSBjb250YWluZXJfb2YoYXJncywgdHlwZW9mKCppYSksIGFyZ3MpO1xcbkBAIC0xNDA2LDYgKzE0MjUsOSBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2luaXRfcmVwbHkoc3RydWN0IGZ1c2VfYXJncyAqYXJncywgaW50IGVycm9yKVxcbiBcXG4gXFx0XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRlVTRV9SRVFVRVNUX1RJTUVPVVQpXFxuIFxcdFxcdFxcdFxcdHRpbWVvdXQgPSBhcmctXFx1MDAzZXJlcXVlc3RfdGltZW91dDtcXG4rXFxuK1xcdFxcdFxcdGlmIChmdXNlX3N5bmNmc19lbmFibGUoZmMsIGZsYWdzKSlcXG4rXFx0XFx0XFx0XFx0ZmMtXFx1MDAzZXN5bmNfZnMgPSAxO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRyYV9wYWdlcyA9IGZjLVxcdTAwM2VtYXhfcmVhZCAvIFBBR0VfU0laRTtcXG4gXFx0XFx0XFx0ZmMtXFx1MDAzZW5vX2xvY2sgPSAxO1xcbkBAIC0xNDczLDYgKzE0OTUsMTEgQEAgc3RhdGljIHN0cnVjdCBmdXNlX2luaXRfYXJncyAqZnVzZV9uZXdfaW5pdChzdHJ1Y3QgZnVzZV9tb3VudCAqZm0pXFxuIFxcdFxcdGZsYWdzIHw9IEZVU0VfU1VCTU9VTlRTO1xcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkpXFxuIFxcdFxcdGZsYWdzIHw9IEZVU0VfUEFTU1RIUk9VR0g7XFxuK1xcdC8qIE9ubHkgb2ZmZXJlZCB0byBzdWZmaWNpZW50bHkgcHJpdmlsZWdlZCBzZXJ2ZXJzOyBzZWVcXG4rXFx0ICogZnVzZV9zeW5jZnNfZW5hYmxlKCkuXFxuK1xcdCAqL1xcbitcXHRpZiAoZm0tXFx1MDAzZWZjLVxcdTAwM2VzeW5jZnNfY2FwYWJsZSlcXG4rXFx0XFx0ZmxhZ3MgfD0gRlVTRV9IQVNfU1lOQ0ZTO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogVGhpcyBpcyBqdXN0IGFuIGluZm9ybWF0aW9uIGZsYWcgZm9yIGZ1c2Ugc2VydmVyLiBObyBuZWVkIHRvIGNoZWNrXFxuQEAgLTE3NjYsNiArMTc5Myw3IEBAIGludCBmdXNlX2ZpbGxfc3VwZXJfY29tbW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmdXNlX2ZzX2NvbnRleHQgKmN0eClcXG4gXFxuIFxcdGZjLVxcdTAwM2VkZWZhdWx0X3Blcm1pc3Npb25zID0gY3R4LVxcdTAwM2VkZWZhdWx0X3Blcm1pc3Npb25zO1xcbiBcXHRmYy1cXHUwMDNlYWxsb3dfb3RoZXIgPSBjdHgtXFx1MDAzZWFsbG93X290aGVyO1xcbitcXHRmYy1cXHUwMDNlc3luY2ZzX2NhcGFibGUgPSBjdHgtXFx1MDAzZXN5bmNmc19jYXBhYmxlO1xcbiBcXHRmYy1cXHUwMDNldXNlcl9pZCA9IGN0eC1cXHUwMDNldXNlcl9pZDtcXG4gXFx0ZmMtXFx1MDAzZWdyb3VwX2lkID0gY3R4LVxcdTAwM2Vncm91cF9pZDtcXG4gXFx0ZmMtXFx1MDAzZWxlZ2FjeV9vcHRzX3Nob3cgPSBjdHgtXFx1MDAzZWxlZ2FjeV9vcHRzX3Nob3c7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9mdXNlLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oXFxuaW5kZXggYzEzZTFmOWEyZjEyYmQuLmMwNzhjNWYwZjk0ZWM5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9mdXNlLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oXFxuQEAgLTI0MCw2ICsyNDAsOSBAQFxcbiAgKiAgLSBhZGQgRlVTRV9DT1BZX0ZJTEVfUkFOR0VfNjRcXG4gICogIC0gYWRkIHN0cnVjdCBmdXNlX2NvcHlfZmlsZV9yYW5nZV9vdXRcXG4gICogIC0gYWRkIEZVU0VfTk9USUZZX1BSVU5FXFxuKyAqXFxuKyAqICA3LjQ2XFxuKyAqICAtIGFkZCBGVVNFX0hBU19TWU5DRlMgb3B0LWluIGZsYWcgZm9yIHByaXZpbGVnZWQgdXNlcnNwYWNlIHNlcnZlcnNcXG4gICovXFxuIFxcbiAjaWZuZGVmIF9MSU5VWF9GVVNFX0hcXG5AQCAtMjc1LDcgKzI3OCw3IEBAXFxuICNkZWZpbmUgRlVTRV9LRVJORUxfVkVSU0lPTiA3XFxuIFxcbiAvKiogTWlub3IgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBpbnRlcmZhY2UgKi9cXG4tI2RlZmluZSBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OIDQ1XFxuKyNkZWZpbmUgRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTiA0NlxcbiBcXG4gLyoqIFRoZSBub2RlIElEIG9mIHRoZSByb290IGlub2RlICovXFxuICNkZWZpbmUgRlVTRV9ST09UX0lEIDFcXG5AQCAtNDQ4LDYgKzQ1MSwxMiBAQCBzdHJ1Y3QgZnVzZV9maWxlX2xvY2sge1xcbiAgKiBGVVNFX09WRVJfSU9fVVJJTkc6IEluZGljYXRlIHRoYXQgY2xpZW50IHN1cHBvcnRzIGlvLXVyaW5nXFxuICAqIEZVU0VfUkVRVUVTVF9USU1FT1VUOiBrZXJuZWwgc3VwcG9ydHMgdGltaW5nIG91dCByZXF1ZXN0cy5cXG4gICpcXHRcXHRcXHQgaW5pdF9vdXQucmVxdWVzdF90aW1lb3V0IGNvbnRhaW5zIHRoZSB0aW1lb3V0IChpbiBzZWNzKVxcbisgKiBGVVNFX0hBU19TWU5DRlM6IHNlcnZlciByZXF1ZXN0cyB0aGF0IHN5bmNmcygpL3N5bmMoKSBiZSBwcm9wYWdhdGVkIGFzXFxuKyAqXFx0XFx0RlVTRV9TWU5DRlMgcmVxdWVzdHMuICBTaW5jZSBhbiB1bnRydXN0ZWQgc2VydmVyIGNhbiB1c2UgdGhpc1xcbisgKlxcdFxcdHRvIHN0YWxsIHN5bmMoKSwgaXQgaXMgb25seSBob25vcmVkIHdoZW4gL2Rldi9mdXNlIHdhcyBvcGVuZWRcXG4rICpcXHRcXHR3aXRoIENBUF9TWVNfQURNSU4gaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgKHRoZSBzYW1lXFxuKyAqXFx0XFx0cHJpdmlsZWdlIHRoYXQgbW91bnRpbmcgdmlydGlvZnMgb3IgZnVzZWJsayByZXF1aXJlcykuXFxuKyAqXFx0XFx0SW5zdWZmaWNpZW50bHkgcHJpdmlsZWdlZCBzZXJ2ZXJzIGlnbm9yZSBpdC5cXG4gICovXFxuICNkZWZpbmUgRlVTRV9BU1lOQ19SRUFEXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMClcXG4gI2RlZmluZSBGVVNFX1BPU0lYX0xPQ0tTXFx0KDEgXFx1MDAzY1xcdTAwM2MgMSlcXG5AQCAtNDk1LDYgKzUwNCw3IEBAIHN0cnVjdCBmdXNlX2ZpbGVfbG9jayB7XFxuICNkZWZpbmUgRlVTRV9BTExPV19JRE1BUFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDQwKVxcbiAjZGVmaW5lIEZVU0VfT1ZFUl9JT19VUklOR1xcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDQxKVxcbiAjZGVmaW5lIEZVU0VfUkVRVUVTVF9USU1FT1VUXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgNDIpXFxuKyNkZWZpbmUgRlVTRV9IQVNfU1lOQ0ZTXFx0XFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgNDMpXFxuIFxcbiAvKipcXG4gICogQ1VTRSBJTklUIHJlcXVlc3QvcmVwbHkgZmxhZ3NcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS8uZ2l0aWdub3JlXFxuaW5kZXggM2U3MmU3NDJkMDhlOGMuLjRlOTJmMzYzYzc0YWIzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvLmdpdGlnbm9yZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvLmdpdGlnbm9yZVxcbkBAIC0xLDMgKzEsNCBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gZnVzZV9tbnRcXG4gZnVzZWN0bF90ZXN0XFxuK3Rlc3Rfc3luY2ZzXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlXFxuaW5kZXggNjEyYWFkNjlhOTNhYTQuLmNiYmEwMTYzNTIyNmRjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlXFxuQEAgLTIsNyArMiw3IEBAXFxuIFxcbiBDRkxBR1MgKz0gLVdhbGwgLU8yIC1nICQoS0hEUl9JTkNMVURFUylcXG4gXFxuLVRFU1RfR0VOX1BST0dTIDo9IGZ1c2VjdGxfdGVzdFxcbitURVNUX0dFTl9QUk9HUyA6PSBmdXNlY3RsX3Rlc3QgdGVzdF9zeW5jZnNcXG4gVEVTVF9HRU5fRklMRVMgOj0gZnVzZV9tbnRcXG4gXFxuIGluY2x1ZGUgLi4vLi4vbGliLm1rXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvdGVzdF9zeW5jZnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvdGVzdF9zeW5jZnMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwZmIzNDc4NTU0YWY1XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvdGVzdF9zeW5jZnMuY1xcbkBAIC0wLDAgKzEsMzcwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIFRlc3QgdGhhdCBGVVNFX1NZTkNGUyBpcyBwcm9wYWdhdGVkIHRvIGEgdXNlcnNwYWNlIHNlcnZlciBvbmx5IHdoZW4gdGhlXFxuKyAqIHNlcnZlciBvcHRzIGluIHdpdGggRlVTRV9IQVNfU1lOQ0ZTICphbmQqIG9wZW5lZCAvZGV2L2Z1c2Ugd2l0aFxcbisgKiBDQVBfU1lTX0FETUlOIGluIHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlLlxcbisgKlxcbisgKiBVbmxpa2UgdGhlIGxpYmZ1c2UtYmFzZWQgc2VsZnRlc3RzLCB0aGlzIHRhbGtzIHRoZSByYXcgRlVTRSB3aXJlIHByb3RvY29sXFxuKyAqIG92ZXIgL2Rldi9mdXNlIHNvIGl0IGNhbiAoYSkgY2hvb3NlIHdoZXRoZXIgdG8gYWR2ZXJ0aXNlIEZVU0VfSEFTX1NZTkNGUyBpblxcbisgKiB0aGUgSU5JVCByZXBseSBhbmQgKGIpIG9ic2VydmUgZGlyZWN0bHkgd2hldGhlciBhIEZVU0VfU1lOQ0ZTIG9wY29kZSBhcnJpdmVzLlxcbisgKi9cXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nwb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL2V2ZW50ZmQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tb3VudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N0YXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9zeXNjYWxsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy91aW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYXBhYmlsaXR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mdXNlLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiLi4vLi4va3NlbGZ0ZXN0LmhcXFwiXFxuK1xcbisjZGVmaW5lIEZVU0VfUk9PVF9JRCAxXFxuK1xcbisvKlxcbisgKiBBZGQgb3IgZHJvcCBDQVBfU1lTX0FETUlOIGluIHRoZSBlZmZlY3RpdmUgc2V0IHZpYSByYXcgY2FwZ2V0L2NhcHNldFxcbisgKiAoYXZvaWRzIGEgbGliY2FwIGRlcGVuZGVuY3kpLiAgVXNlZCB0byBjb25zdHJ1Y3QgYSBzZXJ2ZXIgdGhhdCBvcGVuc1xcbisgKiAvZGV2L2Z1c2Ugd2l0aG91dCB0aGUgcHJpdmlsZWdlIEZVU0VfSEFTX1NZTkNGUyByZXF1aXJlcy5cXG4rICovXFxuK3N0YXRpYyBpbnQgc2V0X3N5c2FkbWluKGludCBvbilcXG4re1xcbitcXHRzdHJ1Y3QgX191c2VyX2NhcF9oZWFkZXJfc3RydWN0IGhkciA9IHtcXG4rXFx0XFx0LnZlcnNpb24gPSBfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OXzMsXFxuK1xcdFxcdC5waWQgPSAwLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgX191c2VyX2NhcF9kYXRhX3N0cnVjdCBkYXRhW19MSU5VWF9DQVBBQklMSVRZX1UzMlNfM10gPSB7fTtcXG4rXFx0dW5zaWduZWQgaW50IGlkeCA9IENBUF9TWVNfQURNSU4gXFx1MDAzZVxcdTAwM2UgNTtcXG4rXFx0X191MzIgYml0ID0gMVUgXFx1MDAzY1xcdTAwM2MgKENBUF9TWVNfQURNSU4gXFx1MDAyNiAzMSk7XFxuK1xcbitcXHRpZiAoc3lzY2FsbChTWVNfY2FwZ2V0LCBcXHUwMDI2aGRyLCBkYXRhKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRpZiAob24pXFxuK1xcdFxcdGRhdGFbaWR4XS5lZmZlY3RpdmUgfD0gYml0O1xcbitcXHRlbHNlXFxuK1xcdFxcdGRhdGFbaWR4XS5lZmZlY3RpdmUgXFx1MDAyNj0gfmJpdDtcXG4rXFx0cmV0dXJuIHN5c2NhbGwoU1lTX2NhcHNldCwgXFx1MDAyNmhkciwgZGF0YSk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIGV2ZW50ZmQgdGhlIHNlcnZlciBjaGlsZCB3cml0ZXMgb25jZSB3aGVuIGl0IHJlY2VpdmVzIEZVU0VfU1lOQ0ZTOyB0aGVcXG4rICogcGFyZW50IHBvbGwoKXMgaXQgdG8gb2JzZXJ2ZSAob3IgcnVsZSBvdXQpIHByb3BhZ2F0aW9uLlxcbisgKi9cXG4rc3RhdGljIGludCBzeW5jZnNfZXZmZDtcXG4rXFxuK3N0YXRpYyB2b2lkIHJlcGx5KGludCBmZCwgdWludDY0X3QgdW5pcXVlLCBpbnQgZXJyb3IsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0c3RydWN0IGZ1c2Vfb3V0X2hlYWRlciBvaCA9IHtcXG4rXFx0XFx0LmxlbiA9IHNpemVvZihvaCkgKyBsZW4sXFxuK1xcdFxcdC5lcnJvciA9IGVycm9yLFxcbitcXHRcXHQudW5pcXVlID0gdW5pcXVlLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgaW92ZWMgaW92WzJdID0ge1xcbitcXHRcXHR7IFxcdTAwMjZvaCwgc2l6ZW9mKG9oKSB9LFxcbitcXHRcXHR7IGRhdGEsIGxlbiB9LFxcbitcXHR9O1xcbitcXG4rXFx0aWYgKHdyaXRldihmZCwgaW92LCBkYXRhID8gMiA6IDEpIFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcInNlcnZlciB3cml0ZXYgZmFpbGVkOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZmlsbF9hdHRyKHN0cnVjdCBmdXNlX2F0dHIgKmEsIHVpbnQ2NF90IGlubywgdWludDMyX3QgbW9kZSxcXG4rXFx0XFx0ICAgICAgdWludDMyX3QgbmxpbmspXFxuK3tcXG4rXFx0bWVtc2V0KGEsIDAsIHNpemVvZigqYSkpO1xcbitcXHRhLVxcdTAwM2Vpbm8gPSBpbm87XFxuK1xcdGEtXFx1MDAzZW1vZGUgPSBtb2RlO1xcbitcXHRhLVxcdTAwM2VubGluayA9IG5saW5rO1xcbitcXHRhLVxcdTAwM2VibGtzaXplID0gNDA5NjtcXG4rfVxcbitcXG4rLypcXG4rICogTWluaW1hbCBGVVNFIHNlcnZlci4gIEFkdmVydGlzZXMgRlVTRV9IQVNfU1lOQ0ZTIGluIGl0cyBJTklUIHJlcGx5IGlmZlxcbisgKiBAYWR2ZXJ0aXNlIGlzIHNldC4gIFNpZ25hbHMgc3luY2ZzX2V2ZmQgd2hlbiBhIEZVU0VfU1lOQ0ZTIG9wY29kZSBhcnJpdmVzLlxcbisgKi9cXG4rI2RlZmluZSBTRVJWRVJfTUFYX1dSSVRFIDY1NTM2XFxuK3N0YXRpYyB2b2lkIHJ1bl9zZXJ2ZXIoaW50IGZkLCBpbnQgYWR2ZXJ0aXNlKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBrZXJuZWwgcmVqZWN0cyByZWFkcyAoRUlOVkFMKSB3aG9zZSBidWZmZXIgaXMgc21hbGxlciB0aGFuXFxuK1xcdCAqIG1heF93cml0ZSArIGhlYWRlciwgc28gc2l6ZSBnZW5lcm91c2x5IGZvciB0aGUgbWF4X3dyaXRlIHdlXFxuK1xcdCAqIGFkdmVydGlzZSBpbiB0aGUgSU5JVCByZXBseSBiZWxvdy5cXG4rXFx0ICovXFxuK1xcdHN0YXRpYyBjaGFyIGJ1ZltTRVJWRVJfTUFYX1dSSVRFICsgNDA5Nl07XFxuK1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdHNzaXplX3QgbiA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRcXHRzdHJ1Y3QgZnVzZV9pbl9oZWFkZXIgKmloID0gKHZvaWQgKilidWY7XFxuK1xcbitcXHRcXHRpZiAobiBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0aWYgKGVycm5vID09IEVJTlRSIHx8IGVycm5vID09IEVBR0FJTilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdHJldHVybjtcXHRcXHQvKiBkZXZpY2UgY2xvc2VkIG9uIHVubW91bnQvYWJvcnQgKi9cXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAobiBcXHUwMDNjIChzc2l6ZV90KXNpemVvZigqaWgpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN3aXRjaCAoaWgtXFx1MDAzZW9wY29kZSkge1xcbitcXHRcXHRjYXNlIEZVU0VfSU5JVDoge1xcbitcXHRcXHRcXHRzdHJ1Y3QgZnVzZV9pbml0X2luICppbiA9ICh2b2lkICopKGloICsgMSk7XFxuK1xcdFxcdFxcdHN0cnVjdCBmdXNlX2luaXRfb3V0IG91dCA9IHswfTtcXG4rXFx0XFx0XFx0dWludDY0X3QgZmxhZ3MgPSBGVVNFX0lOSVRfRVhUO1xcbitcXG4rXFx0XFx0XFx0b3V0Lm1ham9yID0gRlVTRV9LRVJORUxfVkVSU0lPTjtcXG4rXFx0XFx0XFx0b3V0Lm1pbm9yID0gRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTjtcXG4rXFx0XFx0XFx0b3V0Lm1heF9yZWFkYWhlYWQgPSBpbi1cXHUwMDNlbWF4X3JlYWRhaGVhZDtcXG4rXFx0XFx0XFx0b3V0Lm1heF93cml0ZSA9IFNFUlZFUl9NQVhfV1JJVEU7XFxuK1xcdFxcdFxcdG91dC5tYXhfYmFja2dyb3VuZCA9IDE2O1xcbitcXHRcXHRcXHRvdXQuY29uZ2VzdGlvbl90aHJlc2hvbGQgPSAxMjtcXG4rXFx0XFx0XFx0aWYgKGFkdmVydGlzZSlcXG4rXFx0XFx0XFx0XFx0ZmxhZ3MgfD0gRlVTRV9IQVNfU1lOQ0ZTO1xcbitcXHRcXHRcXHRvdXQuZmxhZ3MgPSBmbGFncztcXG4rXFx0XFx0XFx0b3V0LmZsYWdzMiA9IGZsYWdzIFxcdTAwM2VcXHUwMDNlIDMyO1xcbitcXHRcXHRcXHRyZXBseShmZCwgaWgtXFx1MDAzZXVuaXF1ZSwgMCwgXFx1MDAyNm91dCwgc2l6ZW9mKG91dCkpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRjYXNlIEZVU0VfR0VUQVRUUjoge1xcbitcXHRcXHRcXHRzdHJ1Y3QgZnVzZV9hdHRyX291dCBvdXQgPSB7MH07XFxuK1xcbitcXHRcXHRcXHRmaWxsX2F0dHIoXFx1MDAyNm91dC5hdHRyLCBGVVNFX1JPT1RfSUQsIFNfSUZESVIgfCAwNzU1LCAyKTtcXG4rXFx0XFx0XFx0cmVwbHkoZmQsIGloLVxcdTAwM2V1bmlxdWUsIDAsIFxcdTAwMjZvdXQsIHNpemVvZihvdXQpKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Y2FzZSBGVVNFX1NZTkNGUzoge1xcbitcXHRcXHRcXHR1aW50NjRfdCBvbmUgPSAxO1xcbitcXG4rXFx0XFx0XFx0aWYgKHdyaXRlKHN5bmNmc19ldmZkLCBcXHUwMDI2b25lLCBzaXplb2Yob25lKSkgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwic2VydmVyIGV2ZW50ZmQgd3JpdGUgZmFpbGVkOiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdFxcdHJlcGx5KGZkLCBpaC1cXHUwMDNldW5pcXVlLCAwLCBOVUxMLCAwKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQW55dGhpbmcgZWxzZSAoZS5nLiBPUEVORElSIGZyb20gb3BlbmluZyB0aGUgbW91bnRcXG4rXFx0XFx0XFx0ICogcm9vdCkgaXMgbm90IG5lZWRlZCB0byBkcml2ZSB0aGlzIHRlc3Q7IC1FTk9TWVMgbGV0c1xcbitcXHRcXHRcXHQgKiB0aGUga2VybmVsIHByb2NlZWQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRyZXBseShmZCwgaWgtXFx1MDAzZXVuaXF1ZSwgLUVOT1NZUywgTlVMTCwgMCk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4rLypcXG4rICogTW91bnQgYSBmdXNlIGZzIGJhY2tlZCBieSBhIGZvcmtlZCBzZXJ2ZXIsIGlzc3VlIHN5bmNmcygpLCBhbmQgcmVwb3J0XFxuKyAqIHdoZXRoZXIgdGhlIHNlcnZlciBvYnNlcnZlZCBGVVNFX1NZTkNGUy4gIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBpZiB0aGVcXG4rICogZW52aXJvbm1lbnQgY291bGQgbm90IHN1cHBvcnQgdGhlIHRlc3QgKGNhbGxlciBzaG91bGQgc2tpcCkuXFxuKyAqXFxuKyAqIElmIEB1bnByaXZfb3BlbiBpcyBzZXQsIC9kZXYvZnVzZSBpcyBvcGVuZWQgd2l0aCBDQVBfU1lTX0FETUlOIGRyb3BwZWRcXG4rICogKHJlZ2FpbmVkIG9ubHkgZm9yIHRoZSBtb3VudCgpIHN5c2NhbGwpLCBzbyB0aGUgZGV2aWNlIG9wZW5lciAtLSB0aGVcXG4rICogc2VydmVyIHByaW5jaXBhbCBGVVNFX0hBU19TWU5DRlMgaXMgZ2F0ZWQgb24gLS0gbGFja3MgdGhlIHByaXZpbGVnZSBldmVuXFxuKyAqIHRob3VnaCBpdCByZW1haW5zIGluIHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlLlxcbisgKi9cXG4rc3RhdGljIGludCBkb19tb3VudF9hbmRfc3luY2ZzKGNvbnN0IGNoYXIgKm1udCwgaW50IGFkdmVydGlzZSwgaW50IHVucHJpdl9vcGVuLFxcbitcXHRcXHRcXHQgICAgICAgaW50ICpzZWVuKVxcbit7XFxuK1xcdHN0cnVjdCBwb2xsZmQgcGZkID0geyAuZXZlbnRzID0gUE9MTElOIH07XFxuK1xcdGNoYXIgb3B0c1syNTZdO1xcbitcXHRpbnQgZmQsIG1mZCA9IC0xLCBpO1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcbitcXHRzeW5jZnNfZXZmZCA9IGV2ZW50ZmQoMCwgRUZEX0NMT0VYRUMpO1xcbitcXHRpZiAoc3luY2ZzX2V2ZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRpZiAodW5wcml2X29wZW4gXFx1MDAyNlxcdTAwMjYgc2V0X3N5c2FkbWluKDApKVxcbitcXHRcXHRnb3RvIG91dF9ldmZkO1xcbitcXHRmZCA9IG9wZW4oXFxcIi9kZXYvZnVzZVxcXCIsIE9fUkRXUik7XFxuK1xcdGlmICh1bnByaXZfb3BlbiBcXHUwMDI2XFx1MDAyNiBzZXRfc3lzYWRtaW4oMSkpIHtcXG4rXFx0XFx0aWYgKGZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0Z290byBvdXRfZXZmZDtcXG4rXFx0fVxcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dF9ldmZkO1xcbitcXG4rXFx0bWtkaXIobW50LCAwNzU1KTtcXG4rXFx0c25wcmludGYob3B0cywgc2l6ZW9mKG9wdHMpLFxcbitcXHRcXHQgXFxcImZkPSVkLHJvb3Rtb2RlPTQwMDAwLHVzZXJfaWQ9JWQsZ3JvdXBfaWQ9JWRcXFwiLFxcbitcXHRcXHQgZmQsIGdldHVpZCgpLCBnZXRnaWQoKSk7XFxuK1xcbitcXHRpZiAobW91bnQoXFxcImZ1c2VcXFwiLCBtbnQsIFxcXCJmdXNlXFxcIiwgMCwgb3B0cykgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dF9mZDtcXG4rXFxuK1xcdHBpZCA9IGZvcmsoKTtcXG4rXFx0aWYgKHBpZCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0X3Vtb3VudDtcXG4rXFx0aWYgKHBpZCA9PSAwKSB7XFxuK1xcdFxcdHJ1bl9zZXJ2ZXIoZmQsIGFkdmVydGlzZSk7XFxuK1xcdFxcdF9leGl0KDApO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcGFyZW50IGRvZXMgbm90IHNlcnZpY2UgdGhlIGZ1c2UgZmQ7IHRoZSBjaGlsZCBkb2VzLiAgQ2xvc2Ugb3VyXFxuK1xcdCAqIGNvcHkgc28gdGhlIGtlcm5lbCBzZWVzIGEgc2luZ2xlIHNlcnZlciwgYW5kIHNvIHRoYXQgaWYgdGhlIGNoaWxkXFxuK1xcdCAqIGRpZXMgdGhlIGNvbm5lY3Rpb24gYWJvcnRzIGluc3RlYWQgb2YgaGFuZ2luZyB1cyBmb3JldmVyLlxcbitcXHQgKi9cXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogbW91bnQoKSByZXR1cm5zIGJlZm9yZSB0aGUgc2VydmVyIGhhcyBhbnN3ZXJlZCBGVVNFX0lOSVQsIHNvIHRoZVxcbitcXHQgKiBmaXJzdCBvcGVuKCkgY2FuIHJhY2UgYW5kIGZhaWwgd2l0aCBFTk9UQ09OTjsgcmV0cnkgdW50aWwgdGhlXFxuK1xcdCAqIGhhbmRzaGFrZSBzZXR0bGVzLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDEwMDA7IGkrKykge1xcbitcXHRcXHRtZmQgPSBvcGVuKG1udCwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7XFxuK1xcdFxcdGlmIChtZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdHVzbGVlcCgxMDAwKTtcXG4rXFx0fVxcbitcXHRpZiAobWZkIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0c3luY2ZzKG1mZCk7XFxuK1xcdFxcdGNsb3NlKG1mZCk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE5vIHdhaXRpbmcgaXMgbmVlZGVkOiB0aGUgc2VydmVyIHdyaXRlcyBzeW5jZnNfZXZmZCBiZWZvcmUgaXQgcmVwbGllc1xcbitcXHQgKiB0byBGVVNFX1NZTkNGUywgYW5kIHRoYXQgcmVwbHkgaXMgd2hhdCB1bmJsb2NrcyB0aGUgc3luY2hyb25vdXNcXG4rXFx0ICogc3luY2ZzKCkgYWJvdmUuICBTbyBvbmNlIHN5bmNmcygpIGhhcyByZXR1cm5lZCwgdGhlIGV2ZW50ZmQgaXMgYWxyZWFkeVxcbitcXHQgKiBzaWduYWxsZWQgaWYgdGhlIG9wY29kZSB3YXMgcHJvcGFnYXRlZCwgYW5kIHdpbGwgbmV2ZXIgYmUgb3RoZXJ3aXNlLlxcbitcXHQgKiBwb2xsKCkgd2l0aCBhIHplcm8gdGltZW91dCB0aGVyZWZvcmUgZGVjaWRlcyBib3RoIGNhc2VzIGltbWVkaWF0ZWx5LlxcbitcXHQgKi9cXG4rXFx0cGZkLmZkID0gc3luY2ZzX2V2ZmQ7XFxuK1xcdCpzZWVuID0gcG9sbChcXHUwMDI2cGZkLCAxLCAwKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgKHBmZC5yZXZlbnRzIFxcdTAwMjYgUE9MTElOKTtcXG4rXFxuK1xcdGtpbGwocGlkLCBTSUdLSUxMKTtcXG4rXFx0d2FpdHBpZChwaWQsIE5VTEwsIDApO1xcbitcXHR1bW91bnQyKG1udCwgTU5UX0RFVEFDSCk7XFxuK1xcdGNsb3NlKHN5bmNmc19ldmZkKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfdW1vdW50OlxcbitcXHR1bW91bnQyKG1udCwgTU5UX0RFVEFDSCk7XFxuK291dF9mZDpcXG4rXFx0Y2xvc2UoZmQpO1xcbitvdXRfZXZmZDpcXG4rXFx0Y2xvc2Uoc3luY2ZzX2V2ZmQpO1xcbitcXHRyZXR1cm4gLTE7XFxuK31cXG4rXFxuKy8qIFQ0OiBzYW1lIGFzIGFib3ZlIGJ1dCB0aGUgbW91bnQgaXMgY3JlYXRlZCBpbnNpZGUgYSBuZXcgdXNlciBuYW1lc3BhY2UuICovXFxuK3N0YXRpYyBpbnQgcnVuX2luX3VzZXJucyhjb25zdCBjaGFyICptbnQsIGludCBhZHZlcnRpc2UsIGludCAqc2VlbilcXG4re1xcbitcXHR1aWRfdCB1aWQgPSBnZXR1aWQoKTtcXG4rXFx0Z2lkX3QgZ2lkID0gZ2V0Z2lkKCk7XFxuK1xcdGNoYXIgbWFwWzY0XTtcXG4rXFx0aW50IGY7XFxuK1xcbitcXHRpZiAodW5zaGFyZShDTE9ORV9ORVdVU0VSIHwgQ0xPTkVfTkVXTlMpIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcdC8qIHVucHJpdmlsZWdlZCB1c2VybnMgbW91bnRzIHVuYXZhaWxhYmxlICovXFxuK1xcbitcXHRmID0gb3BlbihcXFwiL3Byb2Mvc2VsZi9zZXRncm91cHNcXFwiLCBPX1dST05MWSk7XFxuK1xcdGlmIChmIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0ZHByaW50ZihmLCBcXFwiZGVueVxcXCIpO1xcbitcXHRcXHRjbG9zZShmKTtcXG4rXFx0fVxcbitcXHRzbnByaW50ZihtYXAsIHNpemVvZihtYXApLCBcXFwiMCAlZCAxXFxcIiwgdWlkKTtcXG4rXFx0ZiA9IG9wZW4oXFxcIi9wcm9jL3NlbGYvdWlkX21hcFxcXCIsIE9fV1JPTkxZKTtcXG4rXFx0aWYgKGYgXFx1MDAzYyAwIHx8IGRwcmludGYoZiwgXFxcIiVzXFxcIiwgbWFwKSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0Y2xvc2UoZik7XFxuK1xcdHNucHJpbnRmKG1hcCwgc2l6ZW9mKG1hcCksIFxcXCIwICVkIDFcXFwiLCBnaWQpO1xcbitcXHRmID0gb3BlbihcXFwiL3Byb2Mvc2VsZi9naWRfbWFwXFxcIiwgT19XUk9OTFkpO1xcbitcXHRpZiAoZiBcXHUwMDNjIDAgfHwgZHByaW50ZihmLCBcXFwiJXNcXFwiLCBtYXApIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRjbG9zZShmKTtcXG4rXFxuK1xcdC8qIE5lZWQgYSBtb3VudCBuYW1lc3BhY2Ugd2hlcmUgd2UgY2FuIG1vdW50IGZ1c2UgdW5wcml2aWxlZ2VkLiAqL1xcbitcXHRpZiAobW91bnQoTlVMTCwgXFxcIi9cXFwiLCBOVUxMLCBNU19SRUMgfCBNU19QUklWQVRFLCBOVUxMKSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHJldHVybiBkb19tb3VudF9hbmRfc3luY2ZzKG1udCwgYWR2ZXJ0aXNlLCAwLCBzZWVuKTtcXG4rfVxcbitcXG4raW50IG1haW4odm9pZClcXG4re1xcbitcXHRjaGFyIG1udFtdID0gXFxcIi90bXAvZnVzZV9zeW5jZnNfWFhYWFhYXFxcIjtcXG4rXFx0aW50IHNlZW4sIHJldDtcXG4rXFxuK1xcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcdGtzZnRfc2V0X3BsYW4oNCk7XFxuK1xcbitcXHQvKiBIYXJkIHdhdGNoZG9nOiBuZXZlciBsZXQgYSBzdHVjayBzeW5jZnMgaGFuZyB0aGUgdGVzdCBydW5uZXIuICovXFxuK1xcdHNpZ25hbChTSUdBTFJNLCBTSUdfREZMKTtcXG4rXFx0YWxhcm0oNjApO1xcbitcXG4rXFx0aWYgKGdldGV1aWQoKSAhPSAwKVxcbitcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwidGVzdCByZXF1aXJlcyByb290IHRvIG1vdW50IGZ1c2VcXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKCFta2R0ZW1wKG1udCkpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwibWtkdGVtcCBmYWlsZWRcXFxcblxcXCIpO1xcbitcXG4rXFx0LyogVDE6IGhvc3Qtcm9vdCBtb3VudCwgc2VydmVyIG9wdHMgaW4gLVxcdTAwM2Ugc3luY2ZzIG11c3QgcmVhY2ggc2VydmVyLiAqL1xcbitcXHRyZXQgPSBkb19tb3VudF9hbmRfc3luY2ZzKG1udCwgMSwgMCwgXFx1MDAyNnNlZW4pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCJUMTogY291bGQgbm90IG1vdW50IGZ1c2VcXFxcblxcXCIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHQoc2VlbixcXG4rXFx0XFx0XFx0XFx0IFxcXCJUMSBob3N0LXJvb3QgKyBGVVNFX0hBU19TWU5DRlM6IHNlcnZlciByZWNlaXZlcyBGVVNFX1NZTkNGU1xcXFxuXFxcIik7XFxuK1xcbitcXHQvKiBUMjogaG9zdC1yb290IG1vdW50LCBzZXJ2ZXIgZG9lcyBOT1Qgb3B0IGluIC1cXHUwMDNlIG5vIEZVU0VfU1lOQ0ZTLiAqL1xcbitcXHRyZXQgPSBkb19tb3VudF9hbmRfc3luY2ZzKG1udCwgMCwgMCwgXFx1MDAyNnNlZW4pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCJUMjogY291bGQgbm90IG1vdW50IGZ1c2VcXFxcblxcXCIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHQoIXNlZW4sXFxuK1xcdFxcdFxcdFxcdCBcXFwiVDIgaG9zdC1yb290LCBubyBvcHQtaW46IHNlcnZlciBkb2VzIE5PVCByZWNlaXZlIEZVU0VfU1lOQ0ZTXFxcXG5cXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFQzOiBzZXJ2ZXIgb3B0cyBpbiBidXQgb3BlbmVkIC9kZXYvZnVzZSB3aXRob3V0IENBUF9TWVNfQURNSU4gd2hpbGVcXG4rXFx0ICogc3RpbGwgaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgLVxcdTAwM2Uga2VybmVsIG11c3Qgd2l0aGhvbGRcXG4rXFx0ICogRlVTRV9TWU5DRlMuICBUaGlzIGlzIHRoZSBjYXNlIHRoYXQgZGlzdGluZ3Vpc2hlcyBnYXRpbmcgb24gdGhlXFxuK1xcdCAqIHNlcnZlcidzIHByaXZpbGVnZSBmcm9tIGdhdGluZyBvbiB0aGUgbW91bnQncyB1c2VyIG5hbWVzcGFjZS5cXG4rXFx0ICovXFxuK1xcdHJldCA9IGRvX21vdW50X2FuZF9zeW5jZnMobW50LCAxLCAxLCBcXHUwMDI2c2Vlbik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIlQzOiBjb3VsZCBub3QgbW91bnQgZnVzZSB1bnByaXZpbGVnZWRcXFxcblxcXCIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHQoIXNlZW4sXFxuK1xcdFxcdFxcdFxcdCBcXFwiVDMgaW5pdF91c2VybnMsIG9wZW5lciBsYWNrcyBDQVBfU1lTX0FETUlOOiBGVVNFX1NZTkNGUyB3aXRoaGVsZFxcXFxuXFxcIik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUNDogdW5wcml2aWxlZ2VkIHVzZXJucyBtb3VudCwgc2VydmVyIG9wdHMgaW4gLVxcdTAwM2Uga2VybmVsIG11c3Qgc3RpbGxcXG4rXFx0ICogd2l0aGhvbGQgRlVTRV9TWU5DRlMuICBSdW4gaW4gYSBjaGlsZCBzaW5jZSBpdCB1bnNoYXJlcyBuYW1lc3BhY2VzLlxcbitcXHQgKi9cXG4rXFx0e1xcbitcXHRcXHRwaWRfdCBwID0gZm9yaygpO1xcbitcXG4rXFx0XFx0aWYgKHAgPT0gMCkge1xcbitcXHRcXHRcXHRpbnQgcyA9IDA7XFxuK1xcdFxcdFxcdGludCByID0gcnVuX2luX3VzZXJucyhtbnQsIDEsIFxcdTAwMjZzKTtcXG4rXFxuK1xcdFxcdFxcdF9leGl0KHIgXFx1MDAzYyAwID8gMiA6IChzID8gMSA6IDApKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0aW50IHN0YXR1cztcXG4rXFxuK1xcdFxcdFxcdHdhaXRwaWQocCwgXFx1MDAyNnN0YXR1cywgMCk7XFxuK1xcdFxcdFxcdGlmICghV0lGRVhJVEVEKHN0YXR1cykpXFxuK1xcdFxcdFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfZXJyb3IoXFxcIlQ0OiBjaGlsZCBjcmFzaGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZWxzZSBpZiAoV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAyKVxcbitcXHRcXHRcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIlQ0OiB1c2VybnMgZnVzZSBtb3VudCB1bmF2YWlsYWJsZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0a3NmdF90ZXN0X3Jlc3VsdChXRVhJVFNUQVRVUyhzdGF0dXMpID09IDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBcXFwiVDQgdW5wcml2IHVzZXJucyArIG9wdC1pbjogRlVTRV9TWU5DRlMgd2l0aGhlbGRcXFxcblxcXCIpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJtZGlyKG1udCk7XFxuK1xcdGtzZnRfZmluaXNoZWQoKTtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNzozMzowNy45MjA3NTA5MTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzI0ODE4MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVU0VfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdXNlX29wdF9mZFwiLFxuICAgIFwiZnVzZV9zeW5jZnNfZW5hYmxlXCIsXG4gICAgXCJwcm9jZXNzX2luaXRfcmVwbHlcIixcbiAgICBcImZ1c2VfbmV3X2luaXRcIixcbiAgICBcImZ1c2VfZmlsbF9zdXBlcl9jb21tb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gdGhlIEZVU0UgZmlsZXN5c3RlbSwgYWxsb3dpbmcgcHJpdmlsZWdlZCB1c2Vyc3BhY2Ugc2VydmVycyB0byBvcHQtaW4gdG8gcmVjZWl2aW5nIEZVU0VfU1lOQ0ZTIHJlcXVlc3RzLiBJdCBtb2RpZmllcyBtb3VudCBwYXJhbWV0ZXIgcGFyc2luZyBhbmQgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3NjJlMjNlOWNmYTg0NTU5OTI2ZDJhZmEwNmI5ZjcwNmY3N2RkNTVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMTkgMTc6MzM6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Z1c2VfaS5oIGIvZnMvZnVzZS9mdXNlX2kuaFxuaW5kZXggODVmNzM4YzUzMTIyNWEuLjNmYmU0OTU3ZTgzOWI0IDEwMDY0NFxuLS0tIGEvZnMvZnVzZS9mdXNlX2kuaFxuKysrIGIvZnMvZnVzZS9mdXNlX2kuaFxuQEAgLTM5MSw2ICszOTEsNyBAQCBzdHJ1Y3QgZnVzZV9mc19jb250ZXh0IHtcbiBcdGJvb2wgbm9fY29udHJvbDoxO1xuIFx0Ym9vbCBub19mb3JjZV91bW91bnQ6MTtcbiBcdGJvb2wgbGVnYWN5X29wdHNfc2hvdzoxO1xuK1x0Ym9vbCBzeW5jZnNfY2FwYWJsZToxO1xuIFx0ZW51bSBmdXNlX2RheF9tb2RlIGRheF9tb2RlO1xuIFx0dW5zaWduZWQgaW50IG1heF9yZWFkO1xuIFx0dW5zaWduZWQgaW50IGJsa3NpemU7XG5AQCAtNjc1LDYgKzY3NiwxNCBAQCBzdHJ1Y3QgZnVzZV9jb25uIHtcbiBcdC8qKiBAc3luY19mczogUHJvcGFnYXRlIHN5bmNmcygpIHRvIHNlcnZlciAqL1xuIFx0dW5zaWduZWQgaW50IHN5bmNfZnM6MTtcbiBcbitcdC8qKlxuK1x0ICogQHN5bmNmc19jYXBhYmxlOiB0aGUgcHJpdmlsZWdlIHJlcXVpcmVkIHRvIGhvbm9yIEZVU0VfSEFTX1NZTkNGUyB3YXNcbitcdCAqIHByZXNlbnQgd2hlbiAvZGV2L2Z1c2Ugd2FzIG9wZW5lZCAoQ0FQX1NZU19BRE1JTiBpbiB0aGUgaW5pdGlhbCB1c2VyXG4rXHQgKiBuYW1lc3BhY2UpLCBpLmUuIHRoZSBzYW1lIHByaXZpbGVnZSB0aGF0IG1vdW50aW5nIHZpcnRpb2ZzL2Z1c2VibGtcbitcdCAqIHJlcXVpcmVzLlxuK1x0ICovXG4rXHR1bnNpZ25lZCBpbnQgc3luY2ZzX2NhcGFibGU6MTtcbitcbiBcdC8qKiBAaW5pdF9zZWN1cml0eTogSW5pdGlhbGl6ZSBzZWN1cml0eSB4YXR0cnMgd2hlbiBjcmVhdGluZyBhIG5ldyBpbm9kZSAqL1xuIFx0dW5zaWduZWQgaW50IGluaXRfc2VjdXJpdHk6MTtcbiBcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2lub2RlLmMgYi9mcy9mdXNlL2lub2RlLmNcbmluZGV4IGQ5NzUwNzNjNjAyOTYzLi5iYTc1MDZiNTM5YWUwMyAxMDA2NDRcbi0tLSBhL2ZzL2Z1c2UvaW5vZGUuY1xuKysrIGIvZnMvZnVzZS9pbm9kZS5jXG5AQCAtODAwLDYgKzgwMCwxNSBAQCBzdGF0aWMgaW50IGZ1c2Vfb3B0X2ZkKHN0cnVjdCBmc19jb250ZXh0ICpmc2MsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0aWYgKGZpbGUtXHUwMDNlZl9jcmVkLVx1MDAzZXVzZXJfbnMgIT0gZnNjLVx1MDAzZXVzZXJfbnMpXG4gXHRcdHJldHVybiBpbnZhbGZjKGZzYywgXCJ3cm9uZyB1c2VyIG5hbWVzcGFjZSBmb3IgZnVzZSBkZXZpY2VcIik7XG4gXG4rXHQvKlxuK1x0ICogUmVjb3JkIHdoZXRoZXIgdGhlIHNlcnZlciBvcGVuZWQgL2Rldi9mdXNlIHdpdGggQ0FQX1NZU19BRE1JTiBpbiB0aGVcbitcdCAqIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgLS0gdGhlIHNhbWUgcHJpdmlsZWdlIHRoYXQgbW91bnRpbmcgdmlydGlvZnNcbitcdCAqIG9yIGZ1c2VibGsgcmVxdWlyZXMuICBPbmx5IHN1Y2ggc2VydmVycyBhcmUgdHJ1c3RlZCB0byByZWNlaXZlXG4rXHQgKiBGVVNFX1NZTkNGUyAoc2VlIGZ1c2Vfc3luY2ZzX2VuYWJsZSgpKS5cbitcdCAqL1xuK1x0Y3R4LVx1MDAzZXN5bmNmc19jYXBhYmxlID0gZmlsZV9uc19jYXBhYmxlKGZpbGUsIFx1MDAyNmluaXRfdXNlcl9ucyxcbitcdFx0XHRcdFx0ICAgICAgQ0FQX1NZU19BRE1JTik7XG4rXG4gXHRjdHgtXHUwMDNlZnVkID0gZnVzZV9kZXZfZ3JhYihmaWxlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTEyNjYsNiArMTI3NSwxNiBAQCBzdHJ1Y3QgZnVzZV9pbml0X2FyZ3Mge1xuIFx0c3RydWN0IGZ1c2VfbW91bnQgKmZtO1xuIH07XG4gXG4rLypcbisgKiBBIHNlcnZlciBjYW4gc3RhbGwgc3luY2ZzKCkvc3luYygpLCBzbyBvbmx5IGhvbm9yIEZVU0VfSEFTX1NZTkNGUyBmb3JcbisgKiBzZXJ2ZXJzIHRoYXQgb3BlbmVkIC9kZXYvZnVzZSB3aXRoIENBUF9TWVNfQURNSU4gaW4gdGhlIGluaXRpYWwgdXNlclxuKyAqIG5hbWVzcGFjZSAtLSB0aGUgc2FtZSBwcml2aWxlZ2UgcmVxdWlyZWQgdG8gbW91bnQgdmlydGlvZnMgb3IgZnVzZWJsay5cbisgKi9cbitzdGF0aWMgYm9vbCBmdXNlX3N5bmNmc19lbmFibGUoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHU2NCBmbGFncylcbit7XG4rXHRyZXR1cm4gKGZsYWdzIFx1MDAyNiBGVVNFX0hBU19TWU5DRlMpIFx1MDAyNlx1MDAyNiBmYy1cdTAwM2VzeW5jZnNfY2FwYWJsZTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcHJvY2Vzc19pbml0X3JlcGx5KHN0cnVjdCBmdXNlX2FyZ3MgKmFyZ3MsIGludCBlcnJvcilcbiB7XG4gXHRzdHJ1Y3QgZnVzZV9pbml0X2FyZ3MgKmlhID0gY29udGFpbmVyX29mKGFyZ3MsIHR5cGVvZigqaWEpLCBhcmdzKTtcbkBAIC0xNDA2LDYgKzE0MjUsOSBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2luaXRfcmVwbHkoc3RydWN0IGZ1c2VfYXJncyAqYXJncywgaW50IGVycm9yKVxuIFxuIFx0XHRcdGlmIChmbGFncyBcdTAwMjYgRlVTRV9SRVFVRVNUX1RJTUVPVVQpXG4gXHRcdFx0XHR0aW1lb3V0ID0gYXJnLVx1MDAzZXJlcXVlc3RfdGltZW91dDtcbitcbitcdFx0XHRpZiAoZnVzZV9zeW5jZnNfZW5hYmxlKGZjLCBmbGFncykpXG4rXHRcdFx0XHRmYy1cdTAwM2VzeW5jX2ZzID0gMTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRyYV9wYWdlcyA9IGZjLVx1MDAzZW1heF9yZWFkIC8gUEFHRV9TSVpFO1xuIFx0XHRcdGZjLVx1MDAzZW5vX2xvY2sgPSAxO1xuQEAgLTE0NzMsNiArMTQ5NSwxMSBAQCBzdGF0aWMgc3RydWN0IGZ1c2VfaW5pdF9hcmdzICpmdXNlX25ld19pbml0KHN0cnVjdCBmdXNlX21vdW50ICpmbSlcbiBcdFx0ZmxhZ3MgfD0gRlVTRV9TVUJNT1VOVFM7XG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkpXG4gXHRcdGZsYWdzIHw9IEZVU0VfUEFTU1RIUk9VR0g7XG4rXHQvKiBPbmx5IG9mZmVyZWQgdG8gc3VmZmljaWVudGx5IHByaXZpbGVnZWQgc2VydmVyczsgc2VlXG4rXHQgKiBmdXNlX3N5bmNmc19lbmFibGUoKS5cbitcdCAqL1xuK1x0aWYgKGZtLVx1MDAzZWZjLVx1MDAzZXN5bmNmc19jYXBhYmxlKVxuK1x0XHRmbGFncyB8PSBGVVNFX0hBU19TWU5DRlM7XG4gXG4gXHQvKlxuIFx0ICogVGhpcyBpcyBqdXN0IGFuIGluZm9ybWF0aW9uIGZsYWcgZm9yIGZ1c2Ugc2VydmVyLiBObyBuZWVkIHRvIGNoZWNrXG5AQCAtMTc2Niw2ICsxNzkzLDcgQEAgaW50IGZ1c2VfZmlsbF9zdXBlcl9jb21tb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZ1c2VfZnNfY29udGV4dCAqY3R4KVxuIFxuIFx0ZmMtXHUwMDNlZGVmYXVsdF9wZXJtaXNzaW9ucyA9IGN0eC1cdTAwM2VkZWZhdWx0X3Blcm1pc3Npb25zO1xuIFx0ZmMtXHUwMDNlYWxsb3dfb3RoZXIgPSBjdHgtXHUwMDNlYWxsb3dfb3RoZXI7XG4rXHRmYy1cdTAwM2VzeW5jZnNfY2FwYWJsZSA9IGN0eC1cdTAwM2VzeW5jZnNfY2FwYWJsZTtcbiBcdGZjLVx1MDAzZXVzZXJfaWQgPSBjdHgtXHUwMDNldXNlcl9pZDtcbiBcdGZjLVx1MDAzZWdyb3VwX2lkID0gY3R4LVx1MDAzZWdyb3VwX2lkO1xuIFx0ZmMtXHUwMDNlbGVnYWN5X29wdHNfc2hvdyA9IGN0eC1cdTAwM2VsZWdhY3lfb3B0c19zaG93O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9mdXNlLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oXG5pbmRleCBjMTNlMWY5YTJmMTJiZC4uYzA3OGM1ZjBmOTRlYzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oXG5AQCAtMjQwLDYgKzI0MCw5IEBAXG4gICogIC0gYWRkIEZVU0VfQ09QWV9GSUxFX1JBTkdFXzY0XG4gICogIC0gYWRkIHN0cnVjdCBmdXNlX2NvcHlfZmlsZV9yYW5nZV9vdXRcbiAgKiAgLSBhZGQgRlVTRV9OT1RJRllfUFJVTkVcbisgKlxuKyAqICA3LjQ2XG4rICogIC0gYWRkIEZVU0VfSEFTX1NZTkNGUyBvcHQtaW4gZmxhZyBmb3IgcHJpdmlsZWdlZCB1c2Vyc3BhY2Ugc2VydmVyc1xuICAqL1xuIFxuICNpZm5kZWYgX0xJTlVYX0ZVU0VfSFxuQEAgLTI3NSw3ICsyNzgsNyBAQFxuICNkZWZpbmUgRlVTRV9LRVJORUxfVkVSU0lPTiA3XG4gXG4gLyoqIE1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgaW50ZXJmYWNlICovXG4tI2RlZmluZSBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OIDQ1XG4rI2RlZmluZSBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OIDQ2XG4gXG4gLyoqIFRoZSBub2RlIElEIG9mIHRoZSByb290IGlub2RlICovXG4gI2RlZmluZSBGVVNFX1JPT1RfSUQgMVxuQEAgLTQ0OCw2ICs0NTEsMTIgQEAgc3RydWN0IGZ1c2VfZmlsZV9sb2NrIHtcbiAgKiBGVVNFX09WRVJfSU9fVVJJTkc6IEluZGljYXRlIHRoYXQgY2xpZW50IHN1cHBvcnRzIGlvLXVyaW5nXG4gICogRlVTRV9SRVFVRVNUX1RJTUVPVVQ6IGtlcm5lbCBzdXBwb3J0cyB0aW1pbmcgb3V0IHJlcXVlc3RzLlxuICAqXHRcdFx0IGluaXRfb3V0LnJlcXVlc3RfdGltZW91dCBjb250YWlucyB0aGUgdGltZW91dCAoaW4gc2VjcylcbisgKiBGVVNFX0hBU19TWU5DRlM6IHNlcnZlciByZXF1ZXN0cyB0aGF0IHN5bmNmcygpL3N5bmMoKSBiZSBwcm9wYWdhdGVkIGFzXG4rICpcdFx0RlVTRV9TWU5DRlMgcmVxdWVzdHMuICBTaW5jZSBhbiB1bnRydXN0ZWQgc2VydmVyIGNhbiB1c2UgdGhpc1xuKyAqXHRcdHRvIHN0YWxsIHN5bmMoKSwgaXQgaXMgb25seSBob25vcmVkIHdoZW4gL2Rldi9mdXNlIHdhcyBvcGVuZWRcbisgKlx0XHR3aXRoIENBUF9TWVNfQURNSU4gaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgKHRoZSBzYW1lXG4rICpcdFx0cHJpdmlsZWdlIHRoYXQgbW91bnRpbmcgdmlydGlvZnMgb3IgZnVzZWJsayByZXF1aXJlcykuXG4rICpcdFx0SW5zdWZmaWNpZW50bHkgcHJpdmlsZWdlZCBzZXJ2ZXJzIGlnbm9yZSBpdC5cbiAgKi9cbiAjZGVmaW5lIEZVU0VfQVNZTkNfUkVBRFx0XHQoMSBcdTAwM2NcdTAwM2MgMClcbiAjZGVmaW5lIEZVU0VfUE9TSVhfTE9DS1NcdCgxIFx1MDAzY1x1MDAzYyAxKVxuQEAgLTQ5NSw2ICs1MDQsNyBAQCBzdHJ1Y3QgZnVzZV9maWxlX2xvY2sge1xuICNkZWZpbmUgRlVTRV9BTExPV19JRE1BUFx0KDFVTEwgXHUwMDNjXHUwMDNjIDQwKVxuICNkZWZpbmUgRlVTRV9PVkVSX0lPX1VSSU5HXHQoMVVMTCBcdTAwM2NcdTAwM2MgNDEpXG4gI2RlZmluZSBGVVNFX1JFUVVFU1RfVElNRU9VVFx0KDFVTEwgXHUwMDNjXHUwMDNjIDQyKVxuKyNkZWZpbmUgRlVTRV9IQVNfU1lOQ0ZTXHRcdCgxVUxMIFx1MDAzY1x1MDAzYyA0MylcbiBcbiAvKipcbiAgKiBDVVNFIElOSVQgcmVxdWVzdC9yZXBseSBmbGFnc1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvLmdpdGlnbm9yZVxuaW5kZXggM2U3MmU3NDJkMDhlOGMuLjRlOTJmMzYzYzc0YWIzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS8uZ2l0aWdub3JlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlLy5naXRpZ25vcmVcbkBAIC0xLDMgKzEsNCBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIGZ1c2VfbW50XG4gZnVzZWN0bF90ZXN0XG4rdGVzdF9zeW5jZnNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuaW5kZXggNjEyYWFkNjlhOTNhYTQuLmNiYmEwMTYzNTIyNmRjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuQEAgLTIsNyArMiw3IEBAXG4gXG4gQ0ZMQUdTICs9IC1XYWxsIC1PMiAtZyAkKEtIRFJfSU5DTFVERVMpXG4gXG4tVEVTVF9HRU5fUFJPR1MgOj0gZnVzZWN0bF90ZXN0XG4rVEVTVF9HRU5fUFJPR1MgOj0gZnVzZWN0bF90ZXN0IHRlc3Rfc3luY2ZzXG4gVEVTVF9HRU5fRklMRVMgOj0gZnVzZV9tbnRcbiBcbiBpbmNsdWRlIC4uLy4uL2xpYi5ta1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvdGVzdF9zeW5jZnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvdGVzdF9zeW5jZnMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MGZiMzQ3ODU1NGFmNVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS90ZXN0X3N5bmNmcy5jXG5AQCAtMCwwICsxLDM3MCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBUZXN0IHRoYXQgRlVTRV9TWU5DRlMgaXMgcHJvcGFnYXRlZCB0byBhIHVzZXJzcGFjZSBzZXJ2ZXIgb25seSB3aGVuIHRoZVxuKyAqIHNlcnZlciBvcHRzIGluIHdpdGggRlVTRV9IQVNfU1lOQ0ZTICphbmQqIG9wZW5lZCAvZGV2L2Z1c2Ugd2l0aFxuKyAqIENBUF9TWVNfQURNSU4gaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UuXG4rICpcbisgKiBVbmxpa2UgdGhlIGxpYmZ1c2UtYmFzZWQgc2VsZnRlc3RzLCB0aGlzIHRhbGtzIHRoZSByYXcgRlVTRSB3aXJlIHByb3RvY29sXG4rICogb3ZlciAvZGV2L2Z1c2Ugc28gaXQgY2FuIChhKSBjaG9vc2Ugd2hldGhlciB0byBhZHZlcnRpc2UgRlVTRV9IQVNfU1lOQ0ZTIGluXG4rICogdGhlIElOSVQgcmVwbHkgYW5kIChiKSBvYnNlcnZlIGRpcmVjdGx5IHdoZXRoZXIgYSBGVVNFX1NZTkNGUyBvcGNvZGUgYXJyaXZlcy5cbisgKi9cbisjZGVmaW5lIF9HTlVfU09VUkNFXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL2V2ZW50ZmQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tb3VudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy91aW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jYXBhYmlsaXR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mdXNlLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcIi4uLy4uL2tzZWxmdGVzdC5oXCJcbitcbisjZGVmaW5lIEZVU0VfUk9PVF9JRCAxXG4rXG4rLypcbisgKiBBZGQgb3IgZHJvcCBDQVBfU1lTX0FETUlOIGluIHRoZSBlZmZlY3RpdmUgc2V0IHZpYSByYXcgY2FwZ2V0L2NhcHNldFxuKyAqIChhdm9pZHMgYSBsaWJjYXAgZGVwZW5kZW5jeSkuICBVc2VkIHRvIGNvbnN0cnVjdCBhIHNlcnZlciB0aGF0IG9wZW5zXG4rICogL2Rldi9mdXNlIHdpdGhvdXQgdGhlIHByaXZpbGVnZSBGVVNFX0hBU19TWU5DRlMgcmVxdWlyZXMuXG4rICovXG4rc3RhdGljIGludCBzZXRfc3lzYWRtaW4oaW50IG9uKVxuK3tcbitcdHN0cnVjdCBfX3VzZXJfY2FwX2hlYWRlcl9zdHJ1Y3QgaGRyID0ge1xuK1x0XHQudmVyc2lvbiA9IF9MSU5VWF9DQVBBQklMSVRZX1ZFUlNJT05fMyxcbitcdFx0LnBpZCA9IDAsXG4rXHR9O1xuK1x0c3RydWN0IF9fdXNlcl9jYXBfZGF0YV9zdHJ1Y3QgZGF0YVtfTElOVVhfQ0FQQUJJTElUWV9VMzJTXzNdID0ge307XG4rXHR1bnNpZ25lZCBpbnQgaWR4ID0gQ0FQX1NZU19BRE1JTiBcdTAwM2VcdTAwM2UgNTtcbitcdF9fdTMyIGJpdCA9IDFVIFx1MDAzY1x1MDAzYyAoQ0FQX1NZU19BRE1JTiBcdTAwMjYgMzEpO1xuK1xuK1x0aWYgKHN5c2NhbGwoU1lTX2NhcGdldCwgXHUwMDI2aGRyLCBkYXRhKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0aWYgKG9uKVxuK1x0XHRkYXRhW2lkeF0uZWZmZWN0aXZlIHw9IGJpdDtcbitcdGVsc2VcbitcdFx0ZGF0YVtpZHhdLmVmZmVjdGl2ZSBcdTAwMjY9IH5iaXQ7XG4rXHRyZXR1cm4gc3lzY2FsbChTWVNfY2Fwc2V0LCBcdTAwMjZoZHIsIGRhdGEpO1xuK31cbitcbisvKlxuKyAqIGV2ZW50ZmQgdGhlIHNlcnZlciBjaGlsZCB3cml0ZXMgb25jZSB3aGVuIGl0IHJlY2VpdmVzIEZVU0VfU1lOQ0ZTOyB0aGVcbisgKiBwYXJlbnQgcG9sbCgpcyBpdCB0byBvYnNlcnZlIChvciBydWxlIG91dCkgcHJvcGFnYXRpb24uXG4rICovXG4rc3RhdGljIGludCBzeW5jZnNfZXZmZDtcbitcbitzdGF0aWMgdm9pZCByZXBseShpbnQgZmQsIHVpbnQ2NF90IHVuaXF1ZSwgaW50IGVycm9yLCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKVxuK3tcbitcdHN0cnVjdCBmdXNlX291dF9oZWFkZXIgb2ggPSB7XG4rXHRcdC5sZW4gPSBzaXplb2Yob2gpICsgbGVuLFxuK1x0XHQuZXJyb3IgPSBlcnJvcixcbitcdFx0LnVuaXF1ZSA9IHVuaXF1ZSxcbitcdH07XG4rXHRzdHJ1Y3QgaW92ZWMgaW92WzJdID0ge1xuK1x0XHR7IFx1MDAyNm9oLCBzaXplb2Yob2gpIH0sXG4rXHRcdHsgZGF0YSwgbGVuIH0sXG4rXHR9O1xuK1xuK1x0aWYgKHdyaXRldihmZCwgaW92LCBkYXRhID8gMiA6IDEpIFx1MDAzYyAwKVxuK1x0XHRrc2Z0X3ByaW50X21zZyhcInNlcnZlciB3cml0ZXYgZmFpbGVkOiAlc1xcblwiLCBzdHJlcnJvcihlcnJubykpO1xuK31cbitcbitzdGF0aWMgdm9pZCBmaWxsX2F0dHIoc3RydWN0IGZ1c2VfYXR0ciAqYSwgdWludDY0X3QgaW5vLCB1aW50MzJfdCBtb2RlLFxuK1x0XHQgICAgICB1aW50MzJfdCBubGluaylcbit7XG4rXHRtZW1zZXQoYSwgMCwgc2l6ZW9mKCphKSk7XG4rXHRhLVx1MDAzZWlubyA9IGlubztcbitcdGEtXHUwMDNlbW9kZSA9IG1vZGU7XG4rXHRhLVx1MDAzZW5saW5rID0gbmxpbms7XG4rXHRhLVx1MDAzZWJsa3NpemUgPSA0MDk2O1xuK31cbitcbisvKlxuKyAqIE1pbmltYWwgRlVTRSBzZXJ2ZXIuICBBZHZlcnRpc2VzIEZVU0VfSEFTX1NZTkNGUyBpbiBpdHMgSU5JVCByZXBseSBpZmZcbisgKiBAYWR2ZXJ0aXNlIGlzIHNldC4gIFNpZ25hbHMgc3luY2ZzX2V2ZmQgd2hlbiBhIEZVU0VfU1lOQ0ZTIG9wY29kZSBhcnJpdmVzLlxuKyAqL1xuKyNkZWZpbmUgU0VSVkVSX01BWF9XUklURSA2NTUzNlxuK3N0YXRpYyB2b2lkIHJ1bl9zZXJ2ZXIoaW50IGZkLCBpbnQgYWR2ZXJ0aXNlKVxuK3tcbitcdC8qXG4rXHQgKiBUaGUga2VybmVsIHJlamVjdHMgcmVhZHMgKEVJTlZBTCkgd2hvc2UgYnVmZmVyIGlzIHNtYWxsZXIgdGhhblxuK1x0ICogbWF4X3dyaXRlICsgaGVhZGVyLCBzbyBzaXplIGdlbmVyb3VzbHkgZm9yIHRoZSBtYXhfd3JpdGUgd2VcbitcdCAqIGFkdmVydGlzZSBpbiB0aGUgSU5JVCByZXBseSBiZWxvdy5cbitcdCAqL1xuK1x0c3RhdGljIGNoYXIgYnVmW1NFUlZFUl9NQVhfV1JJVEUgKyA0MDk2XTtcbitcbitcdGZvciAoOzspIHtcbitcdFx0c3NpemVfdCBuID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRcdHN0cnVjdCBmdXNlX2luX2hlYWRlciAqaWggPSAodm9pZCAqKWJ1ZjtcbitcbitcdFx0aWYgKG4gXHUwMDNjIDApIHtcbitcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0cmV0dXJuO1x0XHQvKiBkZXZpY2UgY2xvc2VkIG9uIHVubW91bnQvYWJvcnQgKi9cbitcdFx0fVxuK1x0XHRpZiAobiBcdTAwM2MgKHNzaXplX3Qpc2l6ZW9mKCppaCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHN3aXRjaCAoaWgtXHUwMDNlb3Bjb2RlKSB7XG4rXHRcdGNhc2UgRlVTRV9JTklUOiB7XG4rXHRcdFx0c3RydWN0IGZ1c2VfaW5pdF9pbiAqaW4gPSAodm9pZCAqKShpaCArIDEpO1xuK1x0XHRcdHN0cnVjdCBmdXNlX2luaXRfb3V0IG91dCA9IHswfTtcbitcdFx0XHR1aW50NjRfdCBmbGFncyA9IEZVU0VfSU5JVF9FWFQ7XG4rXG4rXHRcdFx0b3V0Lm1ham9yID0gRlVTRV9LRVJORUxfVkVSU0lPTjtcbitcdFx0XHRvdXQubWlub3IgPSBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OO1xuK1x0XHRcdG91dC5tYXhfcmVhZGFoZWFkID0gaW4tXHUwMDNlbWF4X3JlYWRhaGVhZDtcbitcdFx0XHRvdXQubWF4X3dyaXRlID0gU0VSVkVSX01BWF9XUklURTtcbitcdFx0XHRvdXQubWF4X2JhY2tncm91bmQgPSAxNjtcbitcdFx0XHRvdXQuY29uZ2VzdGlvbl90aHJlc2hvbGQgPSAxMjtcbitcdFx0XHRpZiAoYWR2ZXJ0aXNlKVxuK1x0XHRcdFx0ZmxhZ3MgfD0gRlVTRV9IQVNfU1lOQ0ZTO1xuK1x0XHRcdG91dC5mbGFncyA9IGZsYWdzO1xuK1x0XHRcdG91dC5mbGFnczIgPSBmbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4rXHRcdFx0cmVwbHkoZmQsIGloLVx1MDAzZXVuaXF1ZSwgMCwgXHUwMDI2b3V0LCBzaXplb2Yob3V0KSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0Y2FzZSBGVVNFX0dFVEFUVFI6IHtcbitcdFx0XHRzdHJ1Y3QgZnVzZV9hdHRyX291dCBvdXQgPSB7MH07XG4rXG4rXHRcdFx0ZmlsbF9hdHRyKFx1MDAyNm91dC5hdHRyLCBGVVNFX1JPT1RfSUQsIFNfSUZESVIgfCAwNzU1LCAyKTtcbitcdFx0XHRyZXBseShmZCwgaWgtXHUwMDNldW5pcXVlLCAwLCBcdTAwMjZvdXQsIHNpemVvZihvdXQpKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRjYXNlIEZVU0VfU1lOQ0ZTOiB7XG4rXHRcdFx0dWludDY0X3Qgb25lID0gMTtcbitcbitcdFx0XHRpZiAod3JpdGUoc3luY2ZzX2V2ZmQsIFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpIFx1MDAzYyAwKVxuK1x0XHRcdFx0a3NmdF9wcmludF9tc2coXCJzZXJ2ZXIgZXZlbnRmZCB3cml0ZSBmYWlsZWQ6ICVzXFxuXCIsXG4rXHRcdFx0XHRcdCAgICAgICBzdHJlcnJvcihlcnJubykpO1xuK1x0XHRcdHJlcGx5KGZkLCBpaC1cdTAwM2V1bmlxdWUsIDAsIE5VTEwsIDApO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBbnl0aGluZyBlbHNlIChlLmcuIE9QRU5ESVIgZnJvbSBvcGVuaW5nIHRoZSBtb3VudFxuK1x0XHRcdCAqIHJvb3QpIGlzIG5vdCBuZWVkZWQgdG8gZHJpdmUgdGhpcyB0ZXN0OyAtRU5PU1lTIGxldHNcbitcdFx0XHQgKiB0aGUga2VybmVsIHByb2NlZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0cmVwbHkoZmQsIGloLVx1MDAzZXVuaXF1ZSwgLUVOT1NZUywgTlVMTCwgMCk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4rLypcbisgKiBNb3VudCBhIGZ1c2UgZnMgYmFja2VkIGJ5IGEgZm9ya2VkIHNlcnZlciwgaXNzdWUgc3luY2ZzKCksIGFuZCByZXBvcnRcbisgKiB3aGV0aGVyIHRoZSBzZXJ2ZXIgb2JzZXJ2ZWQgRlVTRV9TWU5DRlMuICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgaWYgdGhlXG4rICogZW52aXJvbm1lbnQgY291bGQgbm90IHN1cHBvcnQgdGhlIHRlc3QgKGNhbGxlciBzaG91bGQgc2tpcCkuXG4rICpcbisgKiBJZiBAdW5wcml2X29wZW4gaXMgc2V0LCAvZGV2L2Z1c2UgaXMgb3BlbmVkIHdpdGggQ0FQX1NZU19BRE1JTiBkcm9wcGVkXG4rICogKHJlZ2FpbmVkIG9ubHkgZm9yIHRoZSBtb3VudCgpIHN5c2NhbGwpLCBzbyB0aGUgZGV2aWNlIG9wZW5lciAtLSB0aGVcbisgKiBzZXJ2ZXIgcHJpbmNpcGFsIEZVU0VfSEFTX1NZTkNGUyBpcyBnYXRlZCBvbiAtLSBsYWNrcyB0aGUgcHJpdmlsZWdlIGV2ZW5cbisgKiB0aG91Z2ggaXQgcmVtYWlucyBpbiB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZS5cbisgKi9cbitzdGF0aWMgaW50IGRvX21vdW50X2FuZF9zeW5jZnMoY29uc3QgY2hhciAqbW50LCBpbnQgYWR2ZXJ0aXNlLCBpbnQgdW5wcml2X29wZW4sXG4rXHRcdFx0ICAgICAgIGludCAqc2Vlbilcbit7XG4rXHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHsgLmV2ZW50cyA9IFBPTExJTiB9O1xuK1x0Y2hhciBvcHRzWzI1Nl07XG4rXHRpbnQgZmQsIG1mZCA9IC0xLCBpO1xuK1x0cGlkX3QgcGlkO1xuK1xuK1x0c3luY2ZzX2V2ZmQgPSBldmVudGZkKDAsIEVGRF9DTE9FWEVDKTtcbitcdGlmIChzeW5jZnNfZXZmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0aWYgKHVucHJpdl9vcGVuIFx1MDAyNlx1MDAyNiBzZXRfc3lzYWRtaW4oMCkpXG4rXHRcdGdvdG8gb3V0X2V2ZmQ7XG4rXHRmZCA9IG9wZW4oXCIvZGV2L2Z1c2VcIiwgT19SRFdSKTtcbitcdGlmICh1bnByaXZfb3BlbiBcdTAwMjZcdTAwMjYgc2V0X3N5c2FkbWluKDEpKSB7XG4rXHRcdGlmIChmZCBcdTAwM2U9IDApXG4rXHRcdFx0Y2xvc2UoZmQpO1xuK1x0XHRnb3RvIG91dF9ldmZkO1xuK1x0fVxuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dF9ldmZkO1xuK1xuK1x0bWtkaXIobW50LCAwNzU1KTtcbitcdHNucHJpbnRmKG9wdHMsIHNpemVvZihvcHRzKSxcbitcdFx0IFwiZmQ9JWQscm9vdG1vZGU9NDAwMDAsdXNlcl9pZD0lZCxncm91cF9pZD0lZFwiLFxuK1x0XHQgZmQsIGdldHVpZCgpLCBnZXRnaWQoKSk7XG4rXG4rXHRpZiAobW91bnQoXCJmdXNlXCIsIG1udCwgXCJmdXNlXCIsIDAsIG9wdHMpIFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dF9mZDtcbitcbitcdHBpZCA9IGZvcmsoKTtcbitcdGlmIChwaWQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0X3Vtb3VudDtcbitcdGlmIChwaWQgPT0gMCkge1xuK1x0XHRydW5fc2VydmVyKGZkLCBhZHZlcnRpc2UpO1xuK1x0XHRfZXhpdCgwKTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGUgcGFyZW50IGRvZXMgbm90IHNlcnZpY2UgdGhlIGZ1c2UgZmQ7IHRoZSBjaGlsZCBkb2VzLiAgQ2xvc2Ugb3VyXG4rXHQgKiBjb3B5IHNvIHRoZSBrZXJuZWwgc2VlcyBhIHNpbmdsZSBzZXJ2ZXIsIGFuZCBzbyB0aGF0IGlmIHRoZSBjaGlsZFxuK1x0ICogZGllcyB0aGUgY29ubmVjdGlvbiBhYm9ydHMgaW5zdGVhZCBvZiBoYW5naW5nIHVzIGZvcmV2ZXIuXG4rXHQgKi9cbitcdGNsb3NlKGZkKTtcbitcbitcdC8qXG4rXHQgKiBtb3VudCgpIHJldHVybnMgYmVmb3JlIHRoZSBzZXJ2ZXIgaGFzIGFuc3dlcmVkIEZVU0VfSU5JVCwgc28gdGhlXG4rXHQgKiBmaXJzdCBvcGVuKCkgY2FuIHJhY2UgYW5kIGZhaWwgd2l0aCBFTk9UQ09OTjsgcmV0cnkgdW50aWwgdGhlXG4rXHQgKiBoYW5kc2hha2Ugc2V0dGxlcy5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMTAwMDsgaSsrKSB7XG4rXHRcdG1mZCA9IG9wZW4obW50LCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTtcbitcdFx0aWYgKG1mZCBcdTAwM2U9IDApXG4rXHRcdFx0YnJlYWs7XG4rXHRcdHVzbGVlcCgxMDAwKTtcbitcdH1cbitcdGlmIChtZmQgXHUwMDNlPSAwKSB7XG4rXHRcdHN5bmNmcyhtZmQpO1xuK1x0XHRjbG9zZShtZmQpO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIE5vIHdhaXRpbmcgaXMgbmVlZGVkOiB0aGUgc2VydmVyIHdyaXRlcyBzeW5jZnNfZXZmZCBiZWZvcmUgaXQgcmVwbGllc1xuK1x0ICogdG8gRlVTRV9TWU5DRlMsIGFuZCB0aGF0IHJlcGx5IGlzIHdoYXQgdW5ibG9ja3MgdGhlIHN5bmNocm9ub3VzXG4rXHQgKiBzeW5jZnMoKSBhYm92ZS4gIFNvIG9uY2Ugc3luY2ZzKCkgaGFzIHJldHVybmVkLCB0aGUgZXZlbnRmZCBpcyBhbHJlYWR5XG4rXHQgKiBzaWduYWxsZWQgaWYgdGhlIG9wY29kZSB3YXMgcHJvcGFnYXRlZCwgYW5kIHdpbGwgbmV2ZXIgYmUgb3RoZXJ3aXNlLlxuK1x0ICogcG9sbCgpIHdpdGggYSB6ZXJvIHRpbWVvdXQgdGhlcmVmb3JlIGRlY2lkZXMgYm90aCBjYXNlcyBpbW1lZGlhdGVseS5cbitcdCAqL1xuK1x0cGZkLmZkID0gc3luY2ZzX2V2ZmQ7XG4rXHQqc2VlbiA9IHBvbGwoXHUwMDI2cGZkLCAxLCAwKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgKHBmZC5yZXZlbnRzIFx1MDAyNiBQT0xMSU4pO1xuK1xuK1x0a2lsbChwaWQsIFNJR0tJTEwpO1xuK1x0d2FpdHBpZChwaWQsIE5VTEwsIDApO1xuK1x0dW1vdW50MihtbnQsIE1OVF9ERVRBQ0gpO1xuK1x0Y2xvc2Uoc3luY2ZzX2V2ZmQpO1xuK1x0cmV0dXJuIDA7XG4rXG4rb3V0X3Vtb3VudDpcbitcdHVtb3VudDIobW50LCBNTlRfREVUQUNIKTtcbitvdXRfZmQ6XG4rXHRjbG9zZShmZCk7XG4rb3V0X2V2ZmQ6XG4rXHRjbG9zZShzeW5jZnNfZXZmZCk7XG4rXHRyZXR1cm4gLTE7XG4rfVxuK1xuKy8qIFQ0OiBzYW1lIGFzIGFib3ZlIGJ1dCB0aGUgbW91bnQgaXMgY3JlYXRlZCBpbnNpZGUgYSBuZXcgdXNlciBuYW1lc3BhY2UuICovXG4rc3RhdGljIGludCBydW5faW5fdXNlcm5zKGNvbnN0IGNoYXIgKm1udCwgaW50IGFkdmVydGlzZSwgaW50ICpzZWVuKVxuK3tcbitcdHVpZF90IHVpZCA9IGdldHVpZCgpO1xuK1x0Z2lkX3QgZ2lkID0gZ2V0Z2lkKCk7XG4rXHRjaGFyIG1hcFs2NF07XG4rXHRpbnQgZjtcbitcbitcdGlmICh1bnNoYXJlKENMT05FX05FV1VTRVIgfCBDTE9ORV9ORVdOUykgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcdC8qIHVucHJpdmlsZWdlZCB1c2VybnMgbW91bnRzIHVuYXZhaWxhYmxlICovXG4rXG4rXHRmID0gb3BlbihcIi9wcm9jL3NlbGYvc2V0Z3JvdXBzXCIsIE9fV1JPTkxZKTtcbitcdGlmIChmIFx1MDAzZT0gMCkge1xuK1x0XHRkcHJpbnRmKGYsIFwiZGVueVwiKTtcbitcdFx0Y2xvc2UoZik7XG4rXHR9XG4rXHRzbnByaW50ZihtYXAsIHNpemVvZihtYXApLCBcIjAgJWQgMVwiLCB1aWQpO1xuK1x0ZiA9IG9wZW4oXCIvcHJvYy9zZWxmL3VpZF9tYXBcIiwgT19XUk9OTFkpO1xuK1x0aWYgKGYgXHUwMDNjIDAgfHwgZHByaW50ZihmLCBcIiVzXCIsIG1hcCkgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcdGNsb3NlKGYpO1xuK1x0c25wcmludGYobWFwLCBzaXplb2YobWFwKSwgXCIwICVkIDFcIiwgZ2lkKTtcbitcdGYgPSBvcGVuKFwiL3Byb2Mvc2VsZi9naWRfbWFwXCIsIE9fV1JPTkxZKTtcbitcdGlmIChmIFx1MDAzYyAwIHx8IGRwcmludGYoZiwgXCIlc1wiLCBtYXApIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRjbG9zZShmKTtcbitcbitcdC8qIE5lZWQgYSBtb3VudCBuYW1lc3BhY2Ugd2hlcmUgd2UgY2FuIG1vdW50IGZ1c2UgdW5wcml2aWxlZ2VkLiAqL1xuK1x0aWYgKG1vdW50KE5VTEwsIFwiL1wiLCBOVUxMLCBNU19SRUMgfCBNU19QUklWQVRFLCBOVUxMKSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIGRvX21vdW50X2FuZF9zeW5jZnMobW50LCBhZHZlcnRpc2UsIDAsIHNlZW4pO1xuK31cbitcbitpbnQgbWFpbih2b2lkKVxuK3tcbitcdGNoYXIgbW50W10gPSBcIi90bXAvZnVzZV9zeW5jZnNfWFhYWFhYXCI7XG4rXHRpbnQgc2VlbiwgcmV0O1xuK1xuK1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbitcdGtzZnRfc2V0X3BsYW4oNCk7XG4rXG4rXHQvKiBIYXJkIHdhdGNoZG9nOiBuZXZlciBsZXQgYSBzdHVjayBzeW5jZnMgaGFuZyB0aGUgdGVzdCBydW5uZXIuICovXG4rXHRzaWduYWwoU0lHQUxSTSwgU0lHX0RGTCk7XG4rXHRhbGFybSg2MCk7XG4rXG4rXHRpZiAoZ2V0ZXVpZCgpICE9IDApXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwidGVzdCByZXF1aXJlcyByb290IHRvIG1vdW50IGZ1c2VcXG5cIik7XG4rXG4rXHRpZiAoIW1rZHRlbXAobW50KSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwibWtkdGVtcCBmYWlsZWRcXG5cIik7XG4rXG4rXHQvKiBUMTogaG9zdC1yb290IG1vdW50LCBzZXJ2ZXIgb3B0cyBpbiAtXHUwMDNlIHN5bmNmcyBtdXN0IHJlYWNoIHNlcnZlci4gKi9cbitcdHJldCA9IGRvX21vdW50X2FuZF9zeW5jZnMobW50LCAxLCAwLCBcdTAwMjZzZWVuKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIlQxOiBjb3VsZCBub3QgbW91bnQgZnVzZVxcblwiKTtcbitcdGVsc2VcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdChzZWVuLFxuK1x0XHRcdFx0IFwiVDEgaG9zdC1yb290ICsgRlVTRV9IQVNfU1lOQ0ZTOiBzZXJ2ZXIgcmVjZWl2ZXMgRlVTRV9TWU5DRlNcXG5cIik7XG4rXG4rXHQvKiBUMjogaG9zdC1yb290IG1vdW50LCBzZXJ2ZXIgZG9lcyBOT1Qgb3B0IGluIC1cdTAwM2Ugbm8gRlVTRV9TWU5DRlMuICovXG4rXHRyZXQgPSBkb19tb3VudF9hbmRfc3luY2ZzKG1udCwgMCwgMCwgXHUwMDI2c2Vlbik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCJUMjogY291bGQgbm90IG1vdW50IGZ1c2VcXG5cIik7XG4rXHRlbHNlXG4rXHRcdGtzZnRfdGVzdF9yZXN1bHQoIXNlZW4sXG4rXHRcdFx0XHQgXCJUMiBob3N0LXJvb3QsIG5vIG9wdC1pbjogc2VydmVyIGRvZXMgTk9UIHJlY2VpdmUgRlVTRV9TWU5DRlNcXG5cIik7XG4rXG4rXHQvKlxuK1x0ICogVDM6IHNlcnZlciBvcHRzIGluIGJ1dCBvcGVuZWQgL2Rldi9mdXNlIHdpdGhvdXQgQ0FQX1NZU19BRE1JTiB3aGlsZVxuK1x0ICogc3RpbGwgaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgLVx1MDAzZSBrZXJuZWwgbXVzdCB3aXRoaG9sZFxuK1x0ICogRlVTRV9TWU5DRlMuICBUaGlzIGlzIHRoZSBjYXNlIHRoYXQgZGlzdGluZ3Vpc2hlcyBnYXRpbmcgb24gdGhlXG4rXHQgKiBzZXJ2ZXIncyBwcml2aWxlZ2UgZnJvbSBnYXRpbmcgb24gdGhlIG1vdW50J3MgdXNlciBuYW1lc3BhY2UuXG4rXHQgKi9cbitcdHJldCA9IGRvX21vdW50X2FuZF9zeW5jZnMobW50LCAxLCAxLCBcdTAwMjZzZWVuKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIlQzOiBjb3VsZCBub3QgbW91bnQgZnVzZSB1bnByaXZpbGVnZWRcXG5cIik7XG4rXHRlbHNlXG4rXHRcdGtzZnRfdGVzdF9yZXN1bHQoIXNlZW4sXG4rXHRcdFx0XHQgXCJUMyBpbml0X3VzZXJucywgb3BlbmVyIGxhY2tzIENBUF9TWVNfQURNSU46IEZVU0VfU1lOQ0ZTIHdpdGhoZWxkXFxuXCIpO1xuK1xuK1x0LypcbitcdCAqIFQ0OiB1bnByaXZpbGVnZWQgdXNlcm5zIG1vdW50LCBzZXJ2ZXIgb3B0cyBpbiAtXHUwMDNlIGtlcm5lbCBtdXN0IHN0aWxsXG4rXHQgKiB3aXRoaG9sZCBGVVNFX1NZTkNGUy4gIFJ1biBpbiBhIGNoaWxkIHNpbmNlIGl0IHVuc2hhcmVzIG5hbWVzcGFjZXMuXG4rXHQgKi9cbitcdHtcbitcdFx0cGlkX3QgcCA9IGZvcmsoKTtcbitcbitcdFx0aWYgKHAgPT0gMCkge1xuK1x0XHRcdGludCBzID0gMDtcbitcdFx0XHRpbnQgciA9IHJ1bl9pbl91c2VybnMobW50LCAxLCBcdTAwMjZzKTtcbitcbitcdFx0XHRfZXhpdChyIFx1MDAzYyAwID8gMiA6IChzID8gMSA6IDApKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRpbnQgc3RhdHVzO1xuK1xuK1x0XHRcdHdhaXRwaWQocCwgXHUwMDI2c3RhdHVzLCAwKTtcbitcdFx0XHRpZiAoIVdJRkVYSVRFRChzdGF0dXMpKVxuK1x0XHRcdFx0a3NmdF90ZXN0X3Jlc3VsdF9lcnJvcihcIlQ0OiBjaGlsZCBjcmFzaGVkXFxuXCIpO1xuK1x0XHRcdGVsc2UgaWYgKFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMilcbitcdFx0XHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIlQ0OiB1c2VybnMgZnVzZSBtb3VudCB1bmF2YWlsYWJsZVxcblwiKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0KFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMCxcbitcdFx0XHRcdFx0XHQgXCJUNCB1bnByaXYgdXNlcm5zICsgb3B0LWluOiBGVVNFX1NZTkNGUyB3aXRoaGVsZFxcblwiKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cm1kaXIobW50KTtcbitcdGtzZnRfZmluaXNoZWQoKTtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNzozMzowNy45MjA3NTMwNzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjAxMTk2ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBGVVNFIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgYEZVU0VfSEFTX1NZTkNGU2AgZmxhZyB3aXRoaW4gdGhlIEZVU0UgZmlsZXN5c3RlbS4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSwgbW9kaWZ5aW5nIGEgZmV3IGtleSBmaWxlczogYGZzL2Z1c2UvZnVzZV9pLmhgLCBgZnMvZnVzZS9pbm9kZS5jYCwgYGluY2x1ZGUvdWFwaS9saW51eC9mdXNlLmhgLCBhbmQsIGltcG9ydGFudGx5LCBhZGRpbmcgYSBuZXcgc2VsZnRlc3QuIFRoYXQncyBhIGdvb2Qgc2lnbiDigJMgd2UgbmVlZCByb2J1c3QgdGVzdGluZyBmb3IgdGhpcyBraW5kIG9mIGNoYW5nZS5cblxuVGhlIHBhdGNoJ3MgY29yZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBhZGRpbmcgYSBgc3luY2ZzX2NhcGFibGVgIGJpdCB0byB0aGUgYGZ1c2VfZnNfY29udGV4dGAgYW5kIGBmdXNlX2Nvbm5gIHN0cnVjdHVyZXMuIFRoaXMgY2FwYWJpbGl0eSBjaGVjayBpcyBkb25lIGluIGBmdXNlX29wdF9mZGAsIHdoZXJlIGl0IHZlcmlmaWVzIGlmIHRoZSBzZXJ2ZXIgaGFzIG9wZW5lZCBgL2Rldi9mdXNlYCB3aXRoIHRoZSBgQ0FQX1NZU19BRE1JTmAgY2FwYWJpbGl0eSB3aXRoaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UuIFRoYXQgbWFrZXMgc2Vuc2UsIGNvbnRyb2xsaW5nIHN5bmMgb3BlcmF0aW9ucyByZXF1aXJlcyBhIGxldmVsIG9mIHByaXZpbGVnZS4gYGZ1c2Vfc3luY2ZzX2VuYWJsZWAgdGhlbiBjaGVja3MgdGhlIGBGVVNFX0hBU19TWU5DRlNgIGZsYWcgYWxvbmcgd2l0aCB0aGUgYHN5bmNmc19jYXBhYmxlYCBmbGFnIGJlZm9yZSBlbmFibGluZyB0aGUgc3luYyBvcGVyYXRpb24uIEZ1cnRoZXJtb3JlLCB0aGUgYEZVU0VfSEFTX1NZTkNGU2AgZmxhZyBpcyBzZXQgZHVyaW5nIHRoZSBgZnVzZV9uZXdfaW5pdGAgZnVuY3Rpb24uXG5cbkVzc2VudGlhbGx5LCB0aGlzIGFkZHMgZnVuY3Rpb25hbCBsb2dpYyBmb3IgYHN5bmNmc2AgcHJvcGFnYXRpb24sIHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBGVVNFIG1vdW50cy4gU2luY2UgaXQncyB1c2VyLWZhY2luZywgZnV6emluZyB3aWxsIGJlICpjcnVjaWFsKiB0byBlbnN1cmUgaXRzIHN0YWJpbGl0eSBhbmQgc2VjdXJpdHkuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlIGtleSBzeW1ib2xzIHRoaXMgcGF0Y2ggYWZmZWN0cy4gSSd2ZSBub3RlZCB0aGF0IGBGVVNFX0ZTYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgYGZ1c2Vfb3B0X2ZkYCwgYGZ1c2Vfc3luY2ZzX2VuYWJsZWAsIGBwcm9jZXNzX2luaXRfcmVwbHlgLCBgZnVzZV9uZXdfaW5pdGAsIGFuZCBgZnVzZV9maWxsX3N1cGVyX2NvbW1vbmAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoZSBuZXcgbG9naWMgaXMgaW50cm9kdWNlZCwgYW5kIHRoZXJlZm9yZSB3aGVyZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG1pZ2h0IHJlc2lkZS4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlc2UgY2FyZWZ1bGx5LlxuXG5JIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayBgZnMvZnVzZS9pbm9kZS5jYCBqdXN0IGluIGNhc2UgdGhlcmUgYXJlIG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBJIGhhdmVuJ3Qgc3BvdHRlZCB5ZXQuIEFuZCBmaW5hbGx5LCBJJ2xsIGxldmVyYWdlIHRoZSB0b29scyBhdCBteSBkaXNwb3NhbCB0byB2ZXJpZnkgdGhpcyBpbXBsZW1lbnRhdGlvbidzIGNvcnJlY3RuZXNzIGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIGNvbmNlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNzozMzoxNS4xMjE5NTI2ODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3NjY0OTIxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlVTRV9GU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xcbmZzL2Z1c2UvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTc6MzM6MTguMTk4NjA3NjgyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2MDY2MzA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgZnVzZS9pbm9kZS5jIGZvciBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGZzL2Z1c2UvaW5vZGUuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgRlVTRSBoYW5kbGVzIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBgZnVzZV9vcHRfZmRgIGFuZCBgZnVzZV9zeW5jZnNfZW5hYmxlYC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBmdXNlX29wdF9mZGAgaXMgY3JpdGljYWw7IGl0IGRlZmluZXMgdGhlIGZpbGUgZGVzY3JpcHRvciB1c2VkIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHVzZXJzcGFjZSBGVVNFIHByb2Nlc3MgYW5kIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyBpdCdzIGhhbmRsZWQsIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byBob3cgaXQncyBwYXNzZWQsIHZlcmlmaWVkLCBhbmQgdXNlZCwgZ2l2ZW4gdGhlIGNvbXBsZXhpdGllcyBvZiBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gd2l0aGluIHRoZSBGVVNFIGZyYW1ld29yay4gQSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGNvdWxkIGJlIGhlcmUuXG5cblRoZW4sIHRoZXJlJ3MgYGZ1c2Vfc3luY2ZzX2VuYWJsZWAuIFRoaXMgcmVsYXRlcyB0byBzeW5jaHJvbm91cyBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgaW1wbGljYXRpb25zIGlzIGNyaXRpY2FsIGZvciBjb3JyZWN0bHkgd29ya2luZyB3aXRoIEZVU0UuIEkgbmVlZCB0byBzZWUgaG93IGl0J3MgaW50ZWdyYXRlZCB3aXRoIHRoZSBtYWluIGlub2RlIG9wZXJhdGlvbnMgYW5kIGlmIGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZlYXR1cmVzLiBTeW5jaHJvbm91cyBvcGVyYXRpb25zIGFyZSBjcnVjaWFsIGZvciB0aGUgaW50ZWdyaXR5IG9mIG1hbnkgZmlsZSBzeXN0ZW1zLCBidXQgdGhleSBjYW4gYmUgYSBwZXJmb3JtYW5jZSBraWxsZXIgaWYgbm90IGltcGxlbWVudGVkIGNvcnJlY3RseS4gVGhpcyBwYXJ0IG1pZ2h0IGdpdmUgbWUgaW5zaWdodCBpbnRvIHBlcmZvcm1hbmNlIGlzc3VlcyBvciBkYXRhIGludGVncml0eSBndWFyYW50ZWVzLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzIHRoYXQgY291bGQgYXJpc2Ugd2hlbiBjb21iaW5pbmcgdGhpcyBmZWF0dXJlIHdpdGggb3RoZXIgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHJlbWluZCBteXNlbGYgb2YgdGhlIGRldGFpbHMuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHRlbGxzIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTMyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTc6MzM6MjEuODU5Mjc0MTg1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjkxNzU0ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnVzZV9vcHRfZmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnVzZS9pbm9kZS5jPTc3Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGZ1c2VfZnNfcGFyYW1ldGVyc1tdID0ge1xcbi0tXFxuZnMvZnVzZS9pbm9kZS5jLTc4OS1cXG5mcy9mdXNlL2lub2RlLmM6NzkwOnN0YXRpYyBpbnQgZnVzZV9vcHRfZmQoc3RydWN0IGZzX2NvbnRleHQgKmZzYywgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvZnVzZS9pbm9kZS5jLTc5MS17XFxuLS1cXG5mcy9mdXNlL2lub2RlLmM9ODE3PXN0YXRpYyBpbnQgZnVzZV9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZnNjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy04NTYtXFx0XFx0aWYgKHBhcmFtLVxcdTAwM2V0eXBlID09IGZzX3ZhbHVlX2lzX2ZpbGUpIHtcXG5mcy9mdXNlL2lub2RlLmM6ODU3OlxcdFxcdFxcdHJldHVybiBmdXNlX29wdF9mZChmc2MsIHBhcmFtLVxcdTAwM2VmaWxlKTtcXG5mcy9mdXNlL2lub2RlLmMtODU4LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5mcy9mdXNlL2lub2RlLmMtODYyLVxcbmZzL2Z1c2UvaW5vZGUuYzo4NjM6XFx0XFx0XFx0cmV0dXJuIGZ1c2Vfb3B0X2ZkKGZzYywgZmlsZSk7XFxuZnMvZnVzZS9pbm9kZS5jLTg2NC1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDE3OjMzOjIzLjk4ODQ1ODMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIzODc1MDI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSdtIHRoaW5raW5nIGl0OlxuXG4qKkNoZWNraW5nIGBmdXNlX3N5bmNmc19lbmFibGVgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIExldCdzIHNlZS4uLiB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGNvbmZpcm0gdGhlIHN0YXRlIG9mIGBmdXNlX3N5bmNmc19lbmFibGVgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgZm91bmRhdGlvbiBvZiB0aGlzIHdob2xlIGxpbmUgb2YgdGhpbmtpbmcuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBGVVNFIHN5bmMgZmlsZSBzeXN0ZW0gZnVuY3Rpb25hbGl0eSwgb3IgcmF0aGVyLCBpZiB3ZSBldmVuICphcmUqIGRlYWxpbmcgd2l0aCBpdC4gVW5kZXJzdGFuZGluZyB0aGUgc3RhdGUgb2YgdGhpcyB2YXJpYWJsZSBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBkZWVwZXIgYW5hbHlzaXMgaGVyZS4gSXQnbGwgc2hhcGUgdGhlIGNvbnRleHQgZm9yIGV2ZXJ5dGhpbmcgdGhhdCBmb2xsb3dzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzcwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTc6MzM6MjguMjI3MjExMDM5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjk2Njg2NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnVzZV9zeW5jZnNfZW5hYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Z1c2UvaW5vZGUuYz03OTA9c3RhdGljIGludCBmdXNlX29wdF9mZChzdHJ1Y3QgZnNfY29udGV4dCAqZnNjLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy04MDYtXFx0ICogb3IgZnVzZWJsayByZXF1aXJlcy4gIE9ubHkgc3VjaCBzZXJ2ZXJzIGFyZSB0cnVzdGVkIHRvIHJlY2VpdmVcXG5mcy9mdXNlL2lub2RlLmM6ODA3OlxcdCAqIEZVU0VfU1lOQ0ZTIChzZWUgZnVzZV9zeW5jZnNfZW5hYmxlKCkpLlxcbmZzL2Z1c2UvaW5vZGUuYy04MDgtXFx0ICovXFxuLS1cXG5mcy9mdXNlL2lub2RlLmM9MTI3MT1zdHJ1Y3QgZnVzZV9pbml0X2FyZ3Mge1xcbi0tXFxuZnMvZnVzZS9pbm9kZS5jLTEyODItICovXFxuZnMvZnVzZS9pbm9kZS5jOjEyODM6c3RhdGljIGJvb2wgZnVzZV9zeW5jZnNfZW5hYmxlKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCB1NjQgZmxhZ3MpXFxuZnMvZnVzZS9pbm9kZS5jLTEyODQte1xcbi0tXFxuZnMvZnVzZS9pbm9kZS5jPTEyODg9c3RhdGljIHZvaWQgcHJvY2Vzc19pbml0X3JlcGx5KHN0cnVjdCBmdXNlX2FyZ3MgKmFyZ3MsIGludCBlcnJvcilcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xNDI4LVxcbmZzL2Z1c2UvaW5vZGUuYzoxNDI5OlxcdFxcdFxcdGlmIChmdXNlX3N5bmNmc19lbmFibGUoZmMsIGZsYWdzKSlcXG5mcy9mdXNlL2lub2RlLmMtMTQzMC1cXHRcXHRcXHRcXHRmYy1cXHUwMDNlc3luY19mcyA9IDE7XFxuLS1cXG5mcy9mdXNlL2lub2RlLmM9MTQ2Mj1zdGF0aWMgc3RydWN0IGZ1c2VfaW5pdF9hcmdzICpmdXNlX25ld19pbml0KHN0cnVjdCBmdXNlX21vdW50ICpmbSlcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xNDk4LVxcdC8qIE9ubHkgb2ZmZXJlZCB0byBzdWZmaWNpZW50bHkgcHJpdmlsZWdlZCBzZXJ2ZXJzOyBzZWVcXG5mcy9mdXNlL2lub2RlLmM6MTQ5OTpcXHQgKiBmdXNlX3N5bmNmc19lbmFibGUoKS5cXG5mcy9mdXNlL2lub2RlLmMtMTUwMC1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTc6MzM6MzAuMzU2ODg1NTE0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk0ODE4NDk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEZVU0UgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgemVyb2luZyBpbiBvbiBzb21lIGNyaXRpY2FsIGFyZWFzIG9mIHRoZSBGVVNFIGZyYW1ld29yazogdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlIGFuZCB0aGUgcGFyc2luZyBvZiBwYXJhbWV0ZXJzLiBJIHNlZSBuZXcgZnVuY3Rpb25zIGFkZGVkLCBuYW1lbHkgYGZ1c2Vfc3luY2ZzX2VuYWJsZWAsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gc29tZSBvZiB0aGUgY29yZSBpbml0aWFsaXphdGlvbiByb3V0aW5lczogYGZ1c2Vfb3B0X2ZkYCwgYHByb2Nlc3NfaW5pdF9yZXBseWAsIGBmdXNlX25ld19pbml0YCwgYW5kIGBmdXNlX2ZpbGxfc3VwZXJfY29tbW9uYC4gR2l2ZW4gdGhlc2UgY2hhbmdlcywgYW5kIGtub3dpbmcgdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGlzc3VlcyBpbiBpbml0aWFsaXphdGlvbiBhbmQgb3B0aW9uIGhhbmRsaW5nLCB0aGUgdGhvdWdodCBpbW1lZGlhdGVseSBvY2N1cnM6IHRoaXMgaXMgc2NyZWFtaW5nIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIHRocm93IGV2ZXJ5dGhpbmcgd2UgY2FuIGF0IHRoaXMuXG5cbk15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzOiBmaXJzdCwgSSB3YW50IHRvIGNvbmZpcm0gdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gYXNzb2NpYXRlZCBpcyBgRlVTRV9GU2AuIEkga25vdyB3aGVyZSB0aGF0IHNpdHMgaW4gdGhlIGFyY2hpdGVjdHVyZSwgYnV0IGNvbmZpcm1pbmcgaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEJleW9uZCB0aGF0LCBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgdG8gbXlzZWxmIGFuZCBob25lIGluIG9uIHRob3NlIHNwZWNpZmljIHN5bWJvbHMuIGBmdXNlX29wdF9mZGAsIGBmdXNlX3N5bmNmc19lbmFibGVgLCBgcHJvY2Vzc19pbml0X3JlcGx5YCwgYGZ1c2VfbmV3X2luaXRgLCBhbmQgYGZ1c2VfZmlsbF9zdXBlcl9jb21tb25gIGFyZSBteSBwcmltYXJ5IHRhcmdldHMsIGFuZCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciB1cGRhdGVkIGxvZ2ljIHZlcnkgcHJlY2lzZWx5LlxuXG5CZWZvcmUgSSBjb21taXQgdG8gZGVlcCBkaXZpbmcgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEknbGwgdGFrZSBhIHF1aWNrIHNjYW4gZm9yIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1heSBiZSByZWxldmFudCwgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGludGVyYWN0IHdpdGggYEZVU0VfRlNgLiBDb3VsZCBiZSBjcnVjaWFsIGZvciBlZGdlIGNhc2UgdGVzdGluZy4gSXQncyB0aW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTc6MzM6MzguMzA1MDczMjA2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM5NDQzMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkZVU0VfUEFTU1RIUk9VR0hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlL2Z1c2UtcGFzc3Rocm91Z2gucnN0PTMxPVRvIHVzZSBGVVNFIHBhc3N0aHJvdWdoOlxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS9mdXNlLXBhc3N0aHJvdWdoLnJzdC0zMi1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZS1wYXNzdGhyb3VnaC5yc3Q6MzM6ICAxLiBUaGUgRlVTRSBmaWxlc3lzdGVtIG11c3QgYmUgY29tcGlsZWQgd2l0aCBgYENPTkZJR19GVVNFX1BBU1NUSFJPVUdIYGBcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZS1wYXNzdGhyb3VnaC5yc3QtMzQtICAgICBlbmFibGVkLlxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS9mdXNlLXBhc3N0aHJvdWdoLnJzdC0zNS0gIDIuIFRoZSBGVVNFIGRhZW1vbiwgZHVyaW5nIHRoZSBgYEZVU0VfSU5JVGBgIGhhbmRzaGFrZSwgbXVzdCBuZWdvdGlhdGUgdGhlXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlL2Z1c2UtcGFzc3Rocm91Z2gucnN0OjM2OiAgICAgYGBGVVNFX1BBU1NUSFJPVUdIYGAgY2FwYWJpbGl0eSBhbmQgc3BlY2lmeSBpdHMgZGVzaXJlZFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS9mdXNlLXBhc3N0aHJvdWdoLnJzdC0zNy0gICAgIGBgbWF4X3N0YWNrX2RlcHRoYGAuXFxuLS1cXG5mcy9mdXNlL0tjb25maWc9NDM9Y29uZmlnIEZVU0VfREFYXFxuLS1cXG5mcy9mdXNlL0tjb25maWctNTYtXFxuZnMvZnVzZS9LY29uZmlnOjU3OmNvbmZpZyBGVVNFX1BBU1NUSFJPVUdIXFxuZnMvZnVzZS9LY29uZmlnLTU4LVxcdGJvb2wgXFxcIkZVU0UgcGFzc3Rocm91Z2ggb3BlcmF0aW9ucyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZnVzZS9NYWtlZmlsZT0xNz1mdXNlLSQoQ09ORklHX0ZVU0VfREFYKSArPSBkYXgub1xcbmZzL2Z1c2UvTWFrZWZpbGU6MTg6ZnVzZS0kKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSArPSBwYXNzdGhyb3VnaC5vIGJhY2tpbmcub1xcbmZzL2Z1c2UvTWFrZWZpbGUtMTktZnVzZS0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bC5vXFxuLS1cXG5mcy9mdXNlL2Rldi5jPTIyOTg9c3RhdGljIGxvbmcgZnVzZV9kZXZfaW9jdGxfYmFja2luZ19vcGVuKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvZnVzZS9kZXYuYy0yMzA2LVxcbmZzL2Z1c2UvZGV2LmM6MjMwNzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpKVxcbmZzL2Z1c2UvZGV2LmMtMjMwOC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTIzMTY9c3RhdGljIGxvbmcgZnVzZV9kZXZfaW9jdGxfYmFja2luZ19jbG9zZShzdHJ1Y3QgZmlsZSAqZmlsZSwgX191MzIgX191c2VyICphcmdwKVxcbi0tXFxuZnMvZnVzZS9kZXYuYy0yMzIzLVxcbmZzL2Z1c2UvZGV2LmM6MjMyNDpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpKVxcbmZzL2Z1c2UvZGV2LmMtMjMyNS1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5mcy9mdXNlL2Z1c2VfaS5oPTEwMj1zdHJ1Y3QgZnVzZV9pbm9kZSB7XFxuLS1cXG5mcy9mdXNlL2Z1c2VfaS5oLTIyOC1cXHRzdHJ1Y3QgZnVzZV9zdWJtb3VudF9sb29rdXAgKnN1Ym1vdW50X2xvb2t1cDtcXG5mcy9mdXNlL2Z1c2VfaS5oOjIyOTojaWZkZWYgQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0hcXG5mcy9mdXNlL2Z1c2VfaS5oLTIzMC1cXHQvKiogQGZiOiBSZWZlcmVuY2UgdG8gYmFja2luZyBmaWxlIGluIHBhc3N0aHJvdWdoIG1vZGUgKi9cXG4tLVxcbmZzL2Z1c2UvZnVzZV9pLmg9MjY5PXN0cnVjdCBmdXNlX2ZpbGUge1xcbi0tXFxuZnMvZnVzZS9mdXNlX2kuaC0zMTUtXFxuZnMvZnVzZS9mdXNlX2kuaDozMTY6I2lmZGVmIENPTkZJR19GVVNFX1BBU1NUSFJPVUdIXFxuZnMvZnVzZS9mdXNlX2kuaC0zMTctXFx0LyoqIEBwYXNzdGhyb3VnaDogUmVmZXJlbmNlIHRvIGJhY2tpbmcgZmlsZSBpbiBwYXNzdGhyb3VnaCBtb2RlICovXFxuLS1cXG5mcy9mdXNlL2Z1c2VfaS5oPTQxOD1zdHJ1Y3QgZnVzZV9jb25uIHtcXG4tLVxcbmZzL2Z1c2UvZnVzZV9pLmgtNzY5LVxcbmZzL2Z1c2UvZnVzZV9pLmg6NzcwOiNpZmRlZiBDT05GSUdfRlVTRV9QQVNTVEhST1VHSFxcbmZzL2Z1c2UvZnVzZV9pLmgtNzcxLVxcdC8qKiBAYmFja2luZ19maWxlc19tYXA6IElEUiBmb3IgYmFja2luZyBmaWxlcyBpZHMgKi9cXG4tLVxcbmZzL2Z1c2UvZnVzZV9pLmg9MTI2Mz12b2lkIGZ1c2VfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmdXNlX2ZpbGUgKmZmLFxcbi0tXFxuZnMvZnVzZS9mdXNlX2kuaC0xMjY2LS8qIGJhY2tpbmcuYyAqL1xcbmZzL2Z1c2UvZnVzZV9pLmg6MTI2NzojaWZkZWYgQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0hcXG5mcy9mdXNlL2Z1c2VfaS5oLTEyNjgtc3RydWN0IGZ1c2VfYmFja2luZyAqZnVzZV9iYWNraW5nX2dldChzdHJ1Y3QgZnVzZV9iYWNraW5nICpmYik7XFxuLS1cXG5mcy9mdXNlL2Z1c2VfaS5oPTEyOTI9c3RhdGljIGlubGluZSBzdHJ1Y3QgZnVzZV9iYWNraW5nICpmdXNlX2lub2RlX2JhY2tpbmcoc3RydWN0IGZ1c2VfaW5vZGUgKmZpKVxcbmZzL2Z1c2UvZnVzZV9pLmgtMTI5My17XFxuZnMvZnVzZS9mdXNlX2kuaDoxMjk0OiNpZmRlZiBDT05GSUdfRlVTRV9QQVNTVEhST1VHSFxcbmZzL2Z1c2UvZnVzZV9pLmgtMTI5NS1cXHRyZXR1cm4gUkVBRF9PTkNFKGZpLVxcdTAwM2VmYik7XFxuLS1cXG5mcy9mdXNlL2Z1c2VfaS5oPTEzMDE9c3RhdGljIGlubGluZSBzdHJ1Y3QgZnVzZV9iYWNraW5nICpmdXNlX2lub2RlX2JhY2tpbmdfc2V0KHN0cnVjdCBmdXNlX2lub2RlICpmaSxcXG4tLVxcbmZzL2Z1c2UvZnVzZV9pLmgtMTMwMy17XFxuZnMvZnVzZS9mdXNlX2kuaDoxMzA0OiNpZmRlZiBDT05GSUdfRlVTRV9QQVNTVEhST1VHSFxcbmZzL2Z1c2UvZnVzZV9pLmgtMTMwNS1cXHRyZXR1cm4geGNoZyhcXHUwMDI2ZmktXFx1MDAzZWZiLCBmYik7XFxuLS1cXG5mcy9mdXNlL2Z1c2VfaS5oPTEzMTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgZmlsZSAqZnVzZV9maWxlX3Bhc3N0aHJvdWdoKHN0cnVjdCBmdXNlX2ZpbGUgKmZmKVxcbmZzL2Z1c2UvZnVzZV9pLmgtMTMxNS17XFxuZnMvZnVzZS9mdXNlX2kuaDoxMzE2OiNpZmRlZiBDT05GSUdfRlVTRV9QQVNTVEhST1VHSFxcbmZzL2Z1c2UvZnVzZV9pLmgtMTMxNy1cXHRyZXR1cm4gZmYtXFx1MDAzZXBhc3N0aHJvdWdoO1xcbi0tXFxuZnMvZnVzZS9pbm9kZS5jPTg0PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmZ1c2VfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xMDUtXFxuZnMvZnVzZS9pbm9kZS5jOjEwNjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkpXFxuZnMvZnVzZS9pbm9kZS5jLTEwNy1cXHRcXHRmdXNlX2lub2RlX2JhY2tpbmdfc2V0KGZpLCBOVUxMKTtcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYz0xMTg9c3RhdGljIHZvaWQgZnVzZV9mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9mdXNlL2lub2RlLmMtMTI2LSNlbmRpZlxcbmZzL2Z1c2UvaW5vZGUuYzoxMjc6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpKVxcbmZzL2Z1c2UvaW5vZGUuYy0xMjgtXFx0XFx0ZnVzZV9iYWNraW5nX3B1dChmdXNlX2lub2RlX2JhY2tpbmcoZmkpKTtcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYz05NjU9dm9pZCBmdXNlX2Nvbm5faW5pdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfbW91bnQgKmZtLFxcbi0tXFxuZnMvZnVzZS9pbm9kZS5jLTk4Ni1cXG5mcy9mdXNlL2lub2RlLmM6OTg3OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSlcXG5mcy9mdXNlL2lub2RlLmMtOTg4LVxcdFxcdGZ1c2VfYmFja2luZ19maWxlc19pbml0KGZjKTtcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYz0xMDA5PXZvaWQgZnVzZV9jb25uX3B1dChzdHJ1Y3QgZnVzZV9jb25uICpmYylcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xMDI1LVxcdH1cXG5mcy9mdXNlL2lub2RlLmM6MTAyNjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkpXFxuZnMvZnVzZS9pbm9kZS5jLTEwMjctXFx0XFx0ZnVzZV9iYWNraW5nX2ZpbGVzX2ZyZWUoZmMpO1xcbi0tXFxuZnMvZnVzZS9pbm9kZS5jPTEyODg9c3RhdGljIHZvaWQgcHJvY2Vzc19pbml0X3JlcGx5KHN0cnVjdCBmdXNlX2FyZ3MgKmFyZ3MsIGludCBlcnJvcilcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xNDAxLVxcdFxcdFxcdCAqXFxuZnMvZnVzZS9pbm9kZS5jOjE0MDI6XFx0XFx0XFx0ICogQWxzbyBkb24ndCBhbGxvdyB0aGUgY29tYmluYXRpb24gb2YgRlVTRV9QQVNTVEhST1VHSFxcbmZzL2Z1c2UvaW5vZGUuYy0xNDAzLVxcdFxcdFxcdCAqIGFuZCBGVVNFX1dSSVRFQkFDS19DQUNIRSwgY3VycmVudCBkZXNpZ24gZG9lc24ndCBoYW5kbGVcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xNDA1LVxcdFxcdFxcdCAqL1xcbmZzL2Z1c2UvaW5vZGUuYzoxNDA2OlxcdFxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19GVVNFX1BBU1NUSFJPVUdIKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2Z1c2UvaW5vZGUuYzoxNDA3OlxcdFxcdFxcdCAgICAoZmxhZ3MgXFx1MDAyNiBGVVNFX1BBU1NUSFJPVUdIKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2Z1c2UvaW5vZGUuYy0xNDA4LVxcdFxcdFxcdCAgICBhcmctXFx1MDAzZW1heF9zdGFja19kZXB0aCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYz0xNDYyPXN0YXRpYyBzdHJ1Y3QgZnVzZV9pbml0X2FyZ3MgKmZ1c2VfbmV3X2luaXQoc3RydWN0IGZ1c2VfbW91bnQgKmZtKVxcbi0tXFxuZnMvZnVzZS9pbm9kZS5jLTE0OTUtXFx0XFx0ZmxhZ3MgfD0gRlVTRV9TVUJNT1VOVFM7XFxuZnMvZnVzZS9pbm9kZS5jOjE0OTY6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpKVxcbmZzL2Z1c2UvaW5vZGUuYzoxNDk3OlxcdFxcdGZsYWdzIHw9IEZVU0VfUEFTU1RIUk9VR0g7XFxuZnMvZnVzZS9pbm9kZS5jLTE0OTgtXFx0LyogT25seSBvZmZlcmVkIHRvIHN1ZmZpY2llbnRseSBwcml2aWxlZ2VkIHNlcnZlcnM7IHNlZVxcbi0tXFxuZnMvZnVzZS9pb21vZGUuYz0xNjg9c3RhdGljIGludCBmdXNlX2ZpbGVfcGFzc3Rocm91Z2hfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL2Z1c2UvaW9tb2RlLmMtMTc1LVxcdC8qIENoZWNrIGFsbG93ZWQgY29uZGl0aW9ucyBmb3IgZmlsZSBvcGVuIGluIHBhc3N0aHJvdWdoIG1vZGUgKi9cXG5mcy9mdXNlL2lvbW9kZS5jOjE3NjpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpIHx8ICFmYy1cXHUwMDNlcGFzc3Rocm91Z2ggfHxcXG5mcy9mdXNlL2lvbW9kZS5jLTE3Ny1cXHQgICAgKGZmLVxcdTAwM2VvcGVuX2ZsYWdzIFxcdTAwMjYgfkZPUEVOX1BBU1NUSFJPVUdIX01BU0spKVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaC0yMTUtICogIDcuNDBcXG5pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oOjIxNjogKiAgLSBhZGQgbWF4X3N0YWNrX2RlcHRoIHRvIGZ1c2VfaW5pdF9vdXQsIGFkZCBGVVNFX1BBU1NUSFJPVUdIIGluaXQgZmxhZ1xcbmluY2x1ZGUvdWFwaS9saW51eC9mdXNlLmgtMjE3LSAqICAtIGFkZCBiYWNraW5nX2lkIHRvIGZ1c2Vfb3Blbl9vdXQsIGFkZCBGT1BFTl9QQVNTVEhST1VHSCBvcGVuIGZsYWdcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9mdXNlLmg9MzU1PXN0cnVjdCBmdXNlX2ZpbGVfbG9jayB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oLTQ5OC0jZGVmaW5lIEZVU0VfRElSRUNUX0lPX0FMTE9XX01NQVAgKDFVTEwgXFx1MDAzY1xcdTAwM2MgMzYpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaDo0OTk6I2RlZmluZSBGVVNFX1BBU1NUSFJPVUdIXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgMzcpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2Z1c2UuaC01MDAtI2RlZmluZSBGVVNFX05PX0VYUE9SVF9TVVBQT1JUXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgMzgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnZtPTU9Q09ORklHX0ZVU0VfRlM9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcudm06NjpDT05GSUdfRlVTRV9QQVNTVEhST1VHSD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy52bS03LUNPTkZJR19ORVRfOVBfVklSVElPPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMTc6MzM6NDAuNDQ0NTI0NzcxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MTI3MjE5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGVVNFIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCB0aGFua2Z1bGx5LiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCBkb2Vzbid0ICpyZWx5KiBvbiBgQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0hgLCB0aG91Z2ggaXQncyBwbGFjZWQgaW4gdGhlIHNhbWUgZmlsZS4gQWxsIGl0IHNlZW1zIHRvIGRvIGlzIGludHJvZHVjZSBgRlVTRV9IQVNfU1lOQ0ZTYC4gVGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgaXMgYEZVU0VfRlNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSdsbCBqdXN0IGRvdWJsZS1jaGVjayB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgYXJlbid0IGFueSBvdGhlciBjb25maWcgZGVwZW5kZW5jaWVzIGx1cmtpbmcuXG5cbkFscmlnaHQsIGEgcXVpY2sgc2NhbiBvZiB0aGUgdG91Y2hlZCBmaWxlcywgYGZzL2Z1c2UvZnVzZV9pLmhgLCBgZnMvZnVzZS9pbm9kZS5jYCwgYW5kIGBpbmNsdWRlL3VhcGkvbGludXgvZnVzZS5oYCwgY29uZmlybXMgdGhhdCBgRlVTRV9GU2AgaXMgaW5kZWVkIHRoZSAqb25seSogcmVxdWlyZWQgY29uZmlnLiBUaGF0J3MgYSByZWxpZWY7IHNpbXBsZXIgaXMgYWx3YXlzIGJldHRlci5cblxuTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gdGhlIGtleSBzeW1ib2xzIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcy4gSSd2ZSBnb3QgbXkgZm9jdXMgbmFycm93ZWQgZG93biB0bzogYGZ1c2Vfb3B0X2ZkYCwgYGZ1c2Vfc3luY2ZzX2VuYWJsZWAsIGBwcm9jZXNzX2luaXRfcmVwbHlgLCBgZnVzZV9uZXdfaW5pdGAsIGFuZCBgZnVzZV9maWxsX3N1cGVyX2NvbW1vbmAuIExldCdzIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGVzZSBhcmUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLlxuXG5gZnVzZV9vcHRfZmRgIGlzIHVzZWQgZm9yIG1vdW50IHBhcmFtZXRlciBwYXJzaW5nIOKAkyBub3QgYSBob3QgcGF0aC4gR29vZC4gYGZ1c2Vfc3luY2ZzX2VuYWJsZWAgZ2V0cyBjYWxsZWQgd2l0aGluIGBwcm9jZXNzX2luaXRfcmVwbHlgLCB3aGljaCBpdHNlbGYgaXMgb25seSBjYWxsZWQgb25jZSBwZXIgRlVTRSBtb3VudC4gVGhhdCdzIG5vdCBsaWtlbHkgdG8gYmUgYSBwZXJmb3JtYW5jZSBjb25jZXJuIGVpdGhlci4gVGhlbiB0aGVyZSdzIGBmdXNlX25ld19pbml0YCBhbmQgYGZ1c2VfZmlsbF9zdXBlcl9jb21tb25gLCBib3RoIGV4ZWN1dGVkIG9ubHkgb25jZSBwZXIgbW91bnQsIHNpbWlsYXIgdG8gdGhlIGFib3ZlLlxuXG5Mb29rcyBsaWtlIGFsbCB0aG9zZSBmb2N1cyBzeW1ib2xzIGFyZSBpbiB0aGUgY2xlYXIgaW4gdGVybXMgb2YgYmVpbmcgaG90IHBhdGhzLiBUaGF0J3MgZ29vZCBuZXdzOyB0aGUgcGF0Y2ggc2VlbXMgcmVsYXRpdmVseSBsb3ctaW1wYWN0IGluIHRlcm1zIG9mIHBlcmZvcm1hbmNlLlxuXG5BbHJpZ2h0LCBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gcmVhZHkgdG8gbWFyayB0aGUgcmVzdWx0cyBhcyBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDI5LCJPdXRwdXRUb2tlbnMiOjEzMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQxNzozMzo0Ny4xNTcyNTEzNzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODMxMDczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVTRV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1c2Vfb3B0X2ZkXCIsXG4gICAgXCJmdXNlX3N5bmNmc19lbmFibGVcIixcbiAgICBcInByb2Nlc3NfaW5pdF9yZXBseVwiLFxuICAgIFwiZnVzZV9uZXdfaW5pdFwiLFxuICAgIFwiZnVzZV9maWxsX3N1cGVyX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byB0aGUgRlVTRSBmaWxlc3lzdGVtLCBhbGxvd2luZyBwcml2aWxlZ2VkIHVzZXJzcGFjZSBzZXJ2ZXJzIHRvIG9wdC1pbiB0byByZWNlaXZpbmcgRlVTRV9TWU5DRlMgcmVxdWVzdHMuIEl0IG1vZGlmaWVzIG1vdW50IHBhcmFtZXRlciBwYXJzaW5nIGFuZCBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uIGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVU0VfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdXNlX29wdF9mZFwiLFxuICAgIFwiZnVzZV9zeW5jZnNfZW5hYmxlXCIsXG4gICAgXCJwcm9jZXNzX2luaXRfcmVwbHlcIixcbiAgICBcImZ1c2VfbmV3X2luaXRcIixcbiAgICBcImZ1c2VfZmlsbF9zdXBlcl9jb21tb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gdGhlIEZVU0UgZmlsZXN5c3RlbSwgYWxsb3dpbmcgcHJpdmlsZWdlZCB1c2Vyc3BhY2Ugc2VydmVycyB0byBvcHQtaW4gdG8gcmVjZWl2aW5nIEZVU0VfU1lOQ0ZTIHJlcXVlc3RzLiBJdCBtb2RpZmllcyBtb3VudCBwYXJhbWV0ZXIgcGFyc2luZyBhbmQgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflows9c5t[1] Phase: Succeeded StartedAt: 2026-06-19 17:37:08 +0000 UTC FinishedAt: 2026-06-19 17:37:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-19 17:37:08 +0000 UTC FinishedAt: 2026-06-19 17:37:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2] Phase: Succeeded StartedAt: 2026-06-19 17:37:08 +0000 UTC FinishedAt: 2026-06-19 21:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-19 17:37:10 +0000 UTC FinishedAt: 2026-06-19 21:38:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-19 17:37:10 +0000 UTC FinishedAt: 2026-06-19 17:37:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-19 17:37:11 +0000 UTC FinishedAt: 2026-06-19 17:37:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflows9c5t/series-workflows9c5t-convert-artifact-4017559584/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-19 17:37:39 +0000 UTC FinishedAt: 2026-06-19 18:08:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-19 17:37:39 +0000 UTC FinishedAt: 2026-06-19 18:08:06 +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:*207f179b-d862-4068-aff1-622edeb0cabf,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-workflows9c5t/series-workflows9c5t-convert-artifact-4017559584/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": "d99fd20a-bfcf-4f74-95f5-177f18f1913f", "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-workflows9c5t/series-workflows9c5t-build-action-115865318/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-19 17:37:39 +0000 UTC FinishedAt: 2026-06-19 18:07:56 +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:*207f179b-d862-4068-aff1-622edeb0cabf,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-workflows9c5t/series-workflows9c5t-convert-artifact-4017559584/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": "d99fd20a-bfcf-4f74-95f5-177f18f1913f", "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-workflows9c5t/series-workflows9c5t-build-action-115865318/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-19 18:08:06 +0000 UTC FinishedAt: 2026-06-19 18:08:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-19 18:08:06 +0000 UTC FinishedAt: 2026-06-19 18:08:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-19 18:08:06 +0000 UTC FinishedAt: 2026-06-19 18:08:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-19 18:08:06 +0000 UTC FinishedAt: 2026-06-19 18:08:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflows9c5t/series-workflows9c5t-convert-artifact-2806687815/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-19 18:08:27 +0000 UTC FinishedAt: 2026-06-19 18:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-19 18:08:27 +0000 UTC FinishedAt: 2026-06-19 18:10:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d99fd20a-bfcf-4f74-95f5-177f18f1913f,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-workflows9c5t/series-workflows9c5t-build-action-115865318/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-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-19 18:10:39 +0000 UTC FinishedAt: 2026-06-19 18:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-19 18:10:39 +0000 UTC FinishedAt: 2026-06-19 18:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-19 18:10:39 +0000 UTC FinishedAt: 2026-06-19 18:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-19 18:10:39 +0000 UTC FinishedAt: 2026-06-19 18:33:29 +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:*207f179b-d862-4068-aff1-622edeb0cabf,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-workflows9c5t/series-workflows9c5t-convert-artifact-2806687815/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": "2e160b5c-e521-4576-804f-aae05ffb6abd", "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-workflows9c5t/series-workflows9c5t-build-action-2284251083/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-19 18:10:39 +0000 UTC FinishedAt: 2026-06-19 18:33:19 +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:*207f179b-d862-4068-aff1-622edeb0cabf,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-workflows9c5t/series-workflows9c5t-convert-artifact-2806687815/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": "2e160b5c-e521-4576-804f-aae05ffb6abd", "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-workflows9c5t/series-workflows9c5t-build-action-2284251083/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-19 18:33:29 +0000 UTC FinishedAt: 2026-06-19 18:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-19 18:33:29 +0000 UTC FinishedAt: 2026-06-19 18:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-19 18:33:29 +0000 UTC FinishedAt: 2026-06-19 18:35:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-19 18:33:29 +0000 UTC FinishedAt: 2026-06-19 18:35:23 +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:*2e160b5c-e521-4576-804f-aae05ffb6abd,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-workflows9c5t/series-workflows9c5t-build-action-2284251083/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-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-19 18:35:33 +0000 UTC FinishedAt: 2026-06-19 21:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-19 18:35:33 +0000 UTC FinishedAt: 2026-06-19 21:38:28 +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":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"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:*d99fd20a-bfcf-4f74-95f5-177f18f1913f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2e160b5c-e521-4576-804f-aae05ffb6abd,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-workflows9c5t/series-workflows9c5t-build-action-115865318/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-workflows9c5t/series-workflows9c5t-build-action-2284251083/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-19 18:35:33 +0000 UTC FinishedAt: 2026-06-19 18:35:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-19 18:35:33 +0000 UTC FinishedAt: 2026-06-19 18:35:38 +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":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"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-workflows9c5t/series-workflows9c5t-convert-artifact-944119584/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-19 18:35:33 +0000 UTC FinishedAt: 2026-06-19 18:35:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-19 18:35:33 +0000 UTC FinishedAt: 2026-06-19 18:35:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-19 18:35:33 +0000 UTC FinishedAt: 2026-06-19 18:35:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-19 18:35:43 +0000 UTC FinishedAt: 2026-06-19 21:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9c5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_opt_fd","fuse_syncfs_enable","process_init_reply","fuse_new_init","fuse_fill_super_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d87a5a284bb34edb3f4e7e312ef403b3385a7b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"1764156d-e8b0-471c-ae50-4c6c9a7cf040","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-19 18:35:43 +0000 UTC FinishedAt: 2026-06-19 21:38:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d99fd20a-bfcf-4f74-95f5-177f18f1913f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2e160b5c-e521-4576-804f-aae05ffb6abd,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-workflows9c5t/series-workflows9c5t-build-action-115865318/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-workflows9c5t/series-workflows9c5t-build-action-2284251083/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-workflows9c5t/series-workflows9c5t-convert-artifact-944119584/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,}