Name: series-workflowvhvv9 Phase: Succeeded StartedAt: 2026-08-17 06:23:19 +0000 UTC FinishedAt: 2026-08-17 10:59:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[0] Phase: Succeeded StartedAt: 2026-08-17 06:23:19 +0000 UTC FinishedAt: 2026-08-17 07:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 06:23:19 +0000 UTC FinishedAt: 2026-08-17 07:15:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "7a6c5ec0-753e-40d9-b029-ca585176f4f3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tipc_named_distribute", "tipc_nametb_insert_self_node_pub", "tipc_nametbl_publish", "tipc_named_node_up" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19uYW1lZF9kaXN0cmlidXRlJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZXRibF9wdWJsaXNoJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZWRfbm9kZV91cCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUSVBDIHN1YnN5c3RlbSB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgKHJldHVybmluZyBgLUVOT0JVRlNgKSBkdXJpbmcgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24uIEl0IGFkZHMgZXJyb3IgaGFuZGxpbmcgdG8gZnVuY3Rpb25zIGxpa2UgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGB0aXBjX25hbWVkX25vZGVfdXBgLCBhbmQgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYW5kIGludHJvZHVjZXMgZmxhZ3MgdG8gdHJhY2sgdGhlIHN0YXRlIG9mIHRoZSBuYW1lIHRhYmxlIGFuZCBub2RlIGFkZHJlc3MuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlcyAoZS5nLiwgYHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrYCwgYHN0cnVjdCB0aXBjX3VhZGRyIHVhYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKGUuZy4sIHZpYSBleHBsaWNpdCBhc3NpZ25tZW50IG9yIHRoZSBgdGlwY191YWRkcigpYCBoZWxwZXIpLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgY29udHJvbCBmbG93IGFuZCBlcnJvciBoYW5kbGluZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMsIHdoaWNoIGRvIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBUSVBDIGxvZ2ljIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBkdXJpbmcgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24uIEl0IGFkZHMgZXJyb3IgY29kZSByZXR1cm5zIHRvIGZ1bmN0aW9ucyBsaWtlIGB0aXBjX25hbWV0YmxfcHVibGlzaGAgYW5kIGB0aXBjX25hbWVkX25vZGVfdXBgLCBhbmQgaW50cm9kdWNlcyBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgIGFuZCBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCB0byBoYW5kbGUgYnVsayByZWRpc3RyaWJ1dGlvbiBvZiBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWE3YzNkNGI5YjQwYTkzZDMxMTQ1OWJjYmUyYmQ2NmJkOTIyZDM4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDA3OjAzOjU4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuYyBiL25ldC90aXBjL2NvcmUuY1xuaW5kZXggMzE1OTc1YzNiZTgxOC4uMGYxZDNkZGVhZTA5NSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvY29yZS5jXG5AQCAtNjEsNiAmIzQzOzYxLDkgQEAgc3RhdGljIGludCBfX25ldF9pbml0IHRpcGNfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0dG4tXHUwMDNldHJpYWxfYWRkciA9IDA7XG4gXHR0bi1cdTAwM2VhZGRyX3RyaWFsX2VuZCA9IDA7XG4gXHR0bi1cdTAwM2VjYXBhYmlsaXRpZXMgPSBUSVBDX05PREVfQ0FQQUJJTElUSUVTO1xuJiM0MztcdHRuLVx1MDAzZW50X3N0b3AgPSBmYWxzZTtcbiYjNDM7XHR0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQsIDApO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnRuLVx1MDAzZXdvcmssIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmspO1xuIFx0bWVtc2V0KHRuLVx1MDAzZW5vZGVfaWQsIDAsIHNpemVvZih0bi1cdTAwM2Vub2RlX2lkKSk7XG4gXHRtZW1zZXQodG4tXHUwMDNlbm9kZV9pZF9zdHJpbmcsIDAsIHNpemVvZih0bi1cdTAwM2Vub2RlX2lkX3N0cmluZykpO1xuZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuaCBiL25ldC90aXBjL2NvcmUuaFxuaW5kZXggOWNlNWY5ZmY2Y2MwMy4uOTc1YjFkNDgxODZlNiAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvY29yZS5oXG5AQCAtMTQ1LDYgJiM0MzsxNDUsMTIgQEAgc3RydWN0IHRpcGNfbmV0IHtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuIFx0LyogVGhlIG51bWJlcnMgb2Ygd29yayBxdWV1ZXMgaW4gc2NoZWR1bGUgKi9cbiBcdGF0b21pY190IHdxX2NvdW50O1xuJiM0MztcdC8qIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbm9kZSYjMzk7cyBhZGRyZXNzIGlzIHNldCAqL1xuJiM0MztcdGF0b21pY190IG5vZGVfYWRkcl9zZXQ7XG4mIzQzO1x0LyogVGhlIG5hbWUgdGFibGUgaGFzIHN0b3BwZWQgd29ya2luZyAqL1xuJiM0MztcdGJvb2wgbnRfc3RvcDtcbiYjNDM7XHQvKiBOb2RlJiMzOTtzIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIG5hbWUgdGFibGUgKi9cbiYjNDM7XHRib29sIG50X3NlbGZfbm9kZV9leGlzdDtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRpcGNfbmV0ICp0aXBjX25ldChzdHJ1Y3QgbmV0ICpuZXQpXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jXG5pbmRleCBiYTRmNDkwNmUxM2I3Li44M2UzZWQ4ZjJjNTEyIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcbkBAIC05NSw5ICYjNDM7OTUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxuIFx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZwLVx1MDAzZWJpbmRpbmdfbm9kZSwgXHUwMDI2bnQtXHUwMDNlbm9kZV9zY29wZSk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuLVx0d3JpdGVfbG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfbm9kZSwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSk7XG4tXHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdHNrYiA9IG5hbWVkX3ByZXBhcmVfYnVmKG5ldCwgUFVCTElDQVRJT04sIElURU1fU0laRSwgMCk7XG4gXHRpZiAoIXNrYikge1xuIFx0XHRwcl93YXJuKFwmIzM0O1B1YmxpY2F0aW9uIGRpc3RyaWJ1dGlvbiBmYWlsdXJlXFxuXCYjMzQ7KTtcbkBAIC0xMjEsOSAmIzQzOzExOSw3IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxuIFx0c3RydWN0IGRpc3RyX2l0ZW0gKml0ZW07XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuLVx0d3JpdGVfbG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuIFx0bGlzdF9kZWwoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUpO1xuLVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHRpZiAocC1cdTAwM2VzY29wZSA9PSBUSVBDX05PREVfU0NPUEUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuQEAgLTE0Niw5ICYjNDM7MTQyLDE0IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxuICAqIEBkbm9kZTogbm9kZSB0byBiZSB1cGRhdGVkXG4gICogQHBsczogbGlua2VkIGxpc3Qgb2YgcHVibGljYXRpb24gaXRlbXMgdG8gYmUgcGFja2VkIGludG8gYnVmZmVyIGNoYWluXG4gICogQHNlcW5vOiBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgbWVzc2FnZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcbiYjNDM7ICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuJiM0MzsgKlxuICAqL1xuLXN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuLVx0XHRcdCAgICAgdTMyIGRub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbHMsIHUxNiBzZXFubylcbiYjNDM7c3RhdGljIGludCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbiYjNDM7XHRcdFx0ICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pXG4ge1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwdWJsO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG5AQCAtMTY0LDggJiM0MzsxNjUsOSBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbiBcdFx0XHRza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBtc2dfcmVtLFxuIFx0XHRcdFx0XHRcdGRub2RlKTtcbiBcdFx0XHRpZiAoIXNrYikge1xuJiM0MztcdFx0XHRcdF9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpO1xuIFx0XHRcdFx0cHJfd2FybihcJiMzNDtCdWxrIHB1YmxpY2F0aW9uIGZhaWx1cmVcXG5cJiMzNDspO1xuLVx0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRU5PQlVGUztcbiBcdFx0XHR9XG4gXHRcdFx0aGRyID0gYnVmX21zZyhza2IpO1xuIFx0XHRcdG1zZ19zZXRfYmNfYWNrX2ludmFsaWQoaGRyLCB0cnVlKTtcbkBAIC0xOTUsNiAmIzQzOzE5Nyw5MCBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbiBcdGhkciA9IGJ1Zl9tc2coc2tiX3BlZWtfdGFpbChsaXN0KSk7XG4gXHRtc2dfc2V0X2xhc3RfYnVsayhoZHIpO1xuIFx0bXNnX3NldF9uYW1lZF9zZXFubyhoZHIsIHNlcW5vKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGJ1aWxkIGEgbGlzdCBvZiBwdWJsaWNhdGlvbnMgbmVlZCB0byBiZSBkaXN0cmlidXRlZFxuJiM0MzsgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuJiM0MzsgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGVcbiYjNDM7ICogQGhlYWQ6IGxpc3Qgb2YgcHVibGljYXRpb25zXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuJiM0MzsgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXG4mIzQzOyAqXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbiYjNDM7XHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiYjNDM7XG4mIzQzO1x0LyogTmFtZSB0YWJsZSBoYXMgYmVlbiBkZWxldGVkIGFmdGVyIG5hbWVzcGFjZSB0ZWFyZG93biBvclxuJiM0MztcdCAqIFRJUEMgbW9kdWxlIGV4aXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KHRuLVx1MDAzZW50X3N0b3ApKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIE5vZGUmIzM5O3Mgc2VsZi1hZGRyZXNzIGlzIG5vdCBzZXQgeWV0ICovXG4mIzQzO1x0aWYgKCFhdG9taWNfcmVhZChcdTAwMjZ0bi1cdTAwM2Vub2RlX2FkZHJfc2V0KSkge1xuJiM0MztcdFx0LyogRGVmZXIgdGhlIGRpc3RyaWJ1dGlvbiB0byBub2RlJiMzOTtzIHRpbWVyICovXG4mIzQzO1x0XHR0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhuZXQsIGRub2RlKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUHJldmlvdXMgY2FsbCB0byB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YigpIHdhcyBzdWNjZXNzZnVsLlxuJiM0MztcdCAqIFRoZSBub2RlJiMzOTtzIHNlbGYtYWRkcmVzcyBwdWJsaWNhdGlvbiB3YXMgYWRkZWQgdG8gJiMzOTtudC1cdTAwM2VjbHVzdGVyX3Njb3BlJiMzOTsuXG4mIzQzO1x0ICogU28sICYjMzk7bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSYjMzk7IGlzIG5vdCBlbXB0eSBub3cuIEdvIHRvIGRpc3RyaWJ1dGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0KVxuJiM0MztcdFx0Z290byBkaXN0cmlidXRlO1xuJiM0MztcbiYjNDM7XHRpZiAodGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIobmV0KSlcbiYjNDM7XHRcdHJldHVybiAtRU5PQlVGUztcbiYjNDM7XG4mIzQzO1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO2Rpc3RyaWJ1dGU6XG4mIzQzO1x0aWYgKG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBoZWFkLCBkbm9kZSxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlLCBudC1cdTAwM2VzbmRfbnh0KSA9PSAtRU5PQlVGUylcbiYjNDM7XHRcdHJldHVybiAtRU5PQlVGUztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBkaXN0cmlidXRlIGFsbCBwdWJsaWNhdGlvbnMgdG8gc3BlY2lmaWVkIG5vZGVcbiYjNDM7ICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcbiYjNDM7ICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuJiM0MzsgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXG4mIzQzOyAqXG4mIzQzOyAqL1xuJiM0MztpbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkO1xuJiM0MztcdGludCByYyA9IDA7XG4mIzQzO1xuJiM0MztcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZoZWFkKTtcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiYjNDM7XHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFx1MDAyNmhlYWQpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4mIzQzO1x0aWYgKCFyYyBcdTAwMjZcdTAwMjYgIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZoZWFkKSkge1xuJiM0MztcdFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbiYjNDM7XHRcdC8qIFRoZSBsaW5rIGlzIGNvbmdlc3RlZCBhZnRlciB0aGUgbGlzdCBpcyBpbnNlcnRlZCBpbnRvIHRoZVxuJiM0MztcdFx0ICogbGluayYjMzk7cyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChyYyA9PSAtRUxJTktDT05HKVxuJiM0MztcdFx0XHRyYyA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4gfVxuIFxuIC8qKlxuQEAgLTIwMiwyNSAmIzQzOzI4OCwzNiBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbiAgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuICAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZVxuICAqIEBjYXBhYmlsaXRpZXM6IHBlZXIgbm9kZSYjMzk7cyBjYXBhYmlsaXRpZXNcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlxuJiM0MzsgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4mIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbiYjNDM7ICpcbiAgKi9cbi12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcylcbiYjNDM7aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcylcbiB7XG4gXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbiBcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkO1xuLVx0dTE2IHNlcW5vO1xuJiM0MztcdGludCByYyA9IDA7XG4gXG4gXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aGVhZCk7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiBcdGlmICghKGNhcGFiaWxpdGllcyBcdTAwMjYgVElQQ19OQU1FRF9CQ0FTVCkpXG4gXHRcdG50LVx1MDAzZXJjX2Rlc3RzJiM0MzsmIzQzOztcbi1cdHNlcW5vID0gbnQtXHUwMDNlc25kX254dDtcbiYjNDM7XG4mIzQzO1x0cmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCBcdTAwMjZoZWFkKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4mIzQzO1x0aWYgKCFyYyBcdTAwMjZcdTAwMjYgIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZoZWFkKSkge1xuJiM0MztcdFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbiYjNDM7XHRcdC8qIFRoZSBsaW5rIGlzIGNvbmdlc3RlZCBhZnRlciB0aGUgbGlzdCBpcyBpbnNlcnRlZCBpbnRvIHRoZVxuJiM0MztcdFx0ICogbGluayYjMzk7cyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChyYyA9PSAtRUxJTktDT05HKVxuJiM0MztcdFx0XHRyYyA9IDA7XG4mIzQzO1x0fVxuIFxuLVx0cmVhZF9sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4tXHRuYW1lZF9kaXN0cmlidXRlKG5ldCwgXHUwMDI2aGVhZCwgZG5vZGUsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUsIHNlcW5vKTtcbi1cdHRpcGNfbm9kZV94bWl0KG5ldCwgXHUwMDI2aGVhZCwgZG5vZGUsIDApO1xuLVx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmM7XG4gfVxuIFxuIC8qKlxuQEAgLTI5OSw3ICYjNDM7Mzk2LDcgQEAgc3RhdGljIGJvb2wgdGlwY191cGRhdGVfbmFtZXRibChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkaXN0cl9pdGVtICppLFxuIFx0c2subm9kZSA9IG5vZGU7XG4gXG4gXHRpZiAoZHR5cGUgPT0gUFVCTElDQVRJT04pIHtcbi1cdFx0cCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywga2V5KTtcbiYjNDM7XHRcdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIGtleSwgTlVMTCk7XG4gXHRcdGlmIChwKSB7XG4gXHRcdFx0dGlwY19ub2RlX3N1YnNjcmliZShuZXQsIFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlLCBub2RlKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC00MTYsNSAmIzQzOzUxMyw2IEBAIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSwgYmluZGluZ19ub2RlKVxuIFx0XHRwLVx1MDAzZXNrLm5vZGUgPSBzZWxmO1xuIFx0bnQtXHUwMDNlcmNfZGVzdHMgPSAwO1xuJiM0MztcdHRuLVx1MDAzZW50X3N0b3AgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaFxuaW5kZXggYzY3N2Y2ZjA4MmRmYi4uMjA0MzA5NmFlOTY3ZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oXG5AQCAtNjksMTEgJiM0Mzs2OSwxMiBAQCBzdHJ1Y3QgZGlzdHJfaXRlbSB7XG4gXG4gc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7XG4gc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpO1xuLXZvaWQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKTtcbiYjNDM7aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7XG4gdm9pZCB0aXBjX25hbWVkX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSxcbiBcdFx0ICAgIHUxNiAqcmN2X254dCwgYm9vbCAqb3Blbik7XG4gdm9pZCB0aXBjX25hbWVkX3JlaW5pdChzdHJ1Y3QgbmV0ICpuZXQpO1xuIHZvaWQgdGlwY19wdWJsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKm5zdWJfbGlzdCxcbiBcdFx0ICAgICAgdTMyIGFkZHIsIHUxNiBjYXBhYmlsaXRpZXMpO1xuJiM0MztpbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLmJlZWQ0MGEyMTM2OGEgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuQEAgLTMyOSw3ICYjNDM7MzI5LDcgQEAgc3RhdGljIHN0cnVjdCBzZXJ2aWNlX3JhbmdlICp0aXBjX3NlcnZpY2VfY3JlYXRlX3JhbmdlKHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLFxuIFxuIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgcHVibGljYXRpb24gKnApXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIGludCAqZXJyKVxuIHtcbiBcdHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViLCAqdG1wO1xuIFx0c3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyO1xuQEAgLTMzOSwxMCAmIzQzOzMzOSwxMiBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0Ym9vbCByZXMgPSBmYWxzZTtcbiBcdHUzMiBrZXkgPSBwLVx1MDAzZWtleTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdHNyID0gdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzYywgcCk7XG4tXHRpZiAoIXNyKVxuLVx0XHRnb3RvICBleGl0O1xuJiM0MztcdGlmICghc3IpIHtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdCplcnIgPSAtRU5PQlVGUztcbiYjNDM7XHRcdGdvdG8gZXhpdDtcbiYjNDM7XHR9XG4gXG4gXHRmaXJzdCA9IGxpc3RfZW1wdHkoXHUwMDI2c3ItXHUwMDNlYWxsX3B1YmwpO1xuIFxuQEAgLTM1Myw2ICYjNDM7MzU1LDggQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtGYWlsZWQgdG8gYmluZCBkdXBsaWNhdGUgJXUsJXUsJXUvJXU6JXUvJXVcXG5cJiMzNDssXG4gXHRcdFx0XHQgcC1cdTAwM2Vzci50eXBlLCBwLVx1MDAzZXNyLmxvd2VyLCBwLVx1MDAzZXNyLnVwcGVyLFxuIFx0XHRcdFx0IG5vZGUsIHAtXHUwMDNlc2sucmVmLCBrZXkpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdCplcnIgPSAtRUVYSVNUO1xuIFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0fVxuIFx0fVxuQEAgLTM3MSw3ICYjNDM7Mzc1LDYgQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmICghcmVzKVxuIFx0XHRwcl93YXJuKFwmIzM0O0ZhaWxlZCB0byBiaW5kIHRvICV1LCV1LCV1XFxuXCYjMzQ7LFxuIFx0XHRcdHAtXHUwMDNlc3IudHlwZSwgcC1cdTAwM2Vzci5sb3dlciwgcC1cdTAwM2Vzci51cHBlcik7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdHJldHVybiByZXM7XG4gfVxuIFxuQEAgLTQ3OCwyMCAmIzQzOzQ4MSwzMyBAQCBzdGF0aWMgc3RydWN0IHRpcGNfc2VydmljZSAqdGlwY19zZXJ2aWNlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LFxuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxuLVx0XHRcdFx0XHQgICAgIHUzMiBrZXkpXG4mIzQzO1x0XHRcdFx0XHQgICAgIHUzMiBrZXksIGludCAqZXJyKVxuIHtcbiBcdHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwO1xuIFxuIFx0cCA9IHRpcGNfcHVibF9jcmVhdGUodWEsIHNrLCBrZXkpO1xuLVx0aWYgKCFwKVxuJiM0MztcdGlmICghcCkge1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0KmVyciA9IC1FTk9CVUZTO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4gXG4gXHRzYyA9IHRpcGNfc2VydmljZV9maW5kKG5ldCwgdWEpO1xuIFx0aWYgKCFzYylcbiBcdFx0c2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgdWEpO1xuLVx0aWYgKHNjIFx1MDAyNlx1MDAyNiB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCkpXG4tXHRcdHJldHVybiBwO1xuJiM0MztcbiYjNDM7XHRpZiAoc2MpIHtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdGlmICh0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgZXJyKSkge1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdFx0cmV0dXJuIHA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHR9IGVsc2UgaWYgKGVycikge1xuJiM0MztcdFx0KmVyciA9IC1FTk9CVUZTO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRrZnJlZShwKTtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC03NjAsMjYgJiM0Mzs3NzYsNTUgQEAgdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxuIC8qIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIHNlcnZpY2UgYmluZGluZyB0byBuYW1lIHRhYmxlXG4gICovXG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbi1cdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSlcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4mIzQzO1x0XHRcdFx0XHQgdTMyIGtleSwgaW50ICplcnIpXG4ge1xuIFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4mIzQzO1x0dTMyIG1heF91c2VyX3B1YiA9IFRJUENfTUFYX1BVQkwgLSAxO1xuIFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4gXHRzdHJ1Y3QgcHVibGljYXRpb24gKnAgPSBOVUxMO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4mIzQzO1x0Ym9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7XG4mIzQzO1x0aW50IGVycm9yID0gMDtcbiBcdHUzMiByY19kZXN0cztcbiBcbiYjNDM7XHRpZiAodWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgfHwgdWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX0xJTktfU1RBVEUgfHxcbiYjNDM7XHQgICAgdWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpXG4mIzQzO1x0XHRwcm90b2NvbF90eXBlID0gdHJ1ZTtcbiYjNDM7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiYjNDM7XHRpZiAocHJvdG9jb2xfdHlwZSlcbiYjNDM7XHRcdGdvdG8gaW5zZXJ0O1xuIFxuLVx0aWYgKG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQgXHUwMDNlPSBUSVBDX01BWF9QVUJMKSB7XG4tXHRcdHByX3dhcm4oXCYjMzQ7QmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxuXCYjMzQ7LCBUSVBDX01BWF9QVUJMKTtcbiYjNDM7XHQvKiBSZXNlcnZlIG9uZSBlbnRyeSBmb3Igbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUgYmVjYXVzZSBpdCBoYXMgY2x1c3RlclxuJiM0MztcdCAqIHNjb3BlIGFuZCBpdCBpcyBkaXN0cmlidXRlZCBpbiBidWxrLiBTbywgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXImIzM5O3NcbiYjNDM7XHQgKiBwdWJsaWNhdGlvbnMgaXMgKFRJUENfTUFYX1BVQkwgLSAxKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IG1heF91c2VyX3B1Yikge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcXG5cJiMzNDssIG1heF91c2VyX3B1Yik7XG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcbi1cdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4mIzQzO2luc2VydDpcbiYjNDM7XHRwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgdWEsIHNrLCBrZXksIFx1MDAyNmVycm9yKTtcbiBcdGlmIChwKSB7XG4tXHRcdG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQmIzQzOyYjNDM7O1xuJiM0MztcdFx0LyogTm90IGNvdW50IG5vZGUgc3RhdGUsIGxpbmsgc3RhdGUgYW5kIHRvcG9sb2d5IHNlcnZlciB0eXBlc1xuJiM0MztcdFx0ICogc28gdGhhdCBtYXhpbXVtIG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQgZG9lcyBub3QgcHJldmVudFxuJiM0MztcdFx0ICogcHJvdG9jb2wgc2VydmljZSB0eXBlcyBmcm9tIGJlaW5nIGluc2VydGVkIGludG8gdGhlIG5hbWVcbiYjNDM7XHRcdCAqIHRhYmxlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIXByb3RvY29sX3R5cGUpXG4mIzQzO1x0XHRcdG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQmIzQzOyYjNDM7O1xuIFx0XHRza2IgPSB0aXBjX25hbWVkX3B1Ymxpc2gobmV0LCBwKTtcbiYjNDM7XHRcdC8qIExvY2FsLXNjb3BlIHB1YmxpY2F0aW9uIGlzIG5vdCBwdWJsaXNoZWQgKHNrYiBpcyBOVUxMKSwgb25seVxuJiM0MztcdFx0ICogY2x1c3Rlci1jb3BlIG9uZSBpcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFza2IgXHUwMDI2XHUwMDI2IHAtXHUwMDNlc2NvcGUgPT0gVElQQ19DTFVTVEVSX1NDT1BFIFx1MDAyNlx1MDAyNiBlcnIpXG4mIzQzO1x0XHRcdCplcnIgPSAtRU5PQlVGUztcbiYjNDM7XHR9IGVsc2UgaWYgKChlcnJvciA9PSAtRU5PQlVGUykgXHUwMDI2XHUwMDI2IGVycikge1xuJiM0MztcdFx0KmVyciA9IC1FTk9CVUZTO1xuIFx0fVxuJiM0MztcbiBcdHJjX2Rlc3RzID0gbnQtXHUwMDNlcmNfZGVzdHM7XG4gZXhpdDpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG5AQCAtNzg3LDcgJiM0Mzs4MzIsMTAyIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRpZiAoc2tiKVxuIFx0XHR0aXBjX25vZGVfYnJvYWRjYXN0KG5ldCwgc2tiLCByY19kZXN0cyk7XG4gXHRyZXR1cm4gcDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViIC0gaW5zZXJ0IHB1YmxpY2F0aW9uIG9mIG5vZGUmIzM5O3Mgc2VsZiBhZGRyZXNzXG4mIzQzOyAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuJiM0MzsgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXG4mIzQzOyAqXG4mIzQzOyAqL1xuJiM0MztpbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4mIzQzO1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4mIzQzO1x0c3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2s7XG4mIzQzO1x0c3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyO1xuJiM0MztcdHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjO1xuJiM0MztcdGJvb2wgc2NfY3JlYXRlZCA9IGZhbHNlO1xuJiM0MztcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcDtcbiYjNDM7XHRzdHJ1Y3QgdGlwY191YWRkciB1YTtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0c2sucmVmID0gMDtcbiYjNDM7XHRzay5ub2RlID0gdG4tXHUwMDNlbm9kZV9hZGRyO1xuJiM0MztcdHRpcGNfdWFkZHIoXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLFxuJiM0MztcdFx0ICAgVElQQ19OT0RFX1NUQVRFLCB0bi1cdTAwM2Vub2RlX2FkZHIsIHRuLVx1MDAzZW5vZGVfYWRkcik7XG4mIzQzO1x0c2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsIFx1MDAyNnVhKTtcbiYjNDM7XHRpZiAoIXNjKSB7XG4mIzQzO1x0XHRzYyA9IHRpcGNfc2VydmljZV9jcmVhdGUobmV0LCBcdTAwMjZ1YSk7XG4mIzQzO1x0XHRpZiAoIXNjKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4mIzQzO1x0XHRzY19jcmVhdGVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuJiM0MztcdC8qIENoZWNrIHdoZXRoZXIgYSByYW5nZSBleGlzdHMgaW4gdGhlIG5hbWUgdGFibGUgd2l0aFxuJiM0MztcdCAqIGxvd2VyID09IHRuLVx1MDAzZW5vZGVfYWRkciwgdXBwZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyLCBhbmQgdHlwZVxuJiM0MztcdCAqIFRJUENfTk9ERV9TVEFURSAoMCkuIElmICYjMzk7c3ImIzM5OyBpcyBub3QgTlVMTCwgdGhpcyByYW5nZSBleGlzdHNcbiYjNDM7XHQgKiBkdWUgdG8gYSBwcmV2aW91cyBjYWxsIHRvIHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKClcbiYjNDM7XHQgKiBvciB0aXBjX25ldF9maW5hbGl6ZSgpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogTm90ZSB0aGF0IHVzZXIgYXBwbGljYXRpb25zIGNhbiBvbmx5IGluc2VydCB0eXBlcyBncmVhdGVyIHRoYW5cbiYjNDM7XHQgKiBvciBlcXVhbCB0byA2NCAoVElQQ19SRVNFUlZFRF9UWVBFUyksIGFzIGVuZm9yY2VkIGJ5IHRpcGNfYmluZCgpLlxuJiM0MztcdCAqIFJlbW90ZSBub2RlcyBhbHNvIG9ubHkgc2VuZCBwcm90b2NvbCBwdWJsaWNhdGlvbnMgd2l0aCB0eXBlXG4mIzQzO1x0ICogVElQQ19OT0RFX1NUQVRFICgwKSwgd2l0aCBib3RoIGxvd2VyIGFuZCB1cHBlciBzZXQgdG8gdGhlIHJlbW90ZVxuJiM0MztcdCAqIG5vZGUmIzM5O3MgYWRkcmVzcy4gVGhlc2UgcmFuZ2VzIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGlzIG5vZGUmIzM5O3NcbiYjNDM7XHQgKiByYW5nZSBiZWNhdXNlIGEgcmVtb3RlIG5vZGUmIzM5O3MgYWRkcmVzcyBtdXN0IGRpZmZlciBmcm9tIHRoaXNcbiYjNDM7XHQgKiBub2RlJiMzOTtzIGFkZHJlc3MgKHRuLVx1MDAzZW5vZGVfYWRkcikuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGVyZWZvcmUsIHRpcGNfdXBkYXRlX25hbWV0YmwoKSBjYW5ub3QgYnVpbGQgYW5kIGluc2VydCBhIHJlbW90ZVxuJiM0MztcdCAqIHB1YmxpY2F0aW9uIHdpdGggdGhlIHNhbWUgdHlwZSAoMCkgYW5kIHJhbmdlXG4mIzQzO1x0ICogKGxvd2VyID09IHRuLVx1MDAzZW5vZGVfYWRkciwgdXBwZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyKSBhcyB0aGlzIG5vZGUmIzM5O3NcbiYjNDM7XHQgKiBzZWxmLWFkZHJlc3MgcHVibGljYXRpb24gaW4gdGhlIG5hbWUgdGFibGUuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBCZWNhdXNlIHRoZSBjb21iaW5hdGlvbiBvZiB0eXBlIDAgYW5kXG4mIzQzO1x0ICogKGxvd2VyID09IHRuLVx1MDAzZW5vZGVfYWRkciwgdXBwZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyKSBpcyB1bmlxdWUgaW4gdGhlXG4mIzQzO1x0ICogbmFtZSB0YWJsZSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjaGVjayBzay5ub2RlLCBzay5yZWYsIGtleSwgb3JcbiYjNDM7XHQgKiBjbHVzdGVyX3Njb3BlIG1lbWJlcnNoaXAuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3IgPSB0aXBjX3NlcnZpY2VfZmluZF9yYW5nZShzYywgXHUwMDI2dWEpO1xuJiM0MztcdC8qIDEuIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmsoKSBpcyBub3Qgc2NoZWR1bGVkIGJlY2F1c2Ugb2YgbmFtZXNwYWNlXG4mIzQzO1x0ICogICAgdGVhcmRvd24uXG4mIzQzO1x0ICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS1cdTAwM2UgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBoYXMgZmFpbGVkXG4mIzQzO1x0ICogICAgdG8gaW5zZXJ0IG5vZGUgc2VsZiBhZGRyZXNzIHB1YmxpY2F0aW9uIGludG8gbnQtXHUwMDNlY2x1c3Rlcl9zY29wZVxuJiM0MztcdCAqICAgIGR1ZSB0byBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLlxuJiM0MztcdCAqIDMuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXHUwMDNlIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdFxuJiM0MztcdCAqICAgIGV4ZWN1dGVkIHlldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNyKSB7XG4mIzQzO1x0XHRwID0gdGlwY19wdWJsX2NyZWF0ZShcdTAwMjZ1YSwgXHUwMDI2c2ssIHRuLVx1MDAzZW5vZGVfYWRkcik7XG4mIzQzO1x0XHRpZiAoIXApXG4mIzQzO1x0XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgXHUwMDI2ZXJyKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoZXJyID09IC1FTk9CVUZTKSkge1xuJiM0MztcdFx0XHRrZnJlZShwKTtcbiYjNDM7XHRcdFx0Z290byBlcnJvcjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlLCBcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlKTtcbiYjNDM7XHRcdGdvdG8gZXhpdDtcbiYjNDM7ZXJyb3I6XG4mIzQzO1x0XHRpZiAoc2NfY3JlYXRlZCkge1xuJiM0MztcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2c2MtXHUwMDNlc2VydmljZV9saXN0KTtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRcdGtmcmVlX3JjdShzYywgcmN1KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9CVUZTO1xuJiM0MztcdH1cbiYjNDM7ZXhpdDpcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtODEwLDcgJiM0Mzs5NTAsMTAgQEAgdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXG4gXHRwID0gdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpO1xuIFx0aWYgKHApIHtcbi1cdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudC0tO1xuJiM0MztcdFx0aWYgKHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX05PREVfU1RBVEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcC1cdTAwM2Vzci50eXBlICE9IFRJUENfTElOS19TVEFURSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19UT1BfU1JWKVxuJiM0MztcdFx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XG4gXHRcdHNrYiA9IHRpcGNfbmFtZWRfd2l0aGRyYXcobmV0LCBwKTtcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfc29jayk7XG4gXHRcdGtmcmVlX3JjdShwLCByY3UpO1xuQEAgLTg5OSw3ICYjNDM7MTA0Miw2IEBAIGludCB0aXBjX25hbWV0YmxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZudC1cdTAwM2Vub2RlX3Njb3BlKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xuLVx0cndsb2NrX2luaXQoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdHRuLVx1MDAzZW5hbWV0YmwgPSBudDtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gXHRyZXR1cm4gMDtcbkBAIC05MTIsNiAmIzQzOzEwNTQsNyBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuICAqL1xuIHN0YXRpYyB2b2lkIHRpcGNfc2VydmljZV9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYylcbiB7XG4mIzQzO1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4gXHRzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3IsICp0bXByO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwLCAqdG1wO1xuIFxuQEAgLTkxOSw2ICYjNDM7MTA2MiwxNSBAQCBzdGF0aWMgdm9pZCB0aXBjX3NlcnZpY2VfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc2VydmljZSAqc2MpXG4gXHRyYnRyZWVfcG9zdG9yZGVyX2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3IsIHRtcHIsIFx1MDAyNnNjLVx1MDAzZXJhbmdlcywgdHJlZV9ub2RlKSB7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0bXAsIFx1MDAyNnNyLVx1MDAzZWFsbF9wdWJsLCBhbGxfcHVibCkge1xuIFx0XHRcdHRpcGNfc2VydmljZV9yZW1vdmVfcHVibChzciwgXHUwMDI2cC1cdTAwM2VzaywgcC1cdTAwM2VrZXkpO1xuJiM0MztcdFx0XHQvKiB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoKSBkb2VzIG5vdCBkZWxldGVcbiYjNDM7XHRcdFx0ICogJiMzOTtwLVx1MDAzZWJpbmRpbmdfbm9kZSYjMzk7IHdpdGggdHlwZSBUSVBDX05PREVfU1RBVEUgYW5kXG4mIzQzO1x0XHRcdCAqIHJhbmdlIFt0bi1cdTAwM2Vub2RlX2FkZHIsIHRuLVx1MDAzZW5vZGVfYWRkcl0gZnJvbVxuJiM0MztcdFx0XHQgKiAmIzM5O3RuLVx1MDAzZWNsdXN0ZXJfc2NvcGUmIzM5Oy4gU28sIGRlbGV0ZSBpdCBoZXJlLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKHAtXHUwMDNlc3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBwLVx1MDAzZXNyLmxvd2VyID09IHRuLVx1MDAzZW5vZGVfYWRkciBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIHAtXHUwMDNlc3IudXBwZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyKVxuJiM0MztcdFx0XHRcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbiBcdFx0XHRrZnJlZV9yY3UocCwgcmN1KTtcbiBcdFx0fVxuIFx0XHRyYl9lcmFzZV9hdWdtZW50ZWQoXHUwMDI2c3ItXHUwMDNldHJlZV9ub2RlLCBcdTAwMjZzYy1cdTAwM2VyYW5nZXMsIFx1MDAyNnNyX2NhbGxiYWNrcyk7XG5AQCAtOTQ5LDYgJiM0MzsxMTAxLDggQEAgdm9pZCB0aXBjX25hbWV0Ymxfc3RvcChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRcdFx0dGlwY19zZXJ2aWNlX2RlbGV0ZShuZXQsIHNlcnZpY2UpO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1x0dG4tXHUwMDNlbnRfc3RvcCA9IHRydWU7XG4mIzQzO1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFxuIFx0LyogVE9ETzogY2xlYXIgdG4tXHUwMDNlbmFtZXRibCwgaW1wbGVtZW50IHByb3BlciBSQ1UgcnVsZXMgPyAqL1xuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuaCBiL25ldC90aXBjL25hbWVfdGFibGUuaFxuaW5kZXggN2ZmNmVlZWJhYWU2NC4uNDM5MGU3OWE0NjYwZSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oXG5AQCAtOTcsOCAmIzQzOzk3LDcgQEAgc3RydWN0IHB1YmxpY2F0aW9uIHtcbiAgKiBAY2x1c3Rlcl9zY29wZTogYWxsIGxvY2FsIHB1YmxpY2F0aW9ucyB3aXRoIGNsdXN0ZXIgc2NvcGVcbiAgKiAgICAgICAgICAgICAgIC0gdXNlZCBieSBuYW1lX2Rpc3RyIHRvIHNlbmQgYnVsayB1cGRhdGVzIHRvIG5ldyBub2Rlc1xuICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgZHVyaW5nIHJlLWluaXQgb2YgbmFtZSB0YWJsZVxuLSAqIEBjbHVzdGVyX3Njb3BlX2xvY2s6IGxvY2sgZm9yIGFjY2Vzc2luZyBAY2x1c3Rlcl9zY29wZVxuLSAqIEBsb2NhbF9wdWJsX2NvdW50OiBudW1iZXIgb2YgcHVibGljYXRpb25zIGlzc3VlZCBieSB0aGlzIG5vZGVcbiYjNDM7ICogQGxvY2FsX3B1YmxfY291bnQ6IHRoZSBudW1iZXIgb2YgdXNlciYjMzk7cyBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZVxuICAqIEByY19kZXN0czogZGVzdGluYXRpb24gbm9kZSBjb3VudGVyXG4gICogQHNuZF9ueHQ6IG5leHQgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHVzZWRcbiAgKi9cbkBAIC0xMDcsNyAmIzQzOzEwNiw2IEBAIHN0cnVjdCBuYW1lX3RhYmxlIHtcbiBcdHN0cnVjdCBobGlzdF9oZWFkIHNlcnZpY2VzW1RJUENfTkFNRVRCTF9TSVpFXTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbm9kZV9zY29wZTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgY2x1c3Rlcl9zY29wZTtcbi1cdHJ3bG9ja190IGNsdXN0ZXJfc2NvcGVfbG9jaztcbiBcdHUzMiBsb2NhbF9wdWJsX2NvdW50O1xuIFx0dTMyIHJjX2Rlc3RzO1xuIFx0dTMyIHNuZF9ueHQ7XG5AQCAtMTI2LDEzICYjNDM7MTI0LDE1IEBAIGJvb2wgdGlwY19uYW1ldGJsX2xvb2t1cF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiB2b2lkIHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2dyb3VwICpncnAsXG4gXHRcdFx0ICAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhKTtcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuLVx0XHRcdFx0XHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4mIzQzO1x0XHRcdFx0XHQgdTMyIGtleSwgaW50ICplcnIpO1xuIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdCAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4tXHRcdFx0XHRcdCAgICAgdTMyIGtleSk7XG4mIzQzO1x0XHRcdFx0XHQgICAgIHUzMiBrZXksIGludCAqZXJyKTtcbiYjNDM7aW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldCk7XG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcmVtb3ZlX3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmV0LmMgYi9uZXQvdGlwYy9uZXQuY1xuaW5kZXggN2U2NWQwYjBjNGE4ZC4uN2EyYzFlNjdhY2EzZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uZXQuY1xuQEAgLTExMCwxMSAmIzQzOzExMCwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTtcbiBcbiBpbnQgdGlwY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpub2RlX2lkLCB1MzIgYWRkcilcbiB7XG4mIzQzO1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4mIzQzO1xuIFx0aWYgKHRpcGNfb3duX2lkKG5ldCkpIHtcbiBcdFx0cHJfaW5mbyhcJiMzNDtDYW5ub3QgY29uZmlndXJlIG5vZGUgaWRlbnRpdHkgdHdpY2VcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXHRwcl9pbmZvKFwmIzM0O1N0YXJ0ZWQgaW4gbmV0d29yayBtb2RlXFxuXCYjMzQ7KTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQsIDApO1xuIFxuIFx0aWYgKG5vZGVfaWQpXG4gXHRcdHRpcGNfc2V0X25vZGVfaWQobmV0LCBub2RlX2lkKTtcbkBAIC0xMjUsOCAmIzQzOzEyOCw4IEBAIGludCB0aXBjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdTggKm5vZGVfaWQsIHUzMiBhZGRyKVxuIFxuIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4ge1xuLVx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4gXHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzayA9IHswLCBhZGRyfTtcbiYjNDM7XHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCB0aXBjX3VhZGRyIHVhO1xuIFxuIFx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG5AQCAtMTM4LDcgJiM0MzsxNDEsMTEgQEAgc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcbiBcdHRpcGNfbmFtZWRfcmVpbml0KG5ldCk7XG4gXHR0aXBjX3NrX3JlaW5pdChuZXQpO1xuIFx0dGlwY19tb25fcmVpbml0X3NlbGYobmV0KTtcbi1cdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBhZGRyKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQsIDEpO1xuJiM0MztcdC8qIFJlZGlzdHJpYnV0ZSBidWxrIG9mIHB1YmxpY2F0aW9ucyB2aWEgbm9kZS11cCBldmVudCBvciBub2RlJiMzOTtzIHRpbWVyXG4mIzQzO1x0ICogaWYgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBmYWlscy5cbiYjNDM7XHQgKi9cbiYjNDM7XHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgYWRkciwgTlVMTCk7XG4gfVxuIFxuIHZvaWQgdGlwY19uZXRfZmluYWxpemVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5jIGIvbmV0L3RpcGMvbm9kZS5jXG5pbmRleCA2ODNhMTM2ZTUzZWZjLi5mMWVlZTY3NGE2NzhlIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9ub2RlLmNcbkBAIC0xMTEsNiAmIzQzOzExMSw3IEBAIHN0cnVjdCB0aXBjX2JjbGlua19lbnRyeSB7XG4gICogQHBlZXJfbmV0OiBwZWVyJiMzOTtzIG5ldCBuYW1lc3BhY2VcbiAgKiBAcGVlcl9oYXNoX21peDogaGFzaCBmb3IgdGhpcyBwZWVyIChGSVhNRSlcbiAgKiBAY3J5cHRvX3J4OiBSWCBjcnlwdG8gaGFuZGxlclxuJiM0MzsgKiBAZGlzdF9idWxrOiBmbGFnIHRvIHJlZGlzdHJpYnV0ZSBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9uc1xuICAqL1xuIHN0cnVjdCB0aXBjX25vZGUge1xuIFx0dTMyIGFkZHI7XG5AQCAtMTQ1LDYgJiM0MzsxNDYsNyBAQCBzdHJ1Y3QgdGlwY19ub2RlIHtcbiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPXG4gXHRzdHJ1Y3QgdGlwY19jcnlwdG8gKmNyeXB0b19yeDtcbiAjZW5kaWZcbiYjNDM7XHRhdG9taWNfdCBkaXN0X2J1bGs7XG4gfTtcbiBcbiAvKiBOb2RlIEZTTSBzdGF0ZXMgYW5kIGV2ZW50czpcbkBAIC0zNDUsNiAmIzQzOzM0NywxNyBAQCBzdGF0aWMgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcbiBcdHJldHVybiBub2RlO1xuIH1cbiBcbiYjNDM7dm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRpcGNfbm9kZSAqbm9kZTtcbiYjNDM7XG4mIzQzO1x0bm9kZSA9IHRpcGNfbm9kZV9maW5kKG5ldCwgYWRkcik7XG4mIzQzO1x0aWYgKG5vZGUpIHtcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2bm9kZS1cdTAwM2VkaXN0X2J1bGssIDEpO1xuJiM0MztcdFx0dGlwY19ub2RlX3B1dChub2RlKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyogdGlwY19ub2RlX2ZpbmRfYnlfaWQgLSBsb2NhdGUgc3BlY2lmaWVkIG5vZGUgb2JqZWN0IGJ5IGl0cyAxMjgtYml0IGlkXG4gICogTm90ZTogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSB3aGVuIGEgZGlzY292ZXJ5IHJlcXVlc3QgZmFpbGVkXG4gICogdG8gZmluZCB0aGUgbm9kZSBieSBpdHMgMzItYml0IGlkLCBhbmQgaXMgbm90IHRpbWUgY3JpdGljYWxcbkBAIC0zOTMsNiAmIzQzOzQwNiwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrX2Zhc3Qoc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdHdyaXRlX3VubG9ja19iaChcdTAwMjZuLVx1MDAzZWxvY2spO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdGlwY19ub2RlX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbilcbiYjNDM7e1xuJiM0MztcdGludCBiZWFyZXJfaWQ7XG4mIzQzO1xuJiM0MztcdGZvciAoYmVhcmVyX2lkID0gMDsgYmVhcmVyX2lkIFx1MDAzYyBNQVhfQkVBUkVSUzsgYmVhcmVyX2lkJiM0MzsmIzQzOylcbiYjNDM7XHRcdHRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxuIFx0X19yZWxlYXNlcyhuLVx1MDAzZWxvY2spXG4ge1xuQEAgLTQwMiw2ICYjNDM7NDIzLDcgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxuIFx0c3RydWN0IGxpc3RfaGVhZCAqcHVibF9saXN0O1xuIFx0c3RydWN0IHRpcGNfdWFkZHIgdWE7XG4gXHR1MzIgYmVhcmVyX2lkLCBub2RlO1xuJiM0MztcdGludCByYyA9IDAsIGVyciA9IDA7XG4gXG4gXHRpZiAobGlrZWx5KCFmbGFncykpIHtcbiBcdFx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm4tXHUwMDNlbG9jayk7XG5AQCAtNDI1LDE2ICYjNDM7NDQ3LDI0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdFx0dGlwY19wdWJsX25vdGlmeShuZXQsIHB1YmxfbGlzdCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9OT0RFX1VQKVxuLVx0XHR0aXBjX25hbWVkX25vZGVfdXAobmV0LCBub2RlLCBuLVx1MDAzZWNhcGFiaWxpdGllcyk7XG4mIzQzO1x0XHRyYyA9IHRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tXHUwMDNlY2FwYWJpbGl0aWVzKTtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgVElQQ19OT1RJRllfTElOS19VUCkge1xuIFx0XHR0aXBjX21vbl9wZWVyX3VwKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTtcbi1cdFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIHNrLnJlZik7XG4mIzQzO1x0XHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmLCBcdTAwMjZlcnIpO1xuIFx0fVxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9MSU5LX0RPV04pIHtcbiBcdFx0dGlwY19tb25fcGVlcl9kb3duKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTtcbiBcdFx0dGlwY19uYW1ldGJsX3dpdGhkcmF3KG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBzay5yZWYpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHQvKiBNZW1vcnkgYWxsb2NhdGlvbiBoYXMgZmFpbGVkLiBCcmluZyB0aGUgbm9kZSBkb3duIHRvIHN0YXJ0IG92ZXIgYnVsa1xuJiM0MztcdCAqIGRpc3RyaWJ1dGlvbiB3aGVuIHRoZSBmaXJzdCBsaW5rIGlzIHVwIGFnYWluLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMClcbiYjNDM7XHRcdHRpcGNfbm9kZV9kb3duKG4pO1xuJiM0MztcdGVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUylcbiYjNDM7XHRcdHRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV9hc3NpZ25fcGVlcl9uZXQoc3RydWN0IHRpcGNfbm9kZSAqbiwgdTMyIGhhc2hfbWl4ZXMpXG5AQCAtNTY0LDYgJiM0Mzs1OTQsNyBAQCBzdHJ1Y3QgdGlwY19ub2RlICp0aXBjX25vZGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIsIHU4ICpwZWVyX2lkLFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bi1cdTAwM2VsaXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlcHVibF9saXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlY29ubl9za3MpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2bi1cdTAwM2VkaXN0X2J1bGssIDApO1xuIFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZuLVx1MDAzZWJjX2VudHJ5Lm5hbWVkcSk7XG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm4tXHUwMDNlYmNfZW50cnkuaW5wdXRxMSk7XG4gXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bi1cdTAwM2ViY19lbnRyeS5hcnJ2cSk7XG5AQCAtODAzLDcgJiM0Mzs4MzQsOCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdHN0cnVjdCB0aXBjX25vZGUgKm4gPSB0aW1lcl9jb250YWluZXJfb2YobiwgdCwgdGltZXIpO1xuIFx0c3RydWN0IHRpcGNfbGlua19lbnRyeSAqbGU7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHhtaXRxO1xuLVx0aW50IHJlbWFpbnMgPSBuLVx1MDAzZWxpbmtfY250O1xuJiM0MztcdGludCByZW1haW5zID0gMDtcbiYjNDM7XHRpbnQgZGlzdF9yYyA9IDA7XG4gXHRpbnQgYmVhcmVyX2lkO1xuIFx0aW50IHJjID0gMDtcbiBcbkBAIC04MTQsNiAmIzQzOzg0Niw5IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4mIzQzO1x0aWYgKGF0b21pY194Y2hnKFx1MDAyNm4tXHUwMDNlZGlzdF9idWxrLCAwKSlcbiYjNDM7XHRcdGRpc3RfcmMgPSB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUobi1cdTAwM2VuZXQsIG4tXHUwMDNlYWRkcik7XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfVElQQ19DUllQVE9cbiBcdC8qIFRha2UgYW55IGNyeXB0byBrZXkgcmVsYXRlZCBhY3Rpb25zIGZpcnN0ICovXG4gXHR0aXBjX2NyeXB0b190aW1lb3V0KG4tXHUwMDNlY3J5cHRvX3J4KTtcbkBAIC04MjUsNiAmIzQzOzg2MCw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0ICovXG4gXHR0aXBjX25vZGVfcmVhZF9sb2NrKG4pO1xuIFx0bi1cdTAwM2VrZWVwYWxpdmVfaW50diA9IDEwMDAwO1xuJiM0MztcdHJlbWFpbnMgPSBuLVx1MDAzZWxpbmtfY250O1xuIFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xuIFx0Zm9yIChiZWFyZXJfaWQgPSAwOyByZW1haW5zIFx1MDAyNlx1MDAyNiAoYmVhcmVyX2lkIFx1MDAzYyBNQVhfQkVBUkVSUyk7IGJlYXJlcl9pZCYjNDM7JiM0MzspIHtcbiBcdFx0dGlwY19ub2RlX3JlYWRfbG9jayhuKTtcbkBAIC04MzUsMTEgJiM0Mzs4NzEsMTMgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdFx0dGlwY19ub2RlX2NhbGN1bGF0ZV90aW1lcihuLCBsZS1cdTAwM2VsaW5rKTtcbiBcdFx0XHRyYyA9IHRpcGNfbGlua190aW1lb3V0KGxlLVx1MDAzZWxpbmssIFx1MDAyNnhtaXRxKTtcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsZS1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRyZW1haW5zLS07XG4mIzQzO1x0XHRcdGlmIChkaXN0X3JjIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJlbWFpbnMtLTtcbiBcdFx0fVxuIFx0XHR0aXBjX25vZGVfcmVhZF91bmxvY2sobik7XG4gXHRcdHRpcGNfYmVhcmVyX3htaXQobi1cdTAwM2VuZXQsIGJlYXJlcl9pZCwgXHUwMDI2eG1pdHEsIFx1MDAyNmxlLVx1MDAzZW1hZGRyLCBuKTtcbi1cdFx0aWYgKHJjIFx1MDAyNiBUSVBDX0xJTktfRE9XTl9FVlQpXG4mIzQzO1x0XHQvKiBGb3JjZSB0aGUgbm9kZSBkb3duIGluIGNhc2UgdGhlIHJlZGlzdHJpYnV0aW9uIGZhaWxlZCAqL1xuJiM0MztcdFx0aWYgKChyYyBcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKSB8fCBkaXN0X3JjIFx1MDAzYyAwKVxuIFx0XHRcdHRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7XG4gXHR9XG4gXHRtb2RfdGltZXIoXHUwMDI2bi1cdTAwM2V0aW1lciwgamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKG4tXHUwMDNla2VlcGFsaXZlX2ludHYpKTtcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmggYi9uZXQvdGlwYy9ub2RlLmhcbmluZGV4IDE1NGE1YmJiMGQyOWQuLjBmNzc3Y2ZlN2MwMWUgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9ub2RlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25vZGUuaFxuQEAgLTEyOCw0ICYjNDM7MTI4LDUgQEAgaW50IHRpcGNfbmxfbm9kZV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGludCB0aXBjX25sX25vZGVfZmx1c2hfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuICNlbmRpZlxuIHZvaWQgdGlwY19ub2RlX3ByZV9jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpleGl0X25ldCk7XG4mIzQzO3ZvaWQgdGlwY19ub2RlX3NldF9kaXN0X2J1bGsoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcik7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuY1xuaW5kZXggZDVkNzBlYjIzMGI1Ni4uNmI4M2JkZmM0MzljMyAxMDA2NDRcbi0tLSBhL25ldC90aXBjL3NvY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9zb2NrZXQuY1xuQEAgLTI5MTksNyAmIzQzOzI5MTksNyBAQCBzdGF0aWMgaW50IHRpcGNfc2tfcHVibGlzaChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcbiBcdFx0cmV0dXJuIC1FQUREUklOVVNFO1xuIFx0c2thZGRyLnJlZiA9IHRzay1cdTAwM2Vwb3J0aWQ7XG4gXHRza2FkZHIubm9kZSA9IHRpcGNfb3duX2FkZHIobmV0KTtcbi1cdHAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCBcdTAwMjZza2FkZHIsIGtleSk7XG4mIzQzO1x0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFx1MDAyNnNrYWRkciwga2V5LCBOVUxMKTtcbiBcdGlmICh1bmxpa2VseSghcCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19uYW1lZF9kaXN0cmlidXRlJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZXRibF9wdWJsaXNoJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZWRfbm9kZV91cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBUSVBDIGxvZ2ljIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBkdXJpbmcgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24uIEl0IGFkZHMgZXJyb3IgY29kZSByZXR1cm5zIHRvIGZ1bmN0aW9ucyBsaWtlIGB0aXBjX25hbWV0YmxfcHVibGlzaGAgYW5kIGB0aXBjX25hbWVkX25vZGVfdXBgLCBhbmQgaW50cm9kdWNlcyBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgIGFuZCBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCB0byBoYW5kbGUgYnVsayByZWRpc3RyaWJ1dGlvbiBvZiBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWE3YzNkNGI5YjQwYTkzZDMxMTQ1OWJjYmUyYmQ2NmJkOTIyZDM4NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA3OjAzOjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5jIGIvbmV0L3RpcGMvY29yZS5jCmluZGV4IDMxNTk3NWMzYmU4MTguLjBmMWQzZGRlYWUwOTUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9jb3JlLmMKQEAgLTYxLDYgJiM0Mzs2MSw5IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCB0aXBjX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAl0bi0mZ3Q7dHJpYWxfYWRkciA9IDA7CiAJdG4tJmd0O2FkZHJfdHJpYWxfZW5kID0gMDsKIAl0bi0mZ3Q7Y2FwYWJpbGl0aWVzID0gVElQQ19OT0RFX0NBUEFCSUxJVElFUzsKJiM0MzsJdG4tJmd0O250X3N0b3AgPSBmYWxzZTsKJiM0MzsJdG4tJmd0O250X3NlbGZfbm9kZV9leGlzdCA9IGZhbHNlOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7dG4tJmd0O25vZGVfYWRkcl9zZXQsIDApOwogCUlOSVRfV09SSygmYW1wO3RuLSZndDt3b3JrLCB0aXBjX25ldF9maW5hbGl6ZV93b3JrKTsKIAltZW1zZXQodG4tJmd0O25vZGVfaWQsIDAsIHNpemVvZih0bi0mZ3Q7bm9kZV9pZCkpOwogCW1lbXNldCh0bi0mZ3Q7bm9kZV9pZF9zdHJpbmcsIDAsIHNpemVvZih0bi0mZ3Q7bm9kZV9pZF9zdHJpbmcpKTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuaCBiL25ldC90aXBjL2NvcmUuaAppbmRleCA5Y2U1ZjlmZjZjYzAzLi45NzViMWQ0ODE4NmU2IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvY29yZS5oCkBAIC0xNDUsNiAmIzQzOzE0NSwxMiBAQCBzdHJ1Y3QgdGlwY19uZXQgewogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCS8qIFRoZSBudW1iZXJzIG9mIHdvcmsgcXVldWVzIGluIHNjaGVkdWxlICovCiAJYXRvbWljX3Qgd3FfY291bnQ7CiYjNDM7CS8qIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbm9kZSYjMzk7cyBhZGRyZXNzIGlzIHNldCAqLwomIzQzOwlhdG9taWNfdCBub2RlX2FkZHJfc2V0OwomIzQzOwkvKiBUaGUgbmFtZSB0YWJsZSBoYXMgc3RvcHBlZCB3b3JraW5nICovCiYjNDM7CWJvb2wgbnRfc3RvcDsKJiM0MzsJLyogTm9kZSYjMzk7cyBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBuYW1lIHRhYmxlICovCiYjNDM7CWJvb2wgbnRfc2VsZl9ub2RlX2V4aXN0OwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlwY19uZXQgKnRpcGNfbmV0KHN0cnVjdCBuZXQgKm5ldCkKZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuYyBiL25ldC90aXBjL25hbWVfZGlzdHIuYwppbmRleCBiYTRmNDkwNmUxM2I3Li44M2UzZWQ4ZjJjNTEyIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCkBAIC05NSw5ICYjNDM7OTUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKQogCQlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO3AtJmd0O2JpbmRpbmdfbm9kZSwgJmFtcDtudC0mZ3Q7bm9kZV9zY29wZSk7CiAJCXJldHVybiBOVUxMOwogCX0KLQl3cml0ZV9sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmYW1wO3AtJmd0O2JpbmRpbmdfbm9kZSwgJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiAJc2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgSVRFTV9TSVpFLCAwKTsKIAlpZiAoIXNrYikgewogCQlwcl93YXJuKCYjMzQ7UHVibGljYXRpb24gZGlzdHJpYnV0aW9uIGZhaWx1cmVcbiYjMzQ7KTsKQEAgLTEyMSw5ICYjNDM7MTE5LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnApCiAJc3RydWN0IGRpc3RyX2l0ZW0gKml0ZW07CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCXdyaXRlX2xvY2tfYmgoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKIAlsaXN0X2RlbCgmYW1wO3AtJmd0O2JpbmRpbmdfbm9kZSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiAJaWYgKHAtJmd0O3Njb3BlID09IFRJUENfTk9ERV9TQ09QRSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTE0Niw5ICYjNDM7MTQyLDE0IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKQogICogQGRub2RlOiBub2RlIHRvIGJlIHVwZGF0ZWQKICAqIEBwbHM6IGxpbmtlZCBsaXN0IG9mIHB1YmxpY2F0aW9uIGl0ZW1zIHRvIGJlIHBhY2tlZCBpbnRvIGJ1ZmZlciBjaGFpbgogICogQHNlcW5vOiBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgbWVzc2FnZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3MKJiM0MzsgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlCiYjNDM7ICoKICAqLwotc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCi0JCQkgICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pCiYjNDM7c3RhdGljIGludCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKJiM0MzsJCQkgICAgdTMyIGRub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbHMsIHUxNiBzZXFubykKIHsKIAlzdHJ1Y3QgcHVibGljYXRpb24gKnB1Ymw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CkBAIC0xNjQsOCAmIzQzOzE2NSw5IEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAogCQkJc2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgbXNnX3JlbSwKIAkJCQkJCWRub2RlKTsKIAkJCWlmICghc2tiKSB7CiYjNDM7CQkJCV9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpOwogCQkJCXByX3dhcm4oJiMzNDtCdWxrIHB1YmxpY2F0aW9uIGZhaWx1cmVcbiYjMzQ7KTsKLQkJCQlyZXR1cm47CiYjNDM7CQkJCXJldHVybiAtRU5PQlVGUzsKIAkJCX0KIAkJCWhkciA9IGJ1Zl9tc2coc2tiKTsKIAkJCW1zZ19zZXRfYmNfYWNrX2ludmFsaWQoaGRyLCB0cnVlKTsKQEAgLTE5NSw2ICYjNDM7MTk3LDkwIEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAogCWhkciA9IGJ1Zl9tc2coc2tiX3BlZWtfdGFpbChsaXN0KSk7CiAJbXNnX3NldF9sYXN0X2J1bGsoaGRyKTsKIAltc2dfc2V0X25hbWVkX3NlcW5vKGhkciwgc2Vxbm8pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBidWlsZCBhIGxpc3Qgb2YgcHVibGljYXRpb25zIG5lZWQgdG8gYmUgZGlzdHJpYnV0ZWQKJiM0MzsgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZQomIzQzOyAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZQomIzQzOyAqIEBoZWFkOiBsaXN0IG9mIHB1YmxpY2F0aW9ucwomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3MKJiM0MzsgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlCiYjNDM7ICoKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLAomIzQzOwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoZWFkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7CiYjNDM7CXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwomIzQzOwomIzQzOwkvKiBOYW1lIHRhYmxlIGhhcyBiZWVuIGRlbGV0ZWQgYWZ0ZXIgbmFtZXNwYWNlIHRlYXJkb3duIG9yCiYjNDM7CSAqIFRJUEMgbW9kdWxlIGV4aXQuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkodG4tJmd0O250X3N0b3ApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIE5vZGUmIzM5O3Mgc2VsZi1hZGRyZXNzIGlzIG5vdCBzZXQgeWV0ICovCiYjNDM7CWlmICghYXRvbWljX3JlYWQoJmFtcDt0bi0mZ3Q7bm9kZV9hZGRyX3NldCkpIHsKJiM0MzsJCS8qIERlZmVyIHRoZSBkaXN0cmlidXRpb24gdG8gbm9kZSYjMzk7cyB0aW1lciAqLwomIzQzOwkJdGlwY19ub2RlX3NldF9kaXN0X2J1bGsobmV0LCBkbm9kZSk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQcmV2aW91cyBjYWxsIHRvIHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKCkgd2FzIHN1Y2Nlc3NmdWwuCiYjNDM7CSAqIFRoZSBub2RlJiMzOTtzIHNlbGYtYWRkcmVzcyBwdWJsaWNhdGlvbiB3YXMgYWRkZWQgdG8gJiMzOTtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSYjMzk7LgomIzQzOwkgKiBTbywgJiMzOTtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSYjMzk7IGlzIG5vdCBlbXB0eSBub3cuIEdvIHRvIGRpc3RyaWJ1dGlvbi4KJiM0MzsJICovCiYjNDM7CWlmICh0bi0mZ3Q7bnRfc2VsZl9ub2RlX2V4aXN0KQomIzQzOwkJZ290byBkaXN0cmlidXRlOwomIzQzOwomIzQzOwlpZiAodGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIobmV0KSkKJiM0MzsJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsKJiM0MzsJdG4tJmd0O250X3NlbGZfbm9kZV9leGlzdCA9IHRydWU7CiYjNDM7CiYjNDM7ZGlzdHJpYnV0ZToKJiM0MzsJaWYgKG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBoZWFkLCBkbm9kZSwKJiM0MzsJCQkgICAgICZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGUsIG50LSZndDtzbmRfbnh0KSA9PSAtRU5PQlVGUykKJiM0MzsJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHRpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGRpc3RyaWJ1dGUgYWxsIHB1YmxpY2F0aW9ucyB0byBzcGVjaWZpZWQgbm9kZQomIzQzOyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgomIzQzOyAqLwomIzQzO2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkOwomIzQzOwlpbnQgcmMgPSAwOwomIzQzOwomIzQzOwlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtoZWFkKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiYjNDM7CXJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgJmFtcDtoZWFkKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKJiM0MzsJaWYgKCFyYyAmYW1wOyZhbXA7ICFza2JfcXVldWVfZW1wdHkoJmFtcDtoZWFkKSkgewomIzQzOwkJcmMgPSB0aXBjX25vZGVfeG1pdChuZXQsICZhbXA7aGVhZCwgZG5vZGUsIDApOwomIzQzOwkJLyogVGhlIGxpbmsgaXMgY29uZ2VzdGVkIGFmdGVyIHRoZSBsaXN0IGlzIGluc2VydGVkIGludG8gdGhlCiYjNDM7CQkgKiBsaW5rJiMzOTtzIHNlbmQgcXVldWUuIFJldHVybiAwLCBhcyB0aGlzIGlzIG5vcm1hbC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHJjID09IC1FTElOS0NPTkcpCiYjNDM7CQkJcmMgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0yMDIsMjUgJiM0MzsyODgsMzYgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCiAgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZQogICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlCiAgKiBAY2FwYWJpbGl0aWVzOiBwZWVyIG5vZGUmIzM5O3MgY2FwYWJpbGl0aWVzCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgogICovCi12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcykKJiM0MztpbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKQogewogCXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwogCXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCBza19idWZmX2hlYWQgaGVhZDsKLQl1MTYgc2Vxbm87CiYjNDM7CWludCByYyA9IDA7CiAKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtoZWFkKTsKIAlzcGluX2xvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKIAlpZiAoIShjYXBhYmlsaXRpZXMgJmFtcDsgVElQQ19OQU1FRF9CQ0FTVCkpCiAJCW50LSZndDtyY19kZXN0cyYjNDM7JiM0Mzs7Ci0Jc2Vxbm8gPSBudC0mZ3Q7c25kX254dDsKJiM0MzsKJiM0MzsJcmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCAmYW1wO2hlYWQpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiYjNDM7CWlmICghcmMgJmFtcDsmYW1wOyAhc2tiX3F1ZXVlX2VtcHR5KCZhbXA7aGVhZCkpIHsKJiM0MzsJCXJjID0gdGlwY19ub2RlX3htaXQobmV0LCAmYW1wO2hlYWQsIGRub2RlLCAwKTsKJiM0MzsJCS8qIFRoZSBsaW5rIGlzIGNvbmdlc3RlZCBhZnRlciB0aGUgbGlzdCBpcyBpbnNlcnRlZCBpbnRvIHRoZQomIzQzOwkJICogbGluayYjMzk7cyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyYyA9PSAtRUxJTktDT05HKQomIzQzOwkJCXJjID0gMDsKJiM0MzsJfQogCi0JcmVhZF9sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7Ci0JbmFtZWRfZGlzdHJpYnV0ZShuZXQsICZhbXA7aGVhZCwgZG5vZGUsICZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGUsIHNlcW5vKTsKLQl0aXBjX25vZGVfeG1pdChuZXQsICZhbXA7aGVhZCwgZG5vZGUsIDApOwotCXJlYWRfdW5sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiYjNDM7CXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0yOTksNyAmIzQzOzM5Niw3IEBAIHN0YXRpYyBib29sIHRpcGNfdXBkYXRlX25hbWV0Ymwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZGlzdHJfaXRlbSAqaSwKIAlzay5ub2RlID0gbm9kZTsKIAogCWlmIChkdHlwZSA9PSBQVUJMSUNBVElPTikgewotCQlwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgJmFtcDt1YSwgJmFtcDtzaywga2V5KTsKJiM0MzsJCXAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBrZXksIE5VTEwpOwogCQlpZiAocCkgewogCQkJdGlwY19ub2RlX3N1YnNjcmliZShuZXQsICZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlLCBub2RlKTsKIAkJCXJldHVybiB0cnVlOwpAQCAtNDE2LDUgJiM0Mzs1MTMsNiBAQCB2b2lkIHRpcGNfbmFtZWRfcmVpbml0KHN0cnVjdCBuZXQgKm5ldCkKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCAmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlLCBiaW5kaW5nX25vZGUpCiAJCXAtJmd0O3NrLm5vZGUgPSBzZWxmOwogCW50LSZndDtyY19kZXN0cyA9IDA7CiYjNDM7CXRuLSZndDtudF9zdG9wID0gZmFsc2U7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaAppbmRleCBjNjc3ZjZmMDgyZGZiLi4yMDQzMDk2YWU5NjdkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oCkBAIC02OSwxMSAmIzQzOzY5LDEyIEBAIHN0cnVjdCBkaXN0cl9pdGVtIHsKIAogc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7CiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7Ci12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7CiYjNDM7aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7CiB2b2lkIHRpcGNfbmFtZWRfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbmFtZWRxLAogCQkgICAgdTE2ICpyY3Zfbnh0LCBib29sICpvcGVuKTsKIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KTsKIHZvaWQgdGlwY19wdWJsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKm5zdWJfbGlzdCwKIAkJICAgICAgdTMyIGFkZHIsIHUxNiBjYXBhYmlsaXRpZXMpOwomIzQzO2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuYwppbmRleCAyNTNjNzJkMTM2NmViLi5iZWVkNDBhMjEzNjhhIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jCkBAIC0zMjksNyAmIzQzOzMyOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYywKIAogc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkgICAgIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLAotCQkJCSAgICAgc3RydWN0IHB1YmxpY2F0aW9uICpwKQomIzQzOwkJCQkgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcCwgaW50ICplcnIpCiB7CiAJc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uICpzdWIsICp0bXA7CiAJc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyOwpAQCAtMzM5LDEwICYjNDM7MzM5LDEyIEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJYm9vbCByZXMgPSBmYWxzZTsKIAl1MzIga2V5ID0gcC0mZ3Q7a2V5OwogCi0Jc3Bpbl9sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwogCXNyID0gdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzYywgcCk7Ci0JaWYgKCFzcikKLQkJZ290byAgZXhpdDsKJiM0MzsJaWYgKCFzcikgewomIzQzOwkJaWYgKGVycikKJiM0MzsJCQkqZXJyID0gLUVOT0JVRlM7CiYjNDM7CQlnb3RvIGV4aXQ7CiYjNDM7CX0KIAogCWZpcnN0ID0gbGlzdF9lbXB0eSgmYW1wO3NyLSZndDthbGxfcHVibCk7CiAKQEAgLTM1Myw2ICYjNDM7MzU1LDggQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIGJpbmQgZHVwbGljYXRlICV1LCV1LCV1LyV1OiV1LyV1XG4mIzM0OywKIAkJCQkgcC0mZ3Q7c3IudHlwZSwgcC0mZ3Q7c3IubG93ZXIsIHAtJmd0O3NyLnVwcGVyLAogCQkJCSBub2RlLCBwLSZndDtzay5yZWYsIGtleSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJKmVyciA9IC1FRVhJU1Q7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CkBAIC0zNzEsNyAmIzQzOzM3NSw2IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJaWYgKCFyZXMpCiAJCXByX3dhcm4oJiMzNDtGYWlsZWQgdG8gYmluZCB0byAldSwldSwldVxuJiMzNDssCiAJCQlwLSZndDtzci50eXBlLCBwLSZndDtzci5sb3dlciwgcC0mZ3Q7c3IudXBwZXIpOwotCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTQ3OCwyMCAmIzQzOzQ4MSwzMyBAQCBzdGF0aWMgc3RydWN0IHRpcGNfc2VydmljZSAqdGlwY19zZXJ2aWNlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LAogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCi0JCQkJCSAgICAgdTMyIGtleSkKJiM0MzsJCQkJCSAgICAgdTMyIGtleSwgaW50ICplcnIpCiB7CiAJc3RydWN0IHRpcGNfc2VydmljZSAqc2M7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwOwogCiAJcCA9IHRpcGNfcHVibF9jcmVhdGUodWEsIHNrLCBrZXkpOwotCWlmICghcCkKJiM0MzsJaWYgKCFwKSB7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCSplcnIgPSAtRU5PQlVGUzsKIAkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KIAogCXNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCB1YSk7CiAJaWYgKCFzYykKIAkJc2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgdWEpOwotCWlmIChzYyAmYW1wOyZhbXA7IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwKSkKLQkJcmV0dXJuIHA7CiYjNDM7CiYjNDM7CWlmIChzYykgewomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwomIzQzOwkJaWYgKHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwLCBlcnIpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CQkJcmV0dXJuIHA7CiYjNDM7CQl9CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3NjLSZndDtsb2NrKTsKJiM0MzsJfSBlbHNlIGlmIChlcnIpIHsKJiM0MzsJCSplcnIgPSAtRU5PQlVGUzsKJiM0MzsJfQomIzQzOwogCWtmcmVlKHApOwogCXJldHVybiBOVUxMOwogfQpAQCAtNzYwLDI2ICYjNDM7Nzc2LDU1IEBAIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCwKIC8qIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIHNlcnZpY2UgYmluZGluZyB0byBuYW1lIHRhYmxlCiAgKi8KIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCi0JCQkJCSBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpCiYjNDM7CQkJCQkgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLAomIzQzOwkJCQkJIHUzMiBrZXksIGludCAqZXJyKQogewogCXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwomIzQzOwl1MzIgbWF4X3VzZXJfcHViID0gVElQQ19NQVhfUFVCTCAtIDE7CiAJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKJiM0MzsJYm9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7CiYjNDM7CWludCBlcnJvciA9IDA7CiAJdTMyIHJjX2Rlc3RzOwogCiYjNDM7CWlmICh1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgfHwgdWEtJmd0O3NyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8CiYjNDM7CSAgICB1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpCiYjNDM7CQlwcm90b2NvbF90eXBlID0gdHJ1ZTsKJiM0MzsKIAlzcGluX2xvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKJiM0MzsJaWYgKHByb3RvY29sX3R5cGUpCiYjNDM7CQlnb3RvIGluc2VydDsKIAotCWlmIChudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCAmZ3Q7PSBUSVBDX01BWF9QVUJMKSB7Ci0JCXByX3dhcm4oJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcbiYjMzQ7LCBUSVBDX01BWF9QVUJMKTsKJiM0MzsJLyogUmVzZXJ2ZSBvbmUgZW50cnkgZm9yIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlIGJlY2F1c2UgaXQgaGFzIGNsdXN0ZXIKJiM0MzsJICogc2NvcGUgYW5kIGl0IGlzIGRpc3RyaWJ1dGVkIGluIGJ1bGsuIFNvLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdXNlciYjMzk7cwomIzQzOwkgKiBwdWJsaWNhdGlvbnMgaXMgKFRJUENfTUFYX1BVQkwgLSAxKS4KJiM0MzsJICovCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCAmZ3Q7PSBtYXhfdXNlcl9wdWIpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcbiYjMzQ7LCBtYXhfdXNlcl9wdWIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0JcCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIHVhLCBzaywga2V5KTsKJiM0MztpbnNlcnQ6CiYjNDM7CXAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSwgJmFtcDtlcnJvcik7CiAJaWYgKHApIHsKLQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQmIzQzOyYjNDM7OwomIzQzOwkJLyogTm90IGNvdW50IG5vZGUgc3RhdGUsIGxpbmsgc3RhdGUgYW5kIHRvcG9sb2d5IHNlcnZlciB0eXBlcwomIzQzOwkJICogc28gdGhhdCBtYXhpbXVtIG50LSZndDtsb2NhbF9wdWJsX2NvdW50IGRvZXMgbm90IHByZXZlbnQKJiM0MzsJCSAqIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgZnJvbSBiZWluZyBpbnNlcnRlZCBpbnRvIHRoZSBuYW1lCiYjNDM7CQkgKiB0YWJsZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFwcm90b2NvbF90eXBlKQomIzQzOwkJCW50LSZndDtsb2NhbF9wdWJsX2NvdW50JiM0MzsmIzQzOzsKIAkJc2tiID0gdGlwY19uYW1lZF9wdWJsaXNoKG5ldCwgcCk7CiYjNDM7CQkvKiBMb2NhbC1zY29wZSBwdWJsaWNhdGlvbiBpcyBub3QgcHVibGlzaGVkIChza2IgaXMgTlVMTCksIG9ubHkKJiM0MzsJCSAqIGNsdXN0ZXItY29wZSBvbmUgaXMuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghc2tiICZhbXA7JmFtcDsgcC0mZ3Q7c2NvcGUgPT0gVElQQ19DTFVTVEVSX1NDT1BFICZhbXA7JmFtcDsgZXJyKQomIzQzOwkJCSplcnIgPSAtRU5PQlVGUzsKJiM0MzsJfSBlbHNlIGlmICgoZXJyb3IgPT0gLUVOT0JVRlMpICZhbXA7JmFtcDsgZXJyKSB7CiYjNDM7CQkqZXJyID0gLUVOT0JVRlM7CiAJfQomIzQzOwogCXJjX2Rlc3RzID0gbnQtJmd0O3JjX2Rlc3RzOwogZXhpdDoKIAlzcGluX3VubG9ja19iaCgmYW1wO3RuLSZndDtuYW1ldGJsX2xvY2spOwpAQCAtNzg3LDcgJiM0Mzs4MzIsMTAyIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAJaWYgKHNrYikKIAkJdGlwY19ub2RlX2Jyb2FkY2FzdChuZXQsIHNrYiwgcmNfZGVzdHMpOwogCXJldHVybiBwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiAtIGluc2VydCBwdWJsaWNhdGlvbiBvZiBub2RlJiMzOTtzIHNlbGYgYWRkcmVzcwomIzQzOyAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgomIzQzOyAqLwomIzQzO2ludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTsKJiM0MzsJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiYjNDM7CXN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrOwomIzQzOwlzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3I7CiYjNDM7CXN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjOwomIzQzOwlib29sIHNjX2NyZWF0ZWQgPSBmYWxzZTsKJiM0MzsJc3RydWN0IHB1YmxpY2F0aW9uICpwOwomIzQzOwlzdHJ1Y3QgdGlwY191YWRkciB1YTsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CXNrLnJlZiA9IDA7CiYjNDM7CXNrLm5vZGUgPSB0bi0mZ3Q7bm9kZV9hZGRyOwomIzQzOwl0aXBjX3VhZGRyKCZhbXA7dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLAomIzQzOwkJICAgVElQQ19OT0RFX1NUQVRFLCB0bi0mZ3Q7bm9kZV9hZGRyLCB0bi0mZ3Q7bm9kZV9hZGRyKTsKJiM0MzsJc2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsICZhbXA7dWEpOwomIzQzOwlpZiAoIXNjKSB7CiYjNDM7CQlzYyA9IHRpcGNfc2VydmljZV9jcmVhdGUobmV0LCAmYW1wO3VhKTsKJiM0MzsJCWlmICghc2MpCiYjNDM7CQkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwkJc2NfY3JlYXRlZCA9IHRydWU7CiYjNDM7CX0KIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CS8qIENoZWNrIHdoZXRoZXIgYSByYW5nZSBleGlzdHMgaW4gdGhlIG5hbWUgdGFibGUgd2l0aAomIzQzOwkgKiBsb3dlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyLCB1cHBlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyLCBhbmQgdHlwZQomIzQzOwkgKiBUSVBDX05PREVfU1RBVEUgKDApLiBJZiAmIzM5O3NyJiMzOTsgaXMgbm90IE5VTEwsIHRoaXMgcmFuZ2UgZXhpc3RzCiYjNDM7CSAqIGR1ZSB0byBhIHByZXZpb3VzIGNhbGwgdG8gdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoKQomIzQzOwkgKiBvciB0aXBjX25ldF9maW5hbGl6ZSgpLgomIzQzOwkgKgomIzQzOwkgKiBOb3RlIHRoYXQgdXNlciBhcHBsaWNhdGlvbnMgY2FuIG9ubHkgaW5zZXJ0IHR5cGVzIGdyZWF0ZXIgdGhhbgomIzQzOwkgKiBvciBlcXVhbCB0byA2NCAoVElQQ19SRVNFUlZFRF9UWVBFUyksIGFzIGVuZm9yY2VkIGJ5IHRpcGNfYmluZCgpLgomIzQzOwkgKiBSZW1vdGUgbm9kZXMgYWxzbyBvbmx5IHNlbmQgcHJvdG9jb2wgcHVibGljYXRpb25zIHdpdGggdHlwZQomIzQzOwkgKiBUSVBDX05PREVfU1RBVEUgKDApLCB3aXRoIGJvdGggbG93ZXIgYW5kIHVwcGVyIHNldCB0byB0aGUgcmVtb3RlCiYjNDM7CSAqIG5vZGUmIzM5O3MgYWRkcmVzcy4gVGhlc2UgcmFuZ2VzIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGlzIG5vZGUmIzM5O3MKJiM0MzsJICogcmFuZ2UgYmVjYXVzZSBhIHJlbW90ZSBub2RlJiMzOTtzIGFkZHJlc3MgbXVzdCBkaWZmZXIgZnJvbSB0aGlzCiYjNDM7CSAqIG5vZGUmIzM5O3MgYWRkcmVzcyAodG4tJmd0O25vZGVfYWRkcikuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZXJlZm9yZSwgdGlwY191cGRhdGVfbmFtZXRibCgpIGNhbm5vdCBidWlsZCBhbmQgaW5zZXJ0IGEgcmVtb3RlCiYjNDM7CSAqIHB1YmxpY2F0aW9uIHdpdGggdGhlIHNhbWUgdHlwZSAoMCkgYW5kIHJhbmdlCiYjNDM7CSAqIChsb3dlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyLCB1cHBlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyKSBhcyB0aGlzIG5vZGUmIzM5O3MKJiM0MzsJICogc2VsZi1hZGRyZXNzIHB1YmxpY2F0aW9uIGluIHRoZSBuYW1lIHRhYmxlLgomIzQzOwkgKgomIzQzOwkgKiBCZWNhdXNlIHRoZSBjb21iaW5hdGlvbiBvZiB0eXBlIDAgYW5kCiYjNDM7CSAqIChsb3dlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyLCB1cHBlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyKSBpcyB1bmlxdWUgaW4gdGhlCiYjNDM7CSAqIG5hbWUgdGFibGUsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY2hlY2sgc2subm9kZSwgc2sucmVmLCBrZXksIG9yCiYjNDM7CSAqIGNsdXN0ZXJfc2NvcGUgbWVtYmVyc2hpcC4KJiM0MzsJICovCiYjNDM7CXNyID0gdGlwY19zZXJ2aWNlX2ZpbmRfcmFuZ2Uoc2MsICZhbXA7dWEpOwomIzQzOwkvKiAxLiB0aXBjX25ldF9maW5hbGl6ZV93b3JrKCkgaXMgbm90IHNjaGVkdWxlZCBiZWNhdXNlIG9mIG5hbWVzcGFjZQomIzQzOwkgKiAgICB0ZWFyZG93bi4KJiM0MzsJICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS0mZ3Q7IHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIGZhaWxlZAomIzQzOwkgKiAgICB0byBpbnNlcnQgbm9kZSBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaW50byBudC0mZ3Q7Y2x1c3Rlcl9zY29wZQomIzQzOwkgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4KJiM0MzsJICogMy4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS0mZ3Q7IHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdAomIzQzOwkgKiAgICBleGVjdXRlZCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXNyKSB7CiYjNDM7CQlwID0gdGlwY19wdWJsX2NyZWF0ZSgmYW1wO3VhLCAmYW1wO3NrLCB0bi0mZ3Q7bm9kZV9hZGRyKTsKJiM0MzsJCWlmICghcCkKJiM0MzsJCQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwkJaWYgKCF0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgJmFtcDtlcnIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoZXJyID09IC1FTk9CVUZTKSkgewomIzQzOwkJCWtmcmVlKHApOwomIzQzOwkJCWdvdG8gZXJyb3I7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlsaXN0X2FkZF90YWlsKCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlLCAmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlKTsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MztlcnJvcjoKJiM0MzsJCWlmIChzY19jcmVhdGVkKSB7CiYjNDM7CQkJaGxpc3RfZGVsX2luaXRfcmN1KCZhbXA7c2MtJmd0O3NlcnZpY2VfbGlzdCk7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CQkJa2ZyZWVfcmN1KHNjLCByY3UpOwomIzQzOwkJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwl9CiYjNDM7ZXhpdDoKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiAwOwogfQogCiAvKioKQEAgLTgxMCw3ICYjNDM7OTUwLDEwIEBAIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAogCiAJcCA9IHRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChuZXQsIHVhLCBzaywga2V5KTsKIAlpZiAocCkgewotCQludC0mZ3Q7bG9jYWxfcHVibF9jb3VudC0tOwomIzQzOwkJaWYgKHAtJmd0O3NyLnR5cGUgIT0gVElQQ19OT0RFX1NUQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwLSZndDtzci50eXBlICE9IFRJUENfTElOS19TVEFURSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcC0mZ3Q7c3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpCiYjNDM7CQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQtLTsKIAkJc2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApOwogCQlsaXN0X2RlbF9pbml0KCZhbXA7cC0mZ3Q7YmluZGluZ19zb2NrKTsKIAkJa2ZyZWVfcmN1KHAsIHJjdSk7CkBAIC04OTksNyAmIzQzOzEwNDIsNiBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KQogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtudC0mZ3Q7bm9kZV9zY29wZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSk7Ci0Jcndsb2NrX2luaXQoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKIAl0bi0mZ3Q7bmFtZXRibCA9IG50OwogCXNwaW5fbG9ja19pbml0KCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiAJcmV0dXJuIDA7CkBAIC05MTIsNiAmIzQzOzEwNTQsNyBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KQogICovCiBzdGF0aWMgdm9pZCB0aXBjX3NlcnZpY2VfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc2VydmljZSAqc2MpCiB7CiYjNDM7CXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzciwgKnRtcHI7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwLCAqdG1wOwogCkBAIC05MTksNiAmIzQzOzEwNjIsMTUgQEAgc3RhdGljIHZvaWQgdGlwY19zZXJ2aWNlX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjKQogCXJidHJlZV9wb3N0b3JkZXJfZm9yX2VhY2hfZW50cnlfc2FmZShzciwgdG1wciwgJmFtcDtzYy0mZ3Q7cmFuZ2VzLCB0cmVlX25vZGUpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgJmFtcDtzci0mZ3Q7YWxsX3B1YmwsIGFsbF9wdWJsKSB7CiAJCQl0aXBjX3NlcnZpY2VfcmVtb3ZlX3B1Ymwoc3IsICZhbXA7cC0mZ3Q7c2ssIHAtJmd0O2tleSk7CiYjNDM7CQkJLyogdGlwY19uYW1ldGJsX3dpdGhkcmF3KCkgZG9lcyBub3QgZGVsZXRlCiYjNDM7CQkJICogJiMzOTtwLSZndDtiaW5kaW5nX25vZGUmIzM5OyB3aXRoIHR5cGUgVElQQ19OT0RFX1NUQVRFIGFuZAomIzQzOwkJCSAqIHJhbmdlIFt0bi0mZ3Q7bm9kZV9hZGRyLCB0bi0mZ3Q7bm9kZV9hZGRyXSBmcm9tCiYjNDM7CQkJICogJiMzOTt0bi0mZ3Q7Y2x1c3Rlcl9zY29wZSYjMzk7LiBTbywgZGVsZXRlIGl0IGhlcmUuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHAtJmd0O3NyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgcC0mZ3Q7c3IubG93ZXIgPT0gdG4tJmd0O25vZGVfYWRkciAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHAtJmd0O3NyLnVwcGVyID09IHRuLSZndDtub2RlX2FkZHIpCiYjNDM7CQkJCWxpc3RfZGVsKCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlKTsKIAkJCWtmcmVlX3JjdShwLCByY3UpOwogCQl9CiAJCXJiX2VyYXNlX2F1Z21lbnRlZCgmYW1wO3NyLSZndDt0cmVlX25vZGUsICZhbXA7c2MtJmd0O3JhbmdlcywgJmFtcDtzcl9jYWxsYmFja3MpOwpAQCAtOTQ5LDYgJiM0MzsxMTAxLDggQEAgdm9pZCB0aXBjX25hbWV0Ymxfc3RvcChzdHJ1Y3QgbmV0ICpuZXQpCiAJCQl0aXBjX3NlcnZpY2VfZGVsZXRlKG5ldCwgc2VydmljZSk7CiAJCX0KIAl9CiYjNDM7CXRuLSZndDtudF9zdG9wID0gdHJ1ZTsKJiM0MzsJdG4tJmd0O250X3NlbGZfbm9kZV9leGlzdCA9IGZhbHNlOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiAKIAkvKiBUT0RPOiBjbGVhciB0bi0mZ3Q7bmFtZXRibCwgaW1wbGVtZW50IHByb3BlciBSQ1UgcnVsZXMgPyAqLwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV90YWJsZS5oIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oCmluZGV4IDdmZjZlZWViYWFlNjQuLjQzOTBlNzlhNDY2MGUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmgKQEAgLTk3LDggJiM0Mzs5Nyw3IEBAIHN0cnVjdCBwdWJsaWNhdGlvbiB7CiAgKiBAY2x1c3Rlcl9zY29wZTogYWxsIGxvY2FsIHB1YmxpY2F0aW9ucyB3aXRoIGNsdXN0ZXIgc2NvcGUKICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgdG8gc2VuZCBidWxrIHVwZGF0ZXMgdG8gbmV3IG5vZGVzCiAgKiAgICAgICAgICAgICAgIC0gdXNlZCBieSBuYW1lX2Rpc3RyIGR1cmluZyByZS1pbml0IG9mIG5hbWUgdGFibGUKLSAqIEBjbHVzdGVyX3Njb3BlX2xvY2s6IGxvY2sgZm9yIGFjY2Vzc2luZyBAY2x1c3Rlcl9zY29wZQotICogQGxvY2FsX3B1YmxfY291bnQ6IG51bWJlciBvZiBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZQomIzQzOyAqIEBsb2NhbF9wdWJsX2NvdW50OiB0aGUgbnVtYmVyIG9mIHVzZXImIzM5O3MgcHVibGljYXRpb25zIGlzc3VlZCBieSB0aGlzIG5vZGUKICAqIEByY19kZXN0czogZGVzdGluYXRpb24gbm9kZSBjb3VudGVyCiAgKiBAc25kX254dDogbmV4dCBzZXF1ZW5jZSBudW1iZXIgdG8gYmUgdXNlZAogICovCkBAIC0xMDcsNyAmIzQzOzEwNiw2IEBAIHN0cnVjdCBuYW1lX3RhYmxlIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBzZXJ2aWNlc1tUSVBDX05BTUVUQkxfU0laRV07CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlX3Njb3BlOwogCXN0cnVjdCBsaXN0X2hlYWQgY2x1c3Rlcl9zY29wZTsKLQlyd2xvY2tfdCBjbHVzdGVyX3Njb3BlX2xvY2s7CiAJdTMyIGxvY2FsX3B1YmxfY291bnQ7CiAJdTMyIHJjX2Rlc3RzOwogCXUzMiBzbmRfbnh0OwpAQCAtMTI2LDEzICYjNDM7MTI0LDE1IEBAIGJvb2wgdGlwY19uYW1ldGJsX2xvb2t1cF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCwKIAkJCSAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7CiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAotCQkJCQkgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTsKJiM0MzsJCQkJCSBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCiYjNDM7CQkJCQkgdTMyIGtleSwgaW50ICplcnIpOwogdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAJCQkgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpOwogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCi0JCQkJCSAgICAgdTMyIGtleSk7CiYjNDM7CQkJCQkgICAgIHUzMiBrZXksIGludCAqZXJyKTsKJiM0MztpbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KTsKIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAJCQkJCSAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmV0LmMgYi9uZXQvdGlwYy9uZXQuYwppbmRleCA3ZTY1ZDBiMGM0YThkLi43YTJjMWU2N2FjYTNkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uZXQuYwpAQCAtMTEwLDExICYjNDM7MTEwLDE0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpOwogCiBpbnQgdGlwY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpub2RlX2lkLCB1MzIgYWRkcikKIHsKJiM0MzsJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiYjNDM7CiAJaWYgKHRpcGNfb3duX2lkKG5ldCkpIHsKIAkJcHJfaW5mbygmIzM0O0Nhbm5vdCBjb25maWd1cmUgbm9kZSBpZGVudGl0eSB0d2ljZVxuJiMzNDspOwogCQlyZXR1cm4gLTE7CiAJfQogCXByX2luZm8oJiMzNDtTdGFydGVkIGluIG5ldHdvcmsgbW9kZVxuJiMzNDspOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7dG4tJmd0O25vZGVfYWRkcl9zZXQsIDApOwogCiAJaWYgKG5vZGVfaWQpCiAJCXRpcGNfc2V0X25vZGVfaWQobmV0LCBub2RlX2lkKTsKQEAgLTEyNSw4ICYjNDM7MTI4LDggQEAgaW50IHRpcGNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1OCAqbm9kZV9pZCwgdTMyIGFkZHIpCiAKIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpCiB7Ci0Jc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiAJc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2sgPSB7MCwgYWRkcn07CiYjNDM7CXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCB0aXBjX3VhZGRyIHVhOwogCiAJdGlwY191YWRkcigmYW1wO3VhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSwKQEAgLTEzOCw3ICYjNDM7MTQxLDExIEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpCiAJdGlwY19uYW1lZF9yZWluaXQobmV0KTsKIAl0aXBjX3NrX3JlaW5pdChuZXQpOwogCXRpcGNfbW9uX3JlaW5pdF9zZWxmKG5ldCk7Ci0JdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBhZGRyKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3RuLSZndDtub2RlX2FkZHJfc2V0LCAxKTsKJiM0MzsJLyogUmVkaXN0cmlidXRlIGJ1bGsgb2YgcHVibGljYXRpb25zIHZpYSBub2RlLXVwIGV2ZW50IG9yIG5vZGUmIzM5O3MgdGltZXIKJiM0MzsJICogaWYgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBmYWlscy4KJiM0MzsJICovCiYjNDM7CXRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgJmFtcDt1YSwgJmFtcDtzaywgYWRkciwgTlVMTCk7CiB9CiAKIHZvaWQgdGlwY19uZXRfZmluYWxpemVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmMgYi9uZXQvdGlwYy9ub2RlLmMKaW5kZXggNjgzYTEzNmU1M2VmYy4uZjFlZWU2NzRhNjc4ZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25vZGUuYwpAQCAtMTExLDYgJiM0MzsxMTEsNyBAQCBzdHJ1Y3QgdGlwY19iY2xpbmtfZW50cnkgewogICogQHBlZXJfbmV0OiBwZWVyJiMzOTtzIG5ldCBuYW1lc3BhY2UKICAqIEBwZWVyX2hhc2hfbWl4OiBoYXNoIGZvciB0aGlzIHBlZXIgKEZJWE1FKQogICogQGNyeXB0b19yeDogUlggY3J5cHRvIGhhbmRsZXIKJiM0MzsgKiBAZGlzdF9idWxrOiBmbGFnIHRvIHJlZGlzdHJpYnV0ZSBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9ucwogICovCiBzdHJ1Y3QgdGlwY19ub2RlIHsKIAl1MzIgYWRkcjsKQEAgLTE0NSw2ICYjNDM7MTQ2LDcgQEAgc3RydWN0IHRpcGNfbm9kZSB7CiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPCiAJc3RydWN0IHRpcGNfY3J5cHRvICpjcnlwdG9fcng7CiAjZW5kaWYKJiM0MzsJYXRvbWljX3QgZGlzdF9idWxrOwogfTsKIAogLyogTm9kZSBGU00gc3RhdGVzIGFuZCBldmVudHM6CkBAIC0zNDUsNiAmIzQzOzM0NywxNyBAQCBzdGF0aWMgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcikKIAlyZXR1cm4gbm9kZTsKIH0KIAomIzQzO3ZvaWQgdGlwY19ub2RlX3NldF9kaXN0X2J1bGsoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0aXBjX25vZGUgKm5vZGU7CiYjNDM7CiYjNDM7CW5vZGUgPSB0aXBjX25vZGVfZmluZChuZXQsIGFkZHIpOwomIzQzOwlpZiAobm9kZSkgewomIzQzOwkJYXRvbWljX3NldCgmYW1wO25vZGUtJmd0O2Rpc3RfYnVsaywgMSk7CiYjNDM7CQl0aXBjX25vZGVfcHV0KG5vZGUpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyogdGlwY19ub2RlX2ZpbmRfYnlfaWQgLSBsb2NhdGUgc3BlY2lmaWVkIG5vZGUgb2JqZWN0IGJ5IGl0cyAxMjgtYml0IGlkCiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gYSBkaXNjb3ZlcnkgcmVxdWVzdCBmYWlsZWQKICAqIHRvIGZpbmQgdGhlIG5vZGUgYnkgaXRzIDMyLWJpdCBpZCwgYW5kIGlzIG5vdCB0aW1lIGNyaXRpY2FsCkBAIC0zOTMsNiAmIzQzOzQwNiwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrX2Zhc3Qoc3RydWN0IHRpcGNfbm9kZSAqbikKIAl3cml0ZV91bmxvY2tfYmgoJmFtcDtuLSZndDtsb2NrKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRpcGNfbm9kZV9kb3duKHN0cnVjdCB0aXBjX25vZGUgKm4pCiYjNDM7ewomIzQzOwlpbnQgYmVhcmVyX2lkOwomIzQzOwomIzQzOwlmb3IgKGJlYXJlcl9pZCA9IDA7IGJlYXJlcl9pZCAmbHQ7IE1BWF9CRUFSRVJTOyBiZWFyZXJfaWQmIzQzOyYjNDM7KQomIzQzOwkJdGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pCiAJX19yZWxlYXNlcyhuLSZndDtsb2NrKQogewpAQCAtNDAyLDYgJiM0Mzs0MjMsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pCiAJc3RydWN0IGxpc3RfaGVhZCAqcHVibF9saXN0OwogCXN0cnVjdCB0aXBjX3VhZGRyIHVhOwogCXUzMiBiZWFyZXJfaWQsIG5vZGU7CiYjNDM7CWludCByYyA9IDAsIGVyciA9IDA7CiAKIAlpZiAobGlrZWx5KCFmbGFncykpIHsKIAkJd3JpdGVfdW5sb2NrX2JoKCZhbXA7bi0mZ3Q7bG9jayk7CkBAIC00MjUsMTYgJiM0Mzs0NDcsMjQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKQogCQl0aXBjX3B1Ymxfbm90aWZ5KG5ldCwgcHVibF9saXN0LCBub2RlLCBuLSZndDtjYXBhYmlsaXRpZXMpOwogCiAJaWYgKGZsYWdzICZhbXA7IFRJUENfTk9USUZZX05PREVfVVApCi0JCXRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tJmd0O2NhcGFiaWxpdGllcyk7CiYjNDM7CQlyYyA9IHRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tJmd0O2NhcGFiaWxpdGllcyk7CiAKIAlpZiAoZmxhZ3MgJmFtcDsgVElQQ19OT1RJRllfTElOS19VUCkgewogCQl0aXBjX21vbl9wZWVyX3VwKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTsKLQkJdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYpOwomIzQzOwkJdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYsICZhbXA7ZXJyKTsKIAl9CiAJaWYgKGZsYWdzICZhbXA7IFRJUENfTk9USUZZX0xJTktfRE9XTikgewogCQl0aXBjX21vbl9wZWVyX2Rvd24obmV0LCBub2RlLCBiZWFyZXJfaWQpOwogCQl0aXBjX25hbWV0Ymxfd2l0aGRyYXcobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYpOwogCX0KJiM0MzsKJiM0MzsJLyogTWVtb3J5IGFsbG9jYXRpb24gaGFzIGZhaWxlZC4gQnJpbmcgdGhlIG5vZGUgZG93biB0byBzdGFydCBvdmVyIGJ1bGsKJiM0MzsJICogZGlzdHJpYnV0aW9uIHdoZW4gdGhlIGZpcnN0IGxpbmsgaXMgdXAgYWdhaW4uCiYjNDM7CSAqLwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJdGlwY19ub2RlX2Rvd24obik7CiYjNDM7CWVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUykKJiM0MzsJCXRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV9hc3NpZ25fcGVlcl9uZXQoc3RydWN0IHRpcGNfbm9kZSAqbiwgdTMyIGhhc2hfbWl4ZXMpCkBAIC01NjQsNiAmIzQzOzU5NCw3IEBAIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkciwgdTggKnBlZXJfaWQsCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuLSZndDtsaXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO24tJmd0O3B1YmxfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuLSZndDtjb25uX3Nrcyk7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtuLSZndDtkaXN0X2J1bGssIDApOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5uYW1lZHEpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5pbnB1dHExKTsKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5hcnJ2cSk7CkBAIC04MDMsNyAmIzQzOzgzNCw4IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCXN0cnVjdCB0aXBjX25vZGUgKm4gPSB0aW1lcl9jb250YWluZXJfb2YobiwgdCwgdGltZXIpOwogCXN0cnVjdCB0aXBjX2xpbmtfZW50cnkgKmxlOwogCXN0cnVjdCBza19idWZmX2hlYWQgeG1pdHE7Ci0JaW50IHJlbWFpbnMgPSBuLSZndDtsaW5rX2NudDsKJiM0MzsJaW50IHJlbWFpbnMgPSAwOwomIzQzOwlpbnQgZGlzdF9yYyA9IDA7CiAJaW50IGJlYXJlcl9pZDsKIAlpbnQgcmMgPSAwOwogCkBAIC04MTQsNiAmIzQzOzg0Niw5IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCQlyZXR1cm47CiAJfQogCiYjNDM7CWlmIChhdG9taWNfeGNoZygmYW1wO24tJmd0O2Rpc3RfYnVsaywgMCkpCiYjNDM7CQlkaXN0X3JjID0gdGlwY19uYW1lZF9kaXN0cmlidXRlKG4tJmd0O25ldCwgbi0mZ3Q7YWRkcik7CiYjNDM7CiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPCiAJLyogVGFrZSBhbnkgY3J5cHRvIGtleSByZWxhdGVkIGFjdGlvbnMgZmlyc3QgKi8KIAl0aXBjX2NyeXB0b190aW1lb3V0KG4tJmd0O2NyeXB0b19yeCk7CkBAIC04MjUsNiAmIzQzOzg2MCw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCSAqLwogCXRpcGNfbm9kZV9yZWFkX2xvY2sobik7CiAJbi0mZ3Q7a2VlcGFsaXZlX2ludHYgPSAxMDAwMDsKJiM0MzsJcmVtYWlucyA9IG4tJmd0O2xpbmtfY250OwogCXRpcGNfbm9kZV9yZWFkX3VubG9jayhuKTsKIAlmb3IgKGJlYXJlcl9pZCA9IDA7IHJlbWFpbnMgJmFtcDsmYW1wOyAoYmVhcmVyX2lkICZsdDsgTUFYX0JFQVJFUlMpOyBiZWFyZXJfaWQmIzQzOyYjNDM7KSB7CiAJCXRpcGNfbm9kZV9yZWFkX2xvY2sobik7CkBAIC04MzUsMTEgJiM0Mzs4NzEsMTMgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAJCQl0aXBjX25vZGVfY2FsY3VsYXRlX3RpbWVyKG4sIGxlLSZndDtsaW5rKTsKIAkJCXJjID0gdGlwY19saW5rX3RpbWVvdXQobGUtJmd0O2xpbmssICZhbXA7eG1pdHEpOwogCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtsZS0mZ3Q7bG9jayk7Ci0JCQlyZW1haW5zLS07CiYjNDM7CQkJaWYgKGRpc3RfcmMgJmx0OyAwKQomIzQzOwkJCQlyZW1haW5zLS07CiAJCX0KIAkJdGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pOwogCQl0aXBjX2JlYXJlcl94bWl0KG4tJmd0O25ldCwgYmVhcmVyX2lkLCAmYW1wO3htaXRxLCAmYW1wO2xlLSZndDttYWRkciwgbik7Ci0JCWlmIChyYyAmYW1wOyBUSVBDX0xJTktfRE9XTl9FVlQpCiYjNDM7CQkvKiBGb3JjZSB0aGUgbm9kZSBkb3duIGluIGNhc2UgdGhlIHJlZGlzdHJpYnV0aW9uIGZhaWxlZCAqLwomIzQzOwkJaWYgKChyYyAmYW1wOyBUSVBDX0xJTktfRE9XTl9FVlQpIHx8IGRpc3RfcmMgJmx0OyAwKQogCQkJdGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTsKIAl9CiAJbW9kX3RpbWVyKCZhbXA7bi0mZ3Q7dGltZXIsIGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhuLSZndDtrZWVwYWxpdmVfaW50dikpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5oIGIvbmV0L3RpcGMvbm9kZS5oCmluZGV4IDE1NGE1YmJiMGQyOWQuLjBmNzc3Y2ZlN2MwMWUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25vZGUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9ub2RlLmgKQEAgLTEyOCw0ICYjNDM7MTI4LDUgQEAgaW50IHRpcGNfbmxfbm9kZV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogaW50IHRpcGNfbmxfbm9kZV9mbHVzaF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiAjZW5kaWYKIHZvaWQgdGlwY19ub2RlX3ByZV9jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpleGl0X25ldCk7CiYjNDM7dm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuYwppbmRleCBkNWQ3MGViMjMwYjU2Li42YjgzYmRmYzQzOWMzIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9zb2NrZXQuYwpAQCAtMjkxOSw3ICYjNDM7MjkxOSw3IEBAIHN0YXRpYyBpbnQgdGlwY19za19wdWJsaXNoKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKQogCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJc2thZGRyLnJlZiA9IHRzay0mZ3Q7cG9ydGlkOwogCXNrYWRkci5ub2RlID0gdGlwY19vd25fYWRkcihuZXQpOwotCXAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCAmYW1wO3NrYWRkciwga2V5KTsKJiM0MzsJcCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsICZhbXA7c2thZGRyLCBrZXksIE5VTEwpOwogCWlmICh1bmxpa2VseSghcCkpCiAJCXJldHVybiAtRUlOVkFMOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzQxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRJUEMgUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFRJUEMgc3Vic3lzdGVtIGluIHRoZSBMaW51eCBrZXJuZWwuIFNlZW1zIGxpa2UgYSBub24tdHJpdmlhbCBjaGFuZ2UsIHRvdWNoaW5nIGEgZ29vZCBjaHVuayBvZiB0aGUgY29yZSBjb2RlOiBgbmV0L3RpcGMvY29yZS5jYCwgYC5oYCwgYG5hbWVfZGlzdHIuY2AsIGAuaGAsIGBuYW1lX3RhYmxlLmNgLCBgLmhgLCBgbmV0LmNgLCBgbm9kZS5jYCwgYC5oYCwgYW5kIGBzb2NrZXQuY2AuIEJhc2VkIG9uIHRoZSBmaWxlIG1vZGlmaWNhdGlvbnMsIHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiBpbXByb3ZpbmcgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24gYW5kIGFkZHJlc3NpbmcgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzIHRoYXQgY3JvcCB1cCBkdXJpbmcgcHVibGljYXRpb24uCgpGcm9tIG15IHVuZGVyc3RhbmRpbmcsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgbmV3IGZpZWxkcyB0byB0aGUgYHN0cnVjdCB0aXBjX25ldGAgc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgYG50X3N0b3BgLCBgbnRfc2VsZl9ub2RlX2V4aXN0YCwgYW5kIGBub2RlX2FkZHJfc2V0YCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBjb25jZXJ0ZWQgZWZmb3J0IHRvIGltcHJvdmUgZXJyb3IgaGFuZGxpbmcgdGhyb3VnaG91dCB0aGUgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24gY29kZS4gSSBzZWUgY2hhbmdlcyB3aGVyZSBmdW5jdGlvbnMgdGhhdCBwcmV2aW91c2x5IGp1c3Qgc2lsZW50bHkgZmFpbGVkIGFyZSBub3cgcmV0dXJuaW5nIGVycm9yIGNvZGVzIOKAkyBgLUVOT0JVRlNgIGluIHRoZSBjYXNlIG9mIGBuYW1lZF9kaXN0cmlidXRlYCwgZm9yIGluc3RhbmNlLiBUaGVyZSYjMzk7cyBzb21lIHJlZmFjdG9yaW5nLCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZWAgYW5kIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgIGJlaW5nIGFkZGVkLCBhbmQgY2hhbmdlcyB0byBgdGlwY19uYW1lZF9ub2RlX3VwYCBhbmQgYHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibGAgbm93IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGVycm9ycy4gVGhlcmUgYXJlIGNoYW5nZXMgZm9yIGJ1bGsgcmVkaXN0cmlidXRpb24gaW4gYHRpcGNfbm9kZV90aW1lb3V0YCwgYXMgd2VsbCBhcyBhIG5ldyBmdW5jdGlvbiBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgLgoKVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBob3cgVElQQyBvcGVyYXRlcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBJIGtub3cgVElQQyBjYW4gYmUgdXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEdpdmVuIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbmQgdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcHJvYmxlbXMsIEkgdGhpbmsgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIGZsYWcgaXQgYXMgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQuIEJhc2VkIG9uIHRoZSBjaGFuZ2VzLCB0aGUgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIGFyZToKCiogICBgdGlwY19uYW1lZF9kaXN0cmlidXRlYAoqICAgYHRpcGNfbmFtZWRfbm9kZV91cGAKKiAgIGB0aXBjX25hbWV0YmxfcHVibGlzaGAKKiAgIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAKKiAgIGB0aXBjX25vZGVfdGltZW91dGAKKiAgIGB0aXBjX3NrX3B1Ymxpc2hgCgpUaG9zZSBzZWVtIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnRzIHdoZXJlIHdlIGNvdWxkIHRyaWdnZXIgdGhlc2UgZGlzdHJpYnV0aW9uL2FsbG9jYXRpb24gaXNzdWVzLiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9uczsgb2J2aW91c2x5LCBgQ09ORklHX1RJUENgIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgY29kZSB0byBldmVuIGJlIGNvbXBpbGVkLiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIHZlcmlmeSB0aGUgZGV0YWlscyBvZiBob3cgdGhlIHBhdGNoIGNoYW5nZXMgdGhvc2UgZnVuY3Rpb25zLCB0byBpbmZvcm0gdGhlIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19uYW1lZF9kaXN0cmlidXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL25hbWVfZGlzdHIuYz0xNTE9c3RhdGljIGludCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjA0LS8qKlxubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjIwNTogKiBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGJ1aWxkIGEgbGlzdCBvZiBwdWJsaWNhdGlvbnMgbmVlZCB0byBiZSBkaXN0cmlidXRlZFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTIwNi0gKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yMTQtICovXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MjE1OnN0YXRpYyBpbnQgX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjE2LVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGVhZClcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjU0LS8qKlxubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjI1NTogKiB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBkaXN0cmlidXRlIGFsbCBwdWJsaWNhdGlvbnMgdG8gc3BlY2lmaWVkIG5vZGVcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yNTYtICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2Vcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjYzLSAqL1xubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjI2NDppbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI2NS17XG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI3MS1cdHNwaW5fbG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjI3MjpcdHJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgXHUwMDI2aGVhZCk7XG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjczLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM9Mjk3PWludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTMwOC1cbm5ldC90aXBjL25hbWVfZGlzdHIuYzozMDk6XHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFx1MDAyNmhlYWQpO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTMxMC1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5oPTc2PXZvaWQgdGlwY19wdWJsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKm5zdWJfbGlzdCxcbm5ldC90aXBjL25hbWVfZGlzdHIuaC03Ny1cdFx0ICAgICAgdTMyIGFkZHIsIHUxNiBjYXBhYmlsaXRpZXMpO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5oOjc4OmludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5oLTc5LVxuLS1cbm5ldC90aXBjL25vZGUuYz04MzI9c3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTg0OS1cdGlmIChhdG9taWNfeGNoZyhcdTAwMjZuLVx1MDAzZWRpc3RfYnVsaywgMCkpXG5uZXQvdGlwYy9ub2RlLmM6ODUwOlx0XHRkaXN0X3JjID0gdGlwY19uYW1lZF9kaXN0cmlidXRlKG4tXHUwMDNlbmV0LCBuLVx1MDAzZWFkZHIpO1xubmV0L3RpcGMvbm9kZS5jLTg1MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY2MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaW52b2x2ZXMgYSBmZXcga2V5IHF1ZXN0aW9ucy4gRmlyc3QsIHdoYXQmIzM5O3MgaXRzIGludGVuZGVkIHJvbGUgd2l0aGluIHRoZSBUSVBDIChUcmFuc3BhcmVudCBJbnRlci1Qcm9jZXNzIENvbW11bmljYXRpb24pIGZyYW1ld29yaz8gRnJvbSB0aGUgbmFtZSwgSSYjMzk7bSBpbmZlcnJpbmcgaXQmIzM5O3MgcmVsYXRlZCB0byBpbnNlcnRpbmcsIGxpa2VseSBhIHNlbGYtbm9kZSBvciBpdHMgcHVibGljIHJlcHJlc2VudGF0aW9uLCBpbnRvIGEgbmFtZSB0YWJsZS4gVGhpcyBzdWdnZXN0cyBpdOKAmXMgYSBmdW5kYW1lbnRhbCBvcGVyYXRpb24gZm9yIHB1Ymxpc2hpbmcgbm9kZSBpbmZvcm1hdGlvbiwgcHJvYmFibHkgZm9yIGRpc2NvdmVyeSBhbmQgY29tbXVuaWNhdGlvbi4KCk5leHQsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFuZCB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSwgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBJcyBpdCBjYWxsZWQgZHVyaW5nIG5vZGUgaW5pdGlhbGl6YXRpb24sIHJlZ2lzdHJhdGlvbiwgb3IgcGVyaGFwcyBkeW5hbWljYWxseSB3aGVuIGEgbm9kZSYjMzk7cyBjYXBhYmlsaXRpZXMgY2hhbmdlPyBLbm93aW5nIHRoZSBjYWxsaW5nIHNlcXVlbmNlIGlzIGNyaXRpY2FsIHRvIGdyYXNwaW5nIGl0cyBzaWduaWZpY2FuY2Ugd2l0aGluIHRoZSBvdmVyYWxsIFRJUEMgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCB0byBjb25maXJtIHRoYXQgdW5kZXJzdGFuZGluZy4KCkZ1bmN0aW9uIGludGVybmFscyBhcmUgYWxzbyBjcnVjaWFsLCBvZiBjb3Vyc2UuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDogdGhlIG5hbWUgdGFibGUgaXRzZWxmLCB0aGUgZm9ybWF0IG9mIHRoZSBzZWxmLW5vZGUgcmVwcmVzZW50YXRpb24gYmVpbmcgaW5zZXJ0ZWQsIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdXNlZCB0byBlbnN1cmUgdGhyZWFkIHNhZmV0eS4gQ29uc2lkZXJpbmcgaXQmIzM5O3MgYSAmIzM0O3B1YmxpYyYjMzQ7IGluc2VydGlvbiwgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBsZXZlbCBvZiB2aXNpYmlsaXR5IGNvbnRyb2wgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgdG8gYmUgYXQgcGxheS4gSG93IGlzIHRoZSBpbnNlcnRpb24gcHJvY2VzcyBwcm90ZWN0ZWQgZnJvbSByYWNlIGNvbmRpdGlvbnMgb3IgY29ycnVwdGlvbj8gV2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBkZWFkbG9ja3MgSSBuZWVkIHRvIGtlZXAgaW4gbWluZD8KCkZ1cnRoZXJtb3JlLCBJJiMzOTtsbCBiZSBjb25zaWRlcmluZyB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzLiBXaGF0IGhhcHBlbnMgaWYgdGhlIG5hbWUgdGFibGUgaXMgZnVsbCwgb3IgaWYgdGhlIHByb3ZpZGVkIG5vZGUgaW5mb3JtYXRpb24gaXMgaW52YWxpZD8gSG93IGFyZSB0aGVzZSBzY2VuYXJpb3MgaGFuZGxlZCwgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdmVyYWxsIHN5c3RlbSYjMzk7cyBzdGFiaWxpdHkgYW5kIHJlbGlhYmlsaXR5PyBBcmUgdGhlcmUgYW55IGVycm9yIGNvZGVzIG9yIGxvZ2dpbmcgbWVzc2FnZXMgb2YgaW50ZXJlc3Q/CgpGaW5hbGx5LCBpZiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBpcyBpbiBhIGxhbmd1YWdlIGxpa2UgQywgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gQXJlIHRoZXJlIGFueSBtZW1vcnkgbGVha3MsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIG90aGVyIHZ1bG5lcmFiaWxpdGllcyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdXNlIG9mIGBrbWFsbG9jYCwgYGtmcmVlYCwgYG1lbWNweWAsIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucy4KClVsdGltYXRlbHksIEkgbmVlZCB0byBmb3JtIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UsIGltcGxlbWVudGF0aW9uLCBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBUSVBDIHN5c3RlbS4gT25seSB0aGVuIGNhbiBJIGRldGVybWluZSBpZiBpdCBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCBhbmQgaWRlbnRpZnkgYW55IHBvc3NpYmxlIGFyZWFzIG9mIGNvbmNlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvbmFtZV9kaXN0ci5jPTIxNT1zdGF0aWMgaW50IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLFxuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yMzMtXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MjM0Olx0LyogUHJldmlvdXMgY2FsbCB0byB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YigpIHdhcyBzdWNjZXNzZnVsLlxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTIzNS1cdCAqIFRoZSBub2RlJiMzOTtzIHNlbGYtYWRkcmVzcyBwdWJsaWNhdGlvbiB3YXMgYWRkZWQgdG8gJiMzOTtudC1cdTAwM2VjbHVzdGVyX3Njb3BlJiMzOTsuXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI0MC1cbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyNDE6XHRpZiAodGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIobmV0KSlcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yNDItXHRcdHJldHVybiAtRU5PQlVGUztcbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM9Nzc4PXN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTgzNy0vKipcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4Mzg6ICogdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIgLSBpbnNlcnQgcHVibGljYXRpb24gb2Ygbm9kZSYjMzk7cyBzZWxmIGFkZHJlc3Ncbm5ldC90aXBjL25hbWVfdGFibGUuYy04MzktICogQG5ldDogbmV0d29yayBuYW1lc3BhY2Vcbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODQ1LSAqL1xubmV0L3RpcGMvbmFtZV90YWJsZS5jOjg0NjppbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg0Ny17XG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg3My1cdCAqIFRJUENfTk9ERV9TVEFURSAoMCkuIElmICYjMzk7c3ImIzM5OyBpcyBub3QgTlVMTCwgdGhpcyByYW5nZSBleGlzdHNcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4NzQ6XHQgKiBkdWUgdG8gYSBwcmV2aW91cyBjYWxsIHRvIHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKClcbm5ldC90aXBjL25hbWVfdGFibGUuYy04NzUtXHQgKiBvciB0aXBjX25ldF9maW5hbGl6ZSgpLlxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuaD0xMzE9c3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuaC0xMzQtXHRcdFx0XHRcdCAgICAgdTMyIGtleSwgaW50ICplcnIpO1xubmV0L3RpcGMvbmFtZV90YWJsZS5oOjEzNTppbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KTtcbm5ldC90aXBjL25hbWVfdGFibGUuaC0xMzYtc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcmVtb3ZlX3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODk2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIHRoZSBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYHRpcGNfbmFtZXRibF9wdWJsaXNoYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgaXQmIzM5O3MgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBpc3N1ZSBoZXJlIHRoYXQgSSBuZWVkIHRvIHBpbnBvaW50LiBVbmRlcnN0YW5kaW5nIHRoZSBleGFjdCBzdGF0ZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfbmFtZXRibF9wdWJsaXNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL25hbWVfdGFibGUuYz03NDg9dm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuYy03NzUtXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6Nzc2Oi8qIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIHNlcnZpY2UgYmluZGluZyB0byBuYW1lIHRhYmxlXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtNzc3LSAqL1xubmV0L3RpcGMvbmFtZV90YWJsZS5jOjc3ODpzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTc3OS1cdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM9ODQ2PWludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg5Ny1cdCAqICAgIHRlYXJkb3duLlxubmV0L3RpcGMvbmFtZV90YWJsZS5jOjg5ODpcdCAqIDIuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXHUwMDNlIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIGZhaWxlZFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg5OS1cdCAqICAgIHRvIGluc2VydCBub2RlIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpbnRvIG50LVx1MDAzZWNsdXN0ZXJfc2NvcGVcbm5ldC90aXBjL25hbWVfdGFibGUuYy05MDAtXHQgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbm5ldC90aXBjL25hbWVfdGFibGUuYzo5MDE6XHQgKiAzLiBPciB0aXBjX25ldF9maW5hbGl6ZSgpIC0tLVx1MDAzZSB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGhhcyBub3Rcbm5ldC90aXBjL25hbWVfdGFibGUuYy05MDItXHQgKiAgICBleGVjdXRlZCB5ZXQuXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5oPTEyND12b2lkIHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2dyb3VwICpncnAsXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmgtMTI1LVx0XHRcdCAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7XG5uZXQvdGlwYy9uYW1lX3RhYmxlLmg6MTI2OnN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmgtMTI3LVx0XHRcdFx0XHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxuLS1cbm5ldC90aXBjL25ldC5jPTEyOT1zdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuLS1cbm5ldC90aXBjL25ldC5jLTE0NS1cdC8qIFJlZGlzdHJpYnV0ZSBidWxrIG9mIHB1YmxpY2F0aW9ucyB2aWEgbm9kZS11cCBldmVudCBvciBub2RlJiMzOTtzIHRpbWVyXG5uZXQvdGlwYy9uZXQuYzoxNDY6XHQgKiBpZiB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGZhaWxzLlxubmV0L3RpcGMvbmV0LmMtMTQ3LVx0ICovXG5uZXQvdGlwYy9uZXQuYzoxNDg6XHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgYWRkciwgTlVMTCk7XG5uZXQvdGlwYy9uZXQuYy0xNDktfVxuLS1cbm5ldC90aXBjL25vZGUuYz00MTc9c3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxuLS1cbm5ldC90aXBjL25vZGUuYy00NTMtXHRcdHRpcGNfbW9uX3BlZXJfdXAobmV0LCBub2RlLCBiZWFyZXJfaWQpO1xubmV0L3RpcGMvbm9kZS5jOjQ1NDpcdFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIHNrLnJlZiwgXHUwMDI2ZXJyKTtcbm5ldC90aXBjL25vZGUuYy00NTUtXHR9XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjkwNz1zdGF0aWMgaW50IHRpcGNfc2tfcHVibGlzaChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTIxLVx0c2thZGRyLm5vZGUgPSB0aXBjX293bl9hZGRyKG5ldCk7XG5uZXQvdGlwYy9zb2NrZXQuYzoyOTIyOlx0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFx1MDAyNnNrYWRkciwga2V5LCBOVUxMKTtcbm5ldC90aXBjL3NvY2tldC5jLTI5MjMtXHRpZiAodW5saWtlbHkoIXApKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDE1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBgdGlwY19uYW1lZF9ub2RlX3VwYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSB0YXNrIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBleHBlcmllbmNlIHRlbGxzIG1lIGl0JiMzOTtzIGFsd2F5cyB3aXNlIHRvIGJlIG1ldGhvZGljYWwsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGxpa2UgYHRpcGNfbmFtZWRfbm9kZV91cGAuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsICYjMzQ7V2hhdCBjb250ZXh0IGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgdXNlZCBpbj8mIzM0OyBJcyBpdCBwYXJ0IG9mIHRoZSBjb3JlIFRJUEMgaW1wbGVtZW50YXRpb24sIG9yIGlzIGl0IGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbiBsYXllcmVkIG9uIHRvcD8gS25vd2luZyB0aGF0IGluZmx1ZW5jZXMgbXkgZXhwZWN0YXRpb25zIGZvciB0aGluZ3MgbGlrZSBlcnJvciBoYW5kbGluZyBhbmQgdGhlIGtpbmRzIG9mIGRhdGEgc3RydWN0dXJlcyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoLiBJJiMzOTttIGFzc3VtaW5nLCBiYXNlZCBvbiB0aGUgbmFtZSwgdGhhdCBpdCBsaWtlbHkgZGVhbHMgd2l0aCBicmluZ2luZyB1cCBhIG5hbWVkIG5vZGUgd2l0aGluIHRoZSBUSVBDIG5ldHdvcmsuIFRoYXQgaW1wbGllcyBzb21lIGtpbmQgb2YgcmVnaXN0cmF0aW9uIG9yIGFubm91bmNlbWVudCB0byB0aGUgbmV0d29yaywgYW5kIHRoZSBwb3RlbnRpYWwgbmVlZCBmb3Igc29tZSBmb3JtIG9mIHN5bmNocm9uaXphdGlvbiBvciBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBub2RlIHN0YXJ0dXAgb3IgcmVnaXN0cmF0aW9uLiBJIHdpbGwgYmUgbG9va2luZyBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBjaGVja2luZyBmb3IgYWRlcXVhdGUgdGhyZWFkIHNhZmV0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGVycm9ycy4gRG9lcyBpdCByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMsIG9yIGRvZXMgaXQgcmVseSBvbiBleGNlcHRpb25zPyBIb3cgYXJlIHRoZXNlIGVycm9ycyBwcm9wYWdhdGVkIHVwIHRoZSBjYWxsIHN0YWNrPyBUaGlzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgcm9idXN0IHN5c3RlbSBkZXNpZ24uIEFsc28sIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdCB3aXRoPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGltcGFjdCBpdHMgYmVoYXZpb3Igb3Igc3VjY2Vzcz8gSXTigJlzIGFsc28gaW1wZXJhdGl2ZSB0byBrZWVwIGluIG1pbmQsIEkgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLCB0byBzZWUgd2hhdCBpbnB1dCBpdCB0YWtlcyBhbmQgd2hhdCBpdCByZXR1cm5zLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhbGwgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCwgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24uIEZpbmFsbHksIHRoZSBkb2N1bWVudGF0aW9uIChpZiBhbnkpIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgSSB3aWxsIGFsc28gd2FudCB0byB0cmFjZSBpdHMgdXNhZ2UgaW4gdmFyaW91cyBjb2RlIHRvIGRldGVybWluZSBob3cgaXQgaXMgdXRpbGl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfbmFtZWRfbm9kZV91cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MjY0PWludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI4Ni0vKipcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyODc6ICogdGlwY19uYW1lZF9ub2RlX3VwIC0gdGVsbCBzcGVjaWZpZWQgbm9kZSBhYm91dCBhbGwgcHVibGljYXRpb25zIGJ5IHRoaXMgbm9kZVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI4OC0gKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yOTYtICovXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6Mjk3OmludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjk4LXtcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmg9NzE9c3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5oOjcyOmludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5oLTczLXZvaWQgdGlwY19uYW1lZF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpuYW1lZHEsXG4tLVxubmV0L3RpcGMvbm9kZS5jPTQxNz1zdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4tLVxubmV0L3RpcGMvbm9kZS5jLTQ0OS1cdGlmIChmbGFncyBcdTAwMjYgVElQQ19OT1RJRllfTk9ERV9VUClcbm5ldC90aXBjL25vZGUuYzo0NTA6XHRcdHJjID0gdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xubmV0L3RpcGMvbm9kZS5jLTQ1MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NTEKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBDYW5kaWRhdGUgSWRlbnRpZmljYXRpb24gd2l0aGluIFRJUEMgQ29yZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgaGVhcnQgb2YgVElQQywgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uIGFuZCBkZWFscyB3aXRoIHRob3NlIHBlc2t5IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgZmV3IGtleSBmdW5jdGlvbnMgYXMgcmlwZSBmb3IgZnV6emluZzogYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGFuZCBgdGlwY19uYW1lZF9ub2RlX3VwYC4gVGhvc2UgYXJlIHRoZSBjb3JlIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGlzaGluZyBtZWNoYW5pc21zLCBzbyB0aGV5JiMzOTtyZSBuYXR1cmFsbHkgZ29pbmcgdG8gYmUgcG90ZW50aWFsIHdlYWsgcG9pbnRzLiBBbmQsIGdpdmVuIHRoYXQgYHRpcGNfc2tfcHVibGlzaGAgY2FsbHMgaW50byBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCB0aGF0IGxpa2VseSBtYWtlcyBpdCBhIGdvb2QgZnV6eiB0YXJnZXQgYXMgd2VsbC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYEtjb25maWdgIGZvciBUSVBDIHN1cHBvcnQgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGVuYWJsZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgY29uZmlndXJlZCB0byBwcm9wZXJseSBjcmFmdCBhIGZ1enppbmcgY2FtcGFpZ24gdGhhdCBjb3ZlcnMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVElQQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9LY29uZmlnLTUtXG5uZXQvdGlwYy9LY29uZmlnOjY6bWVudWNvbmZpZyBUSVBDXG5uZXQvdGlwYy9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtUaGUgVElQQyBQcm90b2NvbFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctMjMtXG5uZXQvdGlwYy9LY29uZmlnOjI0OmNvbmZpZyBUSVBDX01FRElBX0lCXG5uZXQvdGlwYy9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtJbmZpbmlCYW5kIG1lZGlhIHR5cGUgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctMjktXHQgIElQLW92ZXItSW5maW5pQmFuZCBkZXZpY2VzLlxubmV0L3RpcGMvS2NvbmZpZzozMDpjb25maWcgVElQQ19NRURJQV9VRFBcbm5ldC90aXBjL0tjb25maWctMzEtXHRib29sIFwmIzM0O0lQL1VEUCBtZWRpYSB0eXBlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTM3LVxubmV0L3RpcGMvS2NvbmZpZzozODpjb25maWcgVElQQ19DUllQVE9cbm5ldC90aXBjL0tjb25maWctMzktXHRib29sIFwmIzM0O1RJUEMgZW5jcnlwdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3RpcGMvS2NvbmZpZy01Mi1cbm5ldC90aXBjL0tjb25maWc6NTM6Y29uZmlnIFRJUENfRElBR1xubmV0L3RpcGMvS2NvbmZpZy01NC1cdHRyaXN0YXRlIFwmIzM0O1RJUEM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ1OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipUYWNrbGluZyB0aGUgVElQQyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgYFRJUENgLiBSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMuIEJlZm9yZSBJIGV2ZW4gKnRoaW5rKiBhYm91dCBjb25maWd1cmluZyBUSVBDLCBJIG5lZWQgdG8ga25vdyB3aGF0IGl0IHJlbGllcyBvbi4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgaW4gcGxhY2UgYmVmb3JlIEkgZXZlbiBzdGFydC4gSSYjMzk7bGwgbmVlZCB0byBydW4gYSBxdWljayBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLCBlbnN1cmluZyBhbGwgbmVjZXNzYXJ5IGNvbXBvbmVudHMgYXJlIGluc3RhbGxlZCBhbmQgb3BlcmF0aW9uYWwuIFNraXBwaW5nIHRoaXMgc3RlcCB3b3VsZCBiZSBhIHJvb2tpZSBtaXN0YWtlOyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IHJ1biBpbnRvIGFueSB1bm5lY2Vzc2FyeSByb2FkYmxvY2tzIGRvd24gdGhlIGxpbmUuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBwcm9jZWR1cmUuIERlcGVuZGVuY2llcyBmaXJzdC4gQWx3YXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBUSVBDIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBUSVBDXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtUaGUgVElQQyBQcm90b2NvbFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoZSBUcmFuc3BhcmVudCBJbnRlciBQcm9jZXNzIENvbW11bmljYXRpb24gKFRJUEMpIHByb3RvY29sIGlzXG4gIDExOlx0XHQgIHNwZWNpYWxseSBkZXNpZ25lZCBmb3IgaW50cmEgY2x1c3RlciBjb21tdW5pY2F0aW9uLiBUaGlzIHByb3RvY29sXG4gIDEyOlx0XHQgIG9yaWdpbmF0ZXMgZnJvbSBFcmljc3NvbiB3aGVyZSBpdCBoYXMgYmVlbiB1c2VkIGluIGNhcnJpZXIgZ3JhZGVcbiAgMTM6XHRcdCAgY2x1c3RlciBhcHBsaWNhdGlvbnMgZm9yIG1hbnkgeWVhcnMuXG4gIDE0Olx0XG4gIDE1Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFRJUEMsIHNlZSBodHRwOi8vdGlwYy5zb3VyY2Vmb3JnZS5uZXQuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIFRoaXMgcHJvdG9jb2wgc3VwcG9ydCBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSAoID0gY29kZSB3aGljaFxuICAxODpcdFx0ICBjYW4gYmUgaW5zZXJ0ZWQgaW4gYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgd2hlbmV2ZXIgeW91XG4gIDE5Olx0XHQgIHdhbnQpLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRpcGMuIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXRcbiAgMjA6XHRcdCAgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmUgYW5kIHJlYWQgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnJzdFx1MDAzZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVElQQyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGNvbmZpZ3VyaW5nIFRJUEMsIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IGl0IGhhcyBhIGRlcGVuZGVuY3kgb24gSU5FVC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQsIGFuZCBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gaW5jbHVkZSBgVElQQ2Agd2l0aGluIGBFbmFibGVDb25maWdzYCB0byBhY2NvdW50IGZvciB0aGF0LgoKTm93LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBzcGVjaWZpYyBzeW1ib2xzIHdpdGhpbiB0aGUgVElQQyBzeXN0ZW0uIEkmIzM5O3ZlIGdvdCBteSBmb2N1cyBuYXJyb3dlZCBkb3duIHRvIHRoZXNlOiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCwgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGFuZCBgdGlwY19za19wdWJsaXNoYC4gVGhlc2UgYXJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBUSVBDIGhhbmRsZXMgbmFtZSBkaXN0cmlidXRpb24gYW5kIHNvY2tldCBwdWJsaXNoaW5nIOKAkyBjb3JlIGZ1bmN0aW9uYWxpdGllcy4KCkJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgaWYgYHRpcGNfc2tfcHVibGlzaGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIHdpbGwgaW5mbHVlbmNlIGhvdyBpdHMgc2NvcGUgaXMgZGV0ZXJtaW5lZC4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NrX3B1Ymxpc2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9MTUwPXN0YXRpYyB2b2lkIHRpcGNfc2tfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNTE6c3RhdGljIGludCB0aXBjX3NrX3B1Ymxpc2goc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY191YWRkciAqdWEpO1xubmV0L3RpcGMvc29ja2V0LmMtMTUyLXN0YXRpYyBpbnQgdGlwY19za193aXRoZHJhdyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9Njc2PXN0YXRpYyBpbnQgX190aXBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpza2FkZHIsIGludCBhbGVuKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTcwMS1cdFx0cmV0dXJuIHRpcGNfc2tfd2l0aGRyYXcodHNrLCB1YSk7XG5uZXQvdGlwYy9zb2NrZXQuYzo3MDI6XHRyZXR1cm4gdGlwY19za19wdWJsaXNoKHRzaywgdWEpO1xubmV0L3RpcGMvc29ja2V0LmMtNzAzLX1cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yODcwPXN0YXRpYyB2b2lkIHRpcGNfc2tfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTA2LVxubmV0L3RpcGMvc29ja2V0LmM6MjkwNzpzdGF0aWMgaW50IHRpcGNfc2tfcHVibGlzaChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcbm5ldC90aXBjL3NvY2tldC5jLTI5MDgte1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMwNzI9c3RhdGljIGludCB0aXBjX3NrX2pvaW4oc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY19ncm91cF9yZXEgKm1yZXEpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzA5Ny1cdHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChuZXQsIGdycCwgXHUwMDI2dWEpO1xubmV0L3RpcGMvc29ja2V0LmM6MzA5ODpcdHJjID0gdGlwY19za19wdWJsaXNoKHRzaywgXHUwMDI2dWEpO1xubmV0L3RpcGMvc29ja2V0LmMtMzA5OS1cdGlmIChyYykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc1MgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIGtlcm5lbCBpbnRlcm5hbHMgYW5kIG5ldHdvcmtpbmc6CgoqKkZvY3VzaW5nIG9uIHRoZSBSaWdodCBTeW1ib2wgZm9yIHRoZSBKb2IqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgaWRlbnRpZnkgdGhlIGVudHJ5IHBvaW50IGZvciBzb21lIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgZnVuY3Rpb25hbGl0eS4gSSBzZWUgYHRpcGNfc2tfcHVibGlzaGAgYW5kIHJlYWxpemUgaW1tZWRpYXRlbHkgdGhhdCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBtZWFucyBpdCYjMzk7cyBsaW1pdGVkIGluIHNjb3BlLCBsaWtlbHkgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBtb2R1bGUgb3IgZmlsZS4gVGhlcmVmb3JlLCBpdCYjMzk7cyBub3QgYSB1c2VmdWwgc3ltYm9sIHRvIHplcm8gaW4gb24gaWYgSSYjMzk7bSB0cnlpbmcgdG8gZmluZCB0aGUgcHJpbWFyeSBpbnRlcmZhY2UuIGBfX3RpcGNfYmluZGAgaXMgYWxzbyBzdGF0aWMsIHNvIEkgY2FuIHRvc3MgdGhhdCBvbmUgYXNpZGUgdG9vLiBOb3csICpgdGlwY19iaW5kYCouLi4gYWgsICp0aGF0JiMzOTtzKiB0aGUgbGlrZWx5IGNhbmRpZGF0ZSEgSXQmIzM5O3MgdGhlIG5vbi1zdGF0aWMgb25lLCB0aGUgcHVibGljLWZhY2luZyBlbnRyeSBwb2ludCBJJiMzOTttIGxvb2tpbmcgZm9yLiBUaGF0JiMzOTtzIHByb2JhYmx5IHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGV4cG9zZWQgYW5kIGNhbGxhYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBvciBldmVuIGZyb20gdXNlcnNwYWNlLCB3aGljaCBpcyB3aGVyZSBJJiMzOTtkIGZvY3VzIG15IGF0dGVudGlvbi4gSXQmIzM5O3MgdGhlIGtleSBzeW1ib2wgSSYjMzk7bGwgd2FudCB0byB0cmFjZSBvciBhbmFseXplIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfYmluZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9uYW1lX3RhYmxlLmM9ODQ2PWludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg3Ny1cdCAqIE5vdGUgdGhhdCB1c2VyIGFwcGxpY2F0aW9ucyBjYW4gb25seSBpbnNlcnQgdHlwZXMgZ3JlYXRlciB0aGFuXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6ODc4Olx0ICogb3IgZXF1YWwgdG8gNjQgKFRJUENfUkVTRVJWRURfVFlQRVMpLCBhcyBlbmZvcmNlZCBieSB0aXBjX2JpbmQoKS5cbm5ldC90aXBjL25hbWVfdGFibGUuYy04NzktXHQgKiBSZW1vdGUgbm9kZXMgYWxzbyBvbmx5IHNlbmQgcHJvdG9jb2wgcHVibGljYXRpb25zIHdpdGggdHlwZVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTYyNj1zdGF0aWMgaW50IHRpcGNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTY2MS0vKipcbm5ldC90aXBjL3NvY2tldC5jOjY2MjogKiBfX3RpcGNfYmluZCAtIGFzc29jaWF0ZSBvciBkaXNhc3NvY2lhdGUgVElQQyBuYW1lKHMpIHdpdGggYSBzb2NrZXRcbm5ldC90aXBjL3NvY2tldC5jLTY2My0gKiBAc29jazogc29ja2V0IHN0cnVjdHVyZVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTY3NS0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjY3NjpzdGF0aWMgaW50IF9fdGlwY19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2thZGRyLCBpbnQgYWxlbilcbm5ldC90aXBjL3NvY2tldC5jLTY3Ny17XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9NzA1PWludCB0aXBjX3NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpza2FkZHIsIGludCBhbGVuKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTcwOS1cdGxvY2tfc29jayhzb2NrLVx1MDAzZXNrKTtcbm5ldC90aXBjL3NvY2tldC5jOjcxMDpcdHJlcyA9IF9fdGlwY19iaW5kKHNvY2ssIHNrYWRkciwgYWxlbik7XG5uZXQvdGlwYy9zb2NrZXQuYy03MTEtXHRyZWxlYXNlX3NvY2soc29jay1cdTAwM2Vzayk7XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNzE0LVxubmV0L3RpcGMvc29ja2V0LmM6NzE1OnN0YXRpYyBpbnQgdGlwY19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpza2FkZHIsIGludCBhbGVuKVxubmV0L3RpcGMvc29ja2V0LmMtNzE2LXtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1zZ19vcHMgPSB7XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzM2Mi1cdC5yZWxlYXNlXHQ9IHRpcGNfcmVsZWFzZSxcbm5ldC90aXBjL3NvY2tldC5jOjMzNjM6XHQuYmluZFx0XHQ9IHRpcGNfYmluZCxcbm5ldC90aXBjL3NvY2tldC5jLTMzNjQtXHQuY29ubmVjdFx0PSB0aXBjX2Nvbm5lY3QsXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzM3OT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTMzODItXHQucmVsZWFzZVx0PSB0aXBjX3JlbGVhc2UsXG5uZXQvdGlwYy9zb2NrZXQuYzozMzgzOlx0LmJpbmRcdFx0PSB0aXBjX2JpbmQsXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzg0LVx0LmNvbm5lY3RcdD0gdGlwY19jb25uZWN0LFxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMzOTk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc3RyZWFtX29wcyA9IHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDAyLVx0LnJlbGVhc2VcdD0gdGlwY19yZWxlYXNlLFxubmV0L3RpcGMvc29ja2V0LmM6MzQwMzpcdC5iaW5kXHRcdD0gdGlwY19iaW5kLFxubmV0L3RpcGMvc29ja2V0LmMtMzQwNC1cdC5jb25uZWN0XHQ9IHRpcGNfY29ubmVjdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NzAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFRJUEMgQmluZGluZyBhbmQgRGlzdHJpYnV0aW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgVElQQyBmdW5jdGlvbnMuIEkgbm90aWNlZCBgdGlwY19iaW5kYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGEgYml0IHVudXN1YWwgZm9yIGFuIG9wZXJhdGlvbiBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGRlc2lnbiBkZWNpc2lvbiBmb3IgbGF0ZXIgYW5hbHlzaXMuIE5leHQsIEkgc2hvdWxkIGludmVzdGlnYXRlIGB0aXBjX3NrX2JpbmRgLCB3aGljaCBJICpiZWxpZXZlKiBpcyBub24tc3RhdGljLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0LiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAgdG8gc2VlIHdoYXQgaXMgZ29pbmcgb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfbmFtZWRfZGlzdHJpYnV0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MTUxPXN0YXRpYyBpbnQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTIwNC0vKipcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyMDU6ICogX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBidWlsZCBhIGxpc3Qgb2YgcHVibGljYXRpb25zIG5lZWQgdG8gYmUgZGlzdHJpYnV0ZWRcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yMDYtICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2Vcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjE0LSAqL1xubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjIxNTpzdGF0aWMgaW50IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTIxNi1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI1NC0vKipcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyNTU6ICogdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gZGlzdHJpYnV0ZSBhbGwgcHVibGljYXRpb25zIHRvIHNwZWNpZmllZCBub2RlXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjU2LSAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI2My0gKi9cbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyNjQ6aW50IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSlcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yNjUte1xuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yNzEtXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyNzI6XHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFx1MDAyNmhlYWQpO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI3My1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jPTI5Nz1pbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zMDgtXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MzA5Olx0cmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCBcdTAwMjZoZWFkKTtcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zMTAtXHRzcGluX3VubG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuaD03Nj12b2lkIHRpcGNfcHVibF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpuc3ViX2xpc3QsXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmgtNzctXHRcdCAgICAgIHUzMiBhZGRyLCB1MTYgY2FwYWJpbGl0aWVzKTtcbm5ldC90aXBjL25hbWVfZGlzdHIuaDo3ODppbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKTtcbm5ldC90aXBjL25hbWVfZGlzdHIuaC03OS1cbi0tXG5uZXQvdGlwYy9ub2RlLmM9ODMyPXN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC90aXBjL25vZGUuYy04NDktXHRpZiAoYXRvbWljX3hjaGcoXHUwMDI2bi1cdTAwM2VkaXN0X2J1bGssIDApKVxubmV0L3RpcGMvbm9kZS5jOjg1MDpcdFx0ZGlzdF9yYyA9IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShuLVx1MDAzZW5ldCwgbi1cdTAwM2VhZGRyKTtcbm5ldC90aXBjL25vZGUuYy04NTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTEyCgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUSVBDIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb24gZGVjbGFyYXRpb25zLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGFuZCBgdGlwY19uYW1lZF9ub2RlX3VwYCBhcmUgKm5vdCogc3RhdGljLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIHRoZW0gYXMgcG90ZW50aWFsIHBvaW50cyBvZiBpbnRlcmFjdGlvbiBhbmQgZW50cnkgcG9pbnRzIGZvciB2YXJpb3VzIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBUSVBDIHN5c3RlbS4gVGhlc2UgYXJlIGRlZmluaXRlbHkgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24uCgpTbyBteSBpbml0aWFsIHRob3VnaHQgaXMsIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgLCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBhbmQgYHRpcGNfbmFtZWRfbm9kZV91cGAuCgpUaGUgJiMzNDtFbmFibGVDb25maWdzOiBUSVBDJiMzNDsgaXMgYSBnaXZlbiwgc28gSSYjMzk7bSBhbHJlYWR5IGxvb2tpbmcgYXQgVElQQy1yZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFRoZSBkZXNjcmlwdGlvbiBjb25maXJtcyB3aGF0IEkgc3VzcGVjdGVkLiBUaGUgcGF0Y2gmIzM5O3MgY29yZSBtb2RpZmljYXRpb24gY2VudGVycyBhcm91bmQgaGFuZGxpbmcgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZHVyaW5nIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uIHdpdGhpbiB0aGUgVElQQyBzeXN0ZW0uIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgZXJyb3IgY29kZSByZXR1cm5zIHRvIGNydWNpYWwgZnVuY3Rpb25zIGxpa2UgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZWRfbm9kZV91cGAsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhlIHByZXZpb3VzIGNvZGUgcGF0aCBkaWQgbm90IHJlbGlhYmx5IGhhbmRsZSBmYWlsdXJlcy4gTmV3IGZ1bmN0aW9ucywgbmFtZWx5IGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAgYW5kIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBoYXZlIGJlZW4gaW50cm9kdWNlZCB0byBkZWFsIHdpdGggYnVsayByZWRpc3RyaWJ1dGlvbiBvZiBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9ucy4KCkNvbnNpZGVyaW5nIHRoaXMgaXMgYSBtb2RpZmljYXRpb24gdG8gZnVuZGFtZW50YWwga2VybmVsIGxvZ2ljIHdpdGhpbiBUSVBDIHRoYXTigJlzIGFsc28gcmVhY2hhYmxlLCBpdCYjMzk7cyBhYnNvbHV0ZWx5IHJpcGUgZm9yIGZ1enppbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIGltcHJvdmUgcm9idXN0bmVzcyBhbmQgcmVzaWxpZW5jZSBpbiB0aGUgZmFjZSBvZiBtZW1vcnkgcHJlc3N1cmUsIGFuZCB0aGF0JiMzOTtzIGV4YWN0bHkgdGhlIGtpbmQgb2Ygc2NlbmFyaW8gZnV6emluZyBpcyBkZXNpZ25lZCB0byB1bmNvdmVyLiBJJiMzOTtsbCBuZWVkIHRvIGRldmVsb3AgZnV6emluZyBzdHJhdGVnaWVzIHRoYXQgc3BlY2lmaWNhbGx5IHRhcmdldCB0aGVzZSBuZXcgZXJyb3IgcGF0aHMgYW5kIGFsbG9jYXRpb24gc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfbmFtZWRfZGlzdHJpYnV0ZSYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0YmxfcHVibGlzaCYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWVkX25vZGVfdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgVElQQyBsb2dpYyB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZHVyaW5nIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uLiBJdCBhZGRzIGVycm9yIGNvZGUgcmV0dXJucyB0byBmdW5jdGlvbnMgbGlrZSBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGFuZCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgYW5kIGludHJvZHVjZXMgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCBhbmQgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAgdG8gaGFuZGxlIGJ1bGsgcmVkaXN0cmlidXRpb24gb2YgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfbmFtZWRfZGlzdHJpYnV0ZSYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0YmxfcHVibGlzaCYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWVkX25vZGVfdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgVElQQyBsb2dpYyB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZHVyaW5nIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uLiBJdCBhZGRzIGVycm9yIGNvZGUgcmV0dXJucyB0byBmdW5jdGlvbnMgbGlrZSBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGFuZCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgYW5kIGludHJvZHVjZXMgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCBhbmQgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAgdG8gaGFuZGxlIGJ1bGsgcmVkaXN0cmlidXRpb24gb2YgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT45bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVElQQyBzdWJzeXN0ZW0gdG8gaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIChyZXR1cm5pbmcgYC1FTk9CVUZTYCkgZHVyaW5nIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uLiBJdCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZ1bmN0aW9ucyBsaWtlIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgYW5kIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGFuZCBpbnRyb2R1Y2VzIGZsYWdzIHRvIHRyYWNrIHRoZSBzdGF0ZSBvZiB0aGUgbmFtZSB0YWJsZSBhbmQgbm9kZSBhZGRyZXNzLiBBbGwgbmV3bHkgaW50cm9kdWNlZCB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZXMgKGUuZy4sIGBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBza2AsIGBzdHJ1Y3QgdGlwY191YWRkciB1YWApIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIChlLmcuLCB2aWEgZXhwbGljaXQgYXNzaWdubWVudCBvciB0aGUgYHRpcGNfdWFkZHIoKWAgaGVscGVyKS4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLCB3aGljaCBkbyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWE3YzNkNGI5YjQwYTkzZDMxMTQ1OWJjYmUyYmQ2NmJkOTIyZDM4NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA3OjAzOjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5jIGIvbmV0L3RpcGMvY29yZS5jCmluZGV4IDMxNTk3NWMzYmU4MTguLjBmMWQzZGRlYWUwOTUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9jb3JlLmMKQEAgLTYxLDYgJiM0Mzs2MSw5IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCB0aXBjX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAl0bi0mZ3Q7dHJpYWxfYWRkciA9IDA7CiAJdG4tJmd0O2FkZHJfdHJpYWxfZW5kID0gMDsKIAl0bi0mZ3Q7Y2FwYWJpbGl0aWVzID0gVElQQ19OT0RFX0NBUEFCSUxJVElFUzsKJiM0MzsJdG4tJmd0O250X3N0b3AgPSBmYWxzZTsKJiM0MzsJdG4tJmd0O250X3NlbGZfbm9kZV9leGlzdCA9IGZhbHNlOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7dG4tJmd0O25vZGVfYWRkcl9zZXQsIDApOwogCUlOSVRfV09SSygmYW1wO3RuLSZndDt3b3JrLCB0aXBjX25ldF9maW5hbGl6ZV93b3JrKTsKIAltZW1zZXQodG4tJmd0O25vZGVfaWQsIDAsIHNpemVvZih0bi0mZ3Q7bm9kZV9pZCkpOwogCW1lbXNldCh0bi0mZ3Q7bm9kZV9pZF9zdHJpbmcsIDAsIHNpemVvZih0bi0mZ3Q7bm9kZV9pZF9zdHJpbmcpKTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuaCBiL25ldC90aXBjL2NvcmUuaAppbmRleCA5Y2U1ZjlmZjZjYzAzLi45NzViMWQ0ODE4NmU2IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvY29yZS5oCkBAIC0xNDUsNiAmIzQzOzE0NSwxMiBAQCBzdHJ1Y3QgdGlwY19uZXQgewogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCS8qIFRoZSBudW1iZXJzIG9mIHdvcmsgcXVldWVzIGluIHNjaGVkdWxlICovCiAJYXRvbWljX3Qgd3FfY291bnQ7CiYjNDM7CS8qIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbm9kZSYjMzk7cyBhZGRyZXNzIGlzIHNldCAqLwomIzQzOwlhdG9taWNfdCBub2RlX2FkZHJfc2V0OwomIzQzOwkvKiBUaGUgbmFtZSB0YWJsZSBoYXMgc3RvcHBlZCB3b3JraW5nICovCiYjNDM7CWJvb2wgbnRfc3RvcDsKJiM0MzsJLyogTm9kZSYjMzk7cyBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBuYW1lIHRhYmxlICovCiYjNDM7CWJvb2wgbnRfc2VsZl9ub2RlX2V4aXN0OwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlwY19uZXQgKnRpcGNfbmV0KHN0cnVjdCBuZXQgKm5ldCkKZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuYyBiL25ldC90aXBjL25hbWVfZGlzdHIuYwppbmRleCBiYTRmNDkwNmUxM2I3Li44M2UzZWQ4ZjJjNTEyIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCkBAIC05NSw5ICYjNDM7OTUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKQogCQlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO3AtJmd0O2JpbmRpbmdfbm9kZSwgJmFtcDtudC0mZ3Q7bm9kZV9zY29wZSk7CiAJCXJldHVybiBOVUxMOwogCX0KLQl3cml0ZV9sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmYW1wO3AtJmd0O2JpbmRpbmdfbm9kZSwgJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiAJc2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgSVRFTV9TSVpFLCAwKTsKIAlpZiAoIXNrYikgewogCQlwcl93YXJuKCYjMzQ7UHVibGljYXRpb24gZGlzdHJpYnV0aW9uIGZhaWx1cmVcbiYjMzQ7KTsKQEAgLTEyMSw5ICYjNDM7MTE5LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnApCiAJc3RydWN0IGRpc3RyX2l0ZW0gKml0ZW07CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCXdyaXRlX2xvY2tfYmgoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKIAlsaXN0X2RlbCgmYW1wO3AtJmd0O2JpbmRpbmdfbm9kZSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiAJaWYgKHAtJmd0O3Njb3BlID09IFRJUENfTk9ERV9TQ09QRSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTE0Niw5ICYjNDM7MTQyLDE0IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKQogICogQGRub2RlOiBub2RlIHRvIGJlIHVwZGF0ZWQKICAqIEBwbHM6IGxpbmtlZCBsaXN0IG9mIHB1YmxpY2F0aW9uIGl0ZW1zIHRvIGJlIHBhY2tlZCBpbnRvIGJ1ZmZlciBjaGFpbgogICogQHNlcW5vOiBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgbWVzc2FnZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3MKJiM0MzsgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlCiYjNDM7ICoKICAqLwotc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCi0JCQkgICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pCiYjNDM7c3RhdGljIGludCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKJiM0MzsJCQkgICAgdTMyIGRub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbHMsIHUxNiBzZXFubykKIHsKIAlzdHJ1Y3QgcHVibGljYXRpb24gKnB1Ymw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CkBAIC0xNjQsOCAmIzQzOzE2NSw5IEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAogCQkJc2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgbXNnX3JlbSwKIAkJCQkJCWRub2RlKTsKIAkJCWlmICghc2tiKSB7CiYjNDM7CQkJCV9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpOwogCQkJCXByX3dhcm4oJiMzNDtCdWxrIHB1YmxpY2F0aW9uIGZhaWx1cmVcbiYjMzQ7KTsKLQkJCQlyZXR1cm47CiYjNDM7CQkJCXJldHVybiAtRU5PQlVGUzsKIAkJCX0KIAkJCWhkciA9IGJ1Zl9tc2coc2tiKTsKIAkJCW1zZ19zZXRfYmNfYWNrX2ludmFsaWQoaGRyLCB0cnVlKTsKQEAgLTE5NSw2ICYjNDM7MTk3LDkwIEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAogCWhkciA9IGJ1Zl9tc2coc2tiX3BlZWtfdGFpbChsaXN0KSk7CiAJbXNnX3NldF9sYXN0X2J1bGsoaGRyKTsKIAltc2dfc2V0X25hbWVkX3NlcW5vKGhkciwgc2Vxbm8pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBidWlsZCBhIGxpc3Qgb2YgcHVibGljYXRpb25zIG5lZWQgdG8gYmUgZGlzdHJpYnV0ZWQKJiM0MzsgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZQomIzQzOyAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZQomIzQzOyAqIEBoZWFkOiBsaXN0IG9mIHB1YmxpY2F0aW9ucwomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3MKJiM0MzsgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlCiYjNDM7ICoKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLAomIzQzOwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoZWFkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7CiYjNDM7CXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwomIzQzOwomIzQzOwkvKiBOYW1lIHRhYmxlIGhhcyBiZWVuIGRlbGV0ZWQgYWZ0ZXIgbmFtZXNwYWNlIHRlYXJkb3duIG9yCiYjNDM7CSAqIFRJUEMgbW9kdWxlIGV4aXQuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkodG4tJmd0O250X3N0b3ApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIE5vZGUmIzM5O3Mgc2VsZi1hZGRyZXNzIGlzIG5vdCBzZXQgeWV0ICovCiYjNDM7CWlmICghYXRvbWljX3JlYWQoJmFtcDt0bi0mZ3Q7bm9kZV9hZGRyX3NldCkpIHsKJiM0MzsJCS8qIERlZmVyIHRoZSBkaXN0cmlidXRpb24gdG8gbm9kZSYjMzk7cyB0aW1lciAqLwomIzQzOwkJdGlwY19ub2RlX3NldF9kaXN0X2J1bGsobmV0LCBkbm9kZSk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQcmV2aW91cyBjYWxsIHRvIHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKCkgd2FzIHN1Y2Nlc3NmdWwuCiYjNDM7CSAqIFRoZSBub2RlJiMzOTtzIHNlbGYtYWRkcmVzcyBwdWJsaWNhdGlvbiB3YXMgYWRkZWQgdG8gJiMzOTtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSYjMzk7LgomIzQzOwkgKiBTbywgJiMzOTtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSYjMzk7IGlzIG5vdCBlbXB0eSBub3cuIEdvIHRvIGRpc3RyaWJ1dGlvbi4KJiM0MzsJICovCiYjNDM7CWlmICh0bi0mZ3Q7bnRfc2VsZl9ub2RlX2V4aXN0KQomIzQzOwkJZ290byBkaXN0cmlidXRlOwomIzQzOwomIzQzOwlpZiAodGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIobmV0KSkKJiM0MzsJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsKJiM0MzsJdG4tJmd0O250X3NlbGZfbm9kZV9leGlzdCA9IHRydWU7CiYjNDM7CiYjNDM7ZGlzdHJpYnV0ZToKJiM0MzsJaWYgKG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBoZWFkLCBkbm9kZSwKJiM0MzsJCQkgICAgICZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGUsIG50LSZndDtzbmRfbnh0KSA9PSAtRU5PQlVGUykKJiM0MzsJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHRpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGRpc3RyaWJ1dGUgYWxsIHB1YmxpY2F0aW9ucyB0byBzcGVjaWZpZWQgbm9kZQomIzQzOyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgomIzQzOyAqLwomIzQzO2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkOwomIzQzOwlpbnQgcmMgPSAwOwomIzQzOwomIzQzOwlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtoZWFkKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiYjNDM7CXJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgJmFtcDtoZWFkKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKJiM0MzsJaWYgKCFyYyAmYW1wOyZhbXA7ICFza2JfcXVldWVfZW1wdHkoJmFtcDtoZWFkKSkgewomIzQzOwkJcmMgPSB0aXBjX25vZGVfeG1pdChuZXQsICZhbXA7aGVhZCwgZG5vZGUsIDApOwomIzQzOwkJLyogVGhlIGxpbmsgaXMgY29uZ2VzdGVkIGFmdGVyIHRoZSBsaXN0IGlzIGluc2VydGVkIGludG8gdGhlCiYjNDM7CQkgKiBsaW5rJiMzOTtzIHNlbmQgcXVldWUuIFJldHVybiAwLCBhcyB0aGlzIGlzIG5vcm1hbC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHJjID09IC1FTElOS0NPTkcpCiYjNDM7CQkJcmMgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0yMDIsMjUgJiM0MzsyODgsMzYgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCiAgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZQogICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlCiAgKiBAY2FwYWJpbGl0aWVzOiBwZWVyIG5vZGUmIzM5O3MgY2FwYWJpbGl0aWVzCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgogICovCi12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcykKJiM0MztpbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKQogewogCXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwogCXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCBza19idWZmX2hlYWQgaGVhZDsKLQl1MTYgc2Vxbm87CiYjNDM7CWludCByYyA9IDA7CiAKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtoZWFkKTsKIAlzcGluX2xvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKIAlpZiAoIShjYXBhYmlsaXRpZXMgJmFtcDsgVElQQ19OQU1FRF9CQ0FTVCkpCiAJCW50LSZndDtyY19kZXN0cyYjNDM7JiM0Mzs7Ci0Jc2Vxbm8gPSBudC0mZ3Q7c25kX254dDsKJiM0MzsKJiM0MzsJcmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCAmYW1wO2hlYWQpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiYjNDM7CWlmICghcmMgJmFtcDsmYW1wOyAhc2tiX3F1ZXVlX2VtcHR5KCZhbXA7aGVhZCkpIHsKJiM0MzsJCXJjID0gdGlwY19ub2RlX3htaXQobmV0LCAmYW1wO2hlYWQsIGRub2RlLCAwKTsKJiM0MzsJCS8qIFRoZSBsaW5rIGlzIGNvbmdlc3RlZCBhZnRlciB0aGUgbGlzdCBpcyBpbnNlcnRlZCBpbnRvIHRoZQomIzQzOwkJICogbGluayYjMzk7cyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyYyA9PSAtRUxJTktDT05HKQomIzQzOwkJCXJjID0gMDsKJiM0MzsJfQogCi0JcmVhZF9sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7Ci0JbmFtZWRfZGlzdHJpYnV0ZShuZXQsICZhbXA7aGVhZCwgZG5vZGUsICZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGUsIHNlcW5vKTsKLQl0aXBjX25vZGVfeG1pdChuZXQsICZhbXA7aGVhZCwgZG5vZGUsIDApOwotCXJlYWRfdW5sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiYjNDM7CXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0yOTksNyAmIzQzOzM5Niw3IEBAIHN0YXRpYyBib29sIHRpcGNfdXBkYXRlX25hbWV0Ymwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZGlzdHJfaXRlbSAqaSwKIAlzay5ub2RlID0gbm9kZTsKIAogCWlmIChkdHlwZSA9PSBQVUJMSUNBVElPTikgewotCQlwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgJmFtcDt1YSwgJmFtcDtzaywga2V5KTsKJiM0MzsJCXAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBrZXksIE5VTEwpOwogCQlpZiAocCkgewogCQkJdGlwY19ub2RlX3N1YnNjcmliZShuZXQsICZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlLCBub2RlKTsKIAkJCXJldHVybiB0cnVlOwpAQCAtNDE2LDUgJiM0Mzs1MTMsNiBAQCB2b2lkIHRpcGNfbmFtZWRfcmVpbml0KHN0cnVjdCBuZXQgKm5ldCkKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCAmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlLCBiaW5kaW5nX25vZGUpCiAJCXAtJmd0O3NrLm5vZGUgPSBzZWxmOwogCW50LSZndDtyY19kZXN0cyA9IDA7CiYjNDM7CXRuLSZndDtudF9zdG9wID0gZmFsc2U7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaAppbmRleCBjNjc3ZjZmMDgyZGZiLi4yMDQzMDk2YWU5NjdkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oCkBAIC02OSwxMSAmIzQzOzY5LDEyIEBAIHN0cnVjdCBkaXN0cl9pdGVtIHsKIAogc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7CiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7Ci12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7CiYjNDM7aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7CiB2b2lkIHRpcGNfbmFtZWRfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbmFtZWRxLAogCQkgICAgdTE2ICpyY3Zfbnh0LCBib29sICpvcGVuKTsKIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KTsKIHZvaWQgdGlwY19wdWJsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKm5zdWJfbGlzdCwKIAkJICAgICAgdTMyIGFkZHIsIHUxNiBjYXBhYmlsaXRpZXMpOwomIzQzO2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuYwppbmRleCAyNTNjNzJkMTM2NmViLi5iZWVkNDBhMjEzNjhhIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jCkBAIC0zMjksNyAmIzQzOzMyOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYywKIAogc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkgICAgIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLAotCQkJCSAgICAgc3RydWN0IHB1YmxpY2F0aW9uICpwKQomIzQzOwkJCQkgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcCwgaW50ICplcnIpCiB7CiAJc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uICpzdWIsICp0bXA7CiAJc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyOwpAQCAtMzM5LDEwICYjNDM7MzM5LDEyIEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJYm9vbCByZXMgPSBmYWxzZTsKIAl1MzIga2V5ID0gcC0mZ3Q7a2V5OwogCi0Jc3Bpbl9sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwogCXNyID0gdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzYywgcCk7Ci0JaWYgKCFzcikKLQkJZ290byAgZXhpdDsKJiM0MzsJaWYgKCFzcikgewomIzQzOwkJaWYgKGVycikKJiM0MzsJCQkqZXJyID0gLUVOT0JVRlM7CiYjNDM7CQlnb3RvIGV4aXQ7CiYjNDM7CX0KIAogCWZpcnN0ID0gbGlzdF9lbXB0eSgmYW1wO3NyLSZndDthbGxfcHVibCk7CiAKQEAgLTM1Myw2ICYjNDM7MzU1LDggQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIGJpbmQgZHVwbGljYXRlICV1LCV1LCV1LyV1OiV1LyV1XG4mIzM0OywKIAkJCQkgcC0mZ3Q7c3IudHlwZSwgcC0mZ3Q7c3IubG93ZXIsIHAtJmd0O3NyLnVwcGVyLAogCQkJCSBub2RlLCBwLSZndDtzay5yZWYsIGtleSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJKmVyciA9IC1FRVhJU1Q7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CkBAIC0zNzEsNyAmIzQzOzM3NSw2IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJaWYgKCFyZXMpCiAJCXByX3dhcm4oJiMzNDtGYWlsZWQgdG8gYmluZCB0byAldSwldSwldVxuJiMzNDssCiAJCQlwLSZndDtzci50eXBlLCBwLSZndDtzci5sb3dlciwgcC0mZ3Q7c3IudXBwZXIpOwotCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTQ3OCwyMCAmIzQzOzQ4MSwzMyBAQCBzdGF0aWMgc3RydWN0IHRpcGNfc2VydmljZSAqdGlwY19zZXJ2aWNlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LAogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCi0JCQkJCSAgICAgdTMyIGtleSkKJiM0MzsJCQkJCSAgICAgdTMyIGtleSwgaW50ICplcnIpCiB7CiAJc3RydWN0IHRpcGNfc2VydmljZSAqc2M7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwOwogCiAJcCA9IHRpcGNfcHVibF9jcmVhdGUodWEsIHNrLCBrZXkpOwotCWlmICghcCkKJiM0MzsJaWYgKCFwKSB7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCSplcnIgPSAtRU5PQlVGUzsKIAkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KIAogCXNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCB1YSk7CiAJaWYgKCFzYykKIAkJc2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgdWEpOwotCWlmIChzYyAmYW1wOyZhbXA7IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwKSkKLQkJcmV0dXJuIHA7CiYjNDM7CiYjNDM7CWlmIChzYykgewomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwomIzQzOwkJaWYgKHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwLCBlcnIpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CQkJcmV0dXJuIHA7CiYjNDM7CQl9CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3NjLSZndDtsb2NrKTsKJiM0MzsJfSBlbHNlIGlmIChlcnIpIHsKJiM0MzsJCSplcnIgPSAtRU5PQlVGUzsKJiM0MzsJfQomIzQzOwogCWtmcmVlKHApOwogCXJldHVybiBOVUxMOwogfQpAQCAtNzYwLDI2ICYjNDM7Nzc2LDU1IEBAIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCwKIC8qIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIHNlcnZpY2UgYmluZGluZyB0byBuYW1lIHRhYmxlCiAgKi8KIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCi0JCQkJCSBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpCiYjNDM7CQkJCQkgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLAomIzQzOwkJCQkJIHUzMiBrZXksIGludCAqZXJyKQogewogCXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwomIzQzOwl1MzIgbWF4X3VzZXJfcHViID0gVElQQ19NQVhfUFVCTCAtIDE7CiAJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKJiM0MzsJYm9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7CiYjNDM7CWludCBlcnJvciA9IDA7CiAJdTMyIHJjX2Rlc3RzOwogCiYjNDM7CWlmICh1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgfHwgdWEtJmd0O3NyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8CiYjNDM7CSAgICB1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpCiYjNDM7CQlwcm90b2NvbF90eXBlID0gdHJ1ZTsKJiM0MzsKIAlzcGluX2xvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKJiM0MzsJaWYgKHByb3RvY29sX3R5cGUpCiYjNDM7CQlnb3RvIGluc2VydDsKIAotCWlmIChudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCAmZ3Q7PSBUSVBDX01BWF9QVUJMKSB7Ci0JCXByX3dhcm4oJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcbiYjMzQ7LCBUSVBDX01BWF9QVUJMKTsKJiM0MzsJLyogUmVzZXJ2ZSBvbmUgZW50cnkgZm9yIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlIGJlY2F1c2UgaXQgaGFzIGNsdXN0ZXIKJiM0MzsJICogc2NvcGUgYW5kIGl0IGlzIGRpc3RyaWJ1dGVkIGluIGJ1bGsuIFNvLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdXNlciYjMzk7cwomIzQzOwkgKiBwdWJsaWNhdGlvbnMgaXMgKFRJUENfTUFYX1BVQkwgLSAxKS4KJiM0MzsJICovCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCAmZ3Q7PSBtYXhfdXNlcl9wdWIpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcbiYjMzQ7LCBtYXhfdXNlcl9wdWIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0JcCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIHVhLCBzaywga2V5KTsKJiM0MztpbnNlcnQ6CiYjNDM7CXAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSwgJmFtcDtlcnJvcik7CiAJaWYgKHApIHsKLQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQmIzQzOyYjNDM7OwomIzQzOwkJLyogTm90IGNvdW50IG5vZGUgc3RhdGUsIGxpbmsgc3RhdGUgYW5kIHRvcG9sb2d5IHNlcnZlciB0eXBlcwomIzQzOwkJICogc28gdGhhdCBtYXhpbXVtIG50LSZndDtsb2NhbF9wdWJsX2NvdW50IGRvZXMgbm90IHByZXZlbnQKJiM0MzsJCSAqIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgZnJvbSBiZWluZyBpbnNlcnRlZCBpbnRvIHRoZSBuYW1lCiYjNDM7CQkgKiB0YWJsZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFwcm90b2NvbF90eXBlKQomIzQzOwkJCW50LSZndDtsb2NhbF9wdWJsX2NvdW50JiM0MzsmIzQzOzsKIAkJc2tiID0gdGlwY19uYW1lZF9wdWJsaXNoKG5ldCwgcCk7CiYjNDM7CQkvKiBMb2NhbC1zY29wZSBwdWJsaWNhdGlvbiBpcyBub3QgcHVibGlzaGVkIChza2IgaXMgTlVMTCksIG9ubHkKJiM0MzsJCSAqIGNsdXN0ZXItY29wZSBvbmUgaXMuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghc2tiICZhbXA7JmFtcDsgcC0mZ3Q7c2NvcGUgPT0gVElQQ19DTFVTVEVSX1NDT1BFICZhbXA7JmFtcDsgZXJyKQomIzQzOwkJCSplcnIgPSAtRU5PQlVGUzsKJiM0MzsJfSBlbHNlIGlmICgoZXJyb3IgPT0gLUVOT0JVRlMpICZhbXA7JmFtcDsgZXJyKSB7CiYjNDM7CQkqZXJyID0gLUVOT0JVRlM7CiAJfQomIzQzOwogCXJjX2Rlc3RzID0gbnQtJmd0O3JjX2Rlc3RzOwogZXhpdDoKIAlzcGluX3VubG9ja19iaCgmYW1wO3RuLSZndDtuYW1ldGJsX2xvY2spOwpAQCAtNzg3LDcgJiM0Mzs4MzIsMTAyIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAJaWYgKHNrYikKIAkJdGlwY19ub2RlX2Jyb2FkY2FzdChuZXQsIHNrYiwgcmNfZGVzdHMpOwogCXJldHVybiBwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiAtIGluc2VydCBwdWJsaWNhdGlvbiBvZiBub2RlJiMzOTtzIHNlbGYgYWRkcmVzcwomIzQzOyAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgomIzQzOyAqLwomIzQzO2ludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTsKJiM0MzsJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiYjNDM7CXN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrOwomIzQzOwlzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3I7CiYjNDM7CXN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjOwomIzQzOwlib29sIHNjX2NyZWF0ZWQgPSBmYWxzZTsKJiM0MzsJc3RydWN0IHB1YmxpY2F0aW9uICpwOwomIzQzOwlzdHJ1Y3QgdGlwY191YWRkciB1YTsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CXNrLnJlZiA9IDA7CiYjNDM7CXNrLm5vZGUgPSB0bi0mZ3Q7bm9kZV9hZGRyOwomIzQzOwl0aXBjX3VhZGRyKCZhbXA7dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLAomIzQzOwkJICAgVElQQ19OT0RFX1NUQVRFLCB0bi0mZ3Q7bm9kZV9hZGRyLCB0bi0mZ3Q7bm9kZV9hZGRyKTsKJiM0MzsJc2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsICZhbXA7dWEpOwomIzQzOwlpZiAoIXNjKSB7CiYjNDM7CQlzYyA9IHRpcGNfc2VydmljZV9jcmVhdGUobmV0LCAmYW1wO3VhKTsKJiM0MzsJCWlmICghc2MpCiYjNDM7CQkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwkJc2NfY3JlYXRlZCA9IHRydWU7CiYjNDM7CX0KIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CS8qIENoZWNrIHdoZXRoZXIgYSByYW5nZSBleGlzdHMgaW4gdGhlIG5hbWUgdGFibGUgd2l0aAomIzQzOwkgKiBsb3dlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyLCB1cHBlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyLCBhbmQgdHlwZQomIzQzOwkgKiBUSVBDX05PREVfU1RBVEUgKDApLiBJZiAmIzM5O3NyJiMzOTsgaXMgbm90IE5VTEwsIHRoaXMgcmFuZ2UgZXhpc3RzCiYjNDM7CSAqIGR1ZSB0byBhIHByZXZpb3VzIGNhbGwgdG8gdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoKQomIzQzOwkgKiBvciB0aXBjX25ldF9maW5hbGl6ZSgpLgomIzQzOwkgKgomIzQzOwkgKiBOb3RlIHRoYXQgdXNlciBhcHBsaWNhdGlvbnMgY2FuIG9ubHkgaW5zZXJ0IHR5cGVzIGdyZWF0ZXIgdGhhbgomIzQzOwkgKiBvciBlcXVhbCB0byA2NCAoVElQQ19SRVNFUlZFRF9UWVBFUyksIGFzIGVuZm9yY2VkIGJ5IHRpcGNfYmluZCgpLgomIzQzOwkgKiBSZW1vdGUgbm9kZXMgYWxzbyBvbmx5IHNlbmQgcHJvdG9jb2wgcHVibGljYXRpb25zIHdpdGggdHlwZQomIzQzOwkgKiBUSVBDX05PREVfU1RBVEUgKDApLCB3aXRoIGJvdGggbG93ZXIgYW5kIHVwcGVyIHNldCB0byB0aGUgcmVtb3RlCiYjNDM7CSAqIG5vZGUmIzM5O3MgYWRkcmVzcy4gVGhlc2UgcmFuZ2VzIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGlzIG5vZGUmIzM5O3MKJiM0MzsJICogcmFuZ2UgYmVjYXVzZSBhIHJlbW90ZSBub2RlJiMzOTtzIGFkZHJlc3MgbXVzdCBkaWZmZXIgZnJvbSB0aGlzCiYjNDM7CSAqIG5vZGUmIzM5O3MgYWRkcmVzcyAodG4tJmd0O25vZGVfYWRkcikuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZXJlZm9yZSwgdGlwY191cGRhdGVfbmFtZXRibCgpIGNhbm5vdCBidWlsZCBhbmQgaW5zZXJ0IGEgcmVtb3RlCiYjNDM7CSAqIHB1YmxpY2F0aW9uIHdpdGggdGhlIHNhbWUgdHlwZSAoMCkgYW5kIHJhbmdlCiYjNDM7CSAqIChsb3dlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyLCB1cHBlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyKSBhcyB0aGlzIG5vZGUmIzM5O3MKJiM0MzsJICogc2VsZi1hZGRyZXNzIHB1YmxpY2F0aW9uIGluIHRoZSBuYW1lIHRhYmxlLgomIzQzOwkgKgomIzQzOwkgKiBCZWNhdXNlIHRoZSBjb21iaW5hdGlvbiBvZiB0eXBlIDAgYW5kCiYjNDM7CSAqIChsb3dlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyLCB1cHBlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyKSBpcyB1bmlxdWUgaW4gdGhlCiYjNDM7CSAqIG5hbWUgdGFibGUsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY2hlY2sgc2subm9kZSwgc2sucmVmLCBrZXksIG9yCiYjNDM7CSAqIGNsdXN0ZXJfc2NvcGUgbWVtYmVyc2hpcC4KJiM0MzsJICovCiYjNDM7CXNyID0gdGlwY19zZXJ2aWNlX2ZpbmRfcmFuZ2Uoc2MsICZhbXA7dWEpOwomIzQzOwkvKiAxLiB0aXBjX25ldF9maW5hbGl6ZV93b3JrKCkgaXMgbm90IHNjaGVkdWxlZCBiZWNhdXNlIG9mIG5hbWVzcGFjZQomIzQzOwkgKiAgICB0ZWFyZG93bi4KJiM0MzsJICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS0mZ3Q7IHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIGZhaWxlZAomIzQzOwkgKiAgICB0byBpbnNlcnQgbm9kZSBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaW50byBudC0mZ3Q7Y2x1c3Rlcl9zY29wZQomIzQzOwkgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4KJiM0MzsJICogMy4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS0mZ3Q7IHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdAomIzQzOwkgKiAgICBleGVjdXRlZCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXNyKSB7CiYjNDM7CQlwID0gdGlwY19wdWJsX2NyZWF0ZSgmYW1wO3VhLCAmYW1wO3NrLCB0bi0mZ3Q7bm9kZV9hZGRyKTsKJiM0MzsJCWlmICghcCkKJiM0MzsJCQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwkJaWYgKCF0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgJmFtcDtlcnIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoZXJyID09IC1FTk9CVUZTKSkgewomIzQzOwkJCWtmcmVlKHApOwomIzQzOwkJCWdvdG8gZXJyb3I7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlsaXN0X2FkZF90YWlsKCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlLCAmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlKTsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MztlcnJvcjoKJiM0MzsJCWlmIChzY19jcmVhdGVkKSB7CiYjNDM7CQkJaGxpc3RfZGVsX2luaXRfcmN1KCZhbXA7c2MtJmd0O3NlcnZpY2VfbGlzdCk7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CQkJa2ZyZWVfcmN1KHNjLCByY3UpOwomIzQzOwkJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwl9CiYjNDM7ZXhpdDoKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiAwOwogfQogCiAvKioKQEAgLTgxMCw3ICYjNDM7OTUwLDEwIEBAIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAogCiAJcCA9IHRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChuZXQsIHVhLCBzaywga2V5KTsKIAlpZiAocCkgewotCQludC0mZ3Q7bG9jYWxfcHVibF9jb3VudC0tOwomIzQzOwkJaWYgKHAtJmd0O3NyLnR5cGUgIT0gVElQQ19OT0RFX1NUQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwLSZndDtzci50eXBlICE9IFRJUENfTElOS19TVEFURSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcC0mZ3Q7c3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpCiYjNDM7CQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQtLTsKIAkJc2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApOwogCQlsaXN0X2RlbF9pbml0KCZhbXA7cC0mZ3Q7YmluZGluZ19zb2NrKTsKIAkJa2ZyZWVfcmN1KHAsIHJjdSk7CkBAIC04OTksNyAmIzQzOzEwNDIsNiBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KQogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtudC0mZ3Q7bm9kZV9zY29wZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSk7Ci0Jcndsb2NrX2luaXQoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKIAl0bi0mZ3Q7bmFtZXRibCA9IG50OwogCXNwaW5fbG9ja19pbml0KCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiAJcmV0dXJuIDA7CkBAIC05MTIsNiAmIzQzOzEwNTQsNyBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KQogICovCiBzdGF0aWMgdm9pZCB0aXBjX3NlcnZpY2VfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc2VydmljZSAqc2MpCiB7CiYjNDM7CXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzciwgKnRtcHI7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwLCAqdG1wOwogCkBAIC05MTksNiAmIzQzOzEwNjIsMTUgQEAgc3RhdGljIHZvaWQgdGlwY19zZXJ2aWNlX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjKQogCXJidHJlZV9wb3N0b3JkZXJfZm9yX2VhY2hfZW50cnlfc2FmZShzciwgdG1wciwgJmFtcDtzYy0mZ3Q7cmFuZ2VzLCB0cmVlX25vZGUpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgJmFtcDtzci0mZ3Q7YWxsX3B1YmwsIGFsbF9wdWJsKSB7CiAJCQl0aXBjX3NlcnZpY2VfcmVtb3ZlX3B1Ymwoc3IsICZhbXA7cC0mZ3Q7c2ssIHAtJmd0O2tleSk7CiYjNDM7CQkJLyogdGlwY19uYW1ldGJsX3dpdGhkcmF3KCkgZG9lcyBub3QgZGVsZXRlCiYjNDM7CQkJICogJiMzOTtwLSZndDtiaW5kaW5nX25vZGUmIzM5OyB3aXRoIHR5cGUgVElQQ19OT0RFX1NUQVRFIGFuZAomIzQzOwkJCSAqIHJhbmdlIFt0bi0mZ3Q7bm9kZV9hZGRyLCB0bi0mZ3Q7bm9kZV9hZGRyXSBmcm9tCiYjNDM7CQkJICogJiMzOTt0bi0mZ3Q7Y2x1c3Rlcl9zY29wZSYjMzk7LiBTbywgZGVsZXRlIGl0IGhlcmUuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHAtJmd0O3NyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgcC0mZ3Q7c3IubG93ZXIgPT0gdG4tJmd0O25vZGVfYWRkciAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHAtJmd0O3NyLnVwcGVyID09IHRuLSZndDtub2RlX2FkZHIpCiYjNDM7CQkJCWxpc3RfZGVsKCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlKTsKIAkJCWtmcmVlX3JjdShwLCByY3UpOwogCQl9CiAJCXJiX2VyYXNlX2F1Z21lbnRlZCgmYW1wO3NyLSZndDt0cmVlX25vZGUsICZhbXA7c2MtJmd0O3JhbmdlcywgJmFtcDtzcl9jYWxsYmFja3MpOwpAQCAtOTQ5LDYgJiM0MzsxMTAxLDggQEAgdm9pZCB0aXBjX25hbWV0Ymxfc3RvcChzdHJ1Y3QgbmV0ICpuZXQpCiAJCQl0aXBjX3NlcnZpY2VfZGVsZXRlKG5ldCwgc2VydmljZSk7CiAJCX0KIAl9CiYjNDM7CXRuLSZndDtudF9zdG9wID0gdHJ1ZTsKJiM0MzsJdG4tJmd0O250X3NlbGZfbm9kZV9leGlzdCA9IGZhbHNlOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiAKIAkvKiBUT0RPOiBjbGVhciB0bi0mZ3Q7bmFtZXRibCwgaW1wbGVtZW50IHByb3BlciBSQ1UgcnVsZXMgPyAqLwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV90YWJsZS5oIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oCmluZGV4IDdmZjZlZWViYWFlNjQuLjQzOTBlNzlhNDY2MGUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmgKQEAgLTk3LDggJiM0Mzs5Nyw3IEBAIHN0cnVjdCBwdWJsaWNhdGlvbiB7CiAgKiBAY2x1c3Rlcl9zY29wZTogYWxsIGxvY2FsIHB1YmxpY2F0aW9ucyB3aXRoIGNsdXN0ZXIgc2NvcGUKICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgdG8gc2VuZCBidWxrIHVwZGF0ZXMgdG8gbmV3IG5vZGVzCiAgKiAgICAgICAgICAgICAgIC0gdXNlZCBieSBuYW1lX2Rpc3RyIGR1cmluZyByZS1pbml0IG9mIG5hbWUgdGFibGUKLSAqIEBjbHVzdGVyX3Njb3BlX2xvY2s6IGxvY2sgZm9yIGFjY2Vzc2luZyBAY2x1c3Rlcl9zY29wZQotICogQGxvY2FsX3B1YmxfY291bnQ6IG51bWJlciBvZiBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZQomIzQzOyAqIEBsb2NhbF9wdWJsX2NvdW50OiB0aGUgbnVtYmVyIG9mIHVzZXImIzM5O3MgcHVibGljYXRpb25zIGlzc3VlZCBieSB0aGlzIG5vZGUKICAqIEByY19kZXN0czogZGVzdGluYXRpb24gbm9kZSBjb3VudGVyCiAgKiBAc25kX254dDogbmV4dCBzZXF1ZW5jZSBudW1iZXIgdG8gYmUgdXNlZAogICovCkBAIC0xMDcsNyAmIzQzOzEwNiw2IEBAIHN0cnVjdCBuYW1lX3RhYmxlIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBzZXJ2aWNlc1tUSVBDX05BTUVUQkxfU0laRV07CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlX3Njb3BlOwogCXN0cnVjdCBsaXN0X2hlYWQgY2x1c3Rlcl9zY29wZTsKLQlyd2xvY2tfdCBjbHVzdGVyX3Njb3BlX2xvY2s7CiAJdTMyIGxvY2FsX3B1YmxfY291bnQ7CiAJdTMyIHJjX2Rlc3RzOwogCXUzMiBzbmRfbnh0OwpAQCAtMTI2LDEzICYjNDM7MTI0LDE1IEBAIGJvb2wgdGlwY19uYW1ldGJsX2xvb2t1cF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCwKIAkJCSAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7CiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAotCQkJCQkgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTsKJiM0MzsJCQkJCSBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCiYjNDM7CQkJCQkgdTMyIGtleSwgaW50ICplcnIpOwogdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAJCQkgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpOwogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCi0JCQkJCSAgICAgdTMyIGtleSk7CiYjNDM7CQkJCQkgICAgIHUzMiBrZXksIGludCAqZXJyKTsKJiM0MztpbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KTsKIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAJCQkJCSAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmV0LmMgYi9uZXQvdGlwYy9uZXQuYwppbmRleCA3ZTY1ZDBiMGM0YThkLi43YTJjMWU2N2FjYTNkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uZXQuYwpAQCAtMTEwLDExICYjNDM7MTEwLDE0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpOwogCiBpbnQgdGlwY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpub2RlX2lkLCB1MzIgYWRkcikKIHsKJiM0MzsJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiYjNDM7CiAJaWYgKHRpcGNfb3duX2lkKG5ldCkpIHsKIAkJcHJfaW5mbygmIzM0O0Nhbm5vdCBjb25maWd1cmUgbm9kZSBpZGVudGl0eSB0d2ljZVxuJiMzNDspOwogCQlyZXR1cm4gLTE7CiAJfQogCXByX2luZm8oJiMzNDtTdGFydGVkIGluIG5ldHdvcmsgbW9kZVxuJiMzNDspOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7dG4tJmd0O25vZGVfYWRkcl9zZXQsIDApOwogCiAJaWYgKG5vZGVfaWQpCiAJCXRpcGNfc2V0X25vZGVfaWQobmV0LCBub2RlX2lkKTsKQEAgLTEyNSw4ICYjNDM7MTI4LDggQEAgaW50IHRpcGNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1OCAqbm9kZV9pZCwgdTMyIGFkZHIpCiAKIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpCiB7Ci0Jc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiAJc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2sgPSB7MCwgYWRkcn07CiYjNDM7CXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCB0aXBjX3VhZGRyIHVhOwogCiAJdGlwY191YWRkcigmYW1wO3VhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSwKQEAgLTEzOCw3ICYjNDM7MTQxLDExIEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpCiAJdGlwY19uYW1lZF9yZWluaXQobmV0KTsKIAl0aXBjX3NrX3JlaW5pdChuZXQpOwogCXRpcGNfbW9uX3JlaW5pdF9zZWxmKG5ldCk7Ci0JdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBhZGRyKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3RuLSZndDtub2RlX2FkZHJfc2V0LCAxKTsKJiM0MzsJLyogUmVkaXN0cmlidXRlIGJ1bGsgb2YgcHVibGljYXRpb25zIHZpYSBub2RlLXVwIGV2ZW50IG9yIG5vZGUmIzM5O3MgdGltZXIKJiM0MzsJICogaWYgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBmYWlscy4KJiM0MzsJICovCiYjNDM7CXRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgJmFtcDt1YSwgJmFtcDtzaywgYWRkciwgTlVMTCk7CiB9CiAKIHZvaWQgdGlwY19uZXRfZmluYWxpemVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmMgYi9uZXQvdGlwYy9ub2RlLmMKaW5kZXggNjgzYTEzNmU1M2VmYy4uZjFlZWU2NzRhNjc4ZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25vZGUuYwpAQCAtMTExLDYgJiM0MzsxMTEsNyBAQCBzdHJ1Y3QgdGlwY19iY2xpbmtfZW50cnkgewogICogQHBlZXJfbmV0OiBwZWVyJiMzOTtzIG5ldCBuYW1lc3BhY2UKICAqIEBwZWVyX2hhc2hfbWl4OiBoYXNoIGZvciB0aGlzIHBlZXIgKEZJWE1FKQogICogQGNyeXB0b19yeDogUlggY3J5cHRvIGhhbmRsZXIKJiM0MzsgKiBAZGlzdF9idWxrOiBmbGFnIHRvIHJlZGlzdHJpYnV0ZSBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9ucwogICovCiBzdHJ1Y3QgdGlwY19ub2RlIHsKIAl1MzIgYWRkcjsKQEAgLTE0NSw2ICYjNDM7MTQ2LDcgQEAgc3RydWN0IHRpcGNfbm9kZSB7CiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPCiAJc3RydWN0IHRpcGNfY3J5cHRvICpjcnlwdG9fcng7CiAjZW5kaWYKJiM0MzsJYXRvbWljX3QgZGlzdF9idWxrOwogfTsKIAogLyogTm9kZSBGU00gc3RhdGVzIGFuZCBldmVudHM6CkBAIC0zNDUsNiAmIzQzOzM0NywxNyBAQCBzdGF0aWMgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcikKIAlyZXR1cm4gbm9kZTsKIH0KIAomIzQzO3ZvaWQgdGlwY19ub2RlX3NldF9kaXN0X2J1bGsoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0aXBjX25vZGUgKm5vZGU7CiYjNDM7CiYjNDM7CW5vZGUgPSB0aXBjX25vZGVfZmluZChuZXQsIGFkZHIpOwomIzQzOwlpZiAobm9kZSkgewomIzQzOwkJYXRvbWljX3NldCgmYW1wO25vZGUtJmd0O2Rpc3RfYnVsaywgMSk7CiYjNDM7CQl0aXBjX25vZGVfcHV0KG5vZGUpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyogdGlwY19ub2RlX2ZpbmRfYnlfaWQgLSBsb2NhdGUgc3BlY2lmaWVkIG5vZGUgb2JqZWN0IGJ5IGl0cyAxMjgtYml0IGlkCiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gYSBkaXNjb3ZlcnkgcmVxdWVzdCBmYWlsZWQKICAqIHRvIGZpbmQgdGhlIG5vZGUgYnkgaXRzIDMyLWJpdCBpZCwgYW5kIGlzIG5vdCB0aW1lIGNyaXRpY2FsCkBAIC0zOTMsNiAmIzQzOzQwNiwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrX2Zhc3Qoc3RydWN0IHRpcGNfbm9kZSAqbikKIAl3cml0ZV91bmxvY2tfYmgoJmFtcDtuLSZndDtsb2NrKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRpcGNfbm9kZV9kb3duKHN0cnVjdCB0aXBjX25vZGUgKm4pCiYjNDM7ewomIzQzOwlpbnQgYmVhcmVyX2lkOwomIzQzOwomIzQzOwlmb3IgKGJlYXJlcl9pZCA9IDA7IGJlYXJlcl9pZCAmbHQ7IE1BWF9CRUFSRVJTOyBiZWFyZXJfaWQmIzQzOyYjNDM7KQomIzQzOwkJdGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pCiAJX19yZWxlYXNlcyhuLSZndDtsb2NrKQogewpAQCAtNDAyLDYgJiM0Mzs0MjMsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pCiAJc3RydWN0IGxpc3RfaGVhZCAqcHVibF9saXN0OwogCXN0cnVjdCB0aXBjX3VhZGRyIHVhOwogCXUzMiBiZWFyZXJfaWQsIG5vZGU7CiYjNDM7CWludCByYyA9IDAsIGVyciA9IDA7CiAKIAlpZiAobGlrZWx5KCFmbGFncykpIHsKIAkJd3JpdGVfdW5sb2NrX2JoKCZhbXA7bi0mZ3Q7bG9jayk7CkBAIC00MjUsMTYgJiM0Mzs0NDcsMjQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKQogCQl0aXBjX3B1Ymxfbm90aWZ5KG5ldCwgcHVibF9saXN0LCBub2RlLCBuLSZndDtjYXBhYmlsaXRpZXMpOwogCiAJaWYgKGZsYWdzICZhbXA7IFRJUENfTk9USUZZX05PREVfVVApCi0JCXRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tJmd0O2NhcGFiaWxpdGllcyk7CiYjNDM7CQlyYyA9IHRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tJmd0O2NhcGFiaWxpdGllcyk7CiAKIAlpZiAoZmxhZ3MgJmFtcDsgVElQQ19OT1RJRllfTElOS19VUCkgewogCQl0aXBjX21vbl9wZWVyX3VwKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTsKLQkJdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYpOwomIzQzOwkJdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYsICZhbXA7ZXJyKTsKIAl9CiAJaWYgKGZsYWdzICZhbXA7IFRJUENfTk9USUZZX0xJTktfRE9XTikgewogCQl0aXBjX21vbl9wZWVyX2Rvd24obmV0LCBub2RlLCBiZWFyZXJfaWQpOwogCQl0aXBjX25hbWV0Ymxfd2l0aGRyYXcobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYpOwogCX0KJiM0MzsKJiM0MzsJLyogTWVtb3J5IGFsbG9jYXRpb24gaGFzIGZhaWxlZC4gQnJpbmcgdGhlIG5vZGUgZG93biB0byBzdGFydCBvdmVyIGJ1bGsKJiM0MzsJICogZGlzdHJpYnV0aW9uIHdoZW4gdGhlIGZpcnN0IGxpbmsgaXMgdXAgYWdhaW4uCiYjNDM7CSAqLwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJdGlwY19ub2RlX2Rvd24obik7CiYjNDM7CWVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUykKJiM0MzsJCXRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV9hc3NpZ25fcGVlcl9uZXQoc3RydWN0IHRpcGNfbm9kZSAqbiwgdTMyIGhhc2hfbWl4ZXMpCkBAIC01NjQsNiAmIzQzOzU5NCw3IEBAIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkciwgdTggKnBlZXJfaWQsCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuLSZndDtsaXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO24tJmd0O3B1YmxfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuLSZndDtjb25uX3Nrcyk7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtuLSZndDtkaXN0X2J1bGssIDApOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5uYW1lZHEpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5pbnB1dHExKTsKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5hcnJ2cSk7CkBAIC04MDMsNyAmIzQzOzgzNCw4IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCXN0cnVjdCB0aXBjX25vZGUgKm4gPSB0aW1lcl9jb250YWluZXJfb2YobiwgdCwgdGltZXIpOwogCXN0cnVjdCB0aXBjX2xpbmtfZW50cnkgKmxlOwogCXN0cnVjdCBza19idWZmX2hlYWQgeG1pdHE7Ci0JaW50IHJlbWFpbnMgPSBuLSZndDtsaW5rX2NudDsKJiM0MzsJaW50IHJlbWFpbnMgPSAwOwomIzQzOwlpbnQgZGlzdF9yYyA9IDA7CiAJaW50IGJlYXJlcl9pZDsKIAlpbnQgcmMgPSAwOwogCkBAIC04MTQsNiAmIzQzOzg0Niw5IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCQlyZXR1cm47CiAJfQogCiYjNDM7CWlmIChhdG9taWNfeGNoZygmYW1wO24tJmd0O2Rpc3RfYnVsaywgMCkpCiYjNDM7CQlkaXN0X3JjID0gdGlwY19uYW1lZF9kaXN0cmlidXRlKG4tJmd0O25ldCwgbi0mZ3Q7YWRkcik7CiYjNDM7CiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPCiAJLyogVGFrZSBhbnkgY3J5cHRvIGtleSByZWxhdGVkIGFjdGlvbnMgZmlyc3QgKi8KIAl0aXBjX2NyeXB0b190aW1lb3V0KG4tJmd0O2NyeXB0b19yeCk7CkBAIC04MjUsNiAmIzQzOzg2MCw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCSAqLwogCXRpcGNfbm9kZV9yZWFkX2xvY2sobik7CiAJbi0mZ3Q7a2VlcGFsaXZlX2ludHYgPSAxMDAwMDsKJiM0MzsJcmVtYWlucyA9IG4tJmd0O2xpbmtfY250OwogCXRpcGNfbm9kZV9yZWFkX3VubG9jayhuKTsKIAlmb3IgKGJlYXJlcl9pZCA9IDA7IHJlbWFpbnMgJmFtcDsmYW1wOyAoYmVhcmVyX2lkICZsdDsgTUFYX0JFQVJFUlMpOyBiZWFyZXJfaWQmIzQzOyYjNDM7KSB7CiAJCXRpcGNfbm9kZV9yZWFkX2xvY2sobik7CkBAIC04MzUsMTEgJiM0Mzs4NzEsMTMgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAJCQl0aXBjX25vZGVfY2FsY3VsYXRlX3RpbWVyKG4sIGxlLSZndDtsaW5rKTsKIAkJCXJjID0gdGlwY19saW5rX3RpbWVvdXQobGUtJmd0O2xpbmssICZhbXA7eG1pdHEpOwogCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtsZS0mZ3Q7bG9jayk7Ci0JCQlyZW1haW5zLS07CiYjNDM7CQkJaWYgKGRpc3RfcmMgJmx0OyAwKQomIzQzOwkJCQlyZW1haW5zLS07CiAJCX0KIAkJdGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pOwogCQl0aXBjX2JlYXJlcl94bWl0KG4tJmd0O25ldCwgYmVhcmVyX2lkLCAmYW1wO3htaXRxLCAmYW1wO2xlLSZndDttYWRkciwgbik7Ci0JCWlmIChyYyAmYW1wOyBUSVBDX0xJTktfRE9XTl9FVlQpCiYjNDM7CQkvKiBGb3JjZSB0aGUgbm9kZSBkb3duIGluIGNhc2UgdGhlIHJlZGlzdHJpYnV0aW9uIGZhaWxlZCAqLwomIzQzOwkJaWYgKChyYyAmYW1wOyBUSVBDX0xJTktfRE9XTl9FVlQpIHx8IGRpc3RfcmMgJmx0OyAwKQogCQkJdGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTsKIAl9CiAJbW9kX3RpbWVyKCZhbXA7bi0mZ3Q7dGltZXIsIGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhuLSZndDtrZWVwYWxpdmVfaW50dikpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5oIGIvbmV0L3RpcGMvbm9kZS5oCmluZGV4IDE1NGE1YmJiMGQyOWQuLjBmNzc3Y2ZlN2MwMWUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25vZGUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9ub2RlLmgKQEAgLTEyOCw0ICYjNDM7MTI4LDUgQEAgaW50IHRpcGNfbmxfbm9kZV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogaW50IHRpcGNfbmxfbm9kZV9mbHVzaF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiAjZW5kaWYKIHZvaWQgdGlwY19ub2RlX3ByZV9jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpleGl0X25ldCk7CiYjNDM7dm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuYwppbmRleCBkNWQ3MGViMjMwYjU2Li42YjgzYmRmYzQzOWMzIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9zb2NrZXQuYwpAQCAtMjkxOSw3ICYjNDM7MjkxOSw3IEBAIHN0YXRpYyBpbnQgdGlwY19za19wdWJsaXNoKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKQogCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJc2thZGRyLnJlZiA9IHRzay0mZ3Q7cG9ydGlkOwogCXNrYWRkci5ub2RlID0gdGlwY19vd25fYWRkcihuZXQpOwotCXAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCAmYW1wO3NrYWRkciwga2V5KTsKJiM0MzsJcCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsICZhbXA7c2thZGRyLCBrZXksIE5VTEwpOwogCWlmICh1bmxpa2VseSghcCkpCiAJCXJldHVybiAtRUlOVkFMOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjczOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRJUEMgTmFtZSBUYWJsZSBEaXN0cmlidXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIFRJUEMgc3Vic3lzdGVtIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIG5hbWUgdGFibGUgcHVibGljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBtZWNoYW5pc21zLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZm9jdXNlZCBvbiB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcyBhbmQgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCByaXNrcy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3QgaXMgYXJvdW5kIGltcHJvdmluZyBlcnJvciBoYW5kbGluZywgcGFydGljdWxhcmx5IHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMgZHVyaW5nIHRoZSBkaXN0cmlidXRpb24gcHJvY2VzcyDigJMgZ29vZCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgcG9pbnQgdG8gYWRkcmVzcywgcmF0aGVyIHRoYW4gc2lsZW50bHkgZmFpbGluZyBvciBjcmFzaGluZy4gVGhleSYjMzk7cmUgZXhwbGljaXRseSBhZGRpbmcgaGFuZGxpbmcgZm9yIGAtRU5PQlVGU2Agd2hpY2ggaXMgdGhlIHJpZ2h0IHdheSB0byBkbyBpdC4KCkZyb20gdGhlIGRlc2NyaXB0aW9uLCB0aGV54oCZcmUgdG91Y2hpbmcgcXVpdGUgYSBmZXcgZnVuY3Rpb25zOiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmxgLCBldGMuIFRoaXMgbWVhbnMgaXQmIzM5O3MgcHJldHR5IGludm9sdmVkLiBBbmQsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWxzbyBpbnRyb2R1Y2luZyBuZXcgZmxhZ3Mgd2l0aGluIGBzdHJ1Y3QgdGlwY19uZXRgIChgbnRfc3RvcGAsIGBudF9zZWxmX25vZGVfZXhpc3RgLCBgbm9kZV9hZGRyX3NldGApIGFuZCBhZGRpbmcgYSBuZXcgYGRpc3RfYnVsa2AgZmllbGQgdG8gYHN0cnVjdCB0aXBjX25vZGVgLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byBub3RlLCBzdGF0ZSB0cmFja2luZyBhbmQgbmV3IGNvbnRyb2wgZmxvdyBjYW4gbGVhZCB0byB1bmludGVuZGVkIHNpZGUgZWZmZWN0cy4KCk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBzYWZldHkuIEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoZSBkZXNjcmlwdGlvbiBzdWdnZXN0cyB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSAqZGlyZWN0bHkqIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB3aGljaCBpcyBhIGJpZyByZWxpZWYuIE5vIGNvbXBsZXggbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIHdoZXJlIHVuaXRpdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZSBjb3JlIGlkZWEgc2VlbXMgdG8gYmUgZ3JhY2VmdWxseSBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBpbiB0aGUgVElQQyBuYW1lIGRpc3RyaWJ1dGlvbiBwcm9jZXNzLiBUaGF0IHNob3VsZCBiZSBhIGdvb2QgdGhpbmcuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYSBzcGVjaWZpYyBjb2RlIHNuaXBwZXQsIHNwZWNpZmljYWxseSBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgOgoKYGBgYwomIzQzO2ludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewouLi4KJiM0MzsJc2sucmVmID0gMDsKJiM0MzsJc2subm9kZSA9IHRuLSZndDtub2RlX2FkZHI7CiYjNDM7CXRpcGNfdWFkZHIoJmFtcDt1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsCiYjNDM7CQkgICBUSVBDX05PREVfU1RBVEUsIHRuLSZndDtub2RlX2FkZHIsIHRuLSZndDtub2RlX2FkZHIpOwouLi4KYGBgCgpSaWdodCwgYHNrYCBoZXJlIGlzIGEgYHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyYCwgYW5kIGl0ICphcHBlYXJzKiB0byBiZSBmdWxseSBpbml0aWFsaXplZDogYHNrLnJlZmAgaXMgc2V0IHRvIGAwYCwgYW5kIGBzay5ub2RlYCBpcyBwb3B1bGF0ZWQgZnJvbSBgdG4tJmd0O25vZGVfYWRkcmAuIFRoYXTigJlzIGdvb2QuIGB1YWAgaXMgYSBgc3RydWN0IHRpcGNfdWFkZHJgLiBOb3csIGB0aXBjX3VhZGRyYCBpcyBiZWluZyBjYWxsZWQsIHdoaWNoIGluaXRpYWxpemVzIGl0LiBJdCYjMzk7cyBhIGZ1bmN0aW9uIG9yIGEgbWFjcm8uIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHRpcGNfdWFkZHJgLCBpbiBgbmV0L3RpcGMvY29yZS5oYCBvciBzb21ld2hlcmUgc2ltaWxhciB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBpdCBpbml0aWFsaXplcyBhbGwgdGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0IHRvIHRoZSBjb3JyZWN0IHZhbHVlcy4gSXQmIzM5O3MgYSBxdWljayBzYW5pdHkgY2hlY2sgYXQgdGhpcyBwb2ludC4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfdWFkZHJcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvYWRkci5oPTUwPXN0cnVjdCB0aXBjX3VhZGRyIHtcbi0tXG5uZXQvdGlwYy9hZGRyLmgtNjMtXG5uZXQvdGlwYy9hZGRyLmg6NjQ6c3RhdGljIGlubGluZSB2b2lkIHRpcGNfdWFkZHIoc3RydWN0IHRpcGNfdWFkZHIgKnVhLCB1MzIgYXR5cGUsIHUzMiBzY29wZSxcbm5ldC90aXBjL2FkZHIuaC02NS1cdFx0XHQgICAgICB1MzIgdHlwZSwgdTMyIGxvd2VyLCB1MzIgdXBwZXIpXG4tLVxubmV0L3RpcGMvbXNnLmM9NzEzPWJvb2wgdGlwY19tc2dfbG9va3VwX2Rlc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKmVycilcbi0tXG5uZXQvdGlwYy9tc2cuYy03MzMtXHRcdHJldHVybiBmYWxzZTtcbm5ldC90aXBjL21zZy5jOjczNDpcdHRpcGNfdWFkZHIoXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgc2NvcGUsXG5uZXQvdGlwYy9tc2cuYy03MzUtXHRcdCAgIG1zZ19uYW1ldHlwZShtc2cpLCBpbnN0LCBpbnN0KTtcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MzMyPXN0YXRpYyB2b2lkIHRpcGNfcHVibF9wdXJnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcCwgdTMyIGFkZHIpXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTMzNy1cbm5ldC90aXBjL25hbWVfZGlzdHIuYzozMzg6XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIHAtXHUwMDNlc2NvcGUsIHAtXHUwMDNlc3IudHlwZSxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zMzktXHRcdCAgIHAtXHUwMDNlc3IubG93ZXIsIHAtXHUwMDNlc3IudXBwZXIpO1xuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYz0zNzY9c3RhdGljIGJvb2wgdGlwY191cGRhdGVfbmFtZXRibChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkaXN0cl9pdGVtICppLFxuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zOTItXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MzkzOlx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMzk0LVx0XHQgICBudG9obChpLVx1MDAzZXR5cGUpLCBsb3dlciwgdXBwZXIpO1xuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuYz04NDY9aW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODU5LVx0c2subm9kZSA9IHRuLVx1MDAzZW5vZGVfYWRkcjtcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4NjA6XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcbm5ldC90aXBjL25hbWVfdGFibGUuYy04NjEtXHRcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXHUwMDNlbm9kZV9hZGRyLCB0bi1cdTAwM2Vub2RlX2FkZHIpO1xuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuYz05NzI9Ym9vbCB0aXBjX25hbWV0Ymxfc3Vic2NyaWJlKHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViKVxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuYy05NzktXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6OTgwOlx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX05PREVfU0NPUEUsIHR5cGUsXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtOTgxLVx0XHQgICBzdWItXHUwMDNlcy5zZXEubG93ZXIsIHN1Yi1cdTAwM2VzLnNlcS51cHBlcik7XG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTEwMDM9dm9pZCB0aXBjX25hbWV0YmxfdW5zdWJzY3JpYmUoc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uICpzdWIpXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTEwMDgtXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6MTAwOTpcdHRpcGNfdWFkZHIoXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19OT0RFX1NDT1BFLFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTEwMTAtXHRcdCAgIHN1Yi1cdTAwM2VzLnNlcS50eXBlLCBzdWItXHUwMDNlcy5zZXEubG93ZXIsIHN1Yi1cdTAwM2VzLnNlcS51cHBlcik7XG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTEyMDY9c3RhdGljIGludCB0aXBjX25sX3NlcnZpY2VfbGlzdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuYy0xMjI1LVx0XHQgICAgKCFpIFx1MDAyNlx1MDAyNiAqbGFzdF9rZXkgXHUwMDI2XHUwMDI2ICgqbGFzdF9sb3dlciA9PSAqbGFzdF9rZXkpKSkge1xubmV0L3RpcGMvbmFtZV90YWJsZS5jOjEyMjY6XHRcdFx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX05PREVfU0NPUEUsXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtMTIyNy1cdFx0XHRcdCAgICpsYXN0X3R5cGUsICpsYXN0X2xvd2VyLCAqbGFzdF9sb3dlcik7XG4tLVxubmV0L3RpcGMvbmV0LmM9MTI5PXN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4tLVxubmV0L3RpcGMvbmV0LmMtMTM0LVxubmV0L3RpcGMvbmV0LmM6MTM1Olx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG5uZXQvdGlwYy9uZXQuYy0xMzYtXHRcdCAgIFRJUENfTk9ERV9TVEFURSwgYWRkciwgYWRkcik7XG4tLVxubmV0L3RpcGMvbm9kZS5jPTQxNz1zdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4tLVxubmV0L3RpcGMvbm9kZS5jLTQzMi1cbm5ldC90aXBjL25vZGUuYzo0MzM6XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfTk9ERV9TQ09QRSxcbm5ldC90aXBjL25vZGUuYy00MzQtXHRcdCAgIFRJUENfTElOS19TVEFURSwgbi1cdTAwM2VhZGRyLCBuLVx1MDAzZWFkZHIpO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI5MzI9c3RhdGljIGludCB0aXBjX3NrX3dpdGhkcmF3KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI5NDAtXHRcdGlmICghdWEpIHtcbm5ldC90aXBjL3NvY2tldC5jOjI5NDE6XHRcdFx0dGlwY191YWRkcihcdTAwMjZfdWEsIFRJUENfU0VSVklDRV9SQU5HRSwgcC1cdTAwM2VzY29wZSxcbm5ldC90aXBjL3NvY2tldC5jLTI5NDItXHRcdFx0XHQgICBwLVx1MDAzZXNyLnR5cGUsIHAtXHUwMDNlc3IubG93ZXIsIHAtXHUwMDNlc3IudXBwZXIpO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMwNzI9c3RhdGljIGludCB0aXBjX3NrX2pvaW4oc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY19ncm91cF9yZXEgKm1yZXEpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzA5NC1cdG1zZ19zZXRfZGVzdF9kcm9wcGFibGUoaGRyLCB0cnVlKTtcbm5ldC90aXBjL3NvY2tldC5jOjMwOTU6XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIG1yZXEtXHUwMDNlc2NvcGUsXG5uZXQvdGlwYy9zb2NrZXQuYy0zMDk2LVx0XHQgICBtcmVxLVx1MDAzZXR5cGUsIG1yZXEtXHUwMDNlaW5zdGFuY2UsIG1yZXEtXHUwMDNlaW5zdGFuY2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUzNAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHRpcGNfdWFkZHJgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGB0aXBjX3VhZGRyYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGlzIHN0cnVjdHVyZWQgYW5kIGVuc3VyZSBpdCYjMzk7cyBiZWhhdmluZyBhcyBleHBlY3RlZC4gSSYjMzk7bGwgbGlrZWx5IHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIHVzZSBjYXNlcyB3aXRoaW4gdGhlIFRJUEMgZnJhbWV3b3JrIHRvIHNlZSB3aGVyZSBpdCBjb21lcyBpbnRvIHBsYXkuIEtleSBhcmVhcyB3aWxsIGJlIGFkZHJlc3MgbG9va3Vwcywgcm91dGluZyBkZWNpc2lvbnMsIGFuZCB0aGUgb3ZlcmFsbCBtYW5hZ2VtZW50IG9mIHVzZXItc3BhY2UgYWRkcmVzc2VzLiBJJiMzOTtsbCBwcm9iYWJseSBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZCwgZXNwZWNpYWxseSBpZiB0aGVyZSBhcmUgc2hhcmVkIGRhdGEgc3RydWN0dXJlcyBiZWluZyBhY2Nlc3NlZCBjb25jdXJyZW50bHkuIEkmIzM5O20gYWxzbyBnb2luZyB0byBzZWUgaWYgYW55IG9mIHRoZSByZWNlbnQgY29kZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgdGhvc2UgdGhhdCB0b3VjaGVkIHRoZSBuZXR3b3JrIG9yIHNvY2tldCBsYXllciwgbWlnaHQgaGF2ZSBpbnRyb2R1Y2VkIGFueSByZWdyZXNzaW9ucyByZWxhdGVkIHRvIGB0aXBjX3VhZGRyYC4gRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhpcyBhZmZlY3RzIHRoZSBvdmVyYWxsIHNlY3VyaXR5IHBvc3R1cmUgLSBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBhZGRyZXNzIHNwb29maW5nIG9yIG1hbmlwdWxhdGlvbiB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkPyBUaW1lIHRvIGdldCB0aGUgZGVidWdnZXIgZmlyZWQgdXAgYW5kIHRoZSBjb2RlIG9wZW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbmxpbmUgdm9pZCB0aXBjX3VhZGRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2FkZHIuaD01MD1zdHJ1Y3QgdGlwY191YWRkciB7XG4tLVxubmV0L3RpcGMvYWRkci5oLTYzLVxubmV0L3RpcGMvYWRkci5oOjY0OnN0YXRpYyBpbmxpbmUgdm9pZCB0aXBjX3VhZGRyKHN0cnVjdCB0aXBjX3VhZGRyICp1YSwgdTMyIGF0eXBlLCB1MzIgc2NvcGUsXG5uZXQvdGlwYy9hZGRyLmgtNjUtXHRcdFx0ICAgICAgdTMyIHR5cGUsIHUzMiBsb3dlciwgdTMyIHVwcGVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkxNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgZnJvbSBgbmV0L3RpcGMvYWRkci5oYDoKCioqQW5hbHl6aW5nIGBuZXQvdGlwYy9hZGRyLmhgIChMaW5lcyA1MC03NSkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBsaW5lcyA1MC03NSBvZiBgbmV0L3RpcGMvYWRkci5oYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBhZGRyZXNzIHN0cnVjdHVyZSBhbmQgYXNzb2NpYXRlZCBtYWNyb3MgcHJvYmFibHkgbGllIOKAkyBpdOKAmXMgdGhlIGhlYXJ0IG9mIGhvdyBUSVBDIGFkZHJlc3NlcyBhcmUgZGVmaW5lZCwgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgc3BlY2lmaWNzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgYml0ZmllbGQgbWFuaXB1bGF0aW9ucyB0aGF0IGRlZmluZSB0aGUgYWRkcmVzcyBmaWVsZHMgdGhlbXNlbHZlcywgYW5kIGlmIHRoZXJlIGFyZSBjbGV2ZXIgYml0LXR3aWRkbGluZyBtYWNyb3MsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZW0uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBzaXplIG9mIGVhY2ggY29tcG9uZW50OiBub2RlLCBjbHVzdGVyLCBhbmQgc2VydmljZS4gSeKAmW0gaG9waW5nIHRvIHNlZSBjbGVhciBkZWxpbmVhdGlvbnMgYmV0d2VlbiB0aGUgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBhZGRyZXNzIOKAkyBpdCBtYWtlcyBkZWJ1Z2dpbmcgZmFyIGVhc2llci4gSeKAmW0gYWxzbyBsb29raW5nIGZvciBhbnkgaGludCBvZiBob3cgdGhlIGFkZHJlc3MgZmFtaWx5IGlzIGhhbmRsZWQ7IHRoaXMgbWlnaHQgYmUgYSBjZW50cmFsIHBvaW50IG9mIHRoZSBjb2RlLiBBbnkgYml0IGZpZWxkcyBvciBwYWNrZWQgc3RydWN0cyBhcmUgd29ydGggbG9va2luZyBhdCBjbG9zZWx5LCBhcyB0aGV5IGNvdWxkIGJlIHBvaW50cyBvZiBvcHRpbWl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3RpcGMvYWRkci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdHN0cnVjdCB0aXBjX3VhZGRyIHtcbiAgNTE6XHRcdHVuc2lnbmVkIHNob3J0IGZhbWlseTtcbiAgNTI6XHRcdHVuc2lnbmVkIGNoYXIgYWRkcnR5cGU7XG4gIDUzOlx0XHRzaWduZWQgY2hhciBzY29wZTtcbiAgNTQ6XHRcdHVuaW9uIHtcbiAgNTU6XHRcdFx0c3RydWN0IHtcbiAgNTY6XHRcdFx0XHRzdHJ1Y3QgdGlwY19zZXJ2aWNlX2FkZHIgc2E7XG4gIDU3Olx0XHRcdFx0dTMyIGxvb2t1cF9ub2RlO1xuICA1ODpcdFx0XHR9O1xuICA1OTpcdFx0XHRzdHJ1Y3QgdGlwY19zZXJ2aWNlX3JhbmdlIHNyO1xuICA2MDpcdFx0XHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzaztcbiAgNjE6XHRcdH07XG4gIDYyOlx0fTtcbiAgNjM6XHRcbiAgNjQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgdGlwY191YWRkcihzdHJ1Y3QgdGlwY191YWRkciAqdWEsIHUzMiBhdHlwZSwgdTMyIHNjb3BlLFxuICA2NTpcdFx0XHRcdCAgICAgIHUzMiB0eXBlLCB1MzIgbG93ZXIsIHUzMiB1cHBlcilcbiAgNjY6XHR7XG4gIDY3Olx0XHR1YS1cdTAwM2VmYW1pbHkgPSBBRl9USVBDO1xuICA2ODpcdFx0dWEtXHUwMDNlYWRkcnR5cGUgPSBhdHlwZTtcbiAgNjk6XHRcdHVhLVx1MDAzZXNjb3BlID0gc2NvcGU7XG4gIDcwOlx0XHR1YS1cdTAwM2Vzci50eXBlID0gdHlwZTtcbiAgNzE6XHRcdHVhLVx1MDAzZXNyLmxvd2VyID0gbG93ZXI7XG4gIDcyOlx0XHR1YS1cdTAwM2Vzci51cHBlciA9IHVwcGVyO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MjMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdGlwY191YWRkcmAgU3RydWN0dXJlIGFuZCBpdHMgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIGB0aXBjX3VhZGRyYCBpcyB1c2VkLCBzcGVjaWZpY2FsbHkgaG93IGl0IGluaXRpYWxpemVzIHZhcmlvdXMgZmllbGRzIGFuZCBob3cgdGhhdCBkYXRhIGlzIHVzZWQuIEkgc2VlIHRoYXQgYHRpcGNfdWFkZHJgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBgZmFtaWx5YCwgYGFkZHJ0eXBlYCwgYHNjb3BlYCwgYW5kIGNydWNpYWxseSwgdGhlIGBzci50eXBlYCwgYHNyLmxvd2VyYCwgYW5kIGBzci51cHBlcmAgZmllbGRzLCB3aGljaCBwZXJ0YWluIHRvIGEgYHN0cnVjdCB0aXBjX3NlcnZpY2VfcmFuZ2VgLgoKTm93LCBkaWdnaW5nIGludG8gdGhlIGBzdHJ1Y3QgdGlwY191YWRkcmAgZGVmaW5pdGlvbiwgaXQgdXNlcyBhIHVuaW9uIHdpdGggYHRpcGNfc2VydmljZV9yYW5nZSBzcmAsIGFtb25nIG90aGVyIHR5cGVzLiBJdCBsb29rcyBsaWtlIGl0IGNvdWxkIHJlcHJlc2VudCBhIHNlcnZpY2UgYWRkcmVzcywgYSByYW5nZSBvZiBzZXJ2aWNlIGFkZHJlc3Nlcywgb3IgYSBzb2NrZXQgYWRkcmVzcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBsYXlvdXQgaGVyZSBiZWNhdXNlIG9mIHRoZSB1bmlvbi4KCkxldCYjMzk7cyBzZWUuLi4gYHN0cnVjdCB0aXBjX3VhZGRyYCBzdGFydHMgd2l0aCB0aGUgaGVhZGVyIGZpZWxkczogYGZhbWlseWAgKDIgYnl0ZXMpLCBgYWRkcnR5cGVgICgxIGJ5dGUpLCBhbmQgYHNjb3BlYCAoMSBieXRlKS4gIFRoZW4sIHRoZXJlJiMzOTtzIHRoZSB1bmlvbiB3aGljaCBob2xkcyBlaXRoZXIgdGhlIGB0aXBjX3NlcnZpY2VfcmFuZ2Ugc3JgICgxMiBieXRlcyksIGB0aXBjX3NlcnZpY2VfYWRkciBzYWAgYW5kIGBsb29rdXBfbm9kZWAgKGFsc28gMTIgYnl0ZXMpLCBvciBgdGlwY19zb2NrZXRfYWRkciBza2AgKDggYnl0ZXMpLgoKR2l2ZW4gdGhhdCBsYXlvdXQsIGFuZCB0aGUgc2l6ZSBvZiBlYWNoIG1lbWJlciBvZiB0aGUgdW5pb24sIHRoZSB0b3RhbCBzaXplIG9mIGB0aXBjX3VhZGRyYCBpcyAyICYjNDM7IDEgJiM0MzsgMSAmIzQzOyAxMiA9IDE2IGJ5dGVzLiBUaGVyZSYjMzk7cyBubyBwYWRkaW5nIGJldHdlZW4gdGhlIGhlYWRlciBmaWVsZHMgYW5kIHRoZSB1bmlvbi4gVGhhdCYjMzk7cyBnb29kLgoKTm93LCBhIGZ1bmN0aW9uIGNhbGxlZCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgIGFsbG9jYXRlcyBhIGBzdHJ1Y3QgcHVibGljYXRpb24gKnBgIHVzaW5nIGB0aXBjX3B1YmxfY3JlYXRlKCZhbXA7dWEsICZhbXA7c2ssIHRuLSZndDtub2RlX2FkZHIpO2AuICBUaGlzIHN1Z2dlc3RzIHRoYXQgYHRpcGNfdWFkZHJgIGlzIHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIGEgcHVibGljYXRpb24uIEkgbmVlZCB0byBjaGVjayBob3cgYHRpcGNfcHVibF9jcmVhdGVgIGFjdHVhbGx5IHV0aWxpemVzIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgYHRpcGNfdWFkZHJgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGV4YW1pbmUgaG93IHRoZSBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gYHRpcGNfcHVibF9jcmVhdGVgIGFuZCBob3cgdGhlIG1lbWJlcnMgb2YgdGhlIHN0cnVjdCBhcmUgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCBpcyBwdWJsaXNoZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfcHVibF9jcmVhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvbmFtZV90YWJsZS5jPTIxOD1zdGF0aWMgaW50IGhhc2goaW50IHgpXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTIyMy0vKipcbm5ldC90aXBjL25hbWVfdGFibGUuYzoyMjQ6ICogdGlwY19wdWJsX2NyZWF0ZSAtIGNyZWF0ZSBhIHB1YmxpY2F0aW9uIHN0cnVjdHVyZVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTIyNS0gKiBAdWE6IHRoZSBzZXJ2aWNlIHJhbmdlIHRoZSB1c2VyIGlzIGJpbmRpbmcgdG9cbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtMjI4LSAqL1xubmV0L3RpcGMvbmFtZV90YWJsZS5jOjIyOTpzdGF0aWMgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX3B1YmxfY3JlYXRlKHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbm5ldC90aXBjL25hbWVfdGFibGUuYy0yMzAtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTQ4MT1zdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTQ4OC1cbm5ldC90aXBjL25hbWVfdGFibGUuYzo0ODk6XHRwID0gdGlwY19wdWJsX2NyZWF0ZSh1YSwgc2ssIGtleSk7XG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtNDkwLVx0aWYgKCFwKSB7XG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTg0Nj1pbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuYy05MDQtXHRpZiAoIXNyKSB7XG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6OTA1Olx0XHRwID0gdGlwY19wdWJsX2NyZWF0ZShcdTAwMjZ1YSwgXHUwMDI2c2ssIHRuLVx1MDAzZW5vZGVfYWRkcik7XG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtOTA2LVx0XHRpZiAoIXApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODMwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBgdGlwY19wdWJsX2NyZWF0ZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgdGlwY19wdWJsX2NyZWF0ZWAuIEtub3dpbmcgdGhpcyBjb2RlYmFzZSwgYW5kIGNvbnNpZGVyaW5nIHRoZSBuYW1lLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgZm9yIGNyZWF0aW5nIGEgbmV3IFRJUEMgcHVibGljYXRpb24gZW5kcG9pbnQsIGxpa2VseSBmb3IgYSBuYW1lIG9yIHNlcnZpY2UgcmVnaXN0cmF0aW9uLCByaWdodD8gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMg4oCTIHRoZSBwdWJsaWNhdGlvbiB0YWJsZSwgdGhlIHBvdGVudGlhbCBmb3IgaGFzaCBjb2xsaXNpb25zIGlmIHRoZXkmIzM5O3JlIHVzaW5nIGEgaGFzaC1iYXNlZCBsb29rdXAsIGFuZCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBjb25jdXJyZW5jeSBzYWZldHkuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBoYW5kbGVzIGVycm9yIGNhc2VzIHN1Y2ggYXMgaW5zdWZmaWNpZW50IHJlc291cmNlcyAobWVtb3J5KSwgaW52YWxpZCBhcmd1bWVudHMsIG9yIG5hbWUgY29uZmxpY3RzIGFwcHJvcHJpYXRlbHkuIEFuZCBkb2VzIGl0IGhhbmRsZSB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBzYW1lIHNlcnZpY2UgbXVsdGlwbGUgdGltZXM/IElmIHNvLCBpcyB0aGVyZSBhIG1lY2hhbmlzbSB0byBoYW5kbGUgdGhhdD8gSSB3YW50IHRvIHNlZSBob3cgdGhleSYjMzk7cmUgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGUgZW5kcG9pbnQ7IGlzIHRoZXJlIGFzc29jaWF0ZWQgY2xlYW51cCBvbiBkZXN0cnVjdGlvbiBvciB1bi1yZWdpc3RyYXRpb24/IEFyZSB0aGV5IGltcGxlbWVudGluZyBhbnkga2luZCBvZiB0aW1lb3V0IG9yIGxlYXNlIG1lY2hhbmlzbT8gQWxzbywgSSBuZWVkIHRvIHNlZSBob3cgdGhlIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHVibGljYXRpb24gKGxpa2UgYXR0cmlidXRlcywgc2VydmljZSB0eXBlcywgZXRjLikgYXJlIGhhbmRsZWQuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgc3VidGxlIGJ1Z3MgaGlkZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBhZGRyZXNzIGJpbmRpbmcgaXMgaGFuZGxlZC4gRG9lcyBpdCBhdXRvbWF0aWNhbGx5IHBpY2sgYSBwb3J0LCBvciBpcyBpdCB1c2VyLWNvbmZpZ3VyYWJsZT8gQW5kIGlmIGNvbmZpZ3VyYWJsZSwgaG93IGFyZSBjb2xsaXNpb25zIGF2b2lkZWQgd2hlbiB0aGUgdXNlciBjaG9vc2VzIGEgcG9ydD8gQW5kIGFyZSB0aGV5IHByb3Blcmx5IGhhbmRsaW5nIHRoZSBpbnRlcmFjdGlvbiB3aXRoIGFueSB1bmRlcmx5aW5nIG5ldHdvcmtpbmcgbGF5ZXIgLSBlc3BlY2lhbGx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byBwdWJsaXNoaW5nIHRoZSBzZXJ2aWNlL25hbWUgYWNyb3NzIG11bHRpcGxlIG5vZGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL25hbWVfdGFibGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjI5Olx0c3RhdGljIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19wdWJsX2NyZWF0ZShzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gMjMwOlx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4gMjMxOlx0XHRcdFx0XHRcdCAgICB1MzIga2V5KVxuIDIzMjpcdHtcbiAyMzM6XHRcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcCA9IGt6YWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbiAyMzQ6XHRcbiAyMzU6XHRcdGlmICghcClcbiAyMzY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMjM3Olx0XG4gMjM4Olx0XHRwLVx1MDAzZXNyID0gdWEtXHUwMDNlc3I7XG4gMjM5Olx0XHRwLVx1MDAzZXNrID0gKnNrO1xuIDI0MDpcdFx0cC1cdTAwM2VzY29wZSA9IHVhLVx1MDAzZXNjb3BlO1xuIDI0MTpcdFx0cC1cdTAwM2VrZXkgPSBrZXk7XG4gMjQyOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfc29jayk7XG4gMjQzOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfbm9kZSk7XG4gMjQ0Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZWxvY2FsX3B1YmwpO1xuIDI0NTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cC1cdTAwM2VhbGxfcHVibCk7XG4gMjQ2Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZWxpc3QpO1xuIDI0NzpcdFx0cmV0dXJuIHA7XG4gMjQ4Olx0fVxuIDI0OTpcdFxuIDI1MDpcdC8qKlxuIDI1MTpcdCAqIHRpcGNfc2VydmljZV9jcmVhdGUgLSBjcmVhdGUgYSBzZXJ2aWNlIHN0cnVjdHVyZSBmb3IgdGhlIHNwZWNpZmllZCAmIzM5O3R5cGUmIzM5O1xuIDI1MjpcdCAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXG4gMjUzOlx0ICogQHVhOiBhZGRyZXNzIHJlcHJlc2VudGluZyB0aGUgc2VydmljZSB0byBiZSBib3VuZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU5MQoJCQkJCQkJb3V0cHV0OiAyNDUKCQkJCQkJCXRob3VnaHRzOiAyODE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFRJUEMgTmFtZSBEaXN0cmlidXRpb24gUGF0Y2g6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2sqKgoKT2theSwgc28gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoaXMgcGF0Y2gsIGxpbmUgYnkgbGluZSwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHRoZSBwb3RlbnRpYWwgZm9yIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBNeSBjb25jbHVzaW9uOiB0aGlzIHBhdGNoIGlzIHNvbGVseSBhYm91dCAqaGFuZGxpbmcqIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGR1cmluZyB0aGUgVElQQyBuYW1lIGRpc3RyaWJ1dGlvbiBwcm9jZXNzLCAqbm90KiBhYm91dCBpbnRyb2R1Y2luZyB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBhZGRpbmcgYW5kIHByb3BhZ2F0aW5nIGAtRU5PQlVGU2AgKG91dC1vZi1tZW1vcnkpIGVycm9ycyB0aHJvdWdob3V0IHRoZSBuYW1lIGRpc3RyaWJ1dGlvbiBjb2RlLiAgSXQgZW5zdXJlcyB0aGF0IHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMsIHRoZSBmYWlsdXJlIGlzIGNvcnJlY3RseSByZXBvcnRlZCBhbmQgaGFuZGxlZCwgbGVhZGluZyB0byBub2RlL2xpbmsgZG93biBhY3Rpb25zIGZvciByZXRyaWVzLiAgSSYjMzk7dmUgY2hlY2tlZCBldmVyeSBzcG90IHdoZXJlIG5ldyB2YXJpYWJsZXMgb3Igc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZC4gRWFjaCBuZXcgdmFyaWFibGUsIHN1Y2ggYXMgYHNrYCwgYHVhYCwgb3IgYGVycmAgYXJlICphbHdheXMqIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXkmIzM5O3JlIHVzZWQuICBUaGUgYHNrX2J1ZmZfaGVhZGAgaXMgYWx3YXlzIGluaXRpYWxpemVkIHVzaW5nIGBfX3NrYl9xdWV1ZV9oZWFkX2luaXQoKWAuIFRoZSAgYHRpcGNfdWFkZHJgIHN0cnVjdCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgYnkgYSBoZWxwZXIgZnVuY3Rpb24uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQgb3Igd3JpdHRlbi4gIE5vIGRhdGEgaXMgYmVpbmcgcGFzc2VkIHRvIHVzZXIgc3BhY2UuCgpJJiMzOTt2ZSBjYXJlZnVsbHkgZXhhbWluZWQgdGhlIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1lZF9ub2RlX3VwYCBhbmQgc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMuIFRoZSBjb2RlIGFkZHMgY2hlY2tzIGFuZCBlcnJvciByZXR1cm5zLCByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIG9yIGxvZ2ljIHRoYXQgd291bGQgcmVseSBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gIFRoaXMgcGF0Y2ggKmltcHJvdmVzKiB0aGUgcm9idXN0bmVzcyBvZiB0aGUgZXJyb3IgaGFuZGxpbmcsIHJhdGhlciB0aGFuIHdlYWtlbmluZyBpdC4gSW4gb3RoZXIgd29yZHMsIHRoZSBwYXRjaCYjMzk7cyBwdXJwb3NlIGlzIHRvICpwcmV2ZW50KiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBmcm9tIGJlaW5nIHNpbGVudGx5IGlnbm9yZWQgb3IgY2F1c2luZyBwb3RlbnRpYWxseSBpbmNvcnJlY3QgYmVoYXZpb3VyOyBpdCYjMzk7cyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyByaXNrcy4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOIGFuZCBsb2NrZGVwIHdpbGwgYmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGJ1Z3MgdGhhdCBtaWdodCBiZSBpbnRyb2R1Y2VkIGR1cmluZyB0aGlzIHdvcmsuIFNwZWNpZmljYWxseSwgdGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgaXNuJiMzOTt0IHByZXNlbnQsIGFuZCB0aHVzIGEgS01TQU4gc2Vzc2lvbiBpc24mIzM5O3QgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUSVBDIHN1YnN5c3RlbSB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgKHJldHVybmluZyBgLUVOT0JVRlNgKSBkdXJpbmcgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24uIEl0IGFkZHMgZXJyb3IgaGFuZGxpbmcgdG8gZnVuY3Rpb25zIGxpa2UgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGB0aXBjX25hbWVkX25vZGVfdXBgLCBhbmQgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYW5kIGludHJvZHVjZXMgZmxhZ3MgdG8gdHJhY2sgdGhlIHN0YXRlIG9mIHRoZSBuYW1lIHRhYmxlIGFuZCBub2RlIGFkZHJlc3MuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlcyAoZS5nLiwgYHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrYCwgYHN0cnVjdCB0aXBjX3VhZGRyIHVhYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKGUuZy4sIHZpYSBleHBsaWNpdCBhc3NpZ25tZW50IG9yIHRoZSBgdGlwY191YWRkcigpYCBoZWxwZXIpLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgY29udHJvbCBmbG93IGFuZCBlcnJvciBoYW5kbGluZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMsIHdoaWNoIGRvIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc3Vic3lzdGVtIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAocmV0dXJuaW5nIGAtRU5PQlVGU2ApIGR1cmluZyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbi4gSXQgYWRkcyBlcnJvciBoYW5kbGluZyB0byBmdW5jdGlvbnMgbGlrZSBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGFuZCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBhbmQgaW50cm9kdWNlcyBmbGFncyB0byB0cmFjayB0aGUgc3RhdGUgb2YgdGhlIG5hbWUgdGFibGUgYW5kIG5vZGUgYWRkcmVzcy4gQWxsIG5ld2x5IGludHJvZHVjZWQgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2tgLCBgc3RydWN0IHRpcGNfdWFkZHIgdWFgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoZS5nLiwgdmlhIGV4cGxpY2l0IGFzc2lnbm1lbnQgb3IgdGhlIGB0aXBjX3VhZGRyKClgIGhlbHBlcikuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBjb250cm9sIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgd2hpY2ggZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA0OjAwLjc5MDU2ODkwOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1OTAzMzYxOTUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19uYW1lZF9kaXN0cmlidXRlXCIsXG4gICAgXCJ0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YlwiLFxuICAgIFwidGlwY19uYW1ldGJsX3B1Ymxpc2hcIixcbiAgICBcInRpcGNfbmFtZWRfbm9kZV91cFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc3Vic3lzdGVtIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAocmV0dXJuaW5nIGAtRU5PQlVGU2ApIGR1cmluZyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbi4gSXQgYWRkcyBlcnJvciBoYW5kbGluZyB0byBmdW5jdGlvbnMgbGlrZSBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGFuZCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBhbmQgaW50cm9kdWNlcyBmbGFncyB0byB0cmFjayB0aGUgc3RhdGUgb2YgdGhlIG5hbWUgdGFibGUgYW5kIG5vZGUgYWRkcmVzcy4gQWxsIG5ld2x5IGludHJvZHVjZWQgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2tgLCBgc3RydWN0IHRpcGNfdWFkZHIgdWFgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoZS5nLiwgdmlhIGV4cGxpY2l0IGFzc2lnbm1lbnQgb3IgdGhlIGB0aXBjX3VhZGRyKClgIGhlbHBlcikuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBjb250cm9sIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgd2hpY2ggZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgVElQQyBsb2dpYyB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZHVyaW5nIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uLiBJdCBhZGRzIGVycm9yIGNvZGUgcmV0dXJucyB0byBmdW5jdGlvbnMgbGlrZSBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGFuZCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgYW5kIGludHJvZHVjZXMgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCBhbmQgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAgdG8gaGFuZGxlIGJ1bGsgcmVkaXN0cmlidXRpb24gb2YgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDQ6MDAuNzkwNTc0MjI5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDczODU5NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWE3YzNkNGI5YjQwYTkzZDMxMTQ1OWJjYmUyYmQ2NmJkOTIyZDM4NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNzowMzo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmMgYi9uZXQvdGlwYy9jb3JlLmNcXG5pbmRleCAzMTU5NzVjM2JlODE4Li4wZjFkM2RkZWFlMDk1IDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL2NvcmUuY1xcbisrKyBiL25ldC90aXBjL2NvcmUuY1xcbkBAIC02MSw2ICs2MSw5IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCB0aXBjX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0dG4tXFx1MDAzZXRyaWFsX2FkZHIgPSAwO1xcbiBcXHR0bi1cXHUwMDNlYWRkcl90cmlhbF9lbmQgPSAwO1xcbiBcXHR0bi1cXHUwMDNlY2FwYWJpbGl0aWVzID0gVElQQ19OT0RFX0NBUEFCSUxJVElFUztcXG4rXFx0dG4tXFx1MDAzZW50X3N0b3AgPSBmYWxzZTtcXG4rXFx0dG4tXFx1MDAzZW50X3NlbGZfbm9kZV9leGlzdCA9IGZhbHNlO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZ0bi1cXHUwMDNlbm9kZV9hZGRyX3NldCwgMCk7XFxuIFxcdElOSVRfV09SSyhcXHUwMDI2dG4tXFx1MDAzZXdvcmssIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmspO1xcbiBcXHRtZW1zZXQodG4tXFx1MDAzZW5vZGVfaWQsIDAsIHNpemVvZih0bi1cXHUwMDNlbm9kZV9pZCkpO1xcbiBcXHRtZW1zZXQodG4tXFx1MDAzZW5vZGVfaWRfc3RyaW5nLCAwLCBzaXplb2YodG4tXFx1MDAzZW5vZGVfaWRfc3RyaW5nKSk7XFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuaCBiL25ldC90aXBjL2NvcmUuaFxcbmluZGV4IDljZTVmOWZmNmNjMDMuLjk3NWIxZDQ4MTg2ZTYgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvY29yZS5oXFxuKysrIGIvbmV0L3RpcGMvY29yZS5oXFxuQEAgLTE0NSw2ICsxNDUsMTIgQEAgc3RydWN0IHRpcGNfbmV0IHtcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XFxuIFxcdC8qIFRoZSBudW1iZXJzIG9mIHdvcmsgcXVldWVzIGluIHNjaGVkdWxlICovXFxuIFxcdGF0b21pY190IHdxX2NvdW50O1xcbitcXHQvKiBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIG5vZGUncyBhZGRyZXNzIGlzIHNldCAqL1xcbitcXHRhdG9taWNfdCBub2RlX2FkZHJfc2V0O1xcbitcXHQvKiBUaGUgbmFtZSB0YWJsZSBoYXMgc3RvcHBlZCB3b3JraW5nICovXFxuK1xcdGJvb2wgbnRfc3RvcDtcXG4rXFx0LyogTm9kZSdzIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIG5hbWUgdGFibGUgKi9cXG4rXFx0Ym9vbCBudF9zZWxmX25vZGVfZXhpc3Q7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aXBjX25ldCAqdGlwY19uZXQoc3RydWN0IG5ldCAqbmV0KVxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcXG5pbmRleCBiYTRmNDkwNmUxM2I3Li44M2UzZWQ4ZjJjNTEyIDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuY1xcbisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuY1xcbkBAIC05NSw5ICs5NSw3IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnApXFxuIFxcdFxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZwLVxcdTAwM2ViaW5kaW5nX25vZGUsIFxcdTAwMjZudC1cXHUwMDNlbm9kZV9zY29wZSk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuLVxcdHdyaXRlX2xvY2tfYmgoXFx1MDAyNm50LVxcdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xcbiBcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZwLVxcdTAwM2ViaW5kaW5nX25vZGUsIFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZSk7XFxuLVxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XFxuIFxcdHNrYiA9IG5hbWVkX3ByZXBhcmVfYnVmKG5ldCwgUFVCTElDQVRJT04sIElURU1fU0laRSwgMCk7XFxuIFxcdGlmICghc2tiKSB7XFxuIFxcdFxcdHByX3dhcm4oXFxcIlB1YmxpY2F0aW9uIGRpc3RyaWJ1dGlvbiBmYWlsdXJlXFxcXG5cXFwiKTtcXG5AQCAtMTIxLDkgKzExOSw3IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxcbiBcXHRzdHJ1Y3QgZGlzdHJfaXRlbSAqaXRlbTtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFxuLVxcdHdyaXRlX2xvY2tfYmgoXFx1MDAyNm50LVxcdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xcbiBcXHRsaXN0X2RlbChcXHUwMDI2cC1cXHUwMDNlYmluZGluZ19ub2RlKTtcXG4tXFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcXG4gXFx0aWYgKHAtXFx1MDAzZXNjb3BlID09IFRJUENfTk9ERV9TQ09QRSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbkBAIC0xNDYsOSArMTQyLDE0IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxcbiAgKiBAZG5vZGU6IG5vZGUgdG8gYmUgdXBkYXRlZFxcbiAgKiBAcGxzOiBsaW5rZWQgbGlzdCBvZiBwdWJsaWNhdGlvbiBpdGVtcyB0byBiZSBwYWNrZWQgaW50byBidWZmZXIgY2hhaW5cXG4gICogQHNlcW5vOiBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgbWVzc2FnZVxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxcbisgKlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxuLVxcdFxcdFxcdCAgICAgdTMyIGRub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbHMsIHUxNiBzZXFubylcXG4rc3RhdGljIGludCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG4rXFx0XFx0XFx0ICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pXFxuIHtcXG4gXFx0c3RydWN0IHB1YmxpY2F0aW9uICpwdWJsO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG5AQCAtMTY0LDggKzE2NSw5IEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxcbiBcXHRcXHRcXHRza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBtc2dfcmVtLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRkbm9kZSk7XFxuIFxcdFxcdFxcdGlmICghc2tiKSB7XFxuK1xcdFxcdFxcdFxcdF9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpO1xcbiBcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJCdWxrIHB1YmxpY2F0aW9uIGZhaWx1cmVcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRoZHIgPSBidWZfbXNnKHNrYik7XFxuIFxcdFxcdFxcdG1zZ19zZXRfYmNfYWNrX2ludmFsaWQoaGRyLCB0cnVlKTtcXG5AQCAtMTk1LDYgKzE5Nyw5MCBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG4gXFx0aGRyID0gYnVmX21zZyhza2JfcGVla190YWlsKGxpc3QpKTtcXG4gXFx0bXNnX3NldF9sYXN0X2J1bGsoaGRyKTtcXG4gXFx0bXNnX3NldF9uYW1lZF9zZXFubyhoZHIsIHNlcW5vKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBidWlsZCBhIGxpc3Qgb2YgcHVibGljYXRpb25zIG5lZWQgdG8gYmUgZGlzdHJpYnV0ZWRcXG4rICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcXG4rICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXFxuKyAqIEBoZWFkOiBsaXN0IG9mIHB1YmxpY2F0aW9uc1xcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxcbisgKlxcbisgKi9cXG4rc3RhdGljIGludCBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGVhZClcXG4re1xcbitcXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcXG4rXFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuK1xcbitcXHQvKiBOYW1lIHRhYmxlIGhhcyBiZWVuIGRlbGV0ZWQgYWZ0ZXIgbmFtZXNwYWNlIHRlYXJkb3duIG9yXFxuK1xcdCAqIFRJUEMgbW9kdWxlIGV4aXQuXFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkodG4tXFx1MDAzZW50X3N0b3ApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIE5vZGUncyBzZWxmLWFkZHJlc3MgaXMgbm90IHNldCB5ZXQgKi9cXG4rXFx0aWYgKCFhdG9taWNfcmVhZChcXHUwMDI2dG4tXFx1MDAzZW5vZGVfYWRkcl9zZXQpKSB7XFxuK1xcdFxcdC8qIERlZmVyIHRoZSBkaXN0cmlidXRpb24gdG8gbm9kZSdzIHRpbWVyICovXFxuK1xcdFxcdHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKG5ldCwgZG5vZGUpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0LyogUHJldmlvdXMgY2FsbCB0byB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YigpIHdhcyBzdWNjZXNzZnVsLlxcbitcXHQgKiBUaGUgbm9kZSdzIHNlbGYtYWRkcmVzcyBwdWJsaWNhdGlvbiB3YXMgYWRkZWQgdG8gJ250LVxcdTAwM2VjbHVzdGVyX3Njb3BlJy5cXG4rXFx0ICogU28sICdudC1cXHUwMDNlY2x1c3Rlcl9zY29wZScgaXMgbm90IGVtcHR5IG5vdy4gR28gdG8gZGlzdHJpYnV0aW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKHRuLVxcdTAwM2VudF9zZWxmX25vZGVfZXhpc3QpXFxuK1xcdFxcdGdvdG8gZGlzdHJpYnV0ZTtcXG4rXFxuK1xcdGlmICh0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihuZXQpKVxcbitcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuK1xcbitcXHR0bi1cXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gdHJ1ZTtcXG4rXFxuK2Rpc3RyaWJ1dGU6XFxuK1xcdGlmIChuYW1lZF9kaXN0cmlidXRlKG5ldCwgaGVhZCwgZG5vZGUsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNm50LVxcdTAwM2VjbHVzdGVyX3Njb3BlLCBudC1cXHUwMDNlc25kX254dCkgPT0gLUVOT0JVRlMpXFxuK1xcdFxcdHJldHVybiAtRU5PQlVGUztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gZGlzdHJpYnV0ZSBhbGwgcHVibGljYXRpb25zIHRvIHNwZWNpZmllZCBub2RlXFxuKyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuKyAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZVxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxcbisgKlxcbisgKi9cXG4raW50IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSlcXG4re1xcbitcXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcXG4rXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkO1xcbitcXHRpbnQgcmMgPSAwO1xcbitcXG4rXFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZoZWFkKTtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4rXFx0cmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCBcXHUwMDI2aGVhZCk7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4rXFx0aWYgKCFyYyBcXHUwMDI2XFx1MDAyNiAhc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZoZWFkKSkge1xcbitcXHRcXHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgXFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcXG4rXFx0XFx0LyogVGhlIGxpbmsgaXMgY29uZ2VzdGVkIGFmdGVyIHRoZSBsaXN0IGlzIGluc2VydGVkIGludG8gdGhlXFxuK1xcdFxcdCAqIGxpbmsncyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocmMgPT0gLUVMSU5LQ09ORylcXG4rXFx0XFx0XFx0cmMgPSAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yMDIsMjUgKzI4OCwzNiBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG4gICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcXG4gICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXFxuICAqIEBjYXBhYmlsaXRpZXM6IHBlZXIgbm9kZSdzIGNhcGFiaWxpdGllc1xcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxcbisgKlxcbiAgKi9cXG4tdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXFxuK2ludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXFxuIHtcXG4gXFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XFxuIFxcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhlYWQ7XFxuLVxcdHUxNiBzZXFubztcXG4rXFx0aW50IHJjID0gMDtcXG4gXFxuIFxcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2aGVhZCk7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dG4tXFx1MDAzZW5hbWV0YmxfbG9jayk7XFxuIFxcdGlmICghKGNhcGFiaWxpdGllcyBcXHUwMDI2IFRJUENfTkFNRURfQkNBU1QpKVxcbiBcXHRcXHRudC1cXHUwMDNlcmNfZGVzdHMrKztcXG4tXFx0c2Vxbm8gPSBudC1cXHUwMDNlc25kX254dDtcXG4rXFxuK1xcdHJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgXFx1MDAyNmhlYWQpO1xcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dG4tXFx1MDAzZW5hbWV0YmxfbG9jayk7XFxuK1xcdGlmICghcmMgXFx1MDAyNlxcdTAwMjYgIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2aGVhZCkpIHtcXG4rXFx0XFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFxcdTAwMjZoZWFkLCBkbm9kZSwgMCk7XFxuK1xcdFxcdC8qIFRoZSBsaW5rIGlzIGNvbmdlc3RlZCBhZnRlciB0aGUgbGlzdCBpcyBpbnNlcnRlZCBpbnRvIHRoZVxcbitcXHRcXHQgKiBsaW5rJ3Mgc2VuZCBxdWV1ZS4gUmV0dXJuIDAsIGFzIHRoaXMgaXMgbm9ybWFsLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJjID09IC1FTElOS0NPTkcpXFxuK1xcdFxcdFxcdHJjID0gMDtcXG4rXFx0fVxcbiBcXG4tXFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcXG4tXFx0bmFtZWRfZGlzdHJpYnV0ZShuZXQsIFxcdTAwMjZoZWFkLCBkbm9kZSwgXFx1MDAyNm50LVxcdTAwM2VjbHVzdGVyX3Njb3BlLCBzZXFubyk7XFxuLVxcdHRpcGNfbm9kZV94bWl0KG5ldCwgXFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcXG4tXFx0cmVhZF91bmxvY2tfYmgoXFx1MDAyNm50LVxcdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xcbitcXHRyZXR1cm4gcmM7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yOTksNyArMzk2LDcgQEAgc3RhdGljIGJvb2wgdGlwY191cGRhdGVfbmFtZXRibChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkaXN0cl9pdGVtICppLFxcbiBcXHRzay5ub2RlID0gbm9kZTtcXG4gXFxuIFxcdGlmIChkdHlwZSA9PSBQVUJMSUNBVElPTikge1xcbi1cXHRcXHRwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgXFx1MDAyNnVhLCBcXHUwMDI2c2ssIGtleSk7XFxuK1xcdFxcdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCBcXHUwMDI2dWEsIFxcdTAwMjZzaywga2V5LCBOVUxMKTtcXG4gXFx0XFx0aWYgKHApIHtcXG4gXFx0XFx0XFx0dGlwY19ub2RlX3N1YnNjcmliZShuZXQsIFxcdTAwMjZwLVxcdTAwM2ViaW5kaW5nX25vZGUsIG5vZGUpO1xcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtNDE2LDUgKzUxMyw2IEBAIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCBcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGUsIGJpbmRpbmdfbm9kZSlcXG4gXFx0XFx0cC1cXHUwMDNlc2subm9kZSA9IHNlbGY7XFxuIFxcdG50LVxcdTAwM2VyY19kZXN0cyA9IDA7XFxuK1xcdHRuLVxcdTAwM2VudF9zdG9wID0gZmFsc2U7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmggYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmhcXG5pbmRleCBjNjc3ZjZmMDgyZGZiLi4yMDQzMDk2YWU5NjdkIDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuaFxcbisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuaFxcbkBAIC02OSwxMSArNjksMTIgQEAgc3RydWN0IGRpc3RyX2l0ZW0ge1xcbiBcXG4gc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7XFxuIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsKTtcXG4tdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xcbitpbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKTtcXG4gdm9pZCB0aXBjX25hbWVkX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSxcXG4gXFx0XFx0ICAgIHUxNiAqcmN2X254dCwgYm9vbCAqb3Blbik7XFxuIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KTtcXG4gdm9pZCB0aXBjX3B1Ymxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGxpc3RfaGVhZCAqbnN1Yl9saXN0LFxcbiBcXHRcXHQgICAgICB1MzIgYWRkciwgdTE2IGNhcGFiaWxpdGllcyk7XFxuK2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpO1xcbiBcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLmJlZWQ0MGEyMTM2OGEgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvbmFtZV90YWJsZS5jXFxuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jXFxuQEAgLTMyOSw3ICszMjksNyBAQCBzdGF0aWMgc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnRpcGNfc2VydmljZV9jcmVhdGVfcmFuZ2Uoc3RydWN0IHRpcGNfc2VydmljZSAqc2MsXFxuIFxcbiBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIGludCAqZXJyKVxcbiB7XFxuIFxcdHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViLCAqdG1wO1xcbiBcXHRzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3I7XFxuQEAgLTMzOSwxMCArMzM5LDEyIEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdGJvb2wgcmVzID0gZmFsc2U7XFxuIFxcdHUzMiBrZXkgPSBwLVxcdTAwM2VrZXk7XFxuIFxcbi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNjLVxcdTAwM2Vsb2NrKTtcXG4gXFx0c3IgPSB0aXBjX3NlcnZpY2VfY3JlYXRlX3JhbmdlKHNjLCBwKTtcXG4tXFx0aWYgKCFzcilcXG4tXFx0XFx0Z290byAgZXhpdDtcXG4rXFx0aWYgKCFzcikge1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHQqZXJyID0gLUVOT0JVRlM7XFxuK1xcdFxcdGdvdG8gZXhpdDtcXG4rXFx0fVxcbiBcXG4gXFx0Zmlyc3QgPSBsaXN0X2VtcHR5KFxcdTAwMjZzci1cXHUwMDNlYWxsX3B1YmwpO1xcbiBcXG5AQCAtMzUzLDYgKzM1NSw4IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdHByX2RlYnVnKFxcXCJGYWlsZWQgdG8gYmluZCBkdXBsaWNhdGUgJXUsJXUsJXUvJXU6JXUvJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBwLVxcdTAwM2Vzci50eXBlLCBwLVxcdTAwM2Vzci5sb3dlciwgcC1cXHUwMDNlc3IudXBwZXIsXFxuIFxcdFxcdFxcdFxcdCBub2RlLCBwLVxcdTAwM2Vzay5yZWYsIGtleSk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdCplcnIgPSAtRUVYSVNUO1xcbiBcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbkBAIC0zNzEsNyArMzc1LDYgQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0aWYgKCFyZXMpXFxuIFxcdFxcdHByX3dhcm4oXFxcIkZhaWxlZCB0byBiaW5kIHRvICV1LCV1LCV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRwLVxcdTAwM2Vzci50eXBlLCBwLVxcdTAwM2Vzci5sb3dlciwgcC1cXHUwMDNlc3IudXBwZXIpO1xcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2MtXFx1MDAzZWxvY2spO1xcbiBcXHRyZXR1cm4gcmVzO1xcbiB9XFxuIFxcbkBAIC00NzgsMjAgKzQ4MSwzMyBAQCBzdGF0aWMgc3RydWN0IHRpcGNfc2VydmljZSAqdGlwY19zZXJ2aWNlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LFxcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICB1MzIga2V5KVxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHUzMiBrZXksIGludCAqZXJyKVxcbiB7XFxuIFxcdHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjO1xcbiBcXHRzdHJ1Y3QgcHVibGljYXRpb24gKnA7XFxuIFxcbiBcXHRwID0gdGlwY19wdWJsX2NyZWF0ZSh1YSwgc2ssIGtleSk7XFxuLVxcdGlmICghcClcXG4rXFx0aWYgKCFwKSB7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdCplcnIgPSAtRU5PQlVGUztcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4gXFxuIFxcdHNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCB1YSk7XFxuIFxcdGlmICghc2MpXFxuIFxcdFxcdHNjID0gdGlwY19zZXJ2aWNlX2NyZWF0ZShuZXQsIHVhKTtcXG4tXFx0aWYgKHNjIFxcdTAwMjZcXHUwMDI2IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwKSlcXG4tXFx0XFx0cmV0dXJuIHA7XFxuK1xcbitcXHRpZiAoc2MpIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzYy1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdGlmICh0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgZXJyKSkge1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2MtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRcXHRyZXR1cm4gcDtcXG4rXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2MtXFx1MDAzZWxvY2spO1xcbitcXHR9IGVsc2UgaWYgKGVycikge1xcbitcXHRcXHQqZXJyID0gLUVOT0JVRlM7XFxuK1xcdH1cXG4rXFxuIFxcdGtmcmVlKHApO1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbkBAIC03NjAsMjYgKzc3Niw1NSBAQCB2b2lkIHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2dyb3VwICpncnAsXFxuIC8qIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIHNlcnZpY2UgYmluZGluZyB0byBuYW1lIHRhYmxlXFxuICAqL1xcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbi1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KVxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxcbitcXHRcXHRcXHRcXHRcXHQgdTMyIGtleSwgaW50ICplcnIpXFxuIHtcXG4gXFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XFxuK1xcdHUzMiBtYXhfdXNlcl9wdWIgPSBUSVBDX01BWF9QVUJMIC0gMTtcXG4gXFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuIFxcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbitcXHRib29sIHByb3RvY29sX3R5cGUgPSBmYWxzZTtcXG4rXFx0aW50IGVycm9yID0gMDtcXG4gXFx0dTMyIHJjX2Rlc3RzO1xcbiBcXG4rXFx0aWYgKHVhLVxcdTAwM2Vzci50eXBlID09IFRJUENfTk9ERV9TVEFURSB8fCB1YS1cXHUwMDNlc3IudHlwZSA9PSBUSVBDX0xJTktfU1RBVEUgfHxcXG4rXFx0ICAgIHVhLVxcdTAwM2Vzci50eXBlID09IFRJUENfVE9QX1NSVilcXG4rXFx0XFx0cHJvdG9jb2xfdHlwZSA9IHRydWU7XFxuK1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRuLVxcdTAwM2VuYW1ldGJsX2xvY2spO1xcbitcXHRpZiAocHJvdG9jb2xfdHlwZSlcXG4rXFx0XFx0Z290byBpbnNlcnQ7XFxuIFxcbi1cXHRpZiAobnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQgXFx1MDAzZT0gVElQQ19NQVhfUFVCTCkge1xcbi1cXHRcXHRwcl93YXJuKFxcXCJCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcXFxcblxcXCIsIFRJUENfTUFYX1BVQkwpO1xcbitcXHQvKiBSZXNlcnZlIG9uZSBlbnRyeSBmb3Igbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUgYmVjYXVzZSBpdCBoYXMgY2x1c3RlclxcbitcXHQgKiBzY29wZSBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgaW4gYnVsay4gU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VyJ3NcXG4rXFx0ICogcHVibGljYXRpb25zIGlzIChUSVBDX01BWF9QVUJMIC0gMSkuXFxuK1xcdCAqL1xcbitcXHRpZiAobnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQgXFx1MDAzZT0gbWF4X3VzZXJfcHViKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIkJpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcXFxuXFxcIiwgbWF4X3VzZXJfcHViKTtcXG4gXFx0XFx0Z290byBleGl0O1xcbiBcXHR9XFxuIFxcbi1cXHRwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpO1xcbitpbnNlcnQ6XFxuK1xcdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSwgXFx1MDAyNmVycm9yKTtcXG4gXFx0aWYgKHApIHtcXG4tXFx0XFx0bnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQrKztcXG4rXFx0XFx0LyogTm90IGNvdW50IG5vZGUgc3RhdGUsIGxpbmsgc3RhdGUgYW5kIHRvcG9sb2d5IHNlcnZlciB0eXBlc1xcbitcXHRcXHQgKiBzbyB0aGF0IG1heGltdW0gbnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQgZG9lcyBub3QgcHJldmVudFxcbitcXHRcXHQgKiBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIGZyb20gYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZVxcbitcXHRcXHQgKiB0YWJsZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghcHJvdG9jb2xfdHlwZSlcXG4rXFx0XFx0XFx0bnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQrKztcXG4gXFx0XFx0c2tiID0gdGlwY19uYW1lZF9wdWJsaXNoKG5ldCwgcCk7XFxuK1xcdFxcdC8qIExvY2FsLXNjb3BlIHB1YmxpY2F0aW9uIGlzIG5vdCBwdWJsaXNoZWQgKHNrYiBpcyBOVUxMKSwgb25seVxcbitcXHRcXHQgKiBjbHVzdGVyLWNvcGUgb25lIGlzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFza2IgXFx1MDAyNlxcdTAwMjYgcC1cXHUwMDNlc2NvcGUgPT0gVElQQ19DTFVTVEVSX1NDT1BFIFxcdTAwMjZcXHUwMDI2IGVycilcXG4rXFx0XFx0XFx0KmVyciA9IC1FTk9CVUZTO1xcbitcXHR9IGVsc2UgaWYgKChlcnJvciA9PSAtRU5PQlVGUykgXFx1MDAyNlxcdTAwMjYgZXJyKSB7XFxuK1xcdFxcdCplcnIgPSAtRU5PQlVGUztcXG4gXFx0fVxcbitcXG4gXFx0cmNfZGVzdHMgPSBudC1cXHUwMDNlcmNfZGVzdHM7XFxuIGV4aXQ6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG5AQCAtNzg3LDcgKzgzMiwxMDIgQEAgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcXG4gXFx0aWYgKHNrYilcXG4gXFx0XFx0dGlwY19ub2RlX2Jyb2FkY2FzdChuZXQsIHNrYiwgcmNfZGVzdHMpO1xcbiBcXHRyZXR1cm4gcDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViIC0gaW5zZXJ0IHB1YmxpY2F0aW9uIG9mIG5vZGUncyBzZWxmIGFkZHJlc3NcXG4rICogQG5ldDogbmV0d29yayBuYW1lc3BhY2VcXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXFxuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcXG4rICpcXG4rICovXFxuK2ludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpXFxuK3tcXG4rXFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XFxuK1xcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xcbitcXHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzaztcXG4rXFx0c3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyO1xcbitcXHRzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYztcXG4rXFx0Ym9vbCBzY19jcmVhdGVkID0gZmFsc2U7XFxuK1xcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcDtcXG4rXFx0c3RydWN0IHRpcGNfdWFkZHIgdWE7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0c2sucmVmID0gMDtcXG4rXFx0c2subm9kZSA9IHRuLVxcdTAwM2Vub2RlX2FkZHI7XFxuK1xcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcXG4rXFx0XFx0ICAgVElQQ19OT0RFX1NUQVRFLCB0bi1cXHUwMDNlbm9kZV9hZGRyLCB0bi1cXHUwMDNlbm9kZV9hZGRyKTtcXG4rXFx0c2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsIFxcdTAwMjZ1YSk7XFxuK1xcdGlmICghc2MpIHtcXG4rXFx0XFx0c2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgXFx1MDAyNnVhKTtcXG4rXFx0XFx0aWYgKCFzYylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbitcXHRcXHRzY19jcmVhdGVkID0gdHJ1ZTtcXG4rXFx0fVxcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzYy1cXHUwMDNlbG9jayk7XFxuK1xcdC8qIENoZWNrIHdoZXRoZXIgYSByYW5nZSBleGlzdHMgaW4gdGhlIG5hbWUgdGFibGUgd2l0aFxcbitcXHQgKiBsb3dlciA9PSB0bi1cXHUwMDNlbm9kZV9hZGRyLCB1cHBlciA9PSB0bi1cXHUwMDNlbm9kZV9hZGRyLCBhbmQgdHlwZVxcbitcXHQgKiBUSVBDX05PREVfU1RBVEUgKDApLiBJZiAnc3InIGlzIG5vdCBOVUxMLCB0aGlzIHJhbmdlIGV4aXN0c1xcbitcXHQgKiBkdWUgdG8gYSBwcmV2aW91cyBjYWxsIHRvIHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKClcXG4rXFx0ICogb3IgdGlwY19uZXRfZmluYWxpemUoKS5cXG4rXFx0ICpcXG4rXFx0ICogTm90ZSB0aGF0IHVzZXIgYXBwbGljYXRpb25zIGNhbiBvbmx5IGluc2VydCB0eXBlcyBncmVhdGVyIHRoYW5cXG4rXFx0ICogb3IgZXF1YWwgdG8gNjQgKFRJUENfUkVTRVJWRURfVFlQRVMpLCBhcyBlbmZvcmNlZCBieSB0aXBjX2JpbmQoKS5cXG4rXFx0ICogUmVtb3RlIG5vZGVzIGFsc28gb25seSBzZW5kIHByb3RvY29sIHB1YmxpY2F0aW9ucyB3aXRoIHR5cGVcXG4rXFx0ICogVElQQ19OT0RFX1NUQVRFICgwKSwgd2l0aCBib3RoIGxvd2VyIGFuZCB1cHBlciBzZXQgdG8gdGhlIHJlbW90ZVxcbitcXHQgKiBub2RlJ3MgYWRkcmVzcy4gVGhlc2UgcmFuZ2VzIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGlzIG5vZGUnc1xcbitcXHQgKiByYW5nZSBiZWNhdXNlIGEgcmVtb3RlIG5vZGUncyBhZGRyZXNzIG11c3QgZGlmZmVyIGZyb20gdGhpc1xcbitcXHQgKiBub2RlJ3MgYWRkcmVzcyAodG4tXFx1MDAzZW5vZGVfYWRkcikuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZXJlZm9yZSwgdGlwY191cGRhdGVfbmFtZXRibCgpIGNhbm5vdCBidWlsZCBhbmQgaW5zZXJ0IGEgcmVtb3RlXFxuK1xcdCAqIHB1YmxpY2F0aW9uIHdpdGggdGhlIHNhbWUgdHlwZSAoMCkgYW5kIHJhbmdlXFxuK1xcdCAqIChsb3dlciA9PSB0bi1cXHUwMDNlbm9kZV9hZGRyLCB1cHBlciA9PSB0bi1cXHUwMDNlbm9kZV9hZGRyKSBhcyB0aGlzIG5vZGUnc1xcbitcXHQgKiBzZWxmLWFkZHJlc3MgcHVibGljYXRpb24gaW4gdGhlIG5hbWUgdGFibGUuXFxuK1xcdCAqXFxuK1xcdCAqIEJlY2F1c2UgdGhlIGNvbWJpbmF0aW9uIG9mIHR5cGUgMCBhbmRcXG4rXFx0ICogKGxvd2VyID09IHRuLVxcdTAwM2Vub2RlX2FkZHIsIHVwcGVyID09IHRuLVxcdTAwM2Vub2RlX2FkZHIpIGlzIHVuaXF1ZSBpbiB0aGVcXG4rXFx0ICogbmFtZSB0YWJsZSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjaGVjayBzay5ub2RlLCBzay5yZWYsIGtleSwgb3JcXG4rXFx0ICogY2x1c3Rlcl9zY29wZSBtZW1iZXJzaGlwLlxcbitcXHQgKi9cXG4rXFx0c3IgPSB0aXBjX3NlcnZpY2VfZmluZF9yYW5nZShzYywgXFx1MDAyNnVhKTtcXG4rXFx0LyogMS4gdGlwY19uZXRfZmluYWxpemVfd29yaygpIGlzIG5vdCBzY2hlZHVsZWQgYmVjYXVzZSBvZiBuYW1lc3BhY2VcXG4rXFx0ICogICAgdGVhcmRvd24uXFxuK1xcdCAqIDIuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXFx1MDAzZSB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGhhcyBmYWlsZWRcXG4rXFx0ICogICAgdG8gaW5zZXJ0IG5vZGUgc2VsZiBhZGRyZXNzIHB1YmxpY2F0aW9uIGludG8gbnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGVcXG4rXFx0ICogICAgZHVlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuXFxuK1xcdCAqIDMuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXFx1MDAzZSB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGhhcyBub3RcXG4rXFx0ICogICAgZXhlY3V0ZWQgeWV0LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFzcikge1xcbitcXHRcXHRwID0gdGlwY19wdWJsX2NyZWF0ZShcXHUwMDI2dWEsIFxcdTAwMjZzaywgdG4tXFx1MDAzZW5vZGVfYWRkcik7XFxuK1xcdFxcdGlmICghcClcXG4rXFx0XFx0XFx0Z290byBlcnJvcjtcXG4rXFxuK1xcdFxcdGlmICghdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHAsIFxcdTAwMjZlcnIpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoZXJyID09IC1FTk9CVUZTKSkge1xcbitcXHRcXHRcXHRrZnJlZShwKTtcXG4rXFx0XFx0XFx0Z290byBlcnJvcjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cC1cXHUwMDNlYmluZGluZ19ub2RlLCBcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xcbitcXHRcXHRnb3RvIGV4aXQ7XFxuK2Vycm9yOlxcbitcXHRcXHRpZiAoc2NfY3JlYXRlZCkge1xcbitcXHRcXHRcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNnNjLVxcdTAwM2VzZXJ2aWNlX2xpc3QpO1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2MtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRcXHRrZnJlZV9yY3Uoc2MsIHJjdSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNjLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbitcXHR9XFxuK2V4aXQ6XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzYy1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtODEwLDcgKzk1MCwxMCBAQCB2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcXG4gXFxuIFxcdHAgPSB0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XFxuIFxcdGlmIChwKSB7XFxuLVxcdFxcdG50LVxcdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XFxuK1xcdFxcdGlmIChwLVxcdTAwM2Vzci50eXBlICE9IFRJUENfTk9ERV9TVEFURSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcC1cXHUwMDNlc3IudHlwZSAhPSBUSVBDX0xJTktfU1RBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHAtXFx1MDAzZXNyLnR5cGUgIT0gVElQQ19UT1BfU1JWKVxcbitcXHRcXHRcXHRudC1cXHUwMDNlbG9jYWxfcHVibF9jb3VudC0tO1xcbiBcXHRcXHRza2IgPSB0aXBjX25hbWVkX3dpdGhkcmF3KG5ldCwgcCk7XFxuIFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnAtXFx1MDAzZWJpbmRpbmdfc29jayk7XFxuIFxcdFxcdGtmcmVlX3JjdShwLCByY3UpO1xcbkBAIC04OTksNyArMTA0Miw2IEBAIGludCB0aXBjX25hbWV0YmxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bnQtXFx1MDAzZW5vZGVfc2NvcGUpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xcbi1cXHRyd2xvY2tfaW5pdChcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XFxuIFxcdHRuLVxcdTAwM2VuYW1ldGJsID0gbnQ7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTkxMiw2ICsxMDU0LDcgQEAgaW50IHRpcGNfbmFtZXRibF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4gICovXFxuIHN0YXRpYyB2b2lkIHRpcGNfc2VydmljZV9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYylcXG4ge1xcbitcXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcXG4gXFx0c3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyLCAqdG1wcjtcXG4gXFx0c3RydWN0IHB1YmxpY2F0aW9uICpwLCAqdG1wO1xcbiBcXG5AQCAtOTE5LDYgKzEwNjIsMTUgQEAgc3RhdGljIHZvaWQgdGlwY19zZXJ2aWNlX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjKVxcbiBcXHRyYnRyZWVfcG9zdG9yZGVyX2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3IsIHRtcHIsIFxcdTAwMjZzYy1cXHUwMDNlcmFuZ2VzLCB0cmVlX25vZGUpIHtcXG4gXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgXFx1MDAyNnNyLVxcdTAwM2VhbGxfcHVibCwgYWxsX3B1YmwpIHtcXG4gXFx0XFx0XFx0dGlwY19zZXJ2aWNlX3JlbW92ZV9wdWJsKHNyLCBcXHUwMDI2cC1cXHUwMDNlc2ssIHAtXFx1MDAzZWtleSk7XFxuK1xcdFxcdFxcdC8qIHRpcGNfbmFtZXRibF93aXRoZHJhdygpIGRvZXMgbm90IGRlbGV0ZVxcbitcXHRcXHRcXHQgKiAncC1cXHUwMDNlYmluZGluZ19ub2RlJyB3aXRoIHR5cGUgVElQQ19OT0RFX1NUQVRFIGFuZFxcbitcXHRcXHRcXHQgKiByYW5nZSBbdG4tXFx1MDAzZW5vZGVfYWRkciwgdG4tXFx1MDAzZW5vZGVfYWRkcl0gZnJvbVxcbitcXHRcXHRcXHQgKiAndG4tXFx1MDAzZWNsdXN0ZXJfc2NvcGUnLiBTbywgZGVsZXRlIGl0IGhlcmUuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAocC1cXHUwMDNlc3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHAtXFx1MDAzZXNyLmxvd2VyID09IHRuLVxcdTAwM2Vub2RlX2FkZHIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHAtXFx1MDAzZXNyLnVwcGVyID09IHRuLVxcdTAwM2Vub2RlX2FkZHIpXFxuK1xcdFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZwLVxcdTAwM2ViaW5kaW5nX25vZGUpO1xcbiBcXHRcXHRcXHRrZnJlZV9yY3UocCwgcmN1KTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyYl9lcmFzZV9hdWdtZW50ZWQoXFx1MDAyNnNyLVxcdTAwM2V0cmVlX25vZGUsIFxcdTAwMjZzYy1cXHUwMDNlcmFuZ2VzLCBcXHUwMDI2c3JfY2FsbGJhY2tzKTtcXG5AQCAtOTQ5LDYgKzExMDEsOCBAQCB2b2lkIHRpcGNfbmFtZXRibF9zdG9wKHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0XFx0XFx0dGlwY19zZXJ2aWNlX2RlbGV0ZShuZXQsIHNlcnZpY2UpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFx0dG4tXFx1MDAzZW50X3N0b3AgPSB0cnVlO1xcbitcXHR0bi1cXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4gXFxuIFxcdC8qIFRPRE86IGNsZWFyIHRuLVxcdTAwM2VuYW1ldGJsLCBpbXBsZW1lbnQgcHJvcGVyIFJDVSBydWxlcyA/ICovXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuaCBiL25ldC90aXBjL25hbWVfdGFibGUuaFxcbmluZGV4IDdmZjZlZWViYWFlNjQuLjQzOTBlNzlhNDY2MGUgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvbmFtZV90YWJsZS5oXFxuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oXFxuQEAgLTk3LDggKzk3LDcgQEAgc3RydWN0IHB1YmxpY2F0aW9uIHtcXG4gICogQGNsdXN0ZXJfc2NvcGU6IGFsbCBsb2NhbCBwdWJsaWNhdGlvbnMgd2l0aCBjbHVzdGVyIHNjb3BlXFxuICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgdG8gc2VuZCBidWxrIHVwZGF0ZXMgdG8gbmV3IG5vZGVzXFxuICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgZHVyaW5nIHJlLWluaXQgb2YgbmFtZSB0YWJsZVxcbi0gKiBAY2x1c3Rlcl9zY29wZV9sb2NrOiBsb2NrIGZvciBhY2Nlc3NpbmcgQGNsdXN0ZXJfc2NvcGVcXG4tICogQGxvY2FsX3B1YmxfY291bnQ6IG51bWJlciBvZiBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZVxcbisgKiBAbG9jYWxfcHVibF9jb3VudDogdGhlIG51bWJlciBvZiB1c2VyJ3MgcHVibGljYXRpb25zIGlzc3VlZCBieSB0aGlzIG5vZGVcXG4gICogQHJjX2Rlc3RzOiBkZXN0aW5hdGlvbiBub2RlIGNvdW50ZXJcXG4gICogQHNuZF9ueHQ6IG5leHQgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHVzZWRcXG4gICovXFxuQEAgLTEwNyw3ICsxMDYsNiBAQCBzdHJ1Y3QgbmFtZV90YWJsZSB7XFxuIFxcdHN0cnVjdCBobGlzdF9oZWFkIHNlcnZpY2VzW1RJUENfTkFNRVRCTF9TSVpFXTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBub2RlX3Njb3BlO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGNsdXN0ZXJfc2NvcGU7XFxuLVxcdHJ3bG9ja190IGNsdXN0ZXJfc2NvcGVfbG9jaztcXG4gXFx0dTMyIGxvY2FsX3B1YmxfY291bnQ7XFxuIFxcdHUzMiByY19kZXN0cztcXG4gXFx0dTMyIHNuZF9ueHQ7XFxuQEAgLTEyNiwxMyArMTI0LDE1IEBAIGJvb2wgdGlwY19uYW1ldGJsX2xvb2t1cF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcXG4gdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEpO1xcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbi1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcXG4rXFx0XFx0XFx0XFx0XFx0IHUzMiBrZXksIGludCAqZXJyKTtcXG4gdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XFxuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHUzMiBrZXkpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgIHUzMiBrZXksIGludCAqZXJyKTtcXG4raW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldCk7XFxuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uZXQuYyBiL25ldC90aXBjL25ldC5jXFxuaW5kZXggN2U2NWQwYjBjNGE4ZC4uN2EyYzFlNjdhY2EzZCAxMDA2NDRcXG4tLS0gYS9uZXQvdGlwYy9uZXQuY1xcbisrKyBiL25ldC90aXBjL25ldC5jXFxuQEAgLTExMCwxMSArMTEwLDE0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpO1xcbiBcXG4gaW50IHRpcGNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1OCAqbm9kZV9pZCwgdTMyIGFkZHIpXFxuIHtcXG4rXFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuK1xcbiBcXHRpZiAodGlwY19vd25faWQobmV0KSkge1xcbiBcXHRcXHRwcl9pbmZvKFxcXCJDYW5ub3QgY29uZmlndXJlIG5vZGUgaWRlbnRpdHkgdHdpY2VcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4gXFx0cHJfaW5mbyhcXFwiU3RhcnRlZCBpbiBuZXR3b3JrIG1vZGVcXFxcblxcXCIpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZ0bi1cXHUwMDNlbm9kZV9hZGRyX3NldCwgMCk7XFxuIFxcbiBcXHRpZiAobm9kZV9pZClcXG4gXFx0XFx0dGlwY19zZXRfbm9kZV9pZChuZXQsIG5vZGVfaWQpO1xcbkBAIC0xMjUsOCArMTI4LDggQEAgaW50IHRpcGNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1OCAqbm9kZV9pZCwgdTMyIGFkZHIpXFxuIFxcbiBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxcbiB7XFxuLVxcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xcbiBcXHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzayA9IHswLCBhZGRyfTtcXG4rXFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuIFxcdHN0cnVjdCB0aXBjX3VhZGRyIHVhO1xcbiBcXG4gXFx0dGlwY191YWRkcihcXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLFxcbkBAIC0xMzgsNyArMTQxLDExIEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXFxuIFxcdHRpcGNfbmFtZWRfcmVpbml0KG5ldCk7XFxuIFxcdHRpcGNfc2tfcmVpbml0KG5ldCk7XFxuIFxcdHRpcGNfbW9uX3JlaW5pdF9zZWxmKG5ldCk7XFxuLVxcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXFx1MDAyNnVhLCBcXHUwMDI2c2ssIGFkZHIpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZ0bi1cXHUwMDNlbm9kZV9hZGRyX3NldCwgMSk7XFxuK1xcdC8qIFJlZGlzdHJpYnV0ZSBidWxrIG9mIHB1YmxpY2F0aW9ucyB2aWEgbm9kZS11cCBldmVudCBvciBub2RlJ3MgdGltZXJcXG4rXFx0ICogaWYgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBmYWlscy5cXG4rXFx0ICovXFxuK1xcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXFx1MDAyNnVhLCBcXHUwMDI2c2ssIGFkZHIsIE5VTEwpO1xcbiB9XFxuIFxcbiB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmMgYi9uZXQvdGlwYy9ub2RlLmNcXG5pbmRleCA2ODNhMTM2ZTUzZWZjLi5mMWVlZTY3NGE2NzhlIDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL25vZGUuY1xcbisrKyBiL25ldC90aXBjL25vZGUuY1xcbkBAIC0xMTEsNiArMTExLDcgQEAgc3RydWN0IHRpcGNfYmNsaW5rX2VudHJ5IHtcXG4gICogQHBlZXJfbmV0OiBwZWVyJ3MgbmV0IG5hbWVzcGFjZVxcbiAgKiBAcGVlcl9oYXNoX21peDogaGFzaCBmb3IgdGhpcyBwZWVyIChGSVhNRSlcXG4gICogQGNyeXB0b19yeDogUlggY3J5cHRvIGhhbmRsZXJcXG4rICogQGRpc3RfYnVsazogZmxhZyB0byByZWRpc3RyaWJ1dGUgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnNcXG4gICovXFxuIHN0cnVjdCB0aXBjX25vZGUge1xcbiBcXHR1MzIgYWRkcjtcXG5AQCAtMTQ1LDYgKzE0Niw3IEBAIHN0cnVjdCB0aXBjX25vZGUge1xcbiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPXFxuIFxcdHN0cnVjdCB0aXBjX2NyeXB0byAqY3J5cHRvX3J4O1xcbiAjZW5kaWZcXG4rXFx0YXRvbWljX3QgZGlzdF9idWxrO1xcbiB9O1xcbiBcXG4gLyogTm9kZSBGU00gc3RhdGVzIGFuZCBldmVudHM6XFxuQEAgLTM0NSw2ICszNDcsMTcgQEAgc3RhdGljIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXFxuIFxcdHJldHVybiBub2RlO1xcbiB9XFxuIFxcbit2b2lkIHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXFxuK3tcXG4rXFx0c3RydWN0IHRpcGNfbm9kZSAqbm9kZTtcXG4rXFxuK1xcdG5vZGUgPSB0aXBjX25vZGVfZmluZChuZXQsIGFkZHIpO1xcbitcXHRpZiAobm9kZSkge1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZub2RlLVxcdTAwM2VkaXN0X2J1bGssIDEpO1xcbitcXHRcXHR0aXBjX25vZGVfcHV0KG5vZGUpO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qIHRpcGNfbm9kZV9maW5kX2J5X2lkIC0gbG9jYXRlIHNwZWNpZmllZCBub2RlIG9iamVjdCBieSBpdHMgMTI4LWJpdCBpZFxcbiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gYSBkaXNjb3ZlcnkgcmVxdWVzdCBmYWlsZWRcXG4gICogdG8gZmluZCB0aGUgbm9kZSBieSBpdHMgMzItYml0IGlkLCBhbmQgaXMgbm90IHRpbWUgY3JpdGljYWxcXG5AQCAtMzkzLDYgKzQwNiwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrX2Zhc3Qoc3RydWN0IHRpcGNfbm9kZSAqbilcXG4gXFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZuLVxcdTAwM2Vsb2NrKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdGlwY19ub2RlX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbilcXG4re1xcbitcXHRpbnQgYmVhcmVyX2lkO1xcbitcXG4rXFx0Zm9yIChiZWFyZXJfaWQgPSAwOyBiZWFyZXJfaWQgXFx1MDAzYyBNQVhfQkVBUkVSUzsgYmVhcmVyX2lkKyspXFxuK1xcdFxcdHRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcXG4gXFx0X19yZWxlYXNlcyhuLVxcdTAwM2Vsb2NrKVxcbiB7XFxuQEAgLTQwMiw2ICs0MjMsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgKnB1YmxfbGlzdDtcXG4gXFx0c3RydWN0IHRpcGNfdWFkZHIgdWE7XFxuIFxcdHUzMiBiZWFyZXJfaWQsIG5vZGU7XFxuK1xcdGludCByYyA9IDAsIGVyciA9IDA7XFxuIFxcbiBcXHRpZiAobGlrZWx5KCFmbGFncykpIHtcXG4gXFx0XFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZuLVxcdTAwM2Vsb2NrKTtcXG5AQCAtNDI1LDE2ICs0NDcsMjQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxcbiBcXHRcXHR0aXBjX3B1Ymxfbm90aWZ5KG5ldCwgcHVibF9saXN0LCBub2RlLCBuLVxcdTAwM2VjYXBhYmlsaXRpZXMpO1xcbiBcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgVElQQ19OT1RJRllfTk9ERV9VUClcXG4tXFx0XFx0dGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi1cXHUwMDNlY2FwYWJpbGl0aWVzKTtcXG4rXFx0XFx0cmMgPSB0aXBjX25hbWVkX25vZGVfdXAobmV0LCBub2RlLCBuLVxcdTAwM2VjYXBhYmlsaXRpZXMpO1xcbiBcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgVElQQ19OT1RJRllfTElOS19VUCkge1xcbiBcXHRcXHR0aXBjX21vbl9wZWVyX3VwKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTtcXG4tXFx0XFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcXHUwMDI2dWEsIFxcdTAwMjZzaywgc2sucmVmKTtcXG4rXFx0XFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcXHUwMDI2dWEsIFxcdTAwMjZzaywgc2sucmVmLCBcXHUwMDI2ZXJyKTtcXG4gXFx0fVxcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBUSVBDX05PVElGWV9MSU5LX0RPV04pIHtcXG4gXFx0XFx0dGlwY19tb25fcGVlcl9kb3duKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTtcXG4gXFx0XFx0dGlwY19uYW1ldGJsX3dpdGhkcmF3KG5ldCwgXFx1MDAyNnVhLCBcXHUwMDI2c2ssIHNrLnJlZik7XFxuIFxcdH1cXG4rXFxuK1xcdC8qIE1lbW9yeSBhbGxvY2F0aW9uIGhhcyBmYWlsZWQuIEJyaW5nIHRoZSBub2RlIGRvd24gdG8gc3RhcnQgb3ZlciBidWxrXFxuK1xcdCAqIGRpc3RyaWJ1dGlvbiB3aGVuIHRoZSBmaXJzdCBsaW5rIGlzIHVwIGFnYWluLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0dGlwY19ub2RlX2Rvd24obik7XFxuK1xcdGVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUylcXG4rXFx0XFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdGlwY19ub2RlX2Fzc2lnbl9wZWVyX25ldChzdHJ1Y3QgdGlwY19ub2RlICpuLCB1MzIgaGFzaF9taXhlcylcXG5AQCAtNTY0LDYgKzU5NCw3IEBAIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkciwgdTggKnBlZXJfaWQsXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuLVxcdTAwM2VsaXN0KTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm4tXFx1MDAzZXB1YmxfbGlzdCk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuLVxcdTAwM2Vjb25uX3Nrcyk7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNm4tXFx1MDAzZWRpc3RfYnVsaywgMCk7XFxuIFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNm4tXFx1MDAzZWJjX2VudHJ5Lm5hbWVkcSk7XFxuIFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNm4tXFx1MDAzZWJjX2VudHJ5LmlucHV0cTEpO1xcbiBcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNm4tXFx1MDAzZWJjX2VudHJ5LmFycnZxKTtcXG5AQCAtODAzLDcgKzgzNCw4IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiBcXHRzdHJ1Y3QgdGlwY19ub2RlICpuID0gdGltZXJfY29udGFpbmVyX29mKG4sIHQsIHRpbWVyKTtcXG4gXFx0c3RydWN0IHRpcGNfbGlua19lbnRyeSAqbGU7XFxuIFxcdHN0cnVjdCBza19idWZmX2hlYWQgeG1pdHE7XFxuLVxcdGludCByZW1haW5zID0gbi1cXHUwMDNlbGlua19jbnQ7XFxuK1xcdGludCByZW1haW5zID0gMDtcXG4rXFx0aW50IGRpc3RfcmMgPSAwO1xcbiBcXHRpbnQgYmVhcmVyX2lkO1xcbiBcXHRpbnQgcmMgPSAwO1xcbiBcXG5AQCAtODE0LDYgKzg0Niw5IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChhdG9taWNfeGNoZyhcXHUwMDI2bi1cXHUwMDNlZGlzdF9idWxrLCAwKSlcXG4rXFx0XFx0ZGlzdF9yYyA9IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShuLVxcdTAwM2VuZXQsIG4tXFx1MDAzZWFkZHIpO1xcbitcXG4gI2lmZGVmIENPTkZJR19USVBDX0NSWVBUT1xcbiBcXHQvKiBUYWtlIGFueSBjcnlwdG8ga2V5IHJlbGF0ZWQgYWN0aW9ucyBmaXJzdCAqL1xcbiBcXHR0aXBjX2NyeXB0b190aW1lb3V0KG4tXFx1MDAzZWNyeXB0b19yeCk7XFxuQEAgLTgyNSw2ICs4NjAsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4gXFx0ICovXFxuIFxcdHRpcGNfbm9kZV9yZWFkX2xvY2sobik7XFxuIFxcdG4tXFx1MDAzZWtlZXBhbGl2ZV9pbnR2ID0gMTAwMDA7XFxuK1xcdHJlbWFpbnMgPSBuLVxcdTAwM2VsaW5rX2NudDtcXG4gXFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xcbiBcXHRmb3IgKGJlYXJlcl9pZCA9IDA7IHJlbWFpbnMgXFx1MDAyNlxcdTAwMjYgKGJlYXJlcl9pZCBcXHUwMDNjIE1BWF9CRUFSRVJTKTsgYmVhcmVyX2lkKyspIHtcXG4gXFx0XFx0dGlwY19ub2RlX3JlYWRfbG9jayhuKTtcXG5AQCAtODM1LDExICs4NzEsMTMgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuIFxcdFxcdFxcdHRpcGNfbm9kZV9jYWxjdWxhdGVfdGltZXIobiwgbGUtXFx1MDAzZWxpbmspO1xcbiBcXHRcXHRcXHRyYyA9IHRpcGNfbGlua190aW1lb3V0KGxlLVxcdTAwM2VsaW5rLCBcXHUwMDI2eG1pdHEpO1xcbiBcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bGUtXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRcXHRyZW1haW5zLS07XFxuK1xcdFxcdFxcdGlmIChkaXN0X3JjIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmVtYWlucy0tO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHRpcGNfbm9kZV9yZWFkX3VubG9jayhuKTtcXG4gXFx0XFx0dGlwY19iZWFyZXJfeG1pdChuLVxcdTAwM2VuZXQsIGJlYXJlcl9pZCwgXFx1MDAyNnhtaXRxLCBcXHUwMDI2bGUtXFx1MDAzZW1hZGRyLCBuKTtcXG4tXFx0XFx0aWYgKHJjIFxcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKVxcbitcXHRcXHQvKiBGb3JjZSB0aGUgbm9kZSBkb3duIGluIGNhc2UgdGhlIHJlZGlzdHJpYnV0aW9uIGZhaWxlZCAqL1xcbitcXHRcXHRpZiAoKHJjIFxcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKSB8fCBkaXN0X3JjIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcXG4gXFx0fVxcbiBcXHRtb2RfdGltZXIoXFx1MDAyNm4tXFx1MDAzZXRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhuLVxcdTAwM2VrZWVwYWxpdmVfaW50dikpO1xcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmggYi9uZXQvdGlwYy9ub2RlLmhcXG5pbmRleCAxNTRhNWJiYjBkMjlkLi4wZjc3N2NmZTdjMDFlIDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL25vZGUuaFxcbisrKyBiL25ldC90aXBjL25vZGUuaFxcbkBAIC0xMjgsNCArMTI4LDUgQEAgaW50IHRpcGNfbmxfbm9kZV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbiBpbnQgdGlwY19ubF9ub2RlX2ZsdXNoX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4gI2VuZGlmXFxuIHZvaWQgdGlwY19ub2RlX3ByZV9jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpleGl0X25ldCk7XFxuK3ZvaWQgdGlwY19ub2RlX3NldF9kaXN0X2J1bGsoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcik7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jXFxuaW5kZXggZDVkNzBlYjIzMGI1Ni4uNmI4M2JkZmM0MzljMyAxMDA2NDRcXG4tLS0gYS9uZXQvdGlwYy9zb2NrZXQuY1xcbisrKyBiL25ldC90aXBjL3NvY2tldC5jXFxuQEAgLTI5MTksNyArMjkxOSw3IEBAIHN0YXRpYyBpbnQgdGlwY19za19wdWJsaXNoKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKVxcbiBcXHRcXHRyZXR1cm4gLUVBRERSSU5VU0U7XFxuIFxcdHNrYWRkci5yZWYgPSB0c2stXFx1MDAzZXBvcnRpZDtcXG4gXFx0c2thZGRyLm5vZGUgPSB0aXBjX293bl9hZGRyKG5ldCk7XFxuLVxcdHAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCBcXHUwMDI2c2thZGRyLCBrZXkpO1xcbitcXHRwID0gdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCB1YSwgXFx1MDAyNnNrYWRkciwga2V5LCBOVUxMKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFwKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzowNDowMi4yNjUwNTc5NzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3OTA1ODE3NDk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19uYW1lZF9kaXN0cmlidXRlXCIsXG4gICAgXCJ0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YlwiLFxuICAgIFwidGlwY19uYW1ldGJsX3B1Ymxpc2hcIixcbiAgICBcInRpcGNfbmFtZWRfbm9kZV91cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFRJUEMgbG9naWMgdG8gaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGR1cmluZyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbi4gSXQgYWRkcyBlcnJvciBjb2RlIHJldHVybnMgdG8gZnVuY3Rpb25zIGxpa2UgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGFuZCBpbnRyb2R1Y2VzIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAgYW5kIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgIHRvIGhhbmRsZSBidWxrIHJlZGlzdHJpYnV0aW9uIG9mIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVhN2MzZDRiOWI0MGE5M2QzMTE0NTliY2JlMmJkNjZiZDkyMmQzODVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNzowMzo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuYyBiL25ldC90aXBjL2NvcmUuY1xuaW5kZXggMzE1OTc1YzNiZTgxOC4uMGYxZDNkZGVhZTA5NSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2NvcmUuY1xuKysrIGIvbmV0L3RpcGMvY29yZS5jXG5AQCAtNjEsNiArNjEsOSBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgdGlwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHR0bi1cdTAwM2V0cmlhbF9hZGRyID0gMDtcbiBcdHRuLVx1MDAzZWFkZHJfdHJpYWxfZW5kID0gMDtcbiBcdHRuLVx1MDAzZWNhcGFiaWxpdGllcyA9IFRJUENfTk9ERV9DQVBBQklMSVRJRVM7XG4rXHR0bi1cdTAwM2VudF9zdG9wID0gZmFsc2U7XG4rXHR0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTtcbitcdGF0b21pY19zZXQoXHUwMDI2dG4tXHUwMDNlbm9kZV9hZGRyX3NldCwgMCk7XG4gXHRJTklUX1dPUksoXHUwMDI2dG4tXHUwMDNld29yaywgdGlwY19uZXRfZmluYWxpemVfd29yayk7XG4gXHRtZW1zZXQodG4tXHUwMDNlbm9kZV9pZCwgMCwgc2l6ZW9mKHRuLVx1MDAzZW5vZGVfaWQpKTtcbiBcdG1lbXNldCh0bi1cdTAwM2Vub2RlX2lkX3N0cmluZywgMCwgc2l6ZW9mKHRuLVx1MDAzZW5vZGVfaWRfc3RyaW5nKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5oIGIvbmV0L3RpcGMvY29yZS5oXG5pbmRleCA5Y2U1ZjlmZjZjYzAzLi45NzViMWQ0ODE4NmU2IDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvY29yZS5oXG4rKysgYi9uZXQvdGlwYy9jb3JlLmhcbkBAIC0xNDUsNiArMTQ1LDEyIEBAIHN0cnVjdCB0aXBjX25ldCB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbiBcdC8qIFRoZSBudW1iZXJzIG9mIHdvcmsgcXVldWVzIGluIHNjaGVkdWxlICovXG4gXHRhdG9taWNfdCB3cV9jb3VudDtcbitcdC8qIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbm9kZSdzIGFkZHJlc3MgaXMgc2V0ICovXG4rXHRhdG9taWNfdCBub2RlX2FkZHJfc2V0O1xuK1x0LyogVGhlIG5hbWUgdGFibGUgaGFzIHN0b3BwZWQgd29ya2luZyAqL1xuK1x0Ym9vbCBudF9zdG9wO1xuK1x0LyogTm9kZSdzIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIG5hbWUgdGFibGUgKi9cbitcdGJvb2wgbnRfc2VsZl9ub2RlX2V4aXN0O1xuIH07XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlwY19uZXQgKnRpcGNfbmV0KHN0cnVjdCBuZXQgKm5ldClcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcbmluZGV4IGJhNGY0OTA2ZTEzYjcuLjgzZTNlZDhmMmM1MTIgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcbisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuY1xuQEAgLTk1LDkgKzk1LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiBcdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZW5vZGVfc2NvcGUpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbi1cdHdyaXRlX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xuLVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHRza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBJVEVNX1NJWkUsIDApO1xuIFx0aWYgKCFza2IpIHtcbiBcdFx0cHJfd2FybihcIlB1YmxpY2F0aW9uIGRpc3RyaWJ1dGlvbiBmYWlsdXJlXFxuXCIpO1xuQEAgLTEyMSw5ICsxMTksNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiBcdHN0cnVjdCBkaXN0cl9pdGVtICppdGVtO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbi1cdHdyaXRlX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbi1cdHdyaXRlX3VubG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuIFx0aWYgKHAtXHUwMDNlc2NvcGUgPT0gVElQQ19OT0RFX1NDT1BFKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbkBAIC0xNDYsOSArMTQyLDE0IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxuICAqIEBkbm9kZTogbm9kZSB0byBiZSB1cGRhdGVkXG4gICogQHBsczogbGlua2VkIGxpc3Qgb2YgcHVibGljYXRpb24gaXRlbXMgdG8gYmUgcGFja2VkIGludG8gYnVmZmVyIGNoYWluXG4gICogQHNlcW5vOiBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgbWVzc2FnZVxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcbisgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXG4rICpcbiAgKi9cbi1zdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbi1cdFx0XHQgICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pXG4rc3RhdGljIGludCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbitcdFx0XHQgICAgdTMyIGRub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbHMsIHUxNiBzZXFubylcbiB7XG4gXHRzdHJ1Y3QgcHVibGljYXRpb24gKnB1Ymw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbkBAIC0xNjQsOCArMTY1LDkgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4gXHRcdFx0c2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgbXNnX3JlbSxcbiBcdFx0XHRcdFx0XHRkbm9kZSk7XG4gXHRcdFx0aWYgKCFza2IpIHtcbitcdFx0XHRcdF9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpO1xuIFx0XHRcdFx0cHJfd2FybihcIkJ1bGsgcHVibGljYXRpb24gZmFpbHVyZVxcblwiKTtcbi1cdFx0XHRcdHJldHVybjtcbitcdFx0XHRcdHJldHVybiAtRU5PQlVGUztcbiBcdFx0XHR9XG4gXHRcdFx0aGRyID0gYnVmX21zZyhza2IpO1xuIFx0XHRcdG1zZ19zZXRfYmNfYWNrX2ludmFsaWQoaGRyLCB0cnVlKTtcbkBAIC0xOTUsNiArMTk3LDkwIEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuIFx0aGRyID0gYnVmX21zZyhza2JfcGVla190YWlsKGxpc3QpKTtcbiBcdG1zZ19zZXRfbGFzdF9idWxrKGhkcik7XG4gXHRtc2dfc2V0X25hbWVkX3NlcW5vKGhkciwgc2Vxbm8pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIF9fdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gYnVpbGQgYSBsaXN0IG9mIHB1YmxpY2F0aW9ucyBuZWVkIHRvIGJlIGRpc3RyaWJ1dGVkXG4rICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcbisgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGVcbisgKiBAaGVhZDogbGlzdCBvZiBwdWJsaWNhdGlvbnNcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4rICovXG4rc3RhdGljIGludCBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSxcbitcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpXG4re1xuK1x0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbitcbitcdC8qIE5hbWUgdGFibGUgaGFzIGJlZW4gZGVsZXRlZCBhZnRlciBuYW1lc3BhY2UgdGVhcmRvd24gb3JcbitcdCAqIFRJUEMgbW9kdWxlIGV4aXQuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseSh0bi1cdTAwM2VudF9zdG9wKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBOb2RlJ3Mgc2VsZi1hZGRyZXNzIGlzIG5vdCBzZXQgeWV0ICovXG4rXHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQpKSB7XG4rXHRcdC8qIERlZmVyIHRoZSBkaXN0cmlidXRpb24gdG8gbm9kZSdzIHRpbWVyICovXG4rXHRcdHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKG5ldCwgZG5vZGUpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qIFByZXZpb3VzIGNhbGwgdG8gdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoKSB3YXMgc3VjY2Vzc2Z1bC5cbitcdCAqIFRoZSBub2RlJ3Mgc2VsZi1hZGRyZXNzIHB1YmxpY2F0aW9uIHdhcyBhZGRlZCB0byAnbnQtXHUwMDNlY2x1c3Rlcl9zY29wZScuXG4rXHQgKiBTbywgJ250LVx1MDAzZWNsdXN0ZXJfc2NvcGUnIGlzIG5vdCBlbXB0eSBub3cuIEdvIHRvIGRpc3RyaWJ1dGlvbi5cbitcdCAqL1xuK1x0aWYgKHRuLVx1MDAzZW50X3NlbGZfbm9kZV9leGlzdClcbitcdFx0Z290byBkaXN0cmlidXRlO1xuK1xuK1x0aWYgKHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKG5ldCkpXG4rXHRcdHJldHVybiAtRU5PQlVGUztcbitcbitcdHRuLVx1MDAzZW50X3NlbGZfbm9kZV9leGlzdCA9IHRydWU7XG4rXG4rZGlzdHJpYnV0ZTpcbitcdGlmIChuYW1lZF9kaXN0cmlidXRlKG5ldCwgaGVhZCwgZG5vZGUsXG4rXHRcdFx0ICAgICBcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlLCBudC1cdTAwM2VzbmRfbnh0KSA9PSAtRU5PQlVGUylcbitcdFx0cmV0dXJuIC1FTk9CVUZTO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHRpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGRpc3RyaWJ1dGUgYWxsIHB1YmxpY2F0aW9ucyB0byBzcGVjaWZpZWQgbm9kZVxuKyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4rICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbisgKlxuKyAqL1xuK2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpXG4re1xuK1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4rXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhlYWQ7XG4rXHRpbnQgcmMgPSAwO1xuK1xuK1x0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmhlYWQpO1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4rXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFx1MDAyNmhlYWQpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbitcdGlmICghcmMgXHUwMDI2XHUwMDI2ICFza2JfcXVldWVfZW1wdHkoXHUwMDI2aGVhZCkpIHtcbitcdFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbitcdFx0LyogVGhlIGxpbmsgaXMgY29uZ2VzdGVkIGFmdGVyIHRoZSBsaXN0IGlzIGluc2VydGVkIGludG8gdGhlXG4rXHRcdCAqIGxpbmsncyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmMgPT0gLUVMSU5LQ09ORylcbitcdFx0XHRyYyA9IDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmM7XG4gfVxuIFxuIC8qKlxuQEAgLTIwMiwyNSArMjg4LDM2IEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuICAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4gICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXG4gICogQGNhcGFiaWxpdGllczogcGVlciBub2RlJ3MgY2FwYWJpbGl0aWVzXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbisgKlxuICAqL1xuLXZvaWQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxuK2ludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXG4ge1xuIFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4gXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgaGVhZDtcbi1cdHUxNiBzZXFubztcbitcdGludCByYyA9IDA7XG4gXG4gXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aGVhZCk7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiBcdGlmICghKGNhcGFiaWxpdGllcyBcdTAwMjYgVElQQ19OQU1FRF9CQ0FTVCkpXG4gXHRcdG50LVx1MDAzZXJjX2Rlc3RzKys7XG4tXHRzZXFubyA9IG50LVx1MDAzZXNuZF9ueHQ7XG4rXG4rXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFx1MDAyNmhlYWQpO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbitcdGlmICghcmMgXHUwMDI2XHUwMDI2ICFza2JfcXVldWVfZW1wdHkoXHUwMDI2aGVhZCkpIHtcbitcdFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbitcdFx0LyogVGhlIGxpbmsgaXMgY29uZ2VzdGVkIGFmdGVyIHRoZSBsaXN0IGlzIGluc2VydGVkIGludG8gdGhlXG4rXHRcdCAqIGxpbmsncyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmMgPT0gLUVMSU5LQ09ORylcbitcdFx0XHRyYyA9IDA7XG4rXHR9XG4gXG4tXHRyZWFkX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbi1cdG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSwgc2Vxbm8pO1xuLVx0dGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgMCk7XG4tXHRyZWFkX3VubG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuK1x0cmV0dXJuIHJjO1xuIH1cbiBcbiAvKipcbkBAIC0yOTksNyArMzk2LDcgQEAgc3RhdGljIGJvb2wgdGlwY191cGRhdGVfbmFtZXRibChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkaXN0cl9pdGVtICppLFxuIFx0c2subm9kZSA9IG5vZGU7XG4gXG4gXHRpZiAoZHR5cGUgPT0gUFVCTElDQVRJT04pIHtcbi1cdFx0cCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywga2V5KTtcbitcdFx0cCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywga2V5LCBOVUxMKTtcbiBcdFx0aWYgKHApIHtcbiBcdFx0XHR0aXBjX25vZGVfc3Vic2NyaWJlKG5ldCwgXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIG5vZGUpO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuQEAgLTQxNiw1ICs1MTMsNiBAQCB2b2lkIHRpcGNfbmFtZWRfcmVpbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUsIGJpbmRpbmdfbm9kZSlcbiBcdFx0cC1cdTAwM2Vzay5ub2RlID0gc2VsZjtcbiBcdG50LVx1MDAzZXJjX2Rlc3RzID0gMDtcbitcdHRuLVx1MDAzZW50X3N0b3AgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaFxuaW5kZXggYzY3N2Y2ZjA4MmRmYi4uMjA0MzA5NmFlOTY3ZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuaFxuKysrIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oXG5AQCAtNjksMTEgKzY5LDEyIEBAIHN0cnVjdCBkaXN0cl9pdGVtIHtcbiBcbiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsKTtcbiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7XG4tdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xuK2ludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xuIHZvaWQgdGlwY19uYW1lZF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpuYW1lZHEsXG4gXHRcdCAgICB1MTYgKnJjdl9ueHQsIGJvb2wgKm9wZW4pO1xuIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KTtcbiB2b2lkIHRpcGNfcHVibF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpuc3ViX2xpc3QsXG4gXHRcdCAgICAgIHUzMiBhZGRyLCB1MTYgY2FwYWJpbGl0aWVzKTtcbitpbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLmJlZWQ0MGEyMTM2OGEgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbisrKyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuQEAgLTMyOSw3ICszMjksNyBAQCBzdGF0aWMgc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnRpcGNfc2VydmljZV9jcmVhdGVfcmFuZ2Uoc3RydWN0IHRpcGNfc2VydmljZSAqc2MsXG4gXG4gc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfc2VydmljZSAqc2MsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbitcdFx0XHRcdCAgICAgc3RydWN0IHB1YmxpY2F0aW9uICpwLCBpbnQgKmVycilcbiB7XG4gXHRzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1YiwgKnRtcDtcbiBcdHN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzcjtcbkBAIC0zMzksMTAgKzMzOSwxMiBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0Ym9vbCByZXMgPSBmYWxzZTtcbiBcdHUzMiBrZXkgPSBwLVx1MDAzZWtleTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdHNyID0gdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzYywgcCk7XG4tXHRpZiAoIXNyKVxuLVx0XHRnb3RvICBleGl0O1xuK1x0aWYgKCFzcikge1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdCplcnIgPSAtRU5PQlVGUztcbitcdFx0Z290byBleGl0O1xuK1x0fVxuIFxuIFx0Zmlyc3QgPSBsaXN0X2VtcHR5KFx1MDAyNnNyLVx1MDAzZWFsbF9wdWJsKTtcbiBcbkBAIC0zNTMsNiArMzU1LDggQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRwcl9kZWJ1ZyhcIkZhaWxlZCB0byBiaW5kIGR1cGxpY2F0ZSAldSwldSwldS8ldToldS8ldVxcblwiLFxuIFx0XHRcdFx0IHAtXHUwMDNlc3IudHlwZSwgcC1cdTAwM2Vzci5sb3dlciwgcC1cdTAwM2Vzci51cHBlcixcbiBcdFx0XHRcdCBub2RlLCBwLVx1MDAzZXNrLnJlZiwga2V5KTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0KmVyciA9IC1FRVhJU1Q7XG4gXHRcdFx0Z290byBleGl0O1xuIFx0XHR9XG4gXHR9XG5AQCAtMzcxLDcgKzM3NSw2IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoIXJlcylcbiBcdFx0cHJfd2FybihcIkZhaWxlZCB0byBiaW5kIHRvICV1LCV1LCV1XFxuXCIsXG4gXHRcdFx0cC1cdTAwM2Vzci50eXBlLCBwLVx1MDAzZXNyLmxvd2VyLCBwLVx1MDAzZXNyLnVwcGVyKTtcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuIFx0cmV0dXJuIHJlcztcbiB9XG4gXG5AQCAtNDc4LDIwICs0ODEsMzMgQEAgc3RhdGljIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnRpcGNfc2VydmljZV9maW5kKHN0cnVjdCBuZXQgKm5ldCxcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbi1cdFx0XHRcdFx0ICAgICB1MzIga2V5KVxuK1x0XHRcdFx0XHQgICAgIHUzMiBrZXksIGludCAqZXJyKVxuIHtcbiBcdHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwO1xuIFxuIFx0cCA9IHRpcGNfcHVibF9jcmVhdGUodWEsIHNrLCBrZXkpO1xuLVx0aWYgKCFwKVxuK1x0aWYgKCFwKSB7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0KmVyciA9IC1FTk9CVUZTO1xuIFx0XHRyZXR1cm4gTlVMTDtcbitcdH1cbiBcbiBcdHNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCB1YSk7XG4gXHRpZiAoIXNjKVxuIFx0XHRzYyA9IHRpcGNfc2VydmljZV9jcmVhdGUobmV0LCB1YSk7XG4tXHRpZiAoc2MgXHUwMDI2XHUwMDI2IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwKSlcbi1cdFx0cmV0dXJuIHA7XG4rXG4rXHRpZiAoc2MpIHtcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0XHRpZiAodGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHAsIGVycikpIHtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbitcdFx0XHRyZXR1cm4gcDtcbitcdFx0fVxuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbitcdH0gZWxzZSBpZiAoZXJyKSB7XG4rXHRcdCplcnIgPSAtRU5PQlVGUztcbitcdH1cbitcbiBcdGtmcmVlKHApO1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTc2MCwyNiArNzc2LDU1IEBAIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCxcbiAvKiB0aXBjX25hbWV0YmxfcHVibGlzaCAtIGFkZCBzZXJ2aWNlIGJpbmRpbmcgdG8gbmFtZSB0YWJsZVxuICAqL1xuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4rXHRcdFx0XHRcdCB1MzIga2V5LCBpbnQgKmVycilcbiB7XG4gXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbitcdHUzMiBtYXhfdXNlcl9wdWIgPSBUSVBDX01BWF9QVUJMIC0gMTtcbiBcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuK1x0Ym9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7XG4rXHRpbnQgZXJyb3IgPSAwO1xuIFx0dTMyIHJjX2Rlc3RzO1xuIFxuK1x0aWYgKHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFIHx8IHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8XG4rXHQgICAgdWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpXG4rXHRcdHByb3RvY29sX3R5cGUgPSB0cnVlO1xuK1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4rXHRpZiAocHJvdG9jb2xfdHlwZSlcbitcdFx0Z290byBpbnNlcnQ7XG4gXG4tXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IFRJUENfTUFYX1BVQkwpIHtcbi1cdFx0cHJfd2FybihcIkJpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcblwiLCBUSVBDX01BWF9QVUJMKTtcbitcdC8qIFJlc2VydmUgb25lIGVudHJ5IGZvciBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZSBiZWNhdXNlIGl0IGhhcyBjbHVzdGVyXG4rXHQgKiBzY29wZSBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgaW4gYnVsay4gU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VyJ3NcbitcdCAqIHB1YmxpY2F0aW9ucyBpcyAoVElQQ19NQVhfUFVCTCAtIDEpLlxuK1x0ICovXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IG1heF91c2VyX3B1Yikge1xuK1x0XHRwcl93YXJuKFwiQmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxuXCIsIG1heF91c2VyX3B1Yik7XG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcbi1cdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4raW5zZXJ0OlxuK1x0cCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIHVhLCBzaywga2V5LCBcdTAwMjZlcnJvcik7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XG4rXHRcdC8qIE5vdCBjb3VudCBub2RlIHN0YXRlLCBsaW5rIHN0YXRlIGFuZCB0b3BvbG9neSBzZXJ2ZXIgdHlwZXNcbitcdFx0ICogc28gdGhhdCBtYXhpbXVtIG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQgZG9lcyBub3QgcHJldmVudFxuK1x0XHQgKiBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIGZyb20gYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZVxuK1x0XHQgKiB0YWJsZS5cbitcdFx0ICovXG4rXHRcdGlmICghcHJvdG9jb2xfdHlwZSlcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XG4gXHRcdHNrYiA9IHRpcGNfbmFtZWRfcHVibGlzaChuZXQsIHApO1xuK1x0XHQvKiBMb2NhbC1zY29wZSBwdWJsaWNhdGlvbiBpcyBub3QgcHVibGlzaGVkIChza2IgaXMgTlVMTCksIG9ubHlcbitcdFx0ICogY2x1c3Rlci1jb3BlIG9uZSBpcy5cbitcdFx0ICovXG4rXHRcdGlmICghc2tiIFx1MDAyNlx1MDAyNiBwLVx1MDAzZXNjb3BlID09IFRJUENfQ0xVU1RFUl9TQ09QRSBcdTAwMjZcdTAwMjYgZXJyKVxuK1x0XHRcdCplcnIgPSAtRU5PQlVGUztcbitcdH0gZWxzZSBpZiAoKGVycm9yID09IC1FTk9CVUZTKSBcdTAwMjZcdTAwMjYgZXJyKSB7XG4rXHRcdCplcnIgPSAtRU5PQlVGUztcbiBcdH1cbitcbiBcdHJjX2Rlc3RzID0gbnQtXHUwMDNlcmNfZGVzdHM7XG4gZXhpdDpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG5AQCAtNzg3LDcgKzgzMiwxMDIgQEAgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdGlmIChza2IpXG4gXHRcdHRpcGNfbm9kZV9icm9hZGNhc3QobmV0LCBza2IsIHJjX2Rlc3RzKTtcbiBcdHJldHVybiBwO1xuK31cbitcbisvKipcbisgKiB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiAtIGluc2VydCBwdWJsaWNhdGlvbiBvZiBub2RlJ3Mgc2VsZiBhZGRyZXNzXG4rICogQG5ldDogbmV0d29yayBuYW1lc3BhY2VcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4rICovXG4raW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbitcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuK1x0c3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2s7XG4rXHRzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3I7XG4rXHRzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYztcbitcdGJvb2wgc2NfY3JlYXRlZCA9IGZhbHNlO1xuK1x0c3RydWN0IHB1YmxpY2F0aW9uICpwO1xuK1x0c3RydWN0IHRpcGNfdWFkZHIgdWE7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdHNrLnJlZiA9IDA7XG4rXHRzay5ub2RlID0gdG4tXHUwMDNlbm9kZV9hZGRyO1xuK1x0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG4rXHRcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXHUwMDNlbm9kZV9hZGRyLCB0bi1cdTAwM2Vub2RlX2FkZHIpO1xuK1x0c2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsIFx1MDAyNnVhKTtcbitcdGlmICghc2MpIHtcbitcdFx0c2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgXHUwMDI2dWEpO1xuK1x0XHRpZiAoIXNjKVxuK1x0XHRcdHJldHVybiAtRU5PQlVGUztcbitcdFx0c2NfY3JlYXRlZCA9IHRydWU7XG4rXHR9XG4gXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4rXHQvKiBDaGVjayB3aGV0aGVyIGEgcmFuZ2UgZXhpc3RzIGluIHRoZSBuYW1lIHRhYmxlIHdpdGhcbitcdCAqIGxvd2VyID09IHRuLVx1MDAzZW5vZGVfYWRkciwgdXBwZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyLCBhbmQgdHlwZVxuK1x0ICogVElQQ19OT0RFX1NUQVRFICgwKS4gSWYgJ3NyJyBpcyBub3QgTlVMTCwgdGhpcyByYW5nZSBleGlzdHNcbitcdCAqIGR1ZSB0byBhIHByZXZpb3VzIGNhbGwgdG8gdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoKVxuK1x0ICogb3IgdGlwY19uZXRfZmluYWxpemUoKS5cbitcdCAqXG4rXHQgKiBOb3RlIHRoYXQgdXNlciBhcHBsaWNhdGlvbnMgY2FuIG9ubHkgaW5zZXJ0IHR5cGVzIGdyZWF0ZXIgdGhhblxuK1x0ICogb3IgZXF1YWwgdG8gNjQgKFRJUENfUkVTRVJWRURfVFlQRVMpLCBhcyBlbmZvcmNlZCBieSB0aXBjX2JpbmQoKS5cbitcdCAqIFJlbW90ZSBub2RlcyBhbHNvIG9ubHkgc2VuZCBwcm90b2NvbCBwdWJsaWNhdGlvbnMgd2l0aCB0eXBlXG4rXHQgKiBUSVBDX05PREVfU1RBVEUgKDApLCB3aXRoIGJvdGggbG93ZXIgYW5kIHVwcGVyIHNldCB0byB0aGUgcmVtb3RlXG4rXHQgKiBub2RlJ3MgYWRkcmVzcy4gVGhlc2UgcmFuZ2VzIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGlzIG5vZGUnc1xuK1x0ICogcmFuZ2UgYmVjYXVzZSBhIHJlbW90ZSBub2RlJ3MgYWRkcmVzcyBtdXN0IGRpZmZlciBmcm9tIHRoaXNcbitcdCAqIG5vZGUncyBhZGRyZXNzICh0bi1cdTAwM2Vub2RlX2FkZHIpLlxuK1x0ICpcbitcdCAqIFRoZXJlZm9yZSwgdGlwY191cGRhdGVfbmFtZXRibCgpIGNhbm5vdCBidWlsZCBhbmQgaW5zZXJ0IGEgcmVtb3RlXG4rXHQgKiBwdWJsaWNhdGlvbiB3aXRoIHRoZSBzYW1lIHR5cGUgKDApIGFuZCByYW5nZVxuK1x0ICogKGxvd2VyID09IHRuLVx1MDAzZW5vZGVfYWRkciwgdXBwZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyKSBhcyB0aGlzIG5vZGUnc1xuK1x0ICogc2VsZi1hZGRyZXNzIHB1YmxpY2F0aW9uIGluIHRoZSBuYW1lIHRhYmxlLlxuK1x0ICpcbitcdCAqIEJlY2F1c2UgdGhlIGNvbWJpbmF0aW9uIG9mIHR5cGUgMCBhbmRcbitcdCAqIChsb3dlciA9PSB0bi1cdTAwM2Vub2RlX2FkZHIsIHVwcGVyID09IHRuLVx1MDAzZW5vZGVfYWRkcikgaXMgdW5pcXVlIGluIHRoZVxuK1x0ICogbmFtZSB0YWJsZSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjaGVjayBzay5ub2RlLCBzay5yZWYsIGtleSwgb3JcbitcdCAqIGNsdXN0ZXJfc2NvcGUgbWVtYmVyc2hpcC5cbitcdCAqL1xuK1x0c3IgPSB0aXBjX3NlcnZpY2VfZmluZF9yYW5nZShzYywgXHUwMDI2dWEpO1xuK1x0LyogMS4gdGlwY19uZXRfZmluYWxpemVfd29yaygpIGlzIG5vdCBzY2hlZHVsZWQgYmVjYXVzZSBvZiBuYW1lc3BhY2VcbitcdCAqICAgIHRlYXJkb3duLlxuK1x0ICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS1cdTAwM2UgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBoYXMgZmFpbGVkXG4rXHQgKiAgICB0byBpbnNlcnQgbm9kZSBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaW50byBudC1cdTAwM2VjbHVzdGVyX3Njb3BlXG4rXHQgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbitcdCAqIDMuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXHUwMDNlIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdFxuK1x0ICogICAgZXhlY3V0ZWQgeWV0LlxuK1x0ICovXG4rXHRpZiAoIXNyKSB7XG4rXHRcdHAgPSB0aXBjX3B1YmxfY3JlYXRlKFx1MDAyNnVhLCBcdTAwMjZzaywgdG4tXHUwMDNlbm9kZV9hZGRyKTtcbitcdFx0aWYgKCFwKVxuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRcdGlmICghdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHAsIFx1MDAyNmVycikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoZXJyID09IC1FTk9CVUZTKSkge1xuK1x0XHRcdGtmcmVlKHApO1xuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXHRcdH1cbitcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfbm9kZSwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSk7XG4rXHRcdGdvdG8gZXhpdDtcbitlcnJvcjpcbitcdFx0aWYgKHNjX2NyZWF0ZWQpIHtcbitcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2c2MtXHUwMDNlc2VydmljZV9saXN0KTtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbitcdFx0XHRrZnJlZV9yY3Uoc2MsIHJjdSk7XG4rXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuK1x0XHR9XG4rXG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVOT0JVRlM7XG4rXHR9XG4rZXhpdDpcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuQEAgLTgxMCw3ICs5NTAsMTAgQEAgdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXG4gXHRwID0gdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpO1xuIFx0aWYgKHApIHtcbi1cdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudC0tO1xuK1x0XHRpZiAocC1cdTAwM2Vzci50eXBlICE9IFRJUENfTk9ERV9TVEFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX0xJTktfU1RBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19UT1BfU1JWKVxuK1x0XHRcdG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQtLTtcbiBcdFx0c2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlYmluZGluZ19zb2NrKTtcbiBcdFx0a2ZyZWVfcmN1KHAsIHJjdSk7XG5AQCAtODk5LDcgKzEwNDIsNiBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bnQtXHUwMDNlbm9kZV9zY29wZSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlKTtcbi1cdHJ3bG9ja19pbml0KFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHR0bi1cdTAwM2VuYW1ldGJsID0gbnQ7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFx0cmV0dXJuIDA7XG5AQCAtOTEyLDYgKzEwNTQsNyBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuICAqL1xuIHN0YXRpYyB2b2lkIHRpcGNfc2VydmljZV9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYylcbiB7XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzciwgKnRtcHI7XG4gXHRzdHJ1Y3QgcHVibGljYXRpb24gKnAsICp0bXA7XG4gXG5AQCAtOTE5LDYgKzEwNjIsMTUgQEAgc3RhdGljIHZvaWQgdGlwY19zZXJ2aWNlX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjKVxuIFx0cmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFjaF9lbnRyeV9zYWZlKHNyLCB0bXByLCBcdTAwMjZzYy1cdTAwM2VyYW5nZXMsIHRyZWVfbm9kZSkge1xuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdG1wLCBcdTAwMjZzci1cdTAwM2VhbGxfcHVibCwgYWxsX3B1YmwpIHtcbiBcdFx0XHR0aXBjX3NlcnZpY2VfcmVtb3ZlX3B1Ymwoc3IsIFx1MDAyNnAtXHUwMDNlc2ssIHAtXHUwMDNla2V5KTtcbitcdFx0XHQvKiB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoKSBkb2VzIG5vdCBkZWxldGVcbitcdFx0XHQgKiAncC1cdTAwM2ViaW5kaW5nX25vZGUnIHdpdGggdHlwZSBUSVBDX05PREVfU1RBVEUgYW5kXG4rXHRcdFx0ICogcmFuZ2UgW3RuLVx1MDAzZW5vZGVfYWRkciwgdG4tXHUwMDNlbm9kZV9hZGRyXSBmcm9tXG4rXHRcdFx0ICogJ3RuLVx1MDAzZWNsdXN0ZXJfc2NvcGUnLiBTbywgZGVsZXRlIGl0IGhlcmUuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHAtXHUwMDNlc3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHAtXHUwMDNlc3IubG93ZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBwLVx1MDAzZXNyLnVwcGVyID09IHRuLVx1MDAzZW5vZGVfYWRkcilcbitcdFx0XHRcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbiBcdFx0XHRrZnJlZV9yY3UocCwgcmN1KTtcbiBcdFx0fVxuIFx0XHRyYl9lcmFzZV9hdWdtZW50ZWQoXHUwMDI2c3ItXHUwMDNldHJlZV9ub2RlLCBcdTAwMjZzYy1cdTAwM2VyYW5nZXMsIFx1MDAyNnNyX2NhbGxiYWNrcyk7XG5AQCAtOTQ5LDYgKzExMDEsOCBAQCB2b2lkIHRpcGNfbmFtZXRibF9zdG9wKHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0XHR0aXBjX3NlcnZpY2VfZGVsZXRlKG5ldCwgc2VydmljZSk7XG4gXHRcdH1cbiBcdH1cbitcdHRuLVx1MDAzZW50X3N0b3AgPSB0cnVlO1xuK1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFxuIFx0LyogVE9ETzogY2xlYXIgdG4tXHUwMDNlbmFtZXRibCwgaW1wbGVtZW50IHByb3BlciBSQ1UgcnVsZXMgPyAqL1xuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuaCBiL25ldC90aXBjL25hbWVfdGFibGUuaFxuaW5kZXggN2ZmNmVlZWJhYWU2NC4uNDM5MGU3OWE0NjYwZSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuaFxuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oXG5AQCAtOTcsOCArOTcsNyBAQCBzdHJ1Y3QgcHVibGljYXRpb24ge1xuICAqIEBjbHVzdGVyX3Njb3BlOiBhbGwgbG9jYWwgcHVibGljYXRpb25zIHdpdGggY2x1c3RlciBzY29wZVxuICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgdG8gc2VuZCBidWxrIHVwZGF0ZXMgdG8gbmV3IG5vZGVzXG4gICogICAgICAgICAgICAgICAtIHVzZWQgYnkgbmFtZV9kaXN0ciBkdXJpbmcgcmUtaW5pdCBvZiBuYW1lIHRhYmxlXG4tICogQGNsdXN0ZXJfc2NvcGVfbG9jazogbG9jayBmb3IgYWNjZXNzaW5nIEBjbHVzdGVyX3Njb3BlXG4tICogQGxvY2FsX3B1YmxfY291bnQ6IG51bWJlciBvZiBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZVxuKyAqIEBsb2NhbF9wdWJsX2NvdW50OiB0aGUgbnVtYmVyIG9mIHVzZXIncyBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZVxuICAqIEByY19kZXN0czogZGVzdGluYXRpb24gbm9kZSBjb3VudGVyXG4gICogQHNuZF9ueHQ6IG5leHQgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHVzZWRcbiAgKi9cbkBAIC0xMDcsNyArMTA2LDYgQEAgc3RydWN0IG5hbWVfdGFibGUge1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgc2VydmljZXNbVElQQ19OQU1FVEJMX1NJWkVdO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBub2RlX3Njb3BlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBjbHVzdGVyX3Njb3BlO1xuLVx0cndsb2NrX3QgY2x1c3Rlcl9zY29wZV9sb2NrO1xuIFx0dTMyIGxvY2FsX3B1YmxfY291bnQ7XG4gXHR1MzIgcmNfZGVzdHM7XG4gXHR1MzIgc25kX254dDtcbkBAIC0xMjYsMTMgKzEyNCwxNSBAQCBib29sIHRpcGNfbmFtZXRibF9sb29rdXBfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxuIFx0XHRcdCAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7XG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbi1cdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XG4rXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4rXHRcdFx0XHRcdCB1MzIga2V5LCBpbnQgKmVycik7XG4gdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRcdFx0ICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbi1cdFx0XHRcdFx0ICAgICB1MzIga2V5KTtcbitcdFx0XHRcdFx0ICAgICB1MzIga2V5LCBpbnQgKmVycik7XG4raW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldCk7XG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcmVtb3ZlX3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmV0LmMgYi9uZXQvdGlwYy9uZXQuY1xuaW5kZXggN2U2NWQwYjBjNGE4ZC4uN2EyYzFlNjdhY2EzZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25ldC5jXG4rKysgYi9uZXQvdGlwYy9uZXQuY1xuQEAgLTExMCwxMSArMTEwLDE0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpO1xuIFxuIGludCB0aXBjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdTggKm5vZGVfaWQsIHUzMiBhZGRyKVxuIHtcbitcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuK1xuIFx0aWYgKHRpcGNfb3duX2lkKG5ldCkpIHtcbiBcdFx0cHJfaW5mbyhcIkNhbm5vdCBjb25maWd1cmUgbm9kZSBpZGVudGl0eSB0d2ljZVxcblwiKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFx0cHJfaW5mbyhcIlN0YXJ0ZWQgaW4gbmV0d29yayBtb2RlXFxuXCIpO1xuK1x0YXRvbWljX3NldChcdTAwMjZ0bi1cdTAwM2Vub2RlX2FkZHJfc2V0LCAwKTtcbiBcbiBcdGlmIChub2RlX2lkKVxuIFx0XHR0aXBjX3NldF9ub2RlX2lkKG5ldCwgbm9kZV9pZCk7XG5AQCAtMTI1LDggKzEyOCw4IEBAIGludCB0aXBjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdTggKm5vZGVfaWQsIHUzMiBhZGRyKVxuIFxuIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4ge1xuLVx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4gXHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzayA9IHswLCBhZGRyfTtcbitcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHRpcGNfdWFkZHIgdWE7XG4gXG4gXHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcbkBAIC0xMzgsNyArMTQxLDExIEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4gXHR0aXBjX25hbWVkX3JlaW5pdChuZXQpO1xuIFx0dGlwY19za19yZWluaXQobmV0KTtcbiBcdHRpcGNfbW9uX3JlaW5pdF9zZWxmKG5ldCk7XG4tXHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgYWRkcik7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQsIDEpO1xuK1x0LyogUmVkaXN0cmlidXRlIGJ1bGsgb2YgcHVibGljYXRpb25zIHZpYSBub2RlLXVwIGV2ZW50IG9yIG5vZGUncyB0aW1lclxuK1x0ICogaWYgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBmYWlscy5cbitcdCAqL1xuK1x0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIGFkZHIsIE5VTEwpO1xuIH1cbiBcbiB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25vZGUuYyBiL25ldC90aXBjL25vZGUuY1xuaW5kZXggNjgzYTEzNmU1M2VmYy4uZjFlZWU2NzRhNjc4ZSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25vZGUuY1xuKysrIGIvbmV0L3RpcGMvbm9kZS5jXG5AQCAtMTExLDYgKzExMSw3IEBAIHN0cnVjdCB0aXBjX2JjbGlua19lbnRyeSB7XG4gICogQHBlZXJfbmV0OiBwZWVyJ3MgbmV0IG5hbWVzcGFjZVxuICAqIEBwZWVyX2hhc2hfbWl4OiBoYXNoIGZvciB0aGlzIHBlZXIgKEZJWE1FKVxuICAqIEBjcnlwdG9fcng6IFJYIGNyeXB0byBoYW5kbGVyXG4rICogQGRpc3RfYnVsazogZmxhZyB0byByZWRpc3RyaWJ1dGUgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnNcbiAgKi9cbiBzdHJ1Y3QgdGlwY19ub2RlIHtcbiBcdHUzMiBhZGRyO1xuQEAgLTE0NSw2ICsxNDYsNyBAQCBzdHJ1Y3QgdGlwY19ub2RlIHtcbiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPXG4gXHRzdHJ1Y3QgdGlwY19jcnlwdG8gKmNyeXB0b19yeDtcbiAjZW5kaWZcbitcdGF0b21pY190IGRpc3RfYnVsaztcbiB9O1xuIFxuIC8qIE5vZGUgRlNNIHN0YXRlcyBhbmQgZXZlbnRzOlxuQEAgLTM0NSw2ICszNDcsMTcgQEAgc3RhdGljIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4gXHRyZXR1cm4gbm9kZTtcbiB9XG4gXG4rdm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuK3tcbitcdHN0cnVjdCB0aXBjX25vZGUgKm5vZGU7XG4rXG4rXHRub2RlID0gdGlwY19ub2RlX2ZpbmQobmV0LCBhZGRyKTtcbitcdGlmIChub2RlKSB7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2bm9kZS1cdTAwM2VkaXN0X2J1bGssIDEpO1xuK1x0XHR0aXBjX25vZGVfcHV0KG5vZGUpO1xuK1x0fVxuK31cbitcbiAvKiB0aXBjX25vZGVfZmluZF9ieV9pZCAtIGxvY2F0ZSBzcGVjaWZpZWQgbm9kZSBvYmplY3QgYnkgaXRzIDEyOC1iaXQgaWRcbiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gYSBkaXNjb3ZlcnkgcmVxdWVzdCBmYWlsZWRcbiAgKiB0byBmaW5kIHRoZSBub2RlIGJ5IGl0cyAzMi1iaXQgaWQsIGFuZCBpcyBub3QgdGltZSBjcml0aWNhbFxuQEAgLTM5Myw2ICs0MDYsMTQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9ja19mYXN0KHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bi1cdTAwM2Vsb2NrKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGlwY19ub2RlX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbilcbit7XG4rXHRpbnQgYmVhcmVyX2lkO1xuK1xuK1x0Zm9yIChiZWFyZXJfaWQgPSAwOyBiZWFyZXJfaWQgXHUwMDNjIE1BWF9CRUFSRVJTOyBiZWFyZXJfaWQrKylcbitcdFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxuIFx0X19yZWxlYXNlcyhuLVx1MDAzZWxvY2spXG4ge1xuQEAgLTQwMiw2ICs0MjMsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICpwdWJsX2xpc3Q7XG4gXHRzdHJ1Y3QgdGlwY191YWRkciB1YTtcbiBcdHUzMiBiZWFyZXJfaWQsIG5vZGU7XG4rXHRpbnQgcmMgPSAwLCBlcnIgPSAwO1xuIFxuIFx0aWYgKGxpa2VseSghZmxhZ3MpKSB7XG4gXHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZuLVx1MDAzZWxvY2spO1xuQEAgLTQyNSwxNiArNDQ3LDI0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdFx0dGlwY19wdWJsX25vdGlmeShuZXQsIHB1YmxfbGlzdCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9OT0RFX1VQKVxuLVx0XHR0aXBjX25hbWVkX25vZGVfdXAobmV0LCBub2RlLCBuLVx1MDAzZWNhcGFiaWxpdGllcyk7XG4rXHRcdHJjID0gdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9MSU5LX1VQKSB7XG4gXHRcdHRpcGNfbW9uX3BlZXJfdXAobmV0LCBub2RlLCBiZWFyZXJfaWQpO1xuLVx0XHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmKTtcbitcdFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIHNrLnJlZiwgXHUwMDI2ZXJyKTtcbiBcdH1cbiBcdGlmIChmbGFncyBcdTAwMjYgVElQQ19OT1RJRllfTElOS19ET1dOKSB7XG4gXHRcdHRpcGNfbW9uX3BlZXJfZG93bihuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XG4gXHRcdHRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmKTtcbiBcdH1cbitcbitcdC8qIE1lbW9yeSBhbGxvY2F0aW9uIGhhcyBmYWlsZWQuIEJyaW5nIHRoZSBub2RlIGRvd24gdG8gc3RhcnQgb3ZlciBidWxrXG4rXHQgKiBkaXN0cmlidXRpb24gd2hlbiB0aGUgZmlyc3QgbGluayBpcyB1cCBhZ2Fpbi5cbitcdCAqL1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHR0aXBjX25vZGVfZG93bihuKTtcbitcdGVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUylcbitcdFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGlwY19ub2RlX2Fzc2lnbl9wZWVyX25ldChzdHJ1Y3QgdGlwY19ub2RlICpuLCB1MzIgaGFzaF9taXhlcylcbkBAIC01NjQsNiArNTk0LDcgQEAgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyLCB1OCAqcGVlcl9pZCxcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZXB1YmxfbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZWNvbm5fc2tzKTtcbitcdGF0b21pY19zZXQoXHUwMDI2bi1cdTAwM2VkaXN0X2J1bGssIDApO1xuIFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZuLVx1MDAzZWJjX2VudHJ5Lm5hbWVkcSk7XG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm4tXHUwMDNlYmNfZW50cnkuaW5wdXRxMSk7XG4gXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bi1cdTAwM2ViY19lbnRyeS5hcnJ2cSk7XG5AQCAtODAzLDcgKzgzNCw4IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0c3RydWN0IHRpcGNfbm9kZSAqbiA9IHRpbWVyX2NvbnRhaW5lcl9vZihuLCB0LCB0aW1lcik7XG4gXHRzdHJ1Y3QgdGlwY19saW5rX2VudHJ5ICpsZTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgeG1pdHE7XG4tXHRpbnQgcmVtYWlucyA9IG4tXHUwMDNlbGlua19jbnQ7XG4rXHRpbnQgcmVtYWlucyA9IDA7XG4rXHRpbnQgZGlzdF9yYyA9IDA7XG4gXHRpbnQgYmVhcmVyX2lkO1xuIFx0aW50IHJjID0gMDtcbiBcbkBAIC04MTQsNiArODQ2LDkgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbitcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZuLVx1MDAzZWRpc3RfYnVsaywgMCkpXG4rXHRcdGRpc3RfcmMgPSB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUobi1cdTAwM2VuZXQsIG4tXHUwMDNlYWRkcik7XG4rXG4gI2lmZGVmIENPTkZJR19USVBDX0NSWVBUT1xuIFx0LyogVGFrZSBhbnkgY3J5cHRvIGtleSByZWxhdGVkIGFjdGlvbnMgZmlyc3QgKi9cbiBcdHRpcGNfY3J5cHRvX3RpbWVvdXQobi1cdTAwM2VjcnlwdG9fcngpO1xuQEAgLTgyNSw2ICs4NjAsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdCAqL1xuIFx0dGlwY19ub2RlX3JlYWRfbG9jayhuKTtcbiBcdG4tXHUwMDNla2VlcGFsaXZlX2ludHYgPSAxMDAwMDtcbitcdHJlbWFpbnMgPSBuLVx1MDAzZWxpbmtfY250O1xuIFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xuIFx0Zm9yIChiZWFyZXJfaWQgPSAwOyByZW1haW5zIFx1MDAyNlx1MDAyNiAoYmVhcmVyX2lkIFx1MDAzYyBNQVhfQkVBUkVSUyk7IGJlYXJlcl9pZCsrKSB7XG4gXHRcdHRpcGNfbm9kZV9yZWFkX2xvY2sobik7XG5AQCAtODM1LDExICs4NzEsMTMgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdFx0dGlwY19ub2RlX2NhbGN1bGF0ZV90aW1lcihuLCBsZS1cdTAwM2VsaW5rKTtcbiBcdFx0XHRyYyA9IHRpcGNfbGlua190aW1lb3V0KGxlLVx1MDAzZWxpbmssIFx1MDAyNnhtaXRxKTtcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsZS1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRyZW1haW5zLS07XG4rXHRcdFx0aWYgKGRpc3RfcmMgXHUwMDNjIDApXG4rXHRcdFx0XHRyZW1haW5zLS07XG4gXHRcdH1cbiBcdFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xuIFx0XHR0aXBjX2JlYXJlcl94bWl0KG4tXHUwMDNlbmV0LCBiZWFyZXJfaWQsIFx1MDAyNnhtaXRxLCBcdTAwMjZsZS1cdTAwM2VtYWRkciwgbik7XG4tXHRcdGlmIChyYyBcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKVxuK1x0XHQvKiBGb3JjZSB0aGUgbm9kZSBkb3duIGluIGNhc2UgdGhlIHJlZGlzdHJpYnV0aW9uIGZhaWxlZCAqL1xuK1x0XHRpZiAoKHJjIFx1MDAyNiBUSVBDX0xJTktfRE9XTl9FVlQpIHx8IGRpc3RfcmMgXHUwMDNjIDApXG4gXHRcdFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcbiBcdH1cbiBcdG1vZF90aW1lcihcdTAwMjZuLVx1MDAzZXRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhuLVx1MDAzZWtlZXBhbGl2ZV9pbnR2KSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5oIGIvbmV0L3RpcGMvbm9kZS5oXG5pbmRleCAxNTRhNWJiYjBkMjlkLi4wZjc3N2NmZTdjMDFlIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbm9kZS5oXG4rKysgYi9uZXQvdGlwYy9ub2RlLmhcbkBAIC0xMjgsNCArMTI4LDUgQEAgaW50IHRpcGNfbmxfbm9kZV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGludCB0aXBjX25sX25vZGVfZmx1c2hfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuICNlbmRpZlxuIHZvaWQgdGlwY19ub2RlX3ByZV9jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpleGl0X25ldCk7XG4rdm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jXG5pbmRleCBkNWQ3MGViMjMwYjU2Li42YjgzYmRmYzQzOWMzIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvc29ja2V0LmNcbisrKyBiL25ldC90aXBjL3NvY2tldC5jXG5AQCAtMjkxOSw3ICsyOTE5LDcgQEAgc3RhdGljIGludCB0aXBjX3NrX3B1Ymxpc2goc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY191YWRkciAqdWEpXG4gXHRcdHJldHVybiAtRUFERFJJTlVTRTtcbiBcdHNrYWRkci5yZWYgPSB0c2stXHUwMDNlcG9ydGlkO1xuIFx0c2thZGRyLm5vZGUgPSB0aXBjX293bl9hZGRyKG5ldCk7XG4tXHRwID0gdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCB1YSwgXHUwMDI2c2thZGRyLCBrZXkpO1xuK1x0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFx1MDAyNnNrYWRkciwga2V5LCBOVUxMKTtcbiBcdGlmICh1bmxpa2VseSghcCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDQ6MDIuMjY1MDU5MjkyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQxNDAwNjMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUSVBDIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgVElQQyBzdWJzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbC4gU2VlbXMgbGlrZSBhIG5vbi10cml2aWFsIGNoYW5nZSwgdG91Y2hpbmcgYSBnb29kIGNodW5rIG9mIHRoZSBjb3JlIGNvZGU6IGBuZXQvdGlwYy9jb3JlLmNgLCBgLmhgLCBgbmFtZV9kaXN0ci5jYCwgYC5oYCwgYG5hbWVfdGFibGUuY2AsIGAuaGAsIGBuZXQuY2AsIGBub2RlLmNgLCBgLmhgLCBhbmQgYHNvY2tldC5jYC4gQmFzZWQgb24gdGhlIGZpbGUgbW9kaWZpY2F0aW9ucywgdGhpcyBwYXRjaCBmb2N1c2VzIG9uIGltcHJvdmluZyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbiBhbmQgYWRkcmVzc2luZyBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMgdGhhdCBjcm9wIHVwIGR1cmluZyBwdWJsaWNhdGlvbi5cblxuRnJvbSBteSB1bmRlcnN0YW5kaW5nLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBzb21lIG5ldyBmaWVsZHMgdG8gdGhlIGBzdHJ1Y3QgdGlwY19uZXRgIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGBudF9zdG9wYCwgYG50X3NlbGZfbm9kZV9leGlzdGAsIGFuZCBgbm9kZV9hZGRyX3NldGAsIGFuZCBpdCBsb29rcyBsaWtlIGEgY29uY2VydGVkIGVmZm9ydCB0byBpbXByb3ZlIGVycm9yIGhhbmRsaW5nIHRocm91Z2hvdXQgdGhlIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uIGNvZGUuIEkgc2VlIGNoYW5nZXMgd2hlcmUgZnVuY3Rpb25zIHRoYXQgcHJldmlvdXNseSBqdXN0IHNpbGVudGx5IGZhaWxlZCBhcmUgbm93IHJldHVybmluZyBlcnJvciBjb2RlcyDigJMgYC1FTk9CVUZTYCBpbiB0aGUgY2FzZSBvZiBgbmFtZWRfZGlzdHJpYnV0ZWAsIGZvciBpbnN0YW5jZS4gVGhlcmUncyBzb21lIHJlZmFjdG9yaW5nLCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZWAgYW5kIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgIGJlaW5nIGFkZGVkLCBhbmQgY2hhbmdlcyB0byBgdGlwY19uYW1lZF9ub2RlX3VwYCBhbmQgYHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibGAgbm93IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGVycm9ycy4gVGhlcmUgYXJlIGNoYW5nZXMgZm9yIGJ1bGsgcmVkaXN0cmlidXRpb24gaW4gYHRpcGNfbm9kZV90aW1lb3V0YCwgYXMgd2VsbCBhcyBhIG5ldyBmdW5jdGlvbiBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgLlxuXG5UaGlzIGlzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyBUSVBDIG9wZXJhdGVzLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIEkga25vdyBUSVBDIGNhbiBiZSB1c2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gR2l2ZW4gdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFuZCB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwcm9ibGVtcywgSSB0aGluayB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSdsbCBmbGFnIGl0IGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQuIEJhc2VkIG9uIHRoZSBjaGFuZ2VzLCB0aGUgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIGFyZTpcblxuKiAgIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgXG4qICAgYHRpcGNfbmFtZWRfbm9kZV91cGBcbiogICBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgXG4qICAgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYFxuKiAgIGB0aXBjX25vZGVfdGltZW91dGBcbiogICBgdGlwY19za19wdWJsaXNoYFxuXG5UaG9zZSBzZWVtIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnRzIHdoZXJlIHdlIGNvdWxkIHRyaWdnZXIgdGhlc2UgZGlzdHJpYnV0aW9uL2FsbG9jYXRpb24gaXNzdWVzLiBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zOyBvYnZpb3VzbHksIGBDT05GSUdfVElQQ2AgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBjb2RlIHRvIGV2ZW4gYmUgY29tcGlsZWQuIEZpbmFsbHksIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCB2ZXJpZnkgdGhlIGRldGFpbHMgb2YgaG93IHRoZSBwYXRjaCBjaGFuZ2VzIHRob3NlIGZ1bmN0aW9ucywgdG8gaW5mb3JtIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc0MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA0OjExLjY3OTA2ODU5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQxMjk4NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfbmFtZWRfZGlzdHJpYnV0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MTUxPXN0YXRpYyBpbnQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjA0LS8qKlxcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyMDU6ICogX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBidWlsZCBhIGxpc3Qgb2YgcHVibGljYXRpb25zIG5lZWQgdG8gYmUgZGlzdHJpYnV0ZWRcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjA2LSAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjE0LSAqL1xcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyMTU6c3RhdGljIGludCBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSxcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjE2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjU0LS8qKlxcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyNTU6ICogdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gZGlzdHJpYnV0ZSBhbGwgcHVibGljYXRpb25zIHRvIHNwZWNpZmllZCBub2RlXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI1Ni0gKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI2My0gKi9cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MjY0OmludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI2NS17XFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjcxLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2dG4tXFx1MDAzZW5hbWV0YmxfbG9jayk7XFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjI3MjpcXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFxcdTAwMjZoZWFkKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjczLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYz0yOTc9aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcylcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zMDgtXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjMwOTpcXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFxcdTAwMjZoZWFkKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMzEwLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuaD03Nj12b2lkIHRpcGNfcHVibF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpuc3ViX2xpc3QsXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5oLTc3LVxcdFxcdCAgICAgIHUzMiBhZGRyLCB1MTYgY2FwYWJpbGl0aWVzKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmg6Nzg6aW50IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSk7XFxubmV0L3RpcGMvbmFtZV9kaXN0ci5oLTc5LVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTgzMj1zdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC90aXBjL25vZGUuYy04NDktXFx0aWYgKGF0b21pY194Y2hnKFxcdTAwMjZuLVxcdTAwM2VkaXN0X2J1bGssIDApKVxcbm5ldC90aXBjL25vZGUuYzo4NTA6XFx0XFx0ZGlzdF9yYyA9IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShuLVxcdTAwM2VuZXQsIG4tXFx1MDAzZWFkZHIpO1xcbm5ldC90aXBjL25vZGUuYy04NTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA0OjEzLjQyMDM3MTMzOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTMyMzkzODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGludm9sdmVzIGEgZmV3IGtleSBxdWVzdGlvbnMuIEZpcnN0LCB3aGF0J3MgaXRzIGludGVuZGVkIHJvbGUgd2l0aGluIHRoZSBUSVBDIChUcmFuc3BhcmVudCBJbnRlci1Qcm9jZXNzIENvbW11bmljYXRpb24pIGZyYW1ld29yaz8gRnJvbSB0aGUgbmFtZSwgSSdtIGluZmVycmluZyBpdCdzIHJlbGF0ZWQgdG8gaW5zZXJ0aW5nLCBsaWtlbHkgYSBzZWxmLW5vZGUgb3IgaXRzIHB1YmxpYyByZXByZXNlbnRhdGlvbiwgaW50byBhIG5hbWUgdGFibGUuIFRoaXMgc3VnZ2VzdHMgaXTigJlzIGEgZnVuZGFtZW50YWwgb3BlcmF0aW9uIGZvciBwdWJsaXNoaW5nIG5vZGUgaW5mb3JtYXRpb24sIHByb2JhYmx5IGZvciBkaXNjb3ZlcnkgYW5kIGNvbW11bmljYXRpb24uXG5cbk5leHQsIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIHdoZXJlIGl0J3MgY2FsbGVkIGZyb20sIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gSXMgaXQgY2FsbGVkIGR1cmluZyBub2RlIGluaXRpYWxpemF0aW9uLCByZWdpc3RyYXRpb24sIG9yIHBlcmhhcHMgZHluYW1pY2FsbHkgd2hlbiBhIG5vZGUncyBjYXBhYmlsaXRpZXMgY2hhbmdlPyBLbm93aW5nIHRoZSBjYWxsaW5nIHNlcXVlbmNlIGlzIGNyaXRpY2FsIHRvIGdyYXNwaW5nIGl0cyBzaWduaWZpY2FuY2Ugd2l0aGluIHRoZSBvdmVyYWxsIFRJUEMgYXJjaGl0ZWN0dXJlLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIHRvIGNvbmZpcm0gdGhhdCB1bmRlcnN0YW5kaW5nLlxuXG5GdW5jdGlvbiBpbnRlcm5hbHMgYXJlIGFsc28gY3J1Y2lhbCwgb2YgY291cnNlLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDogdGhlIG5hbWUgdGFibGUgaXRzZWxmLCB0aGUgZm9ybWF0IG9mIHRoZSBzZWxmLW5vZGUgcmVwcmVzZW50YXRpb24gYmVpbmcgaW5zZXJ0ZWQsIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdXNlZCB0byBlbnN1cmUgdGhyZWFkIHNhZmV0eS4gQ29uc2lkZXJpbmcgaXQncyBhIFwicHVibGljXCIgaW5zZXJ0aW9uLCBJJ20gZXhwZWN0aW5nIHNvbWUgbGV2ZWwgb2YgdmlzaWJpbGl0eSBjb250cm9sIG9yIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIHRvIGJlIGF0IHBsYXkuIEhvdyBpcyB0aGUgaW5zZXJ0aW9uIHByb2Nlc3MgcHJvdGVjdGVkIGZyb20gcmFjZSBjb25kaXRpb25zIG9yIGNvcnJ1cHRpb24/IFdoYXQgbG9ja2luZyBtZWNoYW5pc21zIGFyZSBlbXBsb3llZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZGVhZGxvY2tzIEkgbmVlZCB0byBrZWVwIGluIG1pbmQ/XG5cbkZ1cnRoZXJtb3JlLCBJJ2xsIGJlIGNvbnNpZGVyaW5nIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgbmFtZSB0YWJsZSBpcyBmdWxsLCBvciBpZiB0aGUgcHJvdmlkZWQgbm9kZSBpbmZvcm1hdGlvbiBpcyBpbnZhbGlkPyBIb3cgYXJlIHRoZXNlIHNjZW5hcmlvcyBoYW5kbGVkLCBhbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtJ3Mgc3RhYmlsaXR5IGFuZCByZWxpYWJpbGl0eT8gQXJlIHRoZXJlIGFueSBlcnJvciBjb2RlcyBvciBsb2dnaW5nIG1lc3NhZ2VzIG9mIGludGVyZXN0P1xuXG5GaW5hbGx5LCBpZiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBpcyBpbiBhIGxhbmd1YWdlIGxpa2UgQywgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBBcmUgdGhlcmUgYW55IG1lbW9yeSBsZWFrcywgYnVmZmVyIG92ZXJmbG93cywgb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHVzZSBvZiBga21hbGxvY2AsIGBrZnJlZWAsIGBtZW1jcHlgLCBhbmQgc2ltaWxhciBmdW5jdGlvbnMuXG5cblVsdGltYXRlbHksIEkgbmVlZCB0byBmb3JtIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uJ3MgcHVycG9zZSwgaW1wbGVtZW50YXRpb24sIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBvdmVyYWxsIFRJUEMgc3lzdGVtLiBPbmx5IHRoZW4gY2FuIEkgZGV0ZXJtaW5lIGlmIGl0IGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIGFuZCBpZGVudGlmeSBhbnkgcG9zc2libGUgYXJlYXMgb2YgY29uY2Vybi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NjAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzowNDoxOC4xMTM2MTM2NDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NjU2Mjc4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MjE1PXN0YXRpYyBpbnQgX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjMzLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyMzQ6XFx0LyogUHJldmlvdXMgY2FsbCB0byB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YigpIHdhcyBzdWNjZXNzZnVsLlxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yMzUtXFx0ICogVGhlIG5vZGUncyBzZWxmLWFkZHJlc3MgcHVibGljYXRpb24gd2FzIGFkZGVkIHRvICdudC1cXHUwMDNlY2x1c3Rlcl9zY29wZScuXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjQwLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyNDE6XFx0aWYgKHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKG5ldCkpXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI0Mi1cXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM9Nzc4PXN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODM3LS8qKlxcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4Mzg6ICogdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIgLSBpbnNlcnQgcHVibGljYXRpb24gb2Ygbm9kZSdzIHNlbGYgYWRkcmVzc1xcbm5ldC90aXBjL25hbWVfdGFibGUuYy04MzktICogQG5ldDogbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuYy04NDUtICovXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jOjg0NjppbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC90aXBjL25hbWVfdGFibGUuYy04NDcte1xcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg3My1cXHQgKiBUSVBDX05PREVfU1RBVEUgKDApLiBJZiAnc3InIGlzIG5vdCBOVUxMLCB0aGlzIHJhbmdlIGV4aXN0c1xcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4NzQ6XFx0ICogZHVlIHRvIGEgcHJldmlvdXMgY2FsbCB0byB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YigpXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg3NS1cXHQgKiBvciB0aXBjX25ldF9maW5hbGl6ZSgpLlxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5oPTEzMT1zdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmgtMTM0LVxcdFxcdFxcdFxcdFxcdCAgICAgdTMyIGtleSwgaW50ICplcnIpO1xcbm5ldC90aXBjL25hbWVfdGFibGUuaDoxMzU6aW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldCk7XFxubmV0L3RpcGMvbmFtZV90YWJsZS5oLTEzNi1zdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA0OjE5LjcwMDE4NDE3NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0MzgwNzY1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIG15IHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyB0aGUgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYHRpcGNfbmFtZXRibF9wdWJsaXNoYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgaXQncyBiZWhhdmluZyBhcyBleHBlY3RlZC4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBpc3N1ZSBoZXJlIHRoYXQgSSBuZWVkIHRvIHBpbnBvaW50LiBVbmRlcnN0YW5kaW5nIHRoZSBleGFjdCBzdGF0ZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg5NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA0OjIyLjEzODI2MjMzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc2MTg3MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfbmFtZXRibF9wdWJsaXNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL25hbWVfdGFibGUuYz03NDg9dm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTc3NS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6Nzc2Oi8qIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIHNlcnZpY2UgYmluZGluZyB0byBuYW1lIHRhYmxlXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTc3Ny0gKi9cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6Nzc4OnN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTc3OS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTg0Nj1pbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg5Ny1cXHQgKiAgICB0ZWFyZG93bi5cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6ODk4OlxcdCAqIDIuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXFx1MDAzZSB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGhhcyBmYWlsZWRcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODk5LVxcdCAqICAgIHRvIGluc2VydCBub2RlIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpbnRvIG50LVxcdTAwM2VjbHVzdGVyX3Njb3BlXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTkwMC1cXHQgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6OTAxOlxcdCAqIDMuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXFx1MDAzZSB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGhhcyBub3RcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtOTAyLVxcdCAqICAgIGV4ZWN1dGVkIHlldC5cXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuaD0xMjQ9dm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxcbm5ldC90aXBjL25hbWVfdGFibGUuaC0xMjUtXFx0XFx0XFx0ICAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhKTtcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmg6MTI2OnN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxubmV0L3RpcGMvbmFtZV90YWJsZS5oLTEyNy1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxcbi0tXFxubmV0L3RpcGMvbmV0LmM9MTI5PXN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXFxuLS1cXG5uZXQvdGlwYy9uZXQuYy0xNDUtXFx0LyogUmVkaXN0cmlidXRlIGJ1bGsgb2YgcHVibGljYXRpb25zIHZpYSBub2RlLXVwIGV2ZW50IG9yIG5vZGUncyB0aW1lclxcbm5ldC90aXBjL25ldC5jOjE0NjpcXHQgKiBpZiB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGZhaWxzLlxcbm5ldC90aXBjL25ldC5jLTE0Ny1cXHQgKi9cXG5uZXQvdGlwYy9uZXQuYzoxNDg6XFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcXHUwMDI2dWEsIFxcdTAwMjZzaywgYWRkciwgTlVMTCk7XFxubmV0L3RpcGMvbmV0LmMtMTQ5LX1cXG4tLVxcbm5ldC90aXBjL25vZGUuYz00MTc9c3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTQ1My1cXHRcXHR0aXBjX21vbl9wZWVyX3VwKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTtcXG5uZXQvdGlwYy9ub2RlLmM6NDU0OlxcdFxcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXFx1MDAyNnVhLCBcXHUwMDI2c2ssIHNrLnJlZiwgXFx1MDAyNmVycik7XFxubmV0L3RpcGMvbm9kZS5jLTQ1NS1cXHR9XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yOTA3PXN0YXRpYyBpbnQgdGlwY19za19wdWJsaXNoKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjkyMS1cXHRza2FkZHIubm9kZSA9IHRpcGNfb3duX2FkZHIobmV0KTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoyOTIyOlxcdHAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCBcXHUwMDI2c2thZGRyLCBrZXksIE5VTEwpO1xcbm5ldC90aXBjL3NvY2tldC5jLTI5MjMtXFx0aWYgKHVubGlrZWx5KCFwKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDQ6MjMuNjE0NDU1ODc4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxNTM1ODI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBgdGlwY19uYW1lZF9ub2RlX3VwYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgdGFzayBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgZXhwZXJpZW5jZSB0ZWxscyBtZSBpdCdzIGFsd2F5cyB3aXNlIHRvIGJlIG1ldGhvZGljYWwsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGxpa2UgYHRpcGNfbmFtZWRfbm9kZV91cGAuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJXaGF0IGNvbnRleHQgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyB1c2VkIGluP1wiIElzIGl0IHBhcnQgb2YgdGhlIGNvcmUgVElQQyBpbXBsZW1lbnRhdGlvbiwgb3IgaXMgaXQgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uIGxheWVyZWQgb24gdG9wPyBLbm93aW5nIHRoYXQgaW5mbHVlbmNlcyBteSBleHBlY3RhdGlvbnMgZm9yIHRoaW5ncyBsaWtlIGVycm9yIGhhbmRsaW5nIGFuZCB0aGUga2luZHMgb2YgZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgaW50ZXJhY3Rpbmcgd2l0aC4gSSdtIGFzc3VtaW5nLCBiYXNlZCBvbiB0aGUgbmFtZSwgdGhhdCBpdCBsaWtlbHkgZGVhbHMgd2l0aCBicmluZ2luZyB1cCBhIG5hbWVkIG5vZGUgd2l0aGluIHRoZSBUSVBDIG5ldHdvcmsuIFRoYXQgaW1wbGllcyBzb21lIGtpbmQgb2YgcmVnaXN0cmF0aW9uIG9yIGFubm91bmNlbWVudCB0byB0aGUgbmV0d29yaywgYW5kIHRoZSBwb3RlbnRpYWwgbmVlZCBmb3Igc29tZSBmb3JtIG9mIHN5bmNocm9uaXphdGlvbiBvciBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBub2RlIHN0YXJ0dXAgb3IgcmVnaXN0cmF0aW9uLiBJIHdpbGwgYmUgbG9va2luZyBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBjaGVja2luZyBmb3IgYWRlcXVhdGUgdGhyZWFkIHNhZmV0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGVycm9ycy4gRG9lcyBpdCByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMsIG9yIGRvZXMgaXQgcmVseSBvbiBleGNlcHRpb25zPyBIb3cgYXJlIHRoZXNlIGVycm9ycyBwcm9wYWdhdGVkIHVwIHRoZSBjYWxsIHN0YWNrPyBUaGlzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgcm9idXN0IHN5c3RlbSBkZXNpZ24uIEFsc28sIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdCB3aXRoPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGltcGFjdCBpdHMgYmVoYXZpb3Igb3Igc3VjY2Vzcz8gSXTigJlzIGFsc28gaW1wZXJhdGl2ZSB0byBrZWVwIGluIG1pbmQsIEkgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLCB0byBzZWUgd2hhdCBpbnB1dCBpdCB0YWtlcyBhbmQgd2hhdCBpdCByZXR1cm5zLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhbGwgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCwgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24uIEZpbmFsbHksIHRoZSBkb2N1bWVudGF0aW9uIChpZiBhbnkpIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgSSB3aWxsIGFsc28gd2FudCB0byB0cmFjZSBpdHMgdXNhZ2UgaW4gdmFyaW91cyBjb2RlIHRvIGRldGVybWluZSBob3cgaXQgaXMgdXRpbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDE1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDQ6MjcuOTI5ODE3MDQ2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYwNjYxMTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfbmFtZWRfbm9kZV91cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MjY0PWludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjg2LS8qKlxcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyODc6ICogdGlwY19uYW1lZF9ub2RlX3VwIC0gdGVsbCBzcGVjaWZpZWQgbm9kZSBhYm91dCBhbGwgcHVibGljYXRpb25zIGJ5IHRoaXMgbm9kZVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yODgtICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yOTYtICovXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjI5NzppbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yOTgte1xcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5oPTcxPXN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmg6NzI6aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7XFxubmV0L3RpcGMvbmFtZV9kaXN0ci5oLTczLXZvaWQgdGlwY19uYW1lZF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpuYW1lZHEsXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9NDE3PXN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcXG4tLVxcbm5ldC90aXBjL25vZGUuYy00NDktXFx0aWYgKGZsYWdzIFxcdTAwMjYgVElQQ19OT1RJRllfTk9ERV9VUClcXG5uZXQvdGlwYy9ub2RlLmM6NDUwOlxcdFxcdHJjID0gdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi1cXHUwMDNlY2FwYWJpbGl0aWVzKTtcXG5uZXQvdGlwYy9ub2RlLmMtNDUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzowNDoyOS4zOTA0ODUzMjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzNzg5NTk4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBDYW5kaWRhdGUgSWRlbnRpZmljYXRpb24gd2l0aGluIFRJUEMgQ29yZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiBUSVBDLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24gYW5kIGRlYWxzIHdpdGggdGhvc2UgcGVza3kgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBmZXcga2V5IGZ1bmN0aW9ucyBhcyByaXBlIGZvciBmdXp6aW5nOiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCwgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYW5kIGB0aXBjX25hbWVkX25vZGVfdXBgLiBUaG9zZSBhcmUgdGhlIGNvcmUgZGlzdHJpYnV0aW9uIGFuZCBwdWJsaXNoaW5nIG1lY2hhbmlzbXMsIHNvIHRoZXkncmUgbmF0dXJhbGx5IGdvaW5nIHRvIGJlIHBvdGVudGlhbCB3ZWFrIHBvaW50cy4gQW5kLCBnaXZlbiB0aGF0IGB0aXBjX3NrX3B1Ymxpc2hgIGNhbGxzIGludG8gYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgdGhhdCBsaWtlbHkgbWFrZXMgaXQgYSBnb29kIGZ1enogdGFyZ2V0IGFzIHdlbGwuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYEtjb25maWdgIGZvciBUSVBDIHN1cHBvcnQgdG8gbWFrZSBzdXJlIGl0J3MgZW5hYmxlZCBhbmQgd2hhdCBvcHRpb25zIGFyZSBjb25maWd1cmVkIHRvIHByb3Blcmx5IGNyYWZ0IGEgZnV6emluZyBjYW1wYWlnbiB0aGF0IGNvdmVycyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODUxLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA0OjM5Ljc2OTQ0ODY1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4ODE3NjMyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVElQQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9LY29uZmlnLTUtXFxubmV0L3RpcGMvS2NvbmZpZzo2Om1lbnVjb25maWcgVElQQ1xcbm5ldC90aXBjL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVGhlIFRJUEMgUHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTIzLVxcbm5ldC90aXBjL0tjb25maWc6MjQ6Y29uZmlnIFRJUENfTUVESUFfSUJcXG5uZXQvdGlwYy9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIkluZmluaUJhbmQgbWVkaWEgdHlwZSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy0yOS1cXHQgIElQLW92ZXItSW5maW5pQmFuZCBkZXZpY2VzLlxcbm5ldC90aXBjL0tjb25maWc6MzA6Y29uZmlnIFRJUENfTUVESUFfVURQXFxubmV0L3RpcGMvS2NvbmZpZy0zMS1cXHRib29sIFxcXCJJUC9VRFAgbWVkaWEgdHlwZSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy0zNy1cXG5uZXQvdGlwYy9LY29uZmlnOjM4OmNvbmZpZyBUSVBDX0NSWVBUT1xcbm5ldC90aXBjL0tjb25maWctMzktXFx0Ym9vbCBcXFwiVElQQyBlbmNyeXB0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTUyLVxcbm5ldC90aXBjL0tjb25maWc6NTM6Y29uZmlnIFRJUENfRElBR1xcbm5ldC90aXBjL0tjb25maWctNTQtXFx0dHJpc3RhdGUgXFxcIlRJUEM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDQ6NDEuMjU3NjMwNTQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzMjE3NDgyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKlRhY2tsaW5nIHRoZSBUSVBDIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIGBUSVBDYC4gUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMuIEJlZm9yZSBJIGV2ZW4gKnRoaW5rKiBhYm91dCBjb25maWd1cmluZyBUSVBDLCBJIG5lZWQgdG8ga25vdyB3aGF0IGl0IHJlbGllcyBvbi4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBpbiBwbGFjZSBiZWZvcmUgSSBldmVuIHN0YXJ0LiBJJ2xsIG5lZWQgdG8gcnVuIGEgcXVpY2sgY2hlY2sgZm9yIGRlcGVuZGVuY2llcywgZW5zdXJpbmcgYWxsIG5lY2Vzc2FyeSBjb21wb25lbnRzIGFyZSBpbnN0YWxsZWQgYW5kIG9wZXJhdGlvbmFsLiBTa2lwcGluZyB0aGlzIHN0ZXAgd291bGQgYmUgYSByb29raWUgbWlzdGFrZTsgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IHJ1biBpbnRvIGFueSB1bm5lY2Vzc2FyeSByb2FkYmxvY2tzIGRvd24gdGhlIGxpbmUuIEl0J3MgdGhlIHN0YW5kYXJkIHByb2NlZHVyZS4gRGVwZW5kZW5jaWVzIGZpcnN0LiBBbHdheXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDQ6NTAuNTc5MzgxODk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVElQQyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgVElQQ1xcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBUSVBDIFByb3RvY29sXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoZSBUcmFuc3BhcmVudCBJbnRlciBQcm9jZXNzIENvbW11bmljYXRpb24gKFRJUEMpIHByb3RvY29sIGlzXFxuICAxMTpcXHRcXHQgIHNwZWNpYWxseSBkZXNpZ25lZCBmb3IgaW50cmEgY2x1c3RlciBjb21tdW5pY2F0aW9uLiBUaGlzIHByb3RvY29sXFxuICAxMjpcXHRcXHQgIG9yaWdpbmF0ZXMgZnJvbSBFcmljc3NvbiB3aGVyZSBpdCBoYXMgYmVlbiB1c2VkIGluIGNhcnJpZXIgZ3JhZGVcXG4gIDEzOlxcdFxcdCAgY2x1c3RlciBhcHBsaWNhdGlvbnMgZm9yIG1hbnkgeWVhcnMuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVElQQywgc2VlIGh0dHA6Ly90aXBjLnNvdXJjZWZvcmdlLm5ldC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBUaGlzIHByb3RvY29sIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgKCA9IGNvZGUgd2hpY2hcXG4gIDE4OlxcdFxcdCAgY2FuIGJlIGluc2VydGVkIGluIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdVxcbiAgMTk6XFx0XFx0ICB3YW50KS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aXBjLiBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0XFxuICAyMDpcXHRcXHQgIGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMucnN0XFx1MDAzZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDQ6NTAuNTc5NDQ3NjM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMDY3NTM3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVElQQyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBjb25maWd1cmluZyBUSVBDLCBhbmQgaXQncyBjbGVhciB0aGF0IGl0IGhhcyBhIGRlcGVuZGVuY3kgb24gSU5FVC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIEknbGwgbWFrZSBzdXJlIHRvIGluY2x1ZGUgYFRJUENgIHdpdGhpbiBgRW5hYmxlQ29uZmlnc2AgdG8gYWNjb3VudCBmb3IgdGhhdC5cblxuTm93LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBzcGVjaWZpYyBzeW1ib2xzIHdpdGhpbiB0aGUgVElQQyBzeXN0ZW0uIEkndmUgZ290IG15IGZvY3VzIG5hcnJvd2VkIGRvd24gdG8gdGhlc2U6IGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgLCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgYW5kIGB0aXBjX3NrX3B1Ymxpc2hgLiBUaGVzZSBhcmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IFRJUEMgaGFuZGxlcyBuYW1lIGRpc3RyaWJ1dGlvbiBhbmQgc29ja2V0IHB1Ymxpc2hpbmcg4oCTIGNvcmUgZnVuY3Rpb25hbGl0aWVzLlxuXG5CZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IGlmIGB0aXBjX3NrX3B1Ymxpc2hgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgaXRzIHNjb3BlIGlzIGRldGVybWluZWQuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk1OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA0OjU1Ljc4NjIwMzc4M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3OTc5NDUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NrX3B1Ymxpc2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvc29ja2V0LmM9MTUwPXN0YXRpYyB2b2lkIHRpcGNfc2tfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxubmV0L3RpcGMvc29ja2V0LmM6MTUxOnN0YXRpYyBpbnQgdGlwY19za19wdWJsaXNoKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTItc3RhdGljIGludCB0aXBjX3NrX3dpdGhkcmF3KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKTtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTY3Nj1zdGF0aWMgaW50IF9fdGlwY19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2thZGRyLCBpbnQgYWxlbilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTcwMS1cXHRcXHRyZXR1cm4gdGlwY19za193aXRoZHJhdyh0c2ssIHVhKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzo3MDI6XFx0cmV0dXJuIHRpcGNfc2tfcHVibGlzaCh0c2ssIHVhKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy03MDMtfVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9Mjg3MD1zdGF0aWMgdm9pZCB0aXBjX3NrX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTA2LVxcbm5ldC90aXBjL3NvY2tldC5jOjI5MDc6c3RhdGljIGludCB0aXBjX3NrX3B1Ymxpc2goc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY191YWRkciAqdWEpXFxubmV0L3RpcGMvc29ja2V0LmMtMjkwOC17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMDcyPXN0YXRpYyBpbnQgdGlwY19za19qb2luKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfZ3JvdXBfcmVxICptcmVxKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzA5Ny1cXHR0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAobmV0LCBncnAsIFxcdTAwMjZ1YSk7XFxubmV0L3RpcGMvc29ja2V0LmM6MzA5ODpcXHRyYyA9IHRpcGNfc2tfcHVibGlzaCh0c2ssIFxcdTAwMjZ1YSk7XFxubmV0L3RpcGMvc29ja2V0LmMtMzA5OS1cXHRpZiAocmMpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDQ6NTcuMjY2MDAzNjU3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTE2MTY5NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgaW50ZXJuYWxzIGFuZCBuZXR3b3JraW5nOlxuXG4qKkZvY3VzaW5nIG9uIHRoZSBSaWdodCBTeW1ib2wgZm9yIHRoZSBKb2IqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGlkZW50aWZ5IHRoZSBlbnRyeSBwb2ludCBmb3Igc29tZSBUSVBDIChUcmFuc3BhcmVudCBJbnRlci1Qcm9jZXNzIENvbW11bmljYXRpb24pIGZ1bmN0aW9uYWxpdHkuIEkgc2VlIGB0aXBjX3NrX3B1Ymxpc2hgIGFuZCByZWFsaXplIGltbWVkaWF0ZWx5IHRoYXQgaXQncyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBtZWFucyBpdCdzIGxpbWl0ZWQgaW4gc2NvcGUsIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIG1vZHVsZSBvciBmaWxlLiBUaGVyZWZvcmUsIGl0J3Mgbm90IGEgdXNlZnVsIHN5bWJvbCB0byB6ZXJvIGluIG9uIGlmIEknbSB0cnlpbmcgdG8gZmluZCB0aGUgcHJpbWFyeSBpbnRlcmZhY2UuIGBfX3RpcGNfYmluZGAgaXMgYWxzbyBzdGF0aWMsIHNvIEkgY2FuIHRvc3MgdGhhdCBvbmUgYXNpZGUgdG9vLiBOb3csICpgdGlwY19iaW5kYCouLi4gYWgsICp0aGF0J3MqIHRoZSBsaWtlbHkgY2FuZGlkYXRlISBJdCdzIHRoZSBub24tc3RhdGljIG9uZSwgdGhlIHB1YmxpYy1mYWNpbmcgZW50cnkgcG9pbnQgSSdtIGxvb2tpbmcgZm9yLiBUaGF0J3MgcHJvYmFibHkgdGhlIGZ1bmN0aW9uIHRoYXQncyBleHBvc2VkIGFuZCBjYWxsYWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggaXMgd2hlcmUgSSdkIGZvY3VzIG15IGF0dGVudGlvbi4gSXQncyB0aGUga2V5IHN5bWJvbCBJJ2xsIHdhbnQgdG8gdHJhY2Ugb3IgYW5hbHl6ZSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc1MiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA1OjAwLjk1NzYyMzU5NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1Njg5MTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX2JpbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvbmFtZV90YWJsZS5jPTg0Nj1pbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg3Ny1cXHQgKiBOb3RlIHRoYXQgdXNlciBhcHBsaWNhdGlvbnMgY2FuIG9ubHkgaW5zZXJ0IHR5cGVzIGdyZWF0ZXIgdGhhblxcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4Nzg6XFx0ICogb3IgZXF1YWwgdG8gNjQgKFRJUENfUkVTRVJWRURfVFlQRVMpLCBhcyBlbmZvcmNlZCBieSB0aXBjX2JpbmQoKS5cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODc5LVxcdCAqIFJlbW90ZSBub2RlcyBhbHNvIG9ubHkgc2VuZCBwcm90b2NvbCBwdWJsaWNhdGlvbnMgd2l0aCB0eXBlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz02MjY9c3RhdGljIGludCB0aXBjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTY2MS0vKipcXG5uZXQvdGlwYy9zb2NrZXQuYzo2NjI6ICogX190aXBjX2JpbmQgLSBhc3NvY2lhdGUgb3IgZGlzYXNzb2NpYXRlIFRJUEMgbmFtZShzKSB3aXRoIGEgc29ja2V0XFxubmV0L3RpcGMvc29ja2V0LmMtNjYzLSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy02NzUtICovXFxubmV0L3RpcGMvc29ja2V0LmM6Njc2OnN0YXRpYyBpbnQgX190aXBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpza2FkZHIsIGludCBhbGVuKVxcbm5ldC90aXBjL3NvY2tldC5jLTY3Ny17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz03MDU9aW50IHRpcGNfc2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNrYWRkciwgaW50IGFsZW4pXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy03MDktXFx0bG9ja19zb2NrKHNvY2stXFx1MDAzZXNrKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzo3MTA6XFx0cmVzID0gX190aXBjX2JpbmQoc29jaywgc2thZGRyLCBhbGVuKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy03MTEtXFx0cmVsZWFzZV9zb2NrKHNvY2stXFx1MDAzZXNrKTtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTcxNC1cXG5uZXQvdGlwYy9zb2NrZXQuYzo3MTU6c3RhdGljIGludCB0aXBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNrYWRkciwgaW50IGFsZW4pXFxubmV0L3RpcGMvc29ja2V0LmMtNzE2LXtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTMzNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTMzNjItXFx0LnJlbGVhc2VcXHQ9IHRpcGNfcmVsZWFzZSxcXG5uZXQvdGlwYy9zb2NrZXQuYzozMzYzOlxcdC5iaW5kXFx0XFx0PSB0aXBjX2JpbmQsXFxubmV0L3RpcGMvc29ja2V0LmMtMzM2NC1cXHQuY29ubmVjdFxcdD0gdGlwY19jb25uZWN0LFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MzM3OT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzID0ge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzM4Mi1cXHQucmVsZWFzZVxcdD0gdGlwY19yZWxlYXNlLFxcbm5ldC90aXBjL3NvY2tldC5jOjMzODM6XFx0LmJpbmRcXHRcXHQ9IHRpcGNfYmluZCxcXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzg0LVxcdC5jb25uZWN0XFx0PSB0aXBjX2Nvbm5lY3QsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzk5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDAyLVxcdC5yZWxlYXNlXFx0PSB0aXBjX3JlbGVhc2UsXFxubmV0L3RpcGMvc29ja2V0LmM6MzQwMzpcXHQuYmluZFxcdFxcdD0gdGlwY19iaW5kLFxcbm5ldC90aXBjL3NvY2tldC5jLTM0MDQtXFx0LmNvbm5lY3RcXHQ9IHRpcGNfY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDU6MDIuNDE0NTIwMTI3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzM2NDM5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgVElQQyBCaW5kaW5nIGFuZCBEaXN0cmlidXRpb24gRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgVElQQyBmdW5jdGlvbnMuIEkgbm90aWNlZCBgdGlwY19iaW5kYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGEgYml0IHVudXN1YWwgZm9yIGFuIG9wZXJhdGlvbiBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgZGVzaWduIGRlY2lzaW9uIGZvciBsYXRlciBhbmFseXNpcy4gTmV4dCwgSSBzaG91bGQgaW52ZXN0aWdhdGUgYHRpcGNfc2tfYmluZGAsIHdoaWNoIEkgKmJlbGlldmUqIGlzIG5vbi1zdGF0aWMuIExldCdzIGNvbmZpcm0gdGhhdC4gRmluYWxseSwgSSdsbCBuZWVkIHRvIGV4YW1pbmUgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAgdG8gc2VlIHdoYXQgaXMgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODcwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDU6MDYuMTg4MTY2NDk1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc1ODI2MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfbmFtZWRfZGlzdHJpYnV0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MTUxPXN0YXRpYyBpbnQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjA0LS8qKlxcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyMDU6ICogX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBidWlsZCBhIGxpc3Qgb2YgcHVibGljYXRpb25zIG5lZWQgdG8gYmUgZGlzdHJpYnV0ZWRcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjA2LSAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjE0LSAqL1xcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyMTU6c3RhdGljIGludCBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSxcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjE2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjU0LS8qKlxcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyNTU6ICogdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gZGlzdHJpYnV0ZSBhbGwgcHVibGljYXRpb25zIHRvIHNwZWNpZmllZCBub2RlXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI1Ni0gKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI2My0gKi9cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MjY0OmludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI2NS17XFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjcxLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2dG4tXFx1MDAzZW5hbWV0YmxfbG9jayk7XFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjI3MjpcXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFxcdTAwMjZoZWFkKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjczLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYz0yOTc9aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcylcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zMDgtXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjMwOTpcXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFxcdTAwMjZoZWFkKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMzEwLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuaD03Nj12b2lkIHRpcGNfcHVibF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpuc3ViX2xpc3QsXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5oLTc3LVxcdFxcdCAgICAgIHUzMiBhZGRyLCB1MTYgY2FwYWJpbGl0aWVzKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmg6Nzg6aW50IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSk7XFxubmV0L3RpcGMvbmFtZV9kaXN0ci5oLTc5LVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTgzMj1zdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC90aXBjL25vZGUuYy04NDktXFx0aWYgKGF0b21pY194Y2hnKFxcdTAwMjZuLVxcdTAwM2VkaXN0X2J1bGssIDApKVxcbm5ldC90aXBjL25vZGUuYzo4NTA6XFx0XFx0ZGlzdF9yYyA9IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShuLVxcdTAwM2VuZXQsIG4tXFx1MDAzZWFkZHIpO1xcbm5ldC90aXBjL25vZGUuYy04NTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA1OjA3LjY2Mzk5NjY4OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzU4NzE2NjE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUSVBDIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucywgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgLCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBhbmQgYHRpcGNfbmFtZWRfbm9kZV91cGAgYXJlICpub3QqIHN0YXRpYy4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIHBvdGVudGlhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24gYW5kIGVudHJ5IHBvaW50cyBmb3IgdmFyaW91cyBvcGVyYXRpb25zIHdpdGhpbiB0aGUgVElQQyBzeXN0ZW0uIFRoZXNlIGFyZSBkZWZpbml0ZWx5IHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5TbyBteSBpbml0aWFsIHRob3VnaHQgaXMsIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgLCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBhbmQgYHRpcGNfbmFtZWRfbm9kZV91cGAuXG5cblRoZSBcIkVuYWJsZUNvbmZpZ3M6IFRJUENcIiBpcyBhIGdpdmVuLCBzbyBJJ20gYWxyZWFkeSBsb29raW5nIGF0IFRJUEMtcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBUaGUgZGVzY3JpcHRpb24gY29uZmlybXMgd2hhdCBJIHN1c3BlY3RlZC4gVGhlIHBhdGNoJ3MgY29yZSBtb2RpZmljYXRpb24gY2VudGVycyBhcm91bmQgaGFuZGxpbmcgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZHVyaW5nIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uIHdpdGhpbiB0aGUgVElQQyBzeXN0ZW0uIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBhZGRlZCBlcnJvciBjb2RlIHJldHVybnMgdG8gY3J1Y2lhbCBmdW5jdGlvbnMgbGlrZSBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGFuZCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgd2hpY2ggc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgcHJldmlvdXMgY29kZSBwYXRoIGRpZCBub3QgcmVsaWFibHkgaGFuZGxlIGZhaWx1cmVzLiBOZXcgZnVuY3Rpb25zLCBuYW1lbHkgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCBhbmQgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIHRvIGRlYWwgd2l0aCBidWxrIHJlZGlzdHJpYnV0aW9uIG9mIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zLlxuXG5Db25zaWRlcmluZyB0aGlzIGlzIGEgbW9kaWZpY2F0aW9uIHRvIGZ1bmRhbWVudGFsIGtlcm5lbCBsb2dpYyB3aXRoaW4gVElQQyB0aGF04oCZcyBhbHNvIHJlYWNoYWJsZSwgaXQncyBhYnNvbHV0ZWx5IHJpcGUgZm9yIGZ1enppbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIGltcHJvdmUgcm9idXN0bmVzcyBhbmQgcmVzaWxpZW5jZSBpbiB0aGUgZmFjZSBvZiBtZW1vcnkgcHJlc3N1cmUsIGFuZCB0aGF0J3MgZXhhY3RseSB0aGUga2luZCBvZiBzY2VuYXJpbyBmdXp6aW5nIGlzIGRlc2lnbmVkIHRvIHVuY292ZXIuIEknbGwgbmVlZCB0byBkZXZlbG9wIGZ1enppbmcgc3RyYXRlZ2llcyB0aGF0IHNwZWNpZmljYWxseSB0YXJnZXQgdGhlc2UgbmV3IGVycm9yIHBhdGhzIGFuZCBhbGxvY2F0aW9uIHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MTIsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA1OjIxLjI1MTE2NTIxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMDY0OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19uYW1lZF9kaXN0cmlidXRlXCIsXG4gICAgXCJ0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YlwiLFxuICAgIFwidGlwY19uYW1ldGJsX3B1Ymxpc2hcIixcbiAgICBcInRpcGNfbmFtZWRfbm9kZV91cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFRJUEMgbG9naWMgdG8gaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGR1cmluZyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbi4gSXQgYWRkcyBlcnJvciBjb2RlIHJldHVybnMgdG8gZnVuY3Rpb25zIGxpa2UgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGFuZCBpbnRyb2R1Y2VzIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAgYW5kIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgIHRvIGhhbmRsZSBidWxrIHJlZGlzdHJpYnV0aW9uIG9mIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfbmFtZWRfZGlzdHJpYnV0ZVwiLFxuICAgIFwidGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJcIixcbiAgICBcInRpcGNfbmFtZXRibF9wdWJsaXNoXCIsXG4gICAgXCJ0aXBjX25hbWVkX25vZGVfdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBUSVBDIGxvZ2ljIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBkdXJpbmcgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24uIEl0IGFkZHMgZXJyb3IgY29kZSByZXR1cm5zIHRvIGZ1bmN0aW9ucyBsaWtlIGB0aXBjX25hbWV0YmxfcHVibGlzaGAgYW5kIGB0aXBjX25hbWVkX25vZGVfdXBgLCBhbmQgaW50cm9kdWNlcyBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgIGFuZCBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCB0byBoYW5kbGUgYnVsayByZWRpc3RyaWJ1dGlvbiBvZiBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzowNToyMS4zMjMyMzcyNDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODUwMDkzODkzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA1OjIxLjMyMzcxMjU2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1Nzg1MDA0NTg4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUSVBDIHN1YnN5c3RlbSB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgKHJldHVybmluZyBgLUVOT0JVRlNgKSBkdXJpbmcgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24uIEl0IGFkZHMgZXJyb3IgaGFuZGxpbmcgdG8gZnVuY3Rpb25zIGxpa2UgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGB0aXBjX25hbWVkX25vZGVfdXBgLCBhbmQgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYW5kIGludHJvZHVjZXMgZmxhZ3MgdG8gdHJhY2sgdGhlIHN0YXRlIG9mIHRoZSBuYW1lIHRhYmxlIGFuZCBub2RlIGFkZHJlc3MuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlcyAoZS5nLiwgYHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrYCwgYHN0cnVjdCB0aXBjX3VhZGRyIHVhYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKGUuZy4sIHZpYSBleHBsaWNpdCBhc3NpZ25tZW50IG9yIHRoZSBgdGlwY191YWRkcigpYCBoZWxwZXIpLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgY29udHJvbCBmbG93IGFuZCBlcnJvciBoYW5kbGluZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMsIHdoaWNoIGRvIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVhN2MzZDRiOWI0MGE5M2QzMTE0NTliY2JlMmJkNjZiZDkyMmQzODVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNzowMzo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuYyBiL25ldC90aXBjL2NvcmUuY1xuaW5kZXggMzE1OTc1YzNiZTgxOC4uMGYxZDNkZGVhZTA5NSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2NvcmUuY1xuKysrIGIvbmV0L3RpcGMvY29yZS5jXG5AQCAtNjEsNiArNjEsOSBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgdGlwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHR0bi1cdTAwM2V0cmlhbF9hZGRyID0gMDtcbiBcdHRuLVx1MDAzZWFkZHJfdHJpYWxfZW5kID0gMDtcbiBcdHRuLVx1MDAzZWNhcGFiaWxpdGllcyA9IFRJUENfTk9ERV9DQVBBQklMSVRJRVM7XG4rXHR0bi1cdTAwM2VudF9zdG9wID0gZmFsc2U7XG4rXHR0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTtcbitcdGF0b21pY19zZXQoXHUwMDI2dG4tXHUwMDNlbm9kZV9hZGRyX3NldCwgMCk7XG4gXHRJTklUX1dPUksoXHUwMDI2dG4tXHUwMDNld29yaywgdGlwY19uZXRfZmluYWxpemVfd29yayk7XG4gXHRtZW1zZXQodG4tXHUwMDNlbm9kZV9pZCwgMCwgc2l6ZW9mKHRuLVx1MDAzZW5vZGVfaWQpKTtcbiBcdG1lbXNldCh0bi1cdTAwM2Vub2RlX2lkX3N0cmluZywgMCwgc2l6ZW9mKHRuLVx1MDAzZW5vZGVfaWRfc3RyaW5nKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5oIGIvbmV0L3RpcGMvY29yZS5oXG5pbmRleCA5Y2U1ZjlmZjZjYzAzLi45NzViMWQ0ODE4NmU2IDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvY29yZS5oXG4rKysgYi9uZXQvdGlwYy9jb3JlLmhcbkBAIC0xNDUsNiArMTQ1LDEyIEBAIHN0cnVjdCB0aXBjX25ldCB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbiBcdC8qIFRoZSBudW1iZXJzIG9mIHdvcmsgcXVldWVzIGluIHNjaGVkdWxlICovXG4gXHRhdG9taWNfdCB3cV9jb3VudDtcbitcdC8qIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbm9kZSdzIGFkZHJlc3MgaXMgc2V0ICovXG4rXHRhdG9taWNfdCBub2RlX2FkZHJfc2V0O1xuK1x0LyogVGhlIG5hbWUgdGFibGUgaGFzIHN0b3BwZWQgd29ya2luZyAqL1xuK1x0Ym9vbCBudF9zdG9wO1xuK1x0LyogTm9kZSdzIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIG5hbWUgdGFibGUgKi9cbitcdGJvb2wgbnRfc2VsZl9ub2RlX2V4aXN0O1xuIH07XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlwY19uZXQgKnRpcGNfbmV0KHN0cnVjdCBuZXQgKm5ldClcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcbmluZGV4IGJhNGY0OTA2ZTEzYjcuLjgzZTNlZDhmMmM1MTIgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcbisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuY1xuQEAgLTk1LDkgKzk1LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiBcdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZW5vZGVfc2NvcGUpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbi1cdHdyaXRlX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xuLVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHRza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBJVEVNX1NJWkUsIDApO1xuIFx0aWYgKCFza2IpIHtcbiBcdFx0cHJfd2FybihcIlB1YmxpY2F0aW9uIGRpc3RyaWJ1dGlvbiBmYWlsdXJlXFxuXCIpO1xuQEAgLTEyMSw5ICsxMTksNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiBcdHN0cnVjdCBkaXN0cl9pdGVtICppdGVtO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbi1cdHdyaXRlX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbi1cdHdyaXRlX3VubG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuIFx0aWYgKHAtXHUwMDNlc2NvcGUgPT0gVElQQ19OT0RFX1NDT1BFKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbkBAIC0xNDYsOSArMTQyLDE0IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxuICAqIEBkbm9kZTogbm9kZSB0byBiZSB1cGRhdGVkXG4gICogQHBsczogbGlua2VkIGxpc3Qgb2YgcHVibGljYXRpb24gaXRlbXMgdG8gYmUgcGFja2VkIGludG8gYnVmZmVyIGNoYWluXG4gICogQHNlcW5vOiBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgbWVzc2FnZVxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcbisgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXG4rICpcbiAgKi9cbi1zdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbi1cdFx0XHQgICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pXG4rc3RhdGljIGludCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbitcdFx0XHQgICAgdTMyIGRub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbHMsIHUxNiBzZXFubylcbiB7XG4gXHRzdHJ1Y3QgcHVibGljYXRpb24gKnB1Ymw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbkBAIC0xNjQsOCArMTY1LDkgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4gXHRcdFx0c2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgbXNnX3JlbSxcbiBcdFx0XHRcdFx0XHRkbm9kZSk7XG4gXHRcdFx0aWYgKCFza2IpIHtcbitcdFx0XHRcdF9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpO1xuIFx0XHRcdFx0cHJfd2FybihcIkJ1bGsgcHVibGljYXRpb24gZmFpbHVyZVxcblwiKTtcbi1cdFx0XHRcdHJldHVybjtcbitcdFx0XHRcdHJldHVybiAtRU5PQlVGUztcbiBcdFx0XHR9XG4gXHRcdFx0aGRyID0gYnVmX21zZyhza2IpO1xuIFx0XHRcdG1zZ19zZXRfYmNfYWNrX2ludmFsaWQoaGRyLCB0cnVlKTtcbkBAIC0xOTUsNiArMTk3LDkwIEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuIFx0aGRyID0gYnVmX21zZyhza2JfcGVla190YWlsKGxpc3QpKTtcbiBcdG1zZ19zZXRfbGFzdF9idWxrKGhkcik7XG4gXHRtc2dfc2V0X25hbWVkX3NlcW5vKGhkciwgc2Vxbm8pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIF9fdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gYnVpbGQgYSBsaXN0IG9mIHB1YmxpY2F0aW9ucyBuZWVkIHRvIGJlIGRpc3RyaWJ1dGVkXG4rICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcbisgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGVcbisgKiBAaGVhZDogbGlzdCBvZiBwdWJsaWNhdGlvbnNcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4rICovXG4rc3RhdGljIGludCBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSxcbitcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpXG4re1xuK1x0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbitcbitcdC8qIE5hbWUgdGFibGUgaGFzIGJlZW4gZGVsZXRlZCBhZnRlciBuYW1lc3BhY2UgdGVhcmRvd24gb3JcbitcdCAqIFRJUEMgbW9kdWxlIGV4aXQuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseSh0bi1cdTAwM2VudF9zdG9wKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBOb2RlJ3Mgc2VsZi1hZGRyZXNzIGlzIG5vdCBzZXQgeWV0ICovXG4rXHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQpKSB7XG4rXHRcdC8qIERlZmVyIHRoZSBkaXN0cmlidXRpb24gdG8gbm9kZSdzIHRpbWVyICovXG4rXHRcdHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKG5ldCwgZG5vZGUpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qIFByZXZpb3VzIGNhbGwgdG8gdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoKSB3YXMgc3VjY2Vzc2Z1bC5cbitcdCAqIFRoZSBub2RlJ3Mgc2VsZi1hZGRyZXNzIHB1YmxpY2F0aW9uIHdhcyBhZGRlZCB0byAnbnQtXHUwMDNlY2x1c3Rlcl9zY29wZScuXG4rXHQgKiBTbywgJ250LVx1MDAzZWNsdXN0ZXJfc2NvcGUnIGlzIG5vdCBlbXB0eSBub3cuIEdvIHRvIGRpc3RyaWJ1dGlvbi5cbitcdCAqL1xuK1x0aWYgKHRuLVx1MDAzZW50X3NlbGZfbm9kZV9leGlzdClcbitcdFx0Z290byBkaXN0cmlidXRlO1xuK1xuK1x0aWYgKHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKG5ldCkpXG4rXHRcdHJldHVybiAtRU5PQlVGUztcbitcbitcdHRuLVx1MDAzZW50X3NlbGZfbm9kZV9leGlzdCA9IHRydWU7XG4rXG4rZGlzdHJpYnV0ZTpcbitcdGlmIChuYW1lZF9kaXN0cmlidXRlKG5ldCwgaGVhZCwgZG5vZGUsXG4rXHRcdFx0ICAgICBcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlLCBudC1cdTAwM2VzbmRfbnh0KSA9PSAtRU5PQlVGUylcbitcdFx0cmV0dXJuIC1FTk9CVUZTO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHRpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGRpc3RyaWJ1dGUgYWxsIHB1YmxpY2F0aW9ucyB0byBzcGVjaWZpZWQgbm9kZVxuKyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4rICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbisgKlxuKyAqL1xuK2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpXG4re1xuK1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4rXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhlYWQ7XG4rXHRpbnQgcmMgPSAwO1xuK1xuK1x0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmhlYWQpO1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4rXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFx1MDAyNmhlYWQpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbitcdGlmICghcmMgXHUwMDI2XHUwMDI2ICFza2JfcXVldWVfZW1wdHkoXHUwMDI2aGVhZCkpIHtcbitcdFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbitcdFx0LyogVGhlIGxpbmsgaXMgY29uZ2VzdGVkIGFmdGVyIHRoZSBsaXN0IGlzIGluc2VydGVkIGludG8gdGhlXG4rXHRcdCAqIGxpbmsncyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmMgPT0gLUVMSU5LQ09ORylcbitcdFx0XHRyYyA9IDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmM7XG4gfVxuIFxuIC8qKlxuQEAgLTIwMiwyNSArMjg4LDM2IEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuICAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4gICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXG4gICogQGNhcGFiaWxpdGllczogcGVlciBub2RlJ3MgY2FwYWJpbGl0aWVzXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbisgKlxuICAqL1xuLXZvaWQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxuK2ludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXG4ge1xuIFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4gXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgaGVhZDtcbi1cdHUxNiBzZXFubztcbitcdGludCByYyA9IDA7XG4gXG4gXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aGVhZCk7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiBcdGlmICghKGNhcGFiaWxpdGllcyBcdTAwMjYgVElQQ19OQU1FRF9CQ0FTVCkpXG4gXHRcdG50LVx1MDAzZXJjX2Rlc3RzKys7XG4tXHRzZXFubyA9IG50LVx1MDAzZXNuZF9ueHQ7XG4rXG4rXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFx1MDAyNmhlYWQpO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbitcdGlmICghcmMgXHUwMDI2XHUwMDI2ICFza2JfcXVldWVfZW1wdHkoXHUwMDI2aGVhZCkpIHtcbitcdFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbitcdFx0LyogVGhlIGxpbmsgaXMgY29uZ2VzdGVkIGFmdGVyIHRoZSBsaXN0IGlzIGluc2VydGVkIGludG8gdGhlXG4rXHRcdCAqIGxpbmsncyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmMgPT0gLUVMSU5LQ09ORylcbitcdFx0XHRyYyA9IDA7XG4rXHR9XG4gXG4tXHRyZWFkX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbi1cdG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSwgc2Vxbm8pO1xuLVx0dGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgMCk7XG4tXHRyZWFkX3VubG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuK1x0cmV0dXJuIHJjO1xuIH1cbiBcbiAvKipcbkBAIC0yOTksNyArMzk2LDcgQEAgc3RhdGljIGJvb2wgdGlwY191cGRhdGVfbmFtZXRibChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkaXN0cl9pdGVtICppLFxuIFx0c2subm9kZSA9IG5vZGU7XG4gXG4gXHRpZiAoZHR5cGUgPT0gUFVCTElDQVRJT04pIHtcbi1cdFx0cCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywga2V5KTtcbitcdFx0cCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywga2V5LCBOVUxMKTtcbiBcdFx0aWYgKHApIHtcbiBcdFx0XHR0aXBjX25vZGVfc3Vic2NyaWJlKG5ldCwgXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIG5vZGUpO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuQEAgLTQxNiw1ICs1MTMsNiBAQCB2b2lkIHRpcGNfbmFtZWRfcmVpbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUsIGJpbmRpbmdfbm9kZSlcbiBcdFx0cC1cdTAwM2Vzay5ub2RlID0gc2VsZjtcbiBcdG50LVx1MDAzZXJjX2Rlc3RzID0gMDtcbitcdHRuLVx1MDAzZW50X3N0b3AgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaFxuaW5kZXggYzY3N2Y2ZjA4MmRmYi4uMjA0MzA5NmFlOTY3ZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuaFxuKysrIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oXG5AQCAtNjksMTEgKzY5LDEyIEBAIHN0cnVjdCBkaXN0cl9pdGVtIHtcbiBcbiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsKTtcbiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7XG4tdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xuK2ludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xuIHZvaWQgdGlwY19uYW1lZF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpuYW1lZHEsXG4gXHRcdCAgICB1MTYgKnJjdl9ueHQsIGJvb2wgKm9wZW4pO1xuIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KTtcbiB2b2lkIHRpcGNfcHVibF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpuc3ViX2xpc3QsXG4gXHRcdCAgICAgIHUzMiBhZGRyLCB1MTYgY2FwYWJpbGl0aWVzKTtcbitpbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLmJlZWQ0MGEyMTM2OGEgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbisrKyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuQEAgLTMyOSw3ICszMjksNyBAQCBzdGF0aWMgc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnRpcGNfc2VydmljZV9jcmVhdGVfcmFuZ2Uoc3RydWN0IHRpcGNfc2VydmljZSAqc2MsXG4gXG4gc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfc2VydmljZSAqc2MsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbitcdFx0XHRcdCAgICAgc3RydWN0IHB1YmxpY2F0aW9uICpwLCBpbnQgKmVycilcbiB7XG4gXHRzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1YiwgKnRtcDtcbiBcdHN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzcjtcbkBAIC0zMzksMTAgKzMzOSwxMiBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0Ym9vbCByZXMgPSBmYWxzZTtcbiBcdHUzMiBrZXkgPSBwLVx1MDAzZWtleTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdHNyID0gdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzYywgcCk7XG4tXHRpZiAoIXNyKVxuLVx0XHRnb3RvICBleGl0O1xuK1x0aWYgKCFzcikge1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdCplcnIgPSAtRU5PQlVGUztcbitcdFx0Z290byBleGl0O1xuK1x0fVxuIFxuIFx0Zmlyc3QgPSBsaXN0X2VtcHR5KFx1MDAyNnNyLVx1MDAzZWFsbF9wdWJsKTtcbiBcbkBAIC0zNTMsNiArMzU1LDggQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRwcl9kZWJ1ZyhcIkZhaWxlZCB0byBiaW5kIGR1cGxpY2F0ZSAldSwldSwldS8ldToldS8ldVxcblwiLFxuIFx0XHRcdFx0IHAtXHUwMDNlc3IudHlwZSwgcC1cdTAwM2Vzci5sb3dlciwgcC1cdTAwM2Vzci51cHBlcixcbiBcdFx0XHRcdCBub2RlLCBwLVx1MDAzZXNrLnJlZiwga2V5KTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0KmVyciA9IC1FRVhJU1Q7XG4gXHRcdFx0Z290byBleGl0O1xuIFx0XHR9XG4gXHR9XG5AQCAtMzcxLDcgKzM3NSw2IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoIXJlcylcbiBcdFx0cHJfd2FybihcIkZhaWxlZCB0byBiaW5kIHRvICV1LCV1LCV1XFxuXCIsXG4gXHRcdFx0cC1cdTAwM2Vzci50eXBlLCBwLVx1MDAzZXNyLmxvd2VyLCBwLVx1MDAzZXNyLnVwcGVyKTtcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuIFx0cmV0dXJuIHJlcztcbiB9XG4gXG5AQCAtNDc4LDIwICs0ODEsMzMgQEAgc3RhdGljIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnRpcGNfc2VydmljZV9maW5kKHN0cnVjdCBuZXQgKm5ldCxcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbi1cdFx0XHRcdFx0ICAgICB1MzIga2V5KVxuK1x0XHRcdFx0XHQgICAgIHUzMiBrZXksIGludCAqZXJyKVxuIHtcbiBcdHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwO1xuIFxuIFx0cCA9IHRpcGNfcHVibF9jcmVhdGUodWEsIHNrLCBrZXkpO1xuLVx0aWYgKCFwKVxuK1x0aWYgKCFwKSB7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0KmVyciA9IC1FTk9CVUZTO1xuIFx0XHRyZXR1cm4gTlVMTDtcbitcdH1cbiBcbiBcdHNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCB1YSk7XG4gXHRpZiAoIXNjKVxuIFx0XHRzYyA9IHRpcGNfc2VydmljZV9jcmVhdGUobmV0LCB1YSk7XG4tXHRpZiAoc2MgXHUwMDI2XHUwMDI2IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwKSlcbi1cdFx0cmV0dXJuIHA7XG4rXG4rXHRpZiAoc2MpIHtcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0XHRpZiAodGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHAsIGVycikpIHtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbitcdFx0XHRyZXR1cm4gcDtcbitcdFx0fVxuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbitcdH0gZWxzZSBpZiAoZXJyKSB7XG4rXHRcdCplcnIgPSAtRU5PQlVGUztcbitcdH1cbitcbiBcdGtmcmVlKHApO1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTc2MCwyNiArNzc2LDU1IEBAIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCxcbiAvKiB0aXBjX25hbWV0YmxfcHVibGlzaCAtIGFkZCBzZXJ2aWNlIGJpbmRpbmcgdG8gbmFtZSB0YWJsZVxuICAqL1xuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4rXHRcdFx0XHRcdCB1MzIga2V5LCBpbnQgKmVycilcbiB7XG4gXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbitcdHUzMiBtYXhfdXNlcl9wdWIgPSBUSVBDX01BWF9QVUJMIC0gMTtcbiBcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuK1x0Ym9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7XG4rXHRpbnQgZXJyb3IgPSAwO1xuIFx0dTMyIHJjX2Rlc3RzO1xuIFxuK1x0aWYgKHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFIHx8IHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8XG4rXHQgICAgdWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpXG4rXHRcdHByb3RvY29sX3R5cGUgPSB0cnVlO1xuK1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4rXHRpZiAocHJvdG9jb2xfdHlwZSlcbitcdFx0Z290byBpbnNlcnQ7XG4gXG4tXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IFRJUENfTUFYX1BVQkwpIHtcbi1cdFx0cHJfd2FybihcIkJpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcblwiLCBUSVBDX01BWF9QVUJMKTtcbitcdC8qIFJlc2VydmUgb25lIGVudHJ5IGZvciBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZSBiZWNhdXNlIGl0IGhhcyBjbHVzdGVyXG4rXHQgKiBzY29wZSBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgaW4gYnVsay4gU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VyJ3NcbitcdCAqIHB1YmxpY2F0aW9ucyBpcyAoVElQQ19NQVhfUFVCTCAtIDEpLlxuK1x0ICovXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IG1heF91c2VyX3B1Yikge1xuK1x0XHRwcl93YXJuKFwiQmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxuXCIsIG1heF91c2VyX3B1Yik7XG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcbi1cdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4raW5zZXJ0OlxuK1x0cCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIHVhLCBzaywga2V5LCBcdTAwMjZlcnJvcik7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XG4rXHRcdC8qIE5vdCBjb3VudCBub2RlIHN0YXRlLCBsaW5rIHN0YXRlIGFuZCB0b3BvbG9neSBzZXJ2ZXIgdHlwZXNcbitcdFx0ICogc28gdGhhdCBtYXhpbXVtIG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQgZG9lcyBub3QgcHJldmVudFxuK1x0XHQgKiBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIGZyb20gYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZVxuK1x0XHQgKiB0YWJsZS5cbitcdFx0ICovXG4rXHRcdGlmICghcHJvdG9jb2xfdHlwZSlcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XG4gXHRcdHNrYiA9IHRpcGNfbmFtZWRfcHVibGlzaChuZXQsIHApO1xuK1x0XHQvKiBMb2NhbC1zY29wZSBwdWJsaWNhdGlvbiBpcyBub3QgcHVibGlzaGVkIChza2IgaXMgTlVMTCksIG9ubHlcbitcdFx0ICogY2x1c3Rlci1jb3BlIG9uZSBpcy5cbitcdFx0ICovXG4rXHRcdGlmICghc2tiIFx1MDAyNlx1MDAyNiBwLVx1MDAzZXNjb3BlID09IFRJUENfQ0xVU1RFUl9TQ09QRSBcdTAwMjZcdTAwMjYgZXJyKVxuK1x0XHRcdCplcnIgPSAtRU5PQlVGUztcbitcdH0gZWxzZSBpZiAoKGVycm9yID09IC1FTk9CVUZTKSBcdTAwMjZcdTAwMjYgZXJyKSB7XG4rXHRcdCplcnIgPSAtRU5PQlVGUztcbiBcdH1cbitcbiBcdHJjX2Rlc3RzID0gbnQtXHUwMDNlcmNfZGVzdHM7XG4gZXhpdDpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG5AQCAtNzg3LDcgKzgzMiwxMDIgQEAgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdGlmIChza2IpXG4gXHRcdHRpcGNfbm9kZV9icm9hZGNhc3QobmV0LCBza2IsIHJjX2Rlc3RzKTtcbiBcdHJldHVybiBwO1xuK31cbitcbisvKipcbisgKiB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiAtIGluc2VydCBwdWJsaWNhdGlvbiBvZiBub2RlJ3Mgc2VsZiBhZGRyZXNzXG4rICogQG5ldDogbmV0d29yayBuYW1lc3BhY2VcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4rICovXG4raW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbitcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuK1x0c3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2s7XG4rXHRzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3I7XG4rXHRzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYztcbitcdGJvb2wgc2NfY3JlYXRlZCA9IGZhbHNlO1xuK1x0c3RydWN0IHB1YmxpY2F0aW9uICpwO1xuK1x0c3RydWN0IHRpcGNfdWFkZHIgdWE7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdHNrLnJlZiA9IDA7XG4rXHRzay5ub2RlID0gdG4tXHUwMDNlbm9kZV9hZGRyO1xuK1x0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG4rXHRcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXHUwMDNlbm9kZV9hZGRyLCB0bi1cdTAwM2Vub2RlX2FkZHIpO1xuK1x0c2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsIFx1MDAyNnVhKTtcbitcdGlmICghc2MpIHtcbitcdFx0c2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgXHUwMDI2dWEpO1xuK1x0XHRpZiAoIXNjKVxuK1x0XHRcdHJldHVybiAtRU5PQlVGUztcbitcdFx0c2NfY3JlYXRlZCA9IHRydWU7XG4rXHR9XG4gXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4rXHQvKiBDaGVjayB3aGV0aGVyIGEgcmFuZ2UgZXhpc3RzIGluIHRoZSBuYW1lIHRhYmxlIHdpdGhcbitcdCAqIGxvd2VyID09IHRuLVx1MDAzZW5vZGVfYWRkciwgdXBwZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyLCBhbmQgdHlwZVxuK1x0ICogVElQQ19OT0RFX1NUQVRFICgwKS4gSWYgJ3NyJyBpcyBub3QgTlVMTCwgdGhpcyByYW5nZSBleGlzdHNcbitcdCAqIGR1ZSB0byBhIHByZXZpb3VzIGNhbGwgdG8gdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoKVxuK1x0ICogb3IgdGlwY19uZXRfZmluYWxpemUoKS5cbitcdCAqXG4rXHQgKiBOb3RlIHRoYXQgdXNlciBhcHBsaWNhdGlvbnMgY2FuIG9ubHkgaW5zZXJ0IHR5cGVzIGdyZWF0ZXIgdGhhblxuK1x0ICogb3IgZXF1YWwgdG8gNjQgKFRJUENfUkVTRVJWRURfVFlQRVMpLCBhcyBlbmZvcmNlZCBieSB0aXBjX2JpbmQoKS5cbitcdCAqIFJlbW90ZSBub2RlcyBhbHNvIG9ubHkgc2VuZCBwcm90b2NvbCBwdWJsaWNhdGlvbnMgd2l0aCB0eXBlXG4rXHQgKiBUSVBDX05PREVfU1RBVEUgKDApLCB3aXRoIGJvdGggbG93ZXIgYW5kIHVwcGVyIHNldCB0byB0aGUgcmVtb3RlXG4rXHQgKiBub2RlJ3MgYWRkcmVzcy4gVGhlc2UgcmFuZ2VzIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGlzIG5vZGUnc1xuK1x0ICogcmFuZ2UgYmVjYXVzZSBhIHJlbW90ZSBub2RlJ3MgYWRkcmVzcyBtdXN0IGRpZmZlciBmcm9tIHRoaXNcbitcdCAqIG5vZGUncyBhZGRyZXNzICh0bi1cdTAwM2Vub2RlX2FkZHIpLlxuK1x0ICpcbitcdCAqIFRoZXJlZm9yZSwgdGlwY191cGRhdGVfbmFtZXRibCgpIGNhbm5vdCBidWlsZCBhbmQgaW5zZXJ0IGEgcmVtb3RlXG4rXHQgKiBwdWJsaWNhdGlvbiB3aXRoIHRoZSBzYW1lIHR5cGUgKDApIGFuZCByYW5nZVxuK1x0ICogKGxvd2VyID09IHRuLVx1MDAzZW5vZGVfYWRkciwgdXBwZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyKSBhcyB0aGlzIG5vZGUnc1xuK1x0ICogc2VsZi1hZGRyZXNzIHB1YmxpY2F0aW9uIGluIHRoZSBuYW1lIHRhYmxlLlxuK1x0ICpcbitcdCAqIEJlY2F1c2UgdGhlIGNvbWJpbmF0aW9uIG9mIHR5cGUgMCBhbmRcbitcdCAqIChsb3dlciA9PSB0bi1cdTAwM2Vub2RlX2FkZHIsIHVwcGVyID09IHRuLVx1MDAzZW5vZGVfYWRkcikgaXMgdW5pcXVlIGluIHRoZVxuK1x0ICogbmFtZSB0YWJsZSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjaGVjayBzay5ub2RlLCBzay5yZWYsIGtleSwgb3JcbitcdCAqIGNsdXN0ZXJfc2NvcGUgbWVtYmVyc2hpcC5cbitcdCAqL1xuK1x0c3IgPSB0aXBjX3NlcnZpY2VfZmluZF9yYW5nZShzYywgXHUwMDI2dWEpO1xuK1x0LyogMS4gdGlwY19uZXRfZmluYWxpemVfd29yaygpIGlzIG5vdCBzY2hlZHVsZWQgYmVjYXVzZSBvZiBuYW1lc3BhY2VcbitcdCAqICAgIHRlYXJkb3duLlxuK1x0ICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS1cdTAwM2UgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBoYXMgZmFpbGVkXG4rXHQgKiAgICB0byBpbnNlcnQgbm9kZSBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaW50byBudC1cdTAwM2VjbHVzdGVyX3Njb3BlXG4rXHQgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbitcdCAqIDMuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXHUwMDNlIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdFxuK1x0ICogICAgZXhlY3V0ZWQgeWV0LlxuK1x0ICovXG4rXHRpZiAoIXNyKSB7XG4rXHRcdHAgPSB0aXBjX3B1YmxfY3JlYXRlKFx1MDAyNnVhLCBcdTAwMjZzaywgdG4tXHUwMDNlbm9kZV9hZGRyKTtcbitcdFx0aWYgKCFwKVxuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRcdGlmICghdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHAsIFx1MDAyNmVycikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoZXJyID09IC1FTk9CVUZTKSkge1xuK1x0XHRcdGtmcmVlKHApO1xuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXHRcdH1cbitcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfbm9kZSwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSk7XG4rXHRcdGdvdG8gZXhpdDtcbitlcnJvcjpcbitcdFx0aWYgKHNjX2NyZWF0ZWQpIHtcbitcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2c2MtXHUwMDNlc2VydmljZV9saXN0KTtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbitcdFx0XHRrZnJlZV9yY3Uoc2MsIHJjdSk7XG4rXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuK1x0XHR9XG4rXG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVOT0JVRlM7XG4rXHR9XG4rZXhpdDpcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuQEAgLTgxMCw3ICs5NTAsMTAgQEAgdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXG4gXHRwID0gdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpO1xuIFx0aWYgKHApIHtcbi1cdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudC0tO1xuK1x0XHRpZiAocC1cdTAwM2Vzci50eXBlICE9IFRJUENfTk9ERV9TVEFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX0xJTktfU1RBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19UT1BfU1JWKVxuK1x0XHRcdG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQtLTtcbiBcdFx0c2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlYmluZGluZ19zb2NrKTtcbiBcdFx0a2ZyZWVfcmN1KHAsIHJjdSk7XG5AQCAtODk5LDcgKzEwNDIsNiBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bnQtXHUwMDNlbm9kZV9zY29wZSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlKTtcbi1cdHJ3bG9ja19pbml0KFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHR0bi1cdTAwM2VuYW1ldGJsID0gbnQ7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFx0cmV0dXJuIDA7XG5AQCAtOTEyLDYgKzEwNTQsNyBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuICAqL1xuIHN0YXRpYyB2b2lkIHRpcGNfc2VydmljZV9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYylcbiB7XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzciwgKnRtcHI7XG4gXHRzdHJ1Y3QgcHVibGljYXRpb24gKnAsICp0bXA7XG4gXG5AQCAtOTE5LDYgKzEwNjIsMTUgQEAgc3RhdGljIHZvaWQgdGlwY19zZXJ2aWNlX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjKVxuIFx0cmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFjaF9lbnRyeV9zYWZlKHNyLCB0bXByLCBcdTAwMjZzYy1cdTAwM2VyYW5nZXMsIHRyZWVfbm9kZSkge1xuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdG1wLCBcdTAwMjZzci1cdTAwM2VhbGxfcHVibCwgYWxsX3B1YmwpIHtcbiBcdFx0XHR0aXBjX3NlcnZpY2VfcmVtb3ZlX3B1Ymwoc3IsIFx1MDAyNnAtXHUwMDNlc2ssIHAtXHUwMDNla2V5KTtcbitcdFx0XHQvKiB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoKSBkb2VzIG5vdCBkZWxldGVcbitcdFx0XHQgKiAncC1cdTAwM2ViaW5kaW5nX25vZGUnIHdpdGggdHlwZSBUSVBDX05PREVfU1RBVEUgYW5kXG4rXHRcdFx0ICogcmFuZ2UgW3RuLVx1MDAzZW5vZGVfYWRkciwgdG4tXHUwMDNlbm9kZV9hZGRyXSBmcm9tXG4rXHRcdFx0ICogJ3RuLVx1MDAzZWNsdXN0ZXJfc2NvcGUnLiBTbywgZGVsZXRlIGl0IGhlcmUuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHAtXHUwMDNlc3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHAtXHUwMDNlc3IubG93ZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBwLVx1MDAzZXNyLnVwcGVyID09IHRuLVx1MDAzZW5vZGVfYWRkcilcbitcdFx0XHRcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbiBcdFx0XHRrZnJlZV9yY3UocCwgcmN1KTtcbiBcdFx0fVxuIFx0XHRyYl9lcmFzZV9hdWdtZW50ZWQoXHUwMDI2c3ItXHUwMDNldHJlZV9ub2RlLCBcdTAwMjZzYy1cdTAwM2VyYW5nZXMsIFx1MDAyNnNyX2NhbGxiYWNrcyk7XG5AQCAtOTQ5LDYgKzExMDEsOCBAQCB2b2lkIHRpcGNfbmFtZXRibF9zdG9wKHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0XHR0aXBjX3NlcnZpY2VfZGVsZXRlKG5ldCwgc2VydmljZSk7XG4gXHRcdH1cbiBcdH1cbitcdHRuLVx1MDAzZW50X3N0b3AgPSB0cnVlO1xuK1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFxuIFx0LyogVE9ETzogY2xlYXIgdG4tXHUwMDNlbmFtZXRibCwgaW1wbGVtZW50IHByb3BlciBSQ1UgcnVsZXMgPyAqL1xuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuaCBiL25ldC90aXBjL25hbWVfdGFibGUuaFxuaW5kZXggN2ZmNmVlZWJhYWU2NC4uNDM5MGU3OWE0NjYwZSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuaFxuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oXG5AQCAtOTcsOCArOTcsNyBAQCBzdHJ1Y3QgcHVibGljYXRpb24ge1xuICAqIEBjbHVzdGVyX3Njb3BlOiBhbGwgbG9jYWwgcHVibGljYXRpb25zIHdpdGggY2x1c3RlciBzY29wZVxuICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgdG8gc2VuZCBidWxrIHVwZGF0ZXMgdG8gbmV3IG5vZGVzXG4gICogICAgICAgICAgICAgICAtIHVzZWQgYnkgbmFtZV9kaXN0ciBkdXJpbmcgcmUtaW5pdCBvZiBuYW1lIHRhYmxlXG4tICogQGNsdXN0ZXJfc2NvcGVfbG9jazogbG9jayBmb3IgYWNjZXNzaW5nIEBjbHVzdGVyX3Njb3BlXG4tICogQGxvY2FsX3B1YmxfY291bnQ6IG51bWJlciBvZiBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZVxuKyAqIEBsb2NhbF9wdWJsX2NvdW50OiB0aGUgbnVtYmVyIG9mIHVzZXIncyBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZVxuICAqIEByY19kZXN0czogZGVzdGluYXRpb24gbm9kZSBjb3VudGVyXG4gICogQHNuZF9ueHQ6IG5leHQgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHVzZWRcbiAgKi9cbkBAIC0xMDcsNyArMTA2LDYgQEAgc3RydWN0IG5hbWVfdGFibGUge1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgc2VydmljZXNbVElQQ19OQU1FVEJMX1NJWkVdO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBub2RlX3Njb3BlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBjbHVzdGVyX3Njb3BlO1xuLVx0cndsb2NrX3QgY2x1c3Rlcl9zY29wZV9sb2NrO1xuIFx0dTMyIGxvY2FsX3B1YmxfY291bnQ7XG4gXHR1MzIgcmNfZGVzdHM7XG4gXHR1MzIgc25kX254dDtcbkBAIC0xMjYsMTMgKzEyNCwxNSBAQCBib29sIHRpcGNfbmFtZXRibF9sb29rdXBfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxuIFx0XHRcdCAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7XG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbi1cdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XG4rXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4rXHRcdFx0XHRcdCB1MzIga2V5LCBpbnQgKmVycik7XG4gdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRcdFx0ICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbi1cdFx0XHRcdFx0ICAgICB1MzIga2V5KTtcbitcdFx0XHRcdFx0ICAgICB1MzIga2V5LCBpbnQgKmVycik7XG4raW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldCk7XG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcmVtb3ZlX3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmV0LmMgYi9uZXQvdGlwYy9uZXQuY1xuaW5kZXggN2U2NWQwYjBjNGE4ZC4uN2EyYzFlNjdhY2EzZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25ldC5jXG4rKysgYi9uZXQvdGlwYy9uZXQuY1xuQEAgLTExMCwxMSArMTEwLDE0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpO1xuIFxuIGludCB0aXBjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdTggKm5vZGVfaWQsIHUzMiBhZGRyKVxuIHtcbitcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuK1xuIFx0aWYgKHRpcGNfb3duX2lkKG5ldCkpIHtcbiBcdFx0cHJfaW5mbyhcIkNhbm5vdCBjb25maWd1cmUgbm9kZSBpZGVudGl0eSB0d2ljZVxcblwiKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFx0cHJfaW5mbyhcIlN0YXJ0ZWQgaW4gbmV0d29yayBtb2RlXFxuXCIpO1xuK1x0YXRvbWljX3NldChcdTAwMjZ0bi1cdTAwM2Vub2RlX2FkZHJfc2V0LCAwKTtcbiBcbiBcdGlmIChub2RlX2lkKVxuIFx0XHR0aXBjX3NldF9ub2RlX2lkKG5ldCwgbm9kZV9pZCk7XG5AQCAtMTI1LDggKzEyOCw4IEBAIGludCB0aXBjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdTggKm5vZGVfaWQsIHUzMiBhZGRyKVxuIFxuIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4ge1xuLVx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4gXHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzayA9IHswLCBhZGRyfTtcbitcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHRpcGNfdWFkZHIgdWE7XG4gXG4gXHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcbkBAIC0xMzgsNyArMTQxLDExIEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4gXHR0aXBjX25hbWVkX3JlaW5pdChuZXQpO1xuIFx0dGlwY19za19yZWluaXQobmV0KTtcbiBcdHRpcGNfbW9uX3JlaW5pdF9zZWxmKG5ldCk7XG4tXHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgYWRkcik7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQsIDEpO1xuK1x0LyogUmVkaXN0cmlidXRlIGJ1bGsgb2YgcHVibGljYXRpb25zIHZpYSBub2RlLXVwIGV2ZW50IG9yIG5vZGUncyB0aW1lclxuK1x0ICogaWYgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBmYWlscy5cbitcdCAqL1xuK1x0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIGFkZHIsIE5VTEwpO1xuIH1cbiBcbiB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25vZGUuYyBiL25ldC90aXBjL25vZGUuY1xuaW5kZXggNjgzYTEzNmU1M2VmYy4uZjFlZWU2NzRhNjc4ZSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25vZGUuY1xuKysrIGIvbmV0L3RpcGMvbm9kZS5jXG5AQCAtMTExLDYgKzExMSw3IEBAIHN0cnVjdCB0aXBjX2JjbGlua19lbnRyeSB7XG4gICogQHBlZXJfbmV0OiBwZWVyJ3MgbmV0IG5hbWVzcGFjZVxuICAqIEBwZWVyX2hhc2hfbWl4OiBoYXNoIGZvciB0aGlzIHBlZXIgKEZJWE1FKVxuICAqIEBjcnlwdG9fcng6IFJYIGNyeXB0byBoYW5kbGVyXG4rICogQGRpc3RfYnVsazogZmxhZyB0byByZWRpc3RyaWJ1dGUgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnNcbiAgKi9cbiBzdHJ1Y3QgdGlwY19ub2RlIHtcbiBcdHUzMiBhZGRyO1xuQEAgLTE0NSw2ICsxNDYsNyBAQCBzdHJ1Y3QgdGlwY19ub2RlIHtcbiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPXG4gXHRzdHJ1Y3QgdGlwY19jcnlwdG8gKmNyeXB0b19yeDtcbiAjZW5kaWZcbitcdGF0b21pY190IGRpc3RfYnVsaztcbiB9O1xuIFxuIC8qIE5vZGUgRlNNIHN0YXRlcyBhbmQgZXZlbnRzOlxuQEAgLTM0NSw2ICszNDcsMTcgQEAgc3RhdGljIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4gXHRyZXR1cm4gbm9kZTtcbiB9XG4gXG4rdm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuK3tcbitcdHN0cnVjdCB0aXBjX25vZGUgKm5vZGU7XG4rXG4rXHRub2RlID0gdGlwY19ub2RlX2ZpbmQobmV0LCBhZGRyKTtcbitcdGlmIChub2RlKSB7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2bm9kZS1cdTAwM2VkaXN0X2J1bGssIDEpO1xuK1x0XHR0aXBjX25vZGVfcHV0KG5vZGUpO1xuK1x0fVxuK31cbitcbiAvKiB0aXBjX25vZGVfZmluZF9ieV9pZCAtIGxvY2F0ZSBzcGVjaWZpZWQgbm9kZSBvYmplY3QgYnkgaXRzIDEyOC1iaXQgaWRcbiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gYSBkaXNjb3ZlcnkgcmVxdWVzdCBmYWlsZWRcbiAgKiB0byBmaW5kIHRoZSBub2RlIGJ5IGl0cyAzMi1iaXQgaWQsIGFuZCBpcyBub3QgdGltZSBjcml0aWNhbFxuQEAgLTM5Myw2ICs0MDYsMTQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9ja19mYXN0KHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bi1cdTAwM2Vsb2NrKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGlwY19ub2RlX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbilcbit7XG4rXHRpbnQgYmVhcmVyX2lkO1xuK1xuK1x0Zm9yIChiZWFyZXJfaWQgPSAwOyBiZWFyZXJfaWQgXHUwMDNjIE1BWF9CRUFSRVJTOyBiZWFyZXJfaWQrKylcbitcdFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxuIFx0X19yZWxlYXNlcyhuLVx1MDAzZWxvY2spXG4ge1xuQEAgLTQwMiw2ICs0MjMsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICpwdWJsX2xpc3Q7XG4gXHRzdHJ1Y3QgdGlwY191YWRkciB1YTtcbiBcdHUzMiBiZWFyZXJfaWQsIG5vZGU7XG4rXHRpbnQgcmMgPSAwLCBlcnIgPSAwO1xuIFxuIFx0aWYgKGxpa2VseSghZmxhZ3MpKSB7XG4gXHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZuLVx1MDAzZWxvY2spO1xuQEAgLTQyNSwxNiArNDQ3LDI0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdFx0dGlwY19wdWJsX25vdGlmeShuZXQsIHB1YmxfbGlzdCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9OT0RFX1VQKVxuLVx0XHR0aXBjX25hbWVkX25vZGVfdXAobmV0LCBub2RlLCBuLVx1MDAzZWNhcGFiaWxpdGllcyk7XG4rXHRcdHJjID0gdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9MSU5LX1VQKSB7XG4gXHRcdHRpcGNfbW9uX3BlZXJfdXAobmV0LCBub2RlLCBiZWFyZXJfaWQpO1xuLVx0XHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmKTtcbitcdFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIHNrLnJlZiwgXHUwMDI2ZXJyKTtcbiBcdH1cbiBcdGlmIChmbGFncyBcdTAwMjYgVElQQ19OT1RJRllfTElOS19ET1dOKSB7XG4gXHRcdHRpcGNfbW9uX3BlZXJfZG93bihuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XG4gXHRcdHRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmKTtcbiBcdH1cbitcbitcdC8qIE1lbW9yeSBhbGxvY2F0aW9uIGhhcyBmYWlsZWQuIEJyaW5nIHRoZSBub2RlIGRvd24gdG8gc3RhcnQgb3ZlciBidWxrXG4rXHQgKiBkaXN0cmlidXRpb24gd2hlbiB0aGUgZmlyc3QgbGluayBpcyB1cCBhZ2Fpbi5cbitcdCAqL1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHR0aXBjX25vZGVfZG93bihuKTtcbitcdGVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUylcbitcdFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGlwY19ub2RlX2Fzc2lnbl9wZWVyX25ldChzdHJ1Y3QgdGlwY19ub2RlICpuLCB1MzIgaGFzaF9taXhlcylcbkBAIC01NjQsNiArNTk0LDcgQEAgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyLCB1OCAqcGVlcl9pZCxcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZXB1YmxfbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZWNvbm5fc2tzKTtcbitcdGF0b21pY19zZXQoXHUwMDI2bi1cdTAwM2VkaXN0X2J1bGssIDApO1xuIFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZuLVx1MDAzZWJjX2VudHJ5Lm5hbWVkcSk7XG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm4tXHUwMDNlYmNfZW50cnkuaW5wdXRxMSk7XG4gXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bi1cdTAwM2ViY19lbnRyeS5hcnJ2cSk7XG5AQCAtODAzLDcgKzgzNCw4IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0c3RydWN0IHRpcGNfbm9kZSAqbiA9IHRpbWVyX2NvbnRhaW5lcl9vZihuLCB0LCB0aW1lcik7XG4gXHRzdHJ1Y3QgdGlwY19saW5rX2VudHJ5ICpsZTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgeG1pdHE7XG4tXHRpbnQgcmVtYWlucyA9IG4tXHUwMDNlbGlua19jbnQ7XG4rXHRpbnQgcmVtYWlucyA9IDA7XG4rXHRpbnQgZGlzdF9yYyA9IDA7XG4gXHRpbnQgYmVhcmVyX2lkO1xuIFx0aW50IHJjID0gMDtcbiBcbkBAIC04MTQsNiArODQ2LDkgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbitcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZuLVx1MDAzZWRpc3RfYnVsaywgMCkpXG4rXHRcdGRpc3RfcmMgPSB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUobi1cdTAwM2VuZXQsIG4tXHUwMDNlYWRkcik7XG4rXG4gI2lmZGVmIENPTkZJR19USVBDX0NSWVBUT1xuIFx0LyogVGFrZSBhbnkgY3J5cHRvIGtleSByZWxhdGVkIGFjdGlvbnMgZmlyc3QgKi9cbiBcdHRpcGNfY3J5cHRvX3RpbWVvdXQobi1cdTAwM2VjcnlwdG9fcngpO1xuQEAgLTgyNSw2ICs4NjAsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdCAqL1xuIFx0dGlwY19ub2RlX3JlYWRfbG9jayhuKTtcbiBcdG4tXHUwMDNla2VlcGFsaXZlX2ludHYgPSAxMDAwMDtcbitcdHJlbWFpbnMgPSBuLVx1MDAzZWxpbmtfY250O1xuIFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xuIFx0Zm9yIChiZWFyZXJfaWQgPSAwOyByZW1haW5zIFx1MDAyNlx1MDAyNiAoYmVhcmVyX2lkIFx1MDAzYyBNQVhfQkVBUkVSUyk7IGJlYXJlcl9pZCsrKSB7XG4gXHRcdHRpcGNfbm9kZV9yZWFkX2xvY2sobik7XG5AQCAtODM1LDExICs4NzEsMTMgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdFx0dGlwY19ub2RlX2NhbGN1bGF0ZV90aW1lcihuLCBsZS1cdTAwM2VsaW5rKTtcbiBcdFx0XHRyYyA9IHRpcGNfbGlua190aW1lb3V0KGxlLVx1MDAzZWxpbmssIFx1MDAyNnhtaXRxKTtcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsZS1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRyZW1haW5zLS07XG4rXHRcdFx0aWYgKGRpc3RfcmMgXHUwMDNjIDApXG4rXHRcdFx0XHRyZW1haW5zLS07XG4gXHRcdH1cbiBcdFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xuIFx0XHR0aXBjX2JlYXJlcl94bWl0KG4tXHUwMDNlbmV0LCBiZWFyZXJfaWQsIFx1MDAyNnhtaXRxLCBcdTAwMjZsZS1cdTAwM2VtYWRkciwgbik7XG4tXHRcdGlmIChyYyBcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKVxuK1x0XHQvKiBGb3JjZSB0aGUgbm9kZSBkb3duIGluIGNhc2UgdGhlIHJlZGlzdHJpYnV0aW9uIGZhaWxlZCAqL1xuK1x0XHRpZiAoKHJjIFx1MDAyNiBUSVBDX0xJTktfRE9XTl9FVlQpIHx8IGRpc3RfcmMgXHUwMDNjIDApXG4gXHRcdFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcbiBcdH1cbiBcdG1vZF90aW1lcihcdTAwMjZuLVx1MDAzZXRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhuLVx1MDAzZWtlZXBhbGl2ZV9pbnR2KSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5oIGIvbmV0L3RpcGMvbm9kZS5oXG5pbmRleCAxNTRhNWJiYjBkMjlkLi4wZjc3N2NmZTdjMDFlIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbm9kZS5oXG4rKysgYi9uZXQvdGlwYy9ub2RlLmhcbkBAIC0xMjgsNCArMTI4LDUgQEAgaW50IHRpcGNfbmxfbm9kZV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGludCB0aXBjX25sX25vZGVfZmx1c2hfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuICNlbmRpZlxuIHZvaWQgdGlwY19ub2RlX3ByZV9jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpleGl0X25ldCk7XG4rdm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jXG5pbmRleCBkNWQ3MGViMjMwYjU2Li42YjgzYmRmYzQzOWMzIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvc29ja2V0LmNcbisrKyBiL25ldC90aXBjL3NvY2tldC5jXG5AQCAtMjkxOSw3ICsyOTE5LDcgQEAgc3RhdGljIGludCB0aXBjX3NrX3B1Ymxpc2goc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY191YWRkciAqdWEpXG4gXHRcdHJldHVybiAtRUFERFJJTlVTRTtcbiBcdHNrYWRkci5yZWYgPSB0c2stXHUwMDNlcG9ydGlkO1xuIFx0c2thZGRyLm5vZGUgPSB0aXBjX293bl9hZGRyKG5ldCk7XG4tXHRwID0gdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCB1YSwgXHUwMDI2c2thZGRyLCBrZXkpO1xuK1x0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFx1MDAyNnNrYWRkciwga2V5LCBOVUxMKTtcbiBcdGlmICh1bmxpa2VseSghcCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDU6MjEuMzIzNzEzNTIzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1MzMzNDI2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUSVBDIE5hbWUgVGFibGUgRGlzdHJpYnV0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIFRJUEMgc3Vic3lzdGVtIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIG5hbWUgdGFibGUgcHVibGljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBtZWNoYW5pc21zLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZm9jdXNlZCBvbiB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcyBhbmQgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCByaXNrcy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3QgaXMgYXJvdW5kIGltcHJvdmluZyBlcnJvciBoYW5kbGluZywgcGFydGljdWxhcmx5IHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMgZHVyaW5nIHRoZSBkaXN0cmlidXRpb24gcHJvY2VzcyDigJMgZ29vZCwgdGhhdCdzIGRlZmluaXRlbHkgYSBwb2ludCB0byBhZGRyZXNzLCByYXRoZXIgdGhhbiBzaWxlbnRseSBmYWlsaW5nIG9yIGNyYXNoaW5nLiBUaGV5J3JlIGV4cGxpY2l0bHkgYWRkaW5nIGhhbmRsaW5nIGZvciBgLUVOT0JVRlNgIHdoaWNoIGlzIHRoZSByaWdodCB3YXkgdG8gZG8gaXQuXG5cbkZyb20gdGhlIGRlc2NyaXB0aW9uLCB0aGV54oCZcmUgdG91Y2hpbmcgcXVpdGUgYSBmZXcgZnVuY3Rpb25zOiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmxgLCBldGMuIFRoaXMgbWVhbnMgaXQncyBwcmV0dHkgaW52b2x2ZWQuIEFuZCwgaXQgbG9va3MgbGlrZSB0aGV5J3JlIGFsc28gaW50cm9kdWNpbmcgbmV3IGZsYWdzIHdpdGhpbiBgc3RydWN0IHRpcGNfbmV0YCAoYG50X3N0b3BgLCBgbnRfc2VsZl9ub2RlX2V4aXN0YCwgYG5vZGVfYWRkcl9zZXRgKSBhbmQgYWRkaW5nIGEgbmV3IGBkaXN0X2J1bGtgIGZpZWxkIHRvIGBzdHJ1Y3QgdGlwY19ub2RlYC4gVGhhdCdzIGltcG9ydGFudCB0byBub3RlLCBzdGF0ZSB0cmFja2luZyBhbmQgbmV3IGNvbnRyb2wgZmxvdyBjYW4gbGVhZCB0byB1bmludGVuZGVkIHNpZGUgZWZmZWN0cy5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgbWVtb3J5IHNhZmV0eS4gQXJlIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhlIGRlc2NyaXB0aW9uIHN1Z2dlc3RzIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgY29udHJvbCBmbG93IGFuZCBlcnJvciBoYW5kbGluZy4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlICpkaXJlY3RseSogYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIHdoaWNoIGlzIGEgYmlnIHJlbGllZi4gTm8gY29tcGxleCBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgd2hlcmUgdW5pdGl0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNvcmUgaWRlYSBzZWVtcyB0byBiZSBncmFjZWZ1bGx5IGhhbmRsaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGluIHRoZSBUSVBDIG5hbWUgZGlzdHJpYnV0aW9uIHByb2Nlc3MuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCB0aGluZy5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gYSBzcGVjaWZpYyBjb2RlIHNuaXBwZXQsIHNwZWNpZmljYWxseSBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgOlxuXG5gYGBjXG4raW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldClcbit7XG4uLi5cbitcdHNrLnJlZiA9IDA7XG4rXHRzay5ub2RlID0gdG4tXHUwMDNlbm9kZV9hZGRyO1xuK1x0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG4rXHRcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXHUwMDNlbm9kZV9hZGRyLCB0bi1cdTAwM2Vub2RlX2FkZHIpO1xuLi4uXG5gYGBcblxuUmlnaHQsIGBza2AgaGVyZSBpcyBhIGBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkcmAsIGFuZCBpdCAqYXBwZWFycyogdG8gYmUgZnVsbHkgaW5pdGlhbGl6ZWQ6IGBzay5yZWZgIGlzIHNldCB0byBgMGAsIGFuZCBgc2subm9kZWAgaXMgcG9wdWxhdGVkIGZyb20gYHRuLVx1MDAzZW5vZGVfYWRkcmAuIFRoYXTigJlzIGdvb2QuIGB1YWAgaXMgYSBgc3RydWN0IHRpcGNfdWFkZHJgLiBOb3csIGB0aXBjX3VhZGRyYCBpcyBiZWluZyBjYWxsZWQsIHdoaWNoIGluaXRpYWxpemVzIGl0LiBJdCdzIGEgZnVuY3Rpb24gb3IgYSBtYWNyby4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdGlwY191YWRkcmAsIGluIGBuZXQvdGlwYy9jb3JlLmhgIG9yIHNvbWV3aGVyZSBzaW1pbGFyIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGF0IGl0IGluaXRpYWxpemVzIGFsbCB0aGUgZmllbGRzIG9mIHRoZSBzdHJ1Y3QgdG8gdGhlIGNvcnJlY3QgdmFsdWVzLiBJdCdzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGF0IHRoaXMgcG9pbnQuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjczOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA1OjMwLjg1NzA1ODZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjM3MTQ3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY191YWRkclxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2FkZHIuaD01MD1zdHJ1Y3QgdGlwY191YWRkciB7XFxuLS1cXG5uZXQvdGlwYy9hZGRyLmgtNjMtXFxubmV0L3RpcGMvYWRkci5oOjY0OnN0YXRpYyBpbmxpbmUgdm9pZCB0aXBjX3VhZGRyKHN0cnVjdCB0aXBjX3VhZGRyICp1YSwgdTMyIGF0eXBlLCB1MzIgc2NvcGUsXFxubmV0L3RpcGMvYWRkci5oLTY1LVxcdFxcdFxcdCAgICAgIHUzMiB0eXBlLCB1MzIgbG93ZXIsIHUzMiB1cHBlcilcXG4tLVxcbm5ldC90aXBjL21zZy5jPTcxMz1ib29sIHRpcGNfbXNnX2xvb2t1cF9kZXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICplcnIpXFxuLS1cXG5uZXQvdGlwYy9tc2cuYy03MzMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm5ldC90aXBjL21zZy5jOjczNDpcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBzY29wZSxcXG5uZXQvdGlwYy9tc2cuYy03MzUtXFx0XFx0ICAgbXNnX25hbWV0eXBlKG1zZyksIGluc3QsIGluc3QpO1xcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jPTMzMj1zdGF0aWMgdm9pZCB0aXBjX3B1YmxfcHVyZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIHUzMiBhZGRyKVxcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTMzNy1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MzM4OlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIHAtXFx1MDAzZXNjb3BlLCBwLVxcdTAwM2Vzci50eXBlLFxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zMzktXFx0XFx0ICAgcC1cXHUwMDNlc3IubG93ZXIsIHAtXFx1MDAzZXNyLnVwcGVyKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYz0zNzY9c3RhdGljIGJvb2wgdGlwY191cGRhdGVfbmFtZXRibChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkaXN0cl9pdGVtICppLFxcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTM5Mi1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MzkzOlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMzk0LVxcdFxcdCAgIG50b2hsKGktXFx1MDAzZXR5cGUpLCBsb3dlciwgdXBwZXIpO1xcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTg0Nj1pbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg1OS1cXHRzay5ub2RlID0gdG4tXFx1MDAzZW5vZGVfYWRkcjtcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6ODYwOlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODYxLVxcdFxcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXFx1MDAzZW5vZGVfYWRkciwgdG4tXFx1MDAzZW5vZGVfYWRkcik7XFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM9OTcyPWJvb2wgdGlwY19uYW1ldGJsX3N1YnNjcmliZShzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1YilcXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuYy05NzktXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jOjk4MDpcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX05PREVfU0NPUEUsIHR5cGUsXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTk4MS1cXHRcXHQgICBzdWItXFx1MDAzZXMuc2VxLmxvd2VyLCBzdWItXFx1MDAzZXMuc2VxLnVwcGVyKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuYz0xMDAzPXZvaWQgdGlwY19uYW1ldGJsX3Vuc3Vic2NyaWJlKHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViKVxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTEwMDgtXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jOjEwMDk6XFx0dGlwY191YWRkcihcXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19OT0RFX1NDT1BFLFxcbm5ldC90aXBjL25hbWVfdGFibGUuYy0xMDEwLVxcdFxcdCAgIHN1Yi1cXHUwMDNlcy5zZXEudHlwZSwgc3ViLVxcdTAwM2VzLnNlcS5sb3dlciwgc3ViLVxcdTAwM2VzLnNlcS51cHBlcik7XFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM9MTIwNj1zdGF0aWMgaW50IHRpcGNfbmxfc2VydmljZV9saXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2csXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtMTIyNS1cXHRcXHQgICAgKCFpIFxcdTAwMjZcXHUwMDI2ICpsYXN0X2tleSBcXHUwMDI2XFx1MDAyNiAoKmxhc3RfbG93ZXIgPT0gKmxhc3Rfa2V5KSkpIHtcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6MTIyNjpcXHRcXHRcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX05PREVfU0NPUEUsXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTEyMjctXFx0XFx0XFx0XFx0ICAgKmxhc3RfdHlwZSwgKmxhc3RfbG93ZXIsICpsYXN0X2xvd2VyKTtcXG4tLVxcbm5ldC90aXBjL25ldC5jPTEyOT1zdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxcbi0tXFxubmV0L3RpcGMvbmV0LmMtMTM0LVxcbm5ldC90aXBjL25ldC5jOjEzNTpcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXFxubmV0L3RpcGMvbmV0LmMtMTM2LVxcdFxcdCAgIFRJUENfTk9ERV9TVEFURSwgYWRkciwgYWRkcik7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9NDE3PXN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcXG4tLVxcbm5ldC90aXBjL25vZGUuYy00MzItXFxubmV0L3RpcGMvbm9kZS5jOjQzMzpcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX05PREVfU0NPUEUsXFxubmV0L3RpcGMvbm9kZS5jLTQzNC1cXHRcXHQgICBUSVBDX0xJTktfU1RBVEUsIG4tXFx1MDAzZWFkZHIsIG4tXFx1MDAzZWFkZHIpO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjkzMj1zdGF0aWMgaW50IHRpcGNfc2tfd2l0aGRyYXcoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY191YWRkciAqdWEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTQwLVxcdFxcdGlmICghdWEpIHtcXG5uZXQvdGlwYy9zb2NrZXQuYzoyOTQxOlxcdFxcdFxcdHRpcGNfdWFkZHIoXFx1MDAyNl91YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBwLVxcdTAwM2VzY29wZSxcXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTQyLVxcdFxcdFxcdFxcdCAgIHAtXFx1MDAzZXNyLnR5cGUsIHAtXFx1MDAzZXNyLmxvd2VyLCBwLVxcdTAwM2Vzci51cHBlcik7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMDcyPXN0YXRpYyBpbnQgdGlwY19za19qb2luKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfZ3JvdXBfcmVxICptcmVxKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzA5NC1cXHRtc2dfc2V0X2Rlc3RfZHJvcHBhYmxlKGhkciwgdHJ1ZSk7XFxubmV0L3RpcGMvc29ja2V0LmM6MzA5NTpcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBtcmVxLVxcdTAwM2VzY29wZSxcXG5uZXQvdGlwYy9zb2NrZXQuYy0zMDk2LVxcdFxcdCAgIG1yZXEtXFx1MDAzZXR5cGUsIG1yZXEtXFx1MDAzZWluc3RhbmNlLCBtcmVxLVxcdTAwM2VpbnN0YW5jZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA1OjMyLjk4MDc3ODQwOFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTkxMDY2OTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgdGlwY191YWRkcmAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgdGlwY191YWRkcmAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBpcyBzdHJ1Y3R1cmVkIGFuZCBlbnN1cmUgaXQncyBiZWhhdmluZyBhcyBleHBlY3RlZC4gSSdsbCBsaWtlbHkgc3RhcnQgYnkgdHJhY2luZyBpdHMgdXNlIGNhc2VzIHdpdGhpbiB0aGUgVElQQyBmcmFtZXdvcmsgdG8gc2VlIHdoZXJlIGl0IGNvbWVzIGludG8gcGxheS4gS2V5IGFyZWFzIHdpbGwgYmUgYWRkcmVzcyBsb29rdXBzLCByb3V0aW5nIGRlY2lzaW9ucywgYW5kIHRoZSBvdmVyYWxsIG1hbmFnZW1lbnQgb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIEknbGwgcHJvYmFibHkgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQsIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWNjZXNzZWQgY29uY3VycmVudGx5LiBJJ20gYWxzbyBnb2luZyB0byBzZWUgaWYgYW55IG9mIHRoZSByZWNlbnQgY29kZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgdGhvc2UgdGhhdCB0b3VjaGVkIHRoZSBuZXR3b3JrIG9yIHNvY2tldCBsYXllciwgbWlnaHQgaGF2ZSBpbnRyb2R1Y2VkIGFueSByZWdyZXNzaW9ucyByZWxhdGVkIHRvIGB0aXBjX3VhZGRyYC4gRmluYWxseSwgSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGFmZmVjdHMgdGhlIG92ZXJhbGwgc2VjdXJpdHkgcG9zdHVyZSAtIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGFkZHJlc3Mgc3Bvb2Zpbmcgb3IgbWFuaXB1bGF0aW9uIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQ/IFRpbWUgdG8gZ2V0IHRoZSBkZWJ1Z2dlciBmaXJlZCB1cCBhbmQgdGhlIGNvZGUgb3BlbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MzQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzowNjoyNC44OTE0NTI3MzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjYwMTgyMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSB2b2lkIHRpcGNfdWFkZHJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYWRkci5oPTUwPXN0cnVjdCB0aXBjX3VhZGRyIHtcXG4tLVxcbm5ldC90aXBjL2FkZHIuaC02My1cXG5uZXQvdGlwYy9hZGRyLmg6NjQ6c3RhdGljIGlubGluZSB2b2lkIHRpcGNfdWFkZHIoc3RydWN0IHRpcGNfdWFkZHIgKnVhLCB1MzIgYXR5cGUsIHUzMiBzY29wZSxcXG5uZXQvdGlwYy9hZGRyLmgtNjUtXFx0XFx0XFx0ICAgICAgdTMyIHR5cGUsIHUzMiBsb3dlciwgdTMyIHVwcGVyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzowNjoyNi40NTc0NzY2MTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxNjUzMDIxMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBmcm9tIGBuZXQvdGlwYy9hZGRyLmhgOlxuXG4qKkFuYWx5emluZyBgbmV0L3RpcGMvYWRkci5oYCAoTGluZXMgNTAtNzUpKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGxpbmVzIDUwLTc1IG9mIGBuZXQvdGlwYy9hZGRyLmhgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGFkZHJlc3Mgc3RydWN0dXJlIGFuZCBhc3NvY2lhdGVkIG1hY3JvcyBwcm9iYWJseSBsaWUg4oCTIGl04oCZcyB0aGUgaGVhcnQgb2YgaG93IFRJUEMgYWRkcmVzc2VzIGFyZSBkZWZpbmVkLCBhbmQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBzcGVjaWZpY3MuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgYW55IGJpdGZpZWxkIG1hbmlwdWxhdGlvbnMgdGhhdCBkZWZpbmUgdGhlIGFkZHJlc3MgZmllbGRzIHRoZW1zZWx2ZXMsIGFuZCBpZiB0aGVyZSBhcmUgY2xldmVyIGJpdC10d2lkZGxpbmcgbWFjcm9zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBzaXplIG9mIGVhY2ggY29tcG9uZW50OiBub2RlLCBjbHVzdGVyLCBhbmQgc2VydmljZS4gSeKAmW0gaG9waW5nIHRvIHNlZSBjbGVhciBkZWxpbmVhdGlvbnMgYmV0d2VlbiB0aGUgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBhZGRyZXNzIOKAkyBpdCBtYWtlcyBkZWJ1Z2dpbmcgZmFyIGVhc2llci4gSeKAmW0gYWxzbyBsb29raW5nIGZvciBhbnkgaGludCBvZiBob3cgdGhlIGFkZHJlc3MgZmFtaWx5IGlzIGhhbmRsZWQ7IHRoaXMgbWlnaHQgYmUgYSBjZW50cmFsIHBvaW50IG9mIHRoZSBjb2RlLiBBbnkgYml0IGZpZWxkcyBvciBwYWNrZWQgc3RydWN0cyBhcmUgd29ydGggbG9va2luZyBhdCBjbG9zZWx5LCBhcyB0aGV5IGNvdWxkIGJlIHBvaW50cyBvZiBvcHRpbWl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTE1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDg6MDguMTEwNTAxOTg4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2FkZHIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRzdHJ1Y3QgdGlwY191YWRkciB7XFxuICA1MTpcXHRcXHR1bnNpZ25lZCBzaG9ydCBmYW1pbHk7XFxuICA1MjpcXHRcXHR1bnNpZ25lZCBjaGFyIGFkZHJ0eXBlO1xcbiAgNTM6XFx0XFx0c2lnbmVkIGNoYXIgc2NvcGU7XFxuICA1NDpcXHRcXHR1bmlvbiB7XFxuICA1NTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAgNTY6XFx0XFx0XFx0XFx0c3RydWN0IHRpcGNfc2VydmljZV9hZGRyIHNhO1xcbiAgNTc6XFx0XFx0XFx0XFx0dTMyIGxvb2t1cF9ub2RlO1xcbiAgNTg6XFx0XFx0XFx0fTtcXG4gIDU5OlxcdFxcdFxcdHN0cnVjdCB0aXBjX3NlcnZpY2VfcmFuZ2Ugc3I7XFxuICA2MDpcXHRcXHRcXHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzaztcXG4gIDYxOlxcdFxcdH07XFxuICA2MjpcXHR9O1xcbiAgNjM6XFx0XFxuICA2NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdGlwY191YWRkcihzdHJ1Y3QgdGlwY191YWRkciAqdWEsIHUzMiBhdHlwZSwgdTMyIHNjb3BlLFxcbiAgNjU6XFx0XFx0XFx0XFx0ICAgICAgdTMyIHR5cGUsIHUzMiBsb3dlciwgdTMyIHVwcGVyKVxcbiAgNjY6XFx0e1xcbiAgNjc6XFx0XFx0dWEtXFx1MDAzZWZhbWlseSA9IEFGX1RJUEM7XFxuICA2ODpcXHRcXHR1YS1cXHUwMDNlYWRkcnR5cGUgPSBhdHlwZTtcXG4gIDY5OlxcdFxcdHVhLVxcdTAwM2VzY29wZSA9IHNjb3BlO1xcbiAgNzA6XFx0XFx0dWEtXFx1MDAzZXNyLnR5cGUgPSB0eXBlO1xcbiAgNzE6XFx0XFx0dWEtXFx1MDAzZXNyLmxvd2VyID0gbG93ZXI7XFxuICA3MjpcXHRcXHR1YS1cXHUwMDNlc3IudXBwZXIgPSB1cHBlcjtcXG4gIDczOlxcdH1cXG4gIDc0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzowODowOC4xMTA1OTc3MDhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg2OTI0NzE3Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHRpcGNfdWFkZHJgIFN0cnVjdHVyZSBhbmQgaXRzIFVzYWdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgYHRpcGNfdWFkZHJgIGlzIHVzZWQsIHNwZWNpZmljYWxseSBob3cgaXQgaW5pdGlhbGl6ZXMgdmFyaW91cyBmaWVsZHMgYW5kIGhvdyB0aGF0IGRhdGEgaXMgdXNlZC4gSSBzZWUgdGhhdCBgdGlwY191YWRkcmAgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIGBmYW1pbHlgLCBgYWRkcnR5cGVgLCBgc2NvcGVgLCBhbmQgY3J1Y2lhbGx5LCB0aGUgYHNyLnR5cGVgLCBgc3IubG93ZXJgLCBhbmQgYHNyLnVwcGVyYCBmaWVsZHMsIHdoaWNoIHBlcnRhaW4gdG8gYSBgc3RydWN0IHRpcGNfc2VydmljZV9yYW5nZWAuXG5cbk5vdywgZGlnZ2luZyBpbnRvIHRoZSBgc3RydWN0IHRpcGNfdWFkZHJgIGRlZmluaXRpb24sIGl0IHVzZXMgYSB1bmlvbiB3aXRoIGB0aXBjX3NlcnZpY2VfcmFuZ2Ugc3JgLCBhbW9uZyBvdGhlciB0eXBlcy4gSXQgbG9va3MgbGlrZSBpdCBjb3VsZCByZXByZXNlbnQgYSBzZXJ2aWNlIGFkZHJlc3MsIGEgcmFuZ2Ugb2Ygc2VydmljZSBhZGRyZXNzZXMsIG9yIGEgc29ja2V0IGFkZHJlc3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgbGF5b3V0IGhlcmUgYmVjYXVzZSBvZiB0aGUgdW5pb24uXG5cbkxldCdzIHNlZS4uLiBgc3RydWN0IHRpcGNfdWFkZHJgIHN0YXJ0cyB3aXRoIHRoZSBoZWFkZXIgZmllbGRzOiBgZmFtaWx5YCAoMiBieXRlcyksIGBhZGRydHlwZWAgKDEgYnl0ZSksIGFuZCBgc2NvcGVgICgxIGJ5dGUpLiAgVGhlbiwgdGhlcmUncyB0aGUgdW5pb24gd2hpY2ggaG9sZHMgZWl0aGVyIHRoZSBgdGlwY19zZXJ2aWNlX3JhbmdlIHNyYCAoMTIgYnl0ZXMpLCBgdGlwY19zZXJ2aWNlX2FkZHIgc2FgIGFuZCBgbG9va3VwX25vZGVgIChhbHNvIDEyIGJ5dGVzKSwgb3IgYHRpcGNfc29ja2V0X2FkZHIgc2tgICg4IGJ5dGVzKS5cblxuR2l2ZW4gdGhhdCBsYXlvdXQsIGFuZCB0aGUgc2l6ZSBvZiBlYWNoIG1lbWJlciBvZiB0aGUgdW5pb24sIHRoZSB0b3RhbCBzaXplIG9mIGB0aXBjX3VhZGRyYCBpcyAyICsgMSArIDEgKyAxMiA9IDE2IGJ5dGVzLiBUaGVyZSdzIG5vIHBhZGRpbmcgYmV0d2VlbiB0aGUgaGVhZGVyIGZpZWxkcyBhbmQgdGhlIHVuaW9uLiBUaGF0J3MgZ29vZC5cblxuTm93LCBhIGZ1bmN0aW9uIGNhbGxlZCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgIGFsbG9jYXRlcyBhIGBzdHJ1Y3QgcHVibGljYXRpb24gKnBgIHVzaW5nIGB0aXBjX3B1YmxfY3JlYXRlKFx1MDAyNnVhLCBcdTAwMjZzaywgdG4tXHUwMDNlbm9kZV9hZGRyKTtgLiAgVGhpcyBzdWdnZXN0cyB0aGF0IGB0aXBjX3VhZGRyYCBpcyB1c2VkIGluIHRoZSBjcmVhdGlvbiBvZiBhIHB1YmxpY2F0aW9uLiBJIG5lZWQgdG8gY2hlY2sgaG93IGB0aXBjX3B1YmxfY3JlYXRlYCBhY3R1YWxseSB1dGlsaXplcyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIGB0aXBjX3VhZGRyYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBleGFtaW5lIGhvdyB0aGUgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIGB0aXBjX3B1YmxfY3JlYXRlYCBhbmQgaG93IHRoZSBtZW1iZXJzIG9mIHRoZSBzdHJ1Y3QgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgcHVibGlzaGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUyMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjExOjE1LjAzNTMxNzQwNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2OTg3MzMxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3B1YmxfY3JlYXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL25hbWVfdGFibGUuYz0yMTg9c3RhdGljIGludCBoYXNoKGludCB4KVxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTIyMy0vKipcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6MjI0OiAqIHRpcGNfcHVibF9jcmVhdGUgLSBjcmVhdGUgYSBwdWJsaWNhdGlvbiBzdHJ1Y3R1cmVcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtMjI1LSAqIEB1YTogdGhlIHNlcnZpY2UgcmFuZ2UgdGhlIHVzZXIgaXMgYmluZGluZyB0b1xcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTIyOC0gKi9cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6MjI5OnN0YXRpYyBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfcHVibF9jcmVhdGUoc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbm5ldC90aXBjL25hbWVfdGFibGUuYy0yMzAtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuYz00ODE9c3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTQ4OC1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6NDg5OlxcdHAgPSB0aXBjX3B1YmxfY3JlYXRlKHVhLCBzaywga2V5KTtcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtNDkwLVxcdGlmICghcCkge1xcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTg0Nj1pbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTkwNC1cXHRpZiAoIXNyKSB7XFxubmV0L3RpcGMvbmFtZV90YWJsZS5jOjkwNTpcXHRcXHRwID0gdGlwY19wdWJsX2NyZWF0ZShcXHUwMDI2dWEsIFxcdTAwMjZzaywgdG4tXFx1MDAzZW5vZGVfYWRkcik7XFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTkwNi1cXHRcXHRpZiAoIXApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjExOjE3LjEwNTE5ODk0N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTI4MTkwODY1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gYHRpcGNfcHVibF9jcmVhdGVgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGB0aXBjX3B1YmxfY3JlYXRlYC4gS25vd2luZyB0aGlzIGNvZGViYXNlLCBhbmQgY29uc2lkZXJpbmcgdGhlIG5hbWUsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGZvciBjcmVhdGluZyBhIG5ldyBUSVBDIHB1YmxpY2F0aW9uIGVuZHBvaW50LCBsaWtlbHkgZm9yIGEgbmFtZSBvciBzZXJ2aWNlIHJlZ2lzdHJhdGlvbiwgcmlnaHQ/IEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMg4oCTIHRoZSBwdWJsaWNhdGlvbiB0YWJsZSwgdGhlIHBvdGVudGlhbCBmb3IgaGFzaCBjb2xsaXNpb25zIGlmIHRoZXkncmUgdXNpbmcgYSBoYXNoLWJhc2VkIGxvb2t1cCwgYW5kIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGNvbmN1cnJlbmN5IHNhZmV0eS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgaGFuZGxlcyBlcnJvciBjYXNlcyBzdWNoIGFzIGluc3VmZmljaWVudCByZXNvdXJjZXMgKG1lbW9yeSksIGludmFsaWQgYXJndW1lbnRzLCBvciBuYW1lIGNvbmZsaWN0cyBhcHByb3ByaWF0ZWx5LiBBbmQgZG9lcyBpdCBoYW5kbGUgdGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgc2FtZSBzZXJ2aWNlIG11bHRpcGxlIHRpbWVzPyBJZiBzbywgaXMgdGhlcmUgYSBtZWNoYW5pc20gdG8gaGFuZGxlIHRoYXQ/IEkgd2FudCB0byBzZWUgaG93IHRoZXkncmUgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGUgZW5kcG9pbnQ7IGlzIHRoZXJlIGFzc29jaWF0ZWQgY2xlYW51cCBvbiBkZXN0cnVjdGlvbiBvciB1bi1yZWdpc3RyYXRpb24/IEFyZSB0aGV5IGltcGxlbWVudGluZyBhbnkga2luZCBvZiB0aW1lb3V0IG9yIGxlYXNlIG1lY2hhbmlzbT8gQWxzbywgSSBuZWVkIHRvIHNlZSBob3cgdGhlIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHVibGljYXRpb24gKGxpa2UgYXR0cmlidXRlcywgc2VydmljZSB0eXBlcywgZXRjLikgYXJlIGhhbmRsZWQuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBzdWJ0bGUgYnVncyBoaWRlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgYWRkcmVzcyBiaW5kaW5nIGlzIGhhbmRsZWQuIERvZXMgaXQgYXV0b21hdGljYWxseSBwaWNrIGEgcG9ydCwgb3IgaXMgaXQgdXNlci1jb25maWd1cmFibGU/IEFuZCBpZiBjb25maWd1cmFibGUsIGhvdyBhcmUgY29sbGlzaW9ucyBhdm9pZGVkIHdoZW4gdGhlIHVzZXIgY2hvb3NlcyBhIHBvcnQ/IEFuZCBhcmUgdGhleSBwcm9wZXJseSBoYW5kbGluZyB0aGUgaW50ZXJhY3Rpb24gd2l0aCBhbnkgdW5kZXJseWluZyBuZXR3b3JraW5nIGxheWVyIC0gZXNwZWNpYWxseSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgdG8gcHVibGlzaGluZyB0aGUgc2VydmljZS9uYW1lIGFjcm9zcyBtdWx0aXBsZSBub2Rlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MzAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxMzo0OS45MjQyODg0ODdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3RpcGMvbmFtZV90YWJsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyOSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyOTpcXHRzdGF0aWMgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX3B1YmxfY3JlYXRlKHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcXG4gMjMwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXFxuIDIzMTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgdTMyIGtleSlcXG4gMjMyOlxcdHtcXG4gMjMzOlxcdFxcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcCA9IGt6YWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG4gMjM0OlxcdFxcbiAyMzU6XFx0XFx0aWYgKCFwKVxcbiAyMzY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDIzNzpcXHRcXG4gMjM4OlxcdFxcdHAtXFx1MDAzZXNyID0gdWEtXFx1MDAzZXNyO1xcbiAyMzk6XFx0XFx0cC1cXHUwMDNlc2sgPSAqc2s7XFxuIDI0MDpcXHRcXHRwLVxcdTAwM2VzY29wZSA9IHVhLVxcdTAwM2VzY29wZTtcXG4gMjQxOlxcdFxcdHAtXFx1MDAzZWtleSA9IGtleTtcXG4gMjQyOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwLVxcdTAwM2ViaW5kaW5nX3NvY2spO1xcbiAyNDM6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnAtXFx1MDAzZWJpbmRpbmdfbm9kZSk7XFxuIDI0NDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cC1cXHUwMDNlbG9jYWxfcHVibCk7XFxuIDI0NTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cC1cXHUwMDNlYWxsX3B1YmwpO1xcbiAyNDY6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnAtXFx1MDAzZWxpc3QpO1xcbiAyNDc6XFx0XFx0cmV0dXJuIHA7XFxuIDI0ODpcXHR9XFxuIDI0OTpcXHRcXG4gMjUwOlxcdC8qKlxcbiAyNTE6XFx0ICogdGlwY19zZXJ2aWNlX2NyZWF0ZSAtIGNyZWF0ZSBhIHNlcnZpY2Ugc3RydWN0dXJlIGZvciB0aGUgc3BlY2lmaWVkICd0eXBlJ1xcbiAyNTI6XFx0ICogQG5ldDogbmV0d29yayBuYW1lc3BhY2VcXG4gMjUzOlxcdCAqIEB1YTogYWRkcmVzcyByZXByZXNlbnRpbmcgdGhlIHNlcnZpY2UgdG8gYmUgYm91bmRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MTM6NDkuOTI0MzgzNzk3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5ODk5NzYyMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFRJUEMgTmFtZSBEaXN0cmlidXRpb24gUGF0Y2g6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2sqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvbmUgdGhyb3VnaCB0aGlzIHBhdGNoLCBsaW5lIGJ5IGxpbmUsIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiB0aGUgcG90ZW50aWFsIGZvciBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gTXkgY29uY2x1c2lvbjogdGhpcyBwYXRjaCBpcyBzb2xlbHkgYWJvdXQgKmhhbmRsaW5nKiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBkdXJpbmcgdGhlIFRJUEMgbmFtZSBkaXN0cmlidXRpb24gcHJvY2VzcywgKm5vdCogYWJvdXQgaW50cm9kdWNpbmcgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBhZGRpbmcgYW5kIHByb3BhZ2F0aW5nIGAtRU5PQlVGU2AgKG91dC1vZi1tZW1vcnkpIGVycm9ycyB0aHJvdWdob3V0IHRoZSBuYW1lIGRpc3RyaWJ1dGlvbiBjb2RlLiAgSXQgZW5zdXJlcyB0aGF0IHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMsIHRoZSBmYWlsdXJlIGlzIGNvcnJlY3RseSByZXBvcnRlZCBhbmQgaGFuZGxlZCwgbGVhZGluZyB0byBub2RlL2xpbmsgZG93biBhY3Rpb25zIGZvciByZXRyaWVzLiAgSSd2ZSBjaGVja2VkIGV2ZXJ5IHNwb3Qgd2hlcmUgbmV3IHZhcmlhYmxlcyBvciBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkLiBFYWNoIG5ldyB2YXJpYWJsZSwgc3VjaCBhcyBgc2tgLCBgdWFgLCBvciBgZXJyYCBhcmUgKmFsd2F5cyogZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdGhleSdyZSB1c2VkLiAgVGhlIGBza19idWZmX2hlYWRgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB1c2luZyBgX19za2JfcXVldWVfaGVhZF9pbml0KClgLiBUaGUgIGB0aXBjX3VhZGRyYCBzdHJ1Y3QgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJ5IGEgaGVscGVyIGZ1bmN0aW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyByZWFkIG9yIHdyaXR0ZW4uICBObyBkYXRhIGlzIGJlaW5nIHBhc3NlZCB0byB1c2VyIHNwYWNlLlxuXG5JJ3ZlIGNhcmVmdWxseSBleGFtaW5lZCB0aGUgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGB0aXBjX25hbWVkX25vZGVfdXBgIGFuZCBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucy4gVGhlIGNvZGUgYWRkcyBjaGVja3MgYW5kIGVycm9yIHJldHVybnMsIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgb3IgbG9naWMgdGhhdCB3b3VsZCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiAgVGhpcyBwYXRjaCAqaW1wcm92ZXMqIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBlcnJvciBoYW5kbGluZywgcmF0aGVyIHRoYW4gd2Vha2VuaW5nIGl0LiBJbiBvdGhlciB3b3JkcywgdGhlIHBhdGNoJ3MgcHVycG9zZSBpcyB0byAqcHJldmVudCogbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZnJvbSBiZWluZyBzaWxlbnRseSBpZ25vcmVkIG9yIGNhdXNpbmcgcG90ZW50aWFsbHkgaW5jb3JyZWN0IGJlaGF2aW91cjsgaXQncyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyByaXNrcy5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzLCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4gYW5kIGxvY2tkZXAgd2lsbCBiZSBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgYnVncyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQgZHVyaW5nIHRoaXMgd29yay4gU3BlY2lmaWNhbGx5LCB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBpc24ndCBwcmVzZW50LCBhbmQgdGh1cyBhIEtNU0FOIHNlc3Npb24gaXNuJ3QgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTkxLCJPdXRwdXRUb2tlbnMiOjI0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxNDo1OS44MjQxNDg5N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc3Vic3lzdGVtIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAocmV0dXJuaW5nIGAtRU5PQlVGU2ApIGR1cmluZyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbi4gSXQgYWRkcyBlcnJvciBoYW5kbGluZyB0byBmdW5jdGlvbnMgbGlrZSBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGFuZCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBhbmQgaW50cm9kdWNlcyBmbGFncyB0byB0cmFjayB0aGUgc3RhdGUgb2YgdGhlIG5hbWUgdGFibGUgYW5kIG5vZGUgYWRkcmVzcy4gQWxsIG5ld2x5IGludHJvZHVjZWQgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2tgLCBgc3RydWN0IHRpcGNfdWFkZHIgdWFgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoZS5nLiwgdmlhIGV4cGxpY2l0IGFzc2lnbm1lbnQgb3IgdGhlIGB0aXBjX3VhZGRyKClgIGhlbHBlcikuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBjb250cm9sIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgd2hpY2ggZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc3Vic3lzdGVtIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAocmV0dXJuaW5nIGAtRU5PQlVGU2ApIGR1cmluZyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbi4gSXQgYWRkcyBlcnJvciBoYW5kbGluZyB0byBmdW5jdGlvbnMgbGlrZSBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGFuZCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBhbmQgaW50cm9kdWNlcyBmbGFncyB0byB0cmFjayB0aGUgc3RhdGUgb2YgdGhlIG5hbWUgdGFibGUgYW5kIG5vZGUgYWRkcmVzcy4gQWxsIG5ld2x5IGludHJvZHVjZWQgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2tgLCBgc3RydWN0IHRpcGNfdWFkZHIgdWFgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoZS5nLiwgdmlhIGV4cGxpY2l0IGFzc2lnbm1lbnQgb3IgdGhlIGB0aXBjX3VhZGRyKClgIGhlbHBlcikuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBjb250cm9sIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgd2hpY2ggZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowvhvv9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 06:23:19 +0000 UTC FinishedAt: 2026-08-17 07:15:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "7a6c5ec0-753e-40d9-b029-ca585176f4f3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tipc_named_distribute", "tipc_nametb_insert_self_node_pub", "tipc_nametbl_publish", "tipc_named_node_up" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19uYW1lZF9kaXN0cmlidXRlJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZXRibF9wdWJsaXNoJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZWRfbm9kZV91cCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUSVBDIHN1YnN5c3RlbSB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgKHJldHVybmluZyBgLUVOT0JVRlNgKSBkdXJpbmcgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24uIEl0IGFkZHMgZXJyb3IgaGFuZGxpbmcgdG8gZnVuY3Rpb25zIGxpa2UgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGB0aXBjX25hbWVkX25vZGVfdXBgLCBhbmQgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYW5kIGludHJvZHVjZXMgZmxhZ3MgdG8gdHJhY2sgdGhlIHN0YXRlIG9mIHRoZSBuYW1lIHRhYmxlIGFuZCBub2RlIGFkZHJlc3MuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlcyAoZS5nLiwgYHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrYCwgYHN0cnVjdCB0aXBjX3VhZGRyIHVhYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKGUuZy4sIHZpYSBleHBsaWNpdCBhc3NpZ25tZW50IG9yIHRoZSBgdGlwY191YWRkcigpYCBoZWxwZXIpLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgY29udHJvbCBmbG93IGFuZCBlcnJvciBoYW5kbGluZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMsIHdoaWNoIGRvIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBUSVBDIGxvZ2ljIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBkdXJpbmcgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24uIEl0IGFkZHMgZXJyb3IgY29kZSByZXR1cm5zIHRvIGZ1bmN0aW9ucyBsaWtlIGB0aXBjX25hbWV0YmxfcHVibGlzaGAgYW5kIGB0aXBjX25hbWVkX25vZGVfdXBgLCBhbmQgaW50cm9kdWNlcyBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgIGFuZCBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCB0byBoYW5kbGUgYnVsayByZWRpc3RyaWJ1dGlvbiBvZiBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWE3YzNkNGI5YjQwYTkzZDMxMTQ1OWJjYmUyYmQ2NmJkOTIyZDM4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDA3OjAzOjU4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuYyBiL25ldC90aXBjL2NvcmUuY1xuaW5kZXggMzE1OTc1YzNiZTgxOC4uMGYxZDNkZGVhZTA5NSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvY29yZS5jXG5AQCAtNjEsNiAmIzQzOzYxLDkgQEAgc3RhdGljIGludCBfX25ldF9pbml0IHRpcGNfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0dG4tXHUwMDNldHJpYWxfYWRkciA9IDA7XG4gXHR0bi1cdTAwM2VhZGRyX3RyaWFsX2VuZCA9IDA7XG4gXHR0bi1cdTAwM2VjYXBhYmlsaXRpZXMgPSBUSVBDX05PREVfQ0FQQUJJTElUSUVTO1xuJiM0MztcdHRuLVx1MDAzZW50X3N0b3AgPSBmYWxzZTtcbiYjNDM7XHR0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQsIDApO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnRuLVx1MDAzZXdvcmssIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmspO1xuIFx0bWVtc2V0KHRuLVx1MDAzZW5vZGVfaWQsIDAsIHNpemVvZih0bi1cdTAwM2Vub2RlX2lkKSk7XG4gXHRtZW1zZXQodG4tXHUwMDNlbm9kZV9pZF9zdHJpbmcsIDAsIHNpemVvZih0bi1cdTAwM2Vub2RlX2lkX3N0cmluZykpO1xuZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuaCBiL25ldC90aXBjL2NvcmUuaFxuaW5kZXggOWNlNWY5ZmY2Y2MwMy4uOTc1YjFkNDgxODZlNiAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvY29yZS5oXG5AQCAtMTQ1LDYgJiM0MzsxNDUsMTIgQEAgc3RydWN0IHRpcGNfbmV0IHtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuIFx0LyogVGhlIG51bWJlcnMgb2Ygd29yayBxdWV1ZXMgaW4gc2NoZWR1bGUgKi9cbiBcdGF0b21pY190IHdxX2NvdW50O1xuJiM0MztcdC8qIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbm9kZSYjMzk7cyBhZGRyZXNzIGlzIHNldCAqL1xuJiM0MztcdGF0b21pY190IG5vZGVfYWRkcl9zZXQ7XG4mIzQzO1x0LyogVGhlIG5hbWUgdGFibGUgaGFzIHN0b3BwZWQgd29ya2luZyAqL1xuJiM0MztcdGJvb2wgbnRfc3RvcDtcbiYjNDM7XHQvKiBOb2RlJiMzOTtzIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIG5hbWUgdGFibGUgKi9cbiYjNDM7XHRib29sIG50X3NlbGZfbm9kZV9leGlzdDtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRpcGNfbmV0ICp0aXBjX25ldChzdHJ1Y3QgbmV0ICpuZXQpXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jXG5pbmRleCBiYTRmNDkwNmUxM2I3Li44M2UzZWQ4ZjJjNTEyIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcbkBAIC05NSw5ICYjNDM7OTUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxuIFx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZwLVx1MDAzZWJpbmRpbmdfbm9kZSwgXHUwMDI2bnQtXHUwMDNlbm9kZV9zY29wZSk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuLVx0d3JpdGVfbG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfbm9kZSwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSk7XG4tXHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdHNrYiA9IG5hbWVkX3ByZXBhcmVfYnVmKG5ldCwgUFVCTElDQVRJT04sIElURU1fU0laRSwgMCk7XG4gXHRpZiAoIXNrYikge1xuIFx0XHRwcl93YXJuKFwmIzM0O1B1YmxpY2F0aW9uIGRpc3RyaWJ1dGlvbiBmYWlsdXJlXFxuXCYjMzQ7KTtcbkBAIC0xMjEsOSAmIzQzOzExOSw3IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxuIFx0c3RydWN0IGRpc3RyX2l0ZW0gKml0ZW07XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuLVx0d3JpdGVfbG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuIFx0bGlzdF9kZWwoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUpO1xuLVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHRpZiAocC1cdTAwM2VzY29wZSA9PSBUSVBDX05PREVfU0NPUEUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuQEAgLTE0Niw5ICYjNDM7MTQyLDE0IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxuICAqIEBkbm9kZTogbm9kZSB0byBiZSB1cGRhdGVkXG4gICogQHBsczogbGlua2VkIGxpc3Qgb2YgcHVibGljYXRpb24gaXRlbXMgdG8gYmUgcGFja2VkIGludG8gYnVmZmVyIGNoYWluXG4gICogQHNlcW5vOiBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgbWVzc2FnZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcbiYjNDM7ICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuJiM0MzsgKlxuICAqL1xuLXN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuLVx0XHRcdCAgICAgdTMyIGRub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbHMsIHUxNiBzZXFubylcbiYjNDM7c3RhdGljIGludCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbiYjNDM7XHRcdFx0ICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pXG4ge1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwdWJsO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG5AQCAtMTY0LDggJiM0MzsxNjUsOSBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbiBcdFx0XHRza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBtc2dfcmVtLFxuIFx0XHRcdFx0XHRcdGRub2RlKTtcbiBcdFx0XHRpZiAoIXNrYikge1xuJiM0MztcdFx0XHRcdF9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpO1xuIFx0XHRcdFx0cHJfd2FybihcJiMzNDtCdWxrIHB1YmxpY2F0aW9uIGZhaWx1cmVcXG5cJiMzNDspO1xuLVx0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRU5PQlVGUztcbiBcdFx0XHR9XG4gXHRcdFx0aGRyID0gYnVmX21zZyhza2IpO1xuIFx0XHRcdG1zZ19zZXRfYmNfYWNrX2ludmFsaWQoaGRyLCB0cnVlKTtcbkBAIC0xOTUsNiAmIzQzOzE5Nyw5MCBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbiBcdGhkciA9IGJ1Zl9tc2coc2tiX3BlZWtfdGFpbChsaXN0KSk7XG4gXHRtc2dfc2V0X2xhc3RfYnVsayhoZHIpO1xuIFx0bXNnX3NldF9uYW1lZF9zZXFubyhoZHIsIHNlcW5vKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGJ1aWxkIGEgbGlzdCBvZiBwdWJsaWNhdGlvbnMgbmVlZCB0byBiZSBkaXN0cmlidXRlZFxuJiM0MzsgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuJiM0MzsgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGVcbiYjNDM7ICogQGhlYWQ6IGxpc3Qgb2YgcHVibGljYXRpb25zXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuJiM0MzsgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXG4mIzQzOyAqXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbiYjNDM7XHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiYjNDM7XG4mIzQzO1x0LyogTmFtZSB0YWJsZSBoYXMgYmVlbiBkZWxldGVkIGFmdGVyIG5hbWVzcGFjZSB0ZWFyZG93biBvclxuJiM0MztcdCAqIFRJUEMgbW9kdWxlIGV4aXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KHRuLVx1MDAzZW50X3N0b3ApKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIE5vZGUmIzM5O3Mgc2VsZi1hZGRyZXNzIGlzIG5vdCBzZXQgeWV0ICovXG4mIzQzO1x0aWYgKCFhdG9taWNfcmVhZChcdTAwMjZ0bi1cdTAwM2Vub2RlX2FkZHJfc2V0KSkge1xuJiM0MztcdFx0LyogRGVmZXIgdGhlIGRpc3RyaWJ1dGlvbiB0byBub2RlJiMzOTtzIHRpbWVyICovXG4mIzQzO1x0XHR0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhuZXQsIGRub2RlKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUHJldmlvdXMgY2FsbCB0byB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YigpIHdhcyBzdWNjZXNzZnVsLlxuJiM0MztcdCAqIFRoZSBub2RlJiMzOTtzIHNlbGYtYWRkcmVzcyBwdWJsaWNhdGlvbiB3YXMgYWRkZWQgdG8gJiMzOTtudC1cdTAwM2VjbHVzdGVyX3Njb3BlJiMzOTsuXG4mIzQzO1x0ICogU28sICYjMzk7bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSYjMzk7IGlzIG5vdCBlbXB0eSBub3cuIEdvIHRvIGRpc3RyaWJ1dGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0KVxuJiM0MztcdFx0Z290byBkaXN0cmlidXRlO1xuJiM0MztcbiYjNDM7XHRpZiAodGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIobmV0KSlcbiYjNDM7XHRcdHJldHVybiAtRU5PQlVGUztcbiYjNDM7XG4mIzQzO1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO2Rpc3RyaWJ1dGU6XG4mIzQzO1x0aWYgKG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBoZWFkLCBkbm9kZSxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlLCBudC1cdTAwM2VzbmRfbnh0KSA9PSAtRU5PQlVGUylcbiYjNDM7XHRcdHJldHVybiAtRU5PQlVGUztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBkaXN0cmlidXRlIGFsbCBwdWJsaWNhdGlvbnMgdG8gc3BlY2lmaWVkIG5vZGVcbiYjNDM7ICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcbiYjNDM7ICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuJiM0MzsgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXG4mIzQzOyAqXG4mIzQzOyAqL1xuJiM0MztpbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkO1xuJiM0MztcdGludCByYyA9IDA7XG4mIzQzO1xuJiM0MztcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZoZWFkKTtcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiYjNDM7XHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFx1MDAyNmhlYWQpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4mIzQzO1x0aWYgKCFyYyBcdTAwMjZcdTAwMjYgIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZoZWFkKSkge1xuJiM0MztcdFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbiYjNDM7XHRcdC8qIFRoZSBsaW5rIGlzIGNvbmdlc3RlZCBhZnRlciB0aGUgbGlzdCBpcyBpbnNlcnRlZCBpbnRvIHRoZVxuJiM0MztcdFx0ICogbGluayYjMzk7cyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChyYyA9PSAtRUxJTktDT05HKVxuJiM0MztcdFx0XHRyYyA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4gfVxuIFxuIC8qKlxuQEAgLTIwMiwyNSAmIzQzOzI4OCwzNiBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbiAgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuICAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZVxuICAqIEBjYXBhYmlsaXRpZXM6IHBlZXIgbm9kZSYjMzk7cyBjYXBhYmlsaXRpZXNcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlxuJiM0MzsgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4mIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbiYjNDM7ICpcbiAgKi9cbi12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcylcbiYjNDM7aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcylcbiB7XG4gXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbiBcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkO1xuLVx0dTE2IHNlcW5vO1xuJiM0MztcdGludCByYyA9IDA7XG4gXG4gXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aGVhZCk7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiBcdGlmICghKGNhcGFiaWxpdGllcyBcdTAwMjYgVElQQ19OQU1FRF9CQ0FTVCkpXG4gXHRcdG50LVx1MDAzZXJjX2Rlc3RzJiM0MzsmIzQzOztcbi1cdHNlcW5vID0gbnQtXHUwMDNlc25kX254dDtcbiYjNDM7XG4mIzQzO1x0cmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCBcdTAwMjZoZWFkKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4mIzQzO1x0aWYgKCFyYyBcdTAwMjZcdTAwMjYgIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZoZWFkKSkge1xuJiM0MztcdFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbiYjNDM7XHRcdC8qIFRoZSBsaW5rIGlzIGNvbmdlc3RlZCBhZnRlciB0aGUgbGlzdCBpcyBpbnNlcnRlZCBpbnRvIHRoZVxuJiM0MztcdFx0ICogbGluayYjMzk7cyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChyYyA9PSAtRUxJTktDT05HKVxuJiM0MztcdFx0XHRyYyA9IDA7XG4mIzQzO1x0fVxuIFxuLVx0cmVhZF9sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4tXHRuYW1lZF9kaXN0cmlidXRlKG5ldCwgXHUwMDI2aGVhZCwgZG5vZGUsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUsIHNlcW5vKTtcbi1cdHRpcGNfbm9kZV94bWl0KG5ldCwgXHUwMDI2aGVhZCwgZG5vZGUsIDApO1xuLVx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmM7XG4gfVxuIFxuIC8qKlxuQEAgLTI5OSw3ICYjNDM7Mzk2LDcgQEAgc3RhdGljIGJvb2wgdGlwY191cGRhdGVfbmFtZXRibChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkaXN0cl9pdGVtICppLFxuIFx0c2subm9kZSA9IG5vZGU7XG4gXG4gXHRpZiAoZHR5cGUgPT0gUFVCTElDQVRJT04pIHtcbi1cdFx0cCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywga2V5KTtcbiYjNDM7XHRcdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIGtleSwgTlVMTCk7XG4gXHRcdGlmIChwKSB7XG4gXHRcdFx0dGlwY19ub2RlX3N1YnNjcmliZShuZXQsIFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlLCBub2RlKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC00MTYsNSAmIzQzOzUxMyw2IEBAIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSwgYmluZGluZ19ub2RlKVxuIFx0XHRwLVx1MDAzZXNrLm5vZGUgPSBzZWxmO1xuIFx0bnQtXHUwMDNlcmNfZGVzdHMgPSAwO1xuJiM0MztcdHRuLVx1MDAzZW50X3N0b3AgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaFxuaW5kZXggYzY3N2Y2ZjA4MmRmYi4uMjA0MzA5NmFlOTY3ZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oXG5AQCAtNjksMTEgJiM0Mzs2OSwxMiBAQCBzdHJ1Y3QgZGlzdHJfaXRlbSB7XG4gXG4gc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7XG4gc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpO1xuLXZvaWQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKTtcbiYjNDM7aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7XG4gdm9pZCB0aXBjX25hbWVkX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSxcbiBcdFx0ICAgIHUxNiAqcmN2X254dCwgYm9vbCAqb3Blbik7XG4gdm9pZCB0aXBjX25hbWVkX3JlaW5pdChzdHJ1Y3QgbmV0ICpuZXQpO1xuIHZvaWQgdGlwY19wdWJsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKm5zdWJfbGlzdCxcbiBcdFx0ICAgICAgdTMyIGFkZHIsIHUxNiBjYXBhYmlsaXRpZXMpO1xuJiM0MztpbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLmJlZWQ0MGEyMTM2OGEgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuQEAgLTMyOSw3ICYjNDM7MzI5LDcgQEAgc3RhdGljIHN0cnVjdCBzZXJ2aWNlX3JhbmdlICp0aXBjX3NlcnZpY2VfY3JlYXRlX3JhbmdlKHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLFxuIFxuIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgcHVibGljYXRpb24gKnApXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIGludCAqZXJyKVxuIHtcbiBcdHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViLCAqdG1wO1xuIFx0c3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyO1xuQEAgLTMzOSwxMCAmIzQzOzMzOSwxMiBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0Ym9vbCByZXMgPSBmYWxzZTtcbiBcdHUzMiBrZXkgPSBwLVx1MDAzZWtleTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdHNyID0gdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzYywgcCk7XG4tXHRpZiAoIXNyKVxuLVx0XHRnb3RvICBleGl0O1xuJiM0MztcdGlmICghc3IpIHtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdCplcnIgPSAtRU5PQlVGUztcbiYjNDM7XHRcdGdvdG8gZXhpdDtcbiYjNDM7XHR9XG4gXG4gXHRmaXJzdCA9IGxpc3RfZW1wdHkoXHUwMDI2c3ItXHUwMDNlYWxsX3B1YmwpO1xuIFxuQEAgLTM1Myw2ICYjNDM7MzU1LDggQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtGYWlsZWQgdG8gYmluZCBkdXBsaWNhdGUgJXUsJXUsJXUvJXU6JXUvJXVcXG5cJiMzNDssXG4gXHRcdFx0XHQgcC1cdTAwM2Vzci50eXBlLCBwLVx1MDAzZXNyLmxvd2VyLCBwLVx1MDAzZXNyLnVwcGVyLFxuIFx0XHRcdFx0IG5vZGUsIHAtXHUwMDNlc2sucmVmLCBrZXkpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdCplcnIgPSAtRUVYSVNUO1xuIFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0fVxuIFx0fVxuQEAgLTM3MSw3ICYjNDM7Mzc1LDYgQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmICghcmVzKVxuIFx0XHRwcl93YXJuKFwmIzM0O0ZhaWxlZCB0byBiaW5kIHRvICV1LCV1LCV1XFxuXCYjMzQ7LFxuIFx0XHRcdHAtXHUwMDNlc3IudHlwZSwgcC1cdTAwM2Vzci5sb3dlciwgcC1cdTAwM2Vzci51cHBlcik7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdHJldHVybiByZXM7XG4gfVxuIFxuQEAgLTQ3OCwyMCAmIzQzOzQ4MSwzMyBAQCBzdGF0aWMgc3RydWN0IHRpcGNfc2VydmljZSAqdGlwY19zZXJ2aWNlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LFxuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxuLVx0XHRcdFx0XHQgICAgIHUzMiBrZXkpXG4mIzQzO1x0XHRcdFx0XHQgICAgIHUzMiBrZXksIGludCAqZXJyKVxuIHtcbiBcdHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwO1xuIFxuIFx0cCA9IHRpcGNfcHVibF9jcmVhdGUodWEsIHNrLCBrZXkpO1xuLVx0aWYgKCFwKVxuJiM0MztcdGlmICghcCkge1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0KmVyciA9IC1FTk9CVUZTO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4gXG4gXHRzYyA9IHRpcGNfc2VydmljZV9maW5kKG5ldCwgdWEpO1xuIFx0aWYgKCFzYylcbiBcdFx0c2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgdWEpO1xuLVx0aWYgKHNjIFx1MDAyNlx1MDAyNiB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCkpXG4tXHRcdHJldHVybiBwO1xuJiM0MztcbiYjNDM7XHRpZiAoc2MpIHtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdGlmICh0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgZXJyKSkge1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdFx0cmV0dXJuIHA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHR9IGVsc2UgaWYgKGVycikge1xuJiM0MztcdFx0KmVyciA9IC1FTk9CVUZTO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRrZnJlZShwKTtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC03NjAsMjYgJiM0Mzs3NzYsNTUgQEAgdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxuIC8qIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIHNlcnZpY2UgYmluZGluZyB0byBuYW1lIHRhYmxlXG4gICovXG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbi1cdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSlcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4mIzQzO1x0XHRcdFx0XHQgdTMyIGtleSwgaW50ICplcnIpXG4ge1xuIFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4mIzQzO1x0dTMyIG1heF91c2VyX3B1YiA9IFRJUENfTUFYX1BVQkwgLSAxO1xuIFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4gXHRzdHJ1Y3QgcHVibGljYXRpb24gKnAgPSBOVUxMO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4mIzQzO1x0Ym9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7XG4mIzQzO1x0aW50IGVycm9yID0gMDtcbiBcdHUzMiByY19kZXN0cztcbiBcbiYjNDM7XHRpZiAodWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgfHwgdWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX0xJTktfU1RBVEUgfHxcbiYjNDM7XHQgICAgdWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpXG4mIzQzO1x0XHRwcm90b2NvbF90eXBlID0gdHJ1ZTtcbiYjNDM7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiYjNDM7XHRpZiAocHJvdG9jb2xfdHlwZSlcbiYjNDM7XHRcdGdvdG8gaW5zZXJ0O1xuIFxuLVx0aWYgKG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQgXHUwMDNlPSBUSVBDX01BWF9QVUJMKSB7XG4tXHRcdHByX3dhcm4oXCYjMzQ7QmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxuXCYjMzQ7LCBUSVBDX01BWF9QVUJMKTtcbiYjNDM7XHQvKiBSZXNlcnZlIG9uZSBlbnRyeSBmb3Igbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUgYmVjYXVzZSBpdCBoYXMgY2x1c3RlclxuJiM0MztcdCAqIHNjb3BlIGFuZCBpdCBpcyBkaXN0cmlidXRlZCBpbiBidWxrLiBTbywgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXImIzM5O3NcbiYjNDM7XHQgKiBwdWJsaWNhdGlvbnMgaXMgKFRJUENfTUFYX1BVQkwgLSAxKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IG1heF91c2VyX3B1Yikge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcXG5cJiMzNDssIG1heF91c2VyX3B1Yik7XG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcbi1cdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4mIzQzO2luc2VydDpcbiYjNDM7XHRwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgdWEsIHNrLCBrZXksIFx1MDAyNmVycm9yKTtcbiBcdGlmIChwKSB7XG4tXHRcdG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQmIzQzOyYjNDM7O1xuJiM0MztcdFx0LyogTm90IGNvdW50IG5vZGUgc3RhdGUsIGxpbmsgc3RhdGUgYW5kIHRvcG9sb2d5IHNlcnZlciB0eXBlc1xuJiM0MztcdFx0ICogc28gdGhhdCBtYXhpbXVtIG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQgZG9lcyBub3QgcHJldmVudFxuJiM0MztcdFx0ICogcHJvdG9jb2wgc2VydmljZSB0eXBlcyBmcm9tIGJlaW5nIGluc2VydGVkIGludG8gdGhlIG5hbWVcbiYjNDM7XHRcdCAqIHRhYmxlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIXByb3RvY29sX3R5cGUpXG4mIzQzO1x0XHRcdG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQmIzQzOyYjNDM7O1xuIFx0XHRza2IgPSB0aXBjX25hbWVkX3B1Ymxpc2gobmV0LCBwKTtcbiYjNDM7XHRcdC8qIExvY2FsLXNjb3BlIHB1YmxpY2F0aW9uIGlzIG5vdCBwdWJsaXNoZWQgKHNrYiBpcyBOVUxMKSwgb25seVxuJiM0MztcdFx0ICogY2x1c3Rlci1jb3BlIG9uZSBpcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFza2IgXHUwMDI2XHUwMDI2IHAtXHUwMDNlc2NvcGUgPT0gVElQQ19DTFVTVEVSX1NDT1BFIFx1MDAyNlx1MDAyNiBlcnIpXG4mIzQzO1x0XHRcdCplcnIgPSAtRU5PQlVGUztcbiYjNDM7XHR9IGVsc2UgaWYgKChlcnJvciA9PSAtRU5PQlVGUykgXHUwMDI2XHUwMDI2IGVycikge1xuJiM0MztcdFx0KmVyciA9IC1FTk9CVUZTO1xuIFx0fVxuJiM0MztcbiBcdHJjX2Rlc3RzID0gbnQtXHUwMDNlcmNfZGVzdHM7XG4gZXhpdDpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG5AQCAtNzg3LDcgJiM0Mzs4MzIsMTAyIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRpZiAoc2tiKVxuIFx0XHR0aXBjX25vZGVfYnJvYWRjYXN0KG5ldCwgc2tiLCByY19kZXN0cyk7XG4gXHRyZXR1cm4gcDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViIC0gaW5zZXJ0IHB1YmxpY2F0aW9uIG9mIG5vZGUmIzM5O3Mgc2VsZiBhZGRyZXNzXG4mIzQzOyAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuJiM0MzsgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXG4mIzQzOyAqXG4mIzQzOyAqL1xuJiM0MztpbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4mIzQzO1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4mIzQzO1x0c3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2s7XG4mIzQzO1x0c3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyO1xuJiM0MztcdHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjO1xuJiM0MztcdGJvb2wgc2NfY3JlYXRlZCA9IGZhbHNlO1xuJiM0MztcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcDtcbiYjNDM7XHRzdHJ1Y3QgdGlwY191YWRkciB1YTtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0c2sucmVmID0gMDtcbiYjNDM7XHRzay5ub2RlID0gdG4tXHUwMDNlbm9kZV9hZGRyO1xuJiM0MztcdHRpcGNfdWFkZHIoXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLFxuJiM0MztcdFx0ICAgVElQQ19OT0RFX1NUQVRFLCB0bi1cdTAwM2Vub2RlX2FkZHIsIHRuLVx1MDAzZW5vZGVfYWRkcik7XG4mIzQzO1x0c2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsIFx1MDAyNnVhKTtcbiYjNDM7XHRpZiAoIXNjKSB7XG4mIzQzO1x0XHRzYyA9IHRpcGNfc2VydmljZV9jcmVhdGUobmV0LCBcdTAwMjZ1YSk7XG4mIzQzO1x0XHRpZiAoIXNjKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4mIzQzO1x0XHRzY19jcmVhdGVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuJiM0MztcdC8qIENoZWNrIHdoZXRoZXIgYSByYW5nZSBleGlzdHMgaW4gdGhlIG5hbWUgdGFibGUgd2l0aFxuJiM0MztcdCAqIGxvd2VyID09IHRuLVx1MDAzZW5vZGVfYWRkciwgdXBwZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyLCBhbmQgdHlwZVxuJiM0MztcdCAqIFRJUENfTk9ERV9TVEFURSAoMCkuIElmICYjMzk7c3ImIzM5OyBpcyBub3QgTlVMTCwgdGhpcyByYW5nZSBleGlzdHNcbiYjNDM7XHQgKiBkdWUgdG8gYSBwcmV2aW91cyBjYWxsIHRvIHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKClcbiYjNDM7XHQgKiBvciB0aXBjX25ldF9maW5hbGl6ZSgpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogTm90ZSB0aGF0IHVzZXIgYXBwbGljYXRpb25zIGNhbiBvbmx5IGluc2VydCB0eXBlcyBncmVhdGVyIHRoYW5cbiYjNDM7XHQgKiBvciBlcXVhbCB0byA2NCAoVElQQ19SRVNFUlZFRF9UWVBFUyksIGFzIGVuZm9yY2VkIGJ5IHRpcGNfYmluZCgpLlxuJiM0MztcdCAqIFJlbW90ZSBub2RlcyBhbHNvIG9ubHkgc2VuZCBwcm90b2NvbCBwdWJsaWNhdGlvbnMgd2l0aCB0eXBlXG4mIzQzO1x0ICogVElQQ19OT0RFX1NUQVRFICgwKSwgd2l0aCBib3RoIGxvd2VyIGFuZCB1cHBlciBzZXQgdG8gdGhlIHJlbW90ZVxuJiM0MztcdCAqIG5vZGUmIzM5O3MgYWRkcmVzcy4gVGhlc2UgcmFuZ2VzIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGlzIG5vZGUmIzM5O3NcbiYjNDM7XHQgKiByYW5nZSBiZWNhdXNlIGEgcmVtb3RlIG5vZGUmIzM5O3MgYWRkcmVzcyBtdXN0IGRpZmZlciBmcm9tIHRoaXNcbiYjNDM7XHQgKiBub2RlJiMzOTtzIGFkZHJlc3MgKHRuLVx1MDAzZW5vZGVfYWRkcikuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGVyZWZvcmUsIHRpcGNfdXBkYXRlX25hbWV0YmwoKSBjYW5ub3QgYnVpbGQgYW5kIGluc2VydCBhIHJlbW90ZVxuJiM0MztcdCAqIHB1YmxpY2F0aW9uIHdpdGggdGhlIHNhbWUgdHlwZSAoMCkgYW5kIHJhbmdlXG4mIzQzO1x0ICogKGxvd2VyID09IHRuLVx1MDAzZW5vZGVfYWRkciwgdXBwZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyKSBhcyB0aGlzIG5vZGUmIzM5O3NcbiYjNDM7XHQgKiBzZWxmLWFkZHJlc3MgcHVibGljYXRpb24gaW4gdGhlIG5hbWUgdGFibGUuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBCZWNhdXNlIHRoZSBjb21iaW5hdGlvbiBvZiB0eXBlIDAgYW5kXG4mIzQzO1x0ICogKGxvd2VyID09IHRuLVx1MDAzZW5vZGVfYWRkciwgdXBwZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyKSBpcyB1bmlxdWUgaW4gdGhlXG4mIzQzO1x0ICogbmFtZSB0YWJsZSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjaGVjayBzay5ub2RlLCBzay5yZWYsIGtleSwgb3JcbiYjNDM7XHQgKiBjbHVzdGVyX3Njb3BlIG1lbWJlcnNoaXAuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3IgPSB0aXBjX3NlcnZpY2VfZmluZF9yYW5nZShzYywgXHUwMDI2dWEpO1xuJiM0MztcdC8qIDEuIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmsoKSBpcyBub3Qgc2NoZWR1bGVkIGJlY2F1c2Ugb2YgbmFtZXNwYWNlXG4mIzQzO1x0ICogICAgdGVhcmRvd24uXG4mIzQzO1x0ICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS1cdTAwM2UgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBoYXMgZmFpbGVkXG4mIzQzO1x0ICogICAgdG8gaW5zZXJ0IG5vZGUgc2VsZiBhZGRyZXNzIHB1YmxpY2F0aW9uIGludG8gbnQtXHUwMDNlY2x1c3Rlcl9zY29wZVxuJiM0MztcdCAqICAgIGR1ZSB0byBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLlxuJiM0MztcdCAqIDMuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXHUwMDNlIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdFxuJiM0MztcdCAqICAgIGV4ZWN1dGVkIHlldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNyKSB7XG4mIzQzO1x0XHRwID0gdGlwY19wdWJsX2NyZWF0ZShcdTAwMjZ1YSwgXHUwMDI2c2ssIHRuLVx1MDAzZW5vZGVfYWRkcik7XG4mIzQzO1x0XHRpZiAoIXApXG4mIzQzO1x0XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgXHUwMDI2ZXJyKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoZXJyID09IC1FTk9CVUZTKSkge1xuJiM0MztcdFx0XHRrZnJlZShwKTtcbiYjNDM7XHRcdFx0Z290byBlcnJvcjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlLCBcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlKTtcbiYjNDM7XHRcdGdvdG8gZXhpdDtcbiYjNDM7ZXJyb3I6XG4mIzQzO1x0XHRpZiAoc2NfY3JlYXRlZCkge1xuJiM0MztcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2c2MtXHUwMDNlc2VydmljZV9saXN0KTtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRcdGtmcmVlX3JjdShzYywgcmN1KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9CVUZTO1xuJiM0MztcdH1cbiYjNDM7ZXhpdDpcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtODEwLDcgJiM0Mzs5NTAsMTAgQEAgdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXG4gXHRwID0gdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpO1xuIFx0aWYgKHApIHtcbi1cdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudC0tO1xuJiM0MztcdFx0aWYgKHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX05PREVfU1RBVEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcC1cdTAwM2Vzci50eXBlICE9IFRJUENfTElOS19TVEFURSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19UT1BfU1JWKVxuJiM0MztcdFx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XG4gXHRcdHNrYiA9IHRpcGNfbmFtZWRfd2l0aGRyYXcobmV0LCBwKTtcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfc29jayk7XG4gXHRcdGtmcmVlX3JjdShwLCByY3UpO1xuQEAgLTg5OSw3ICYjNDM7MTA0Miw2IEBAIGludCB0aXBjX25hbWV0YmxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZudC1cdTAwM2Vub2RlX3Njb3BlKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xuLVx0cndsb2NrX2luaXQoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdHRuLVx1MDAzZW5hbWV0YmwgPSBudDtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gXHRyZXR1cm4gMDtcbkBAIC05MTIsNiAmIzQzOzEwNTQsNyBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuICAqL1xuIHN0YXRpYyB2b2lkIHRpcGNfc2VydmljZV9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYylcbiB7XG4mIzQzO1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4gXHRzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3IsICp0bXByO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwLCAqdG1wO1xuIFxuQEAgLTkxOSw2ICYjNDM7MTA2MiwxNSBAQCBzdGF0aWMgdm9pZCB0aXBjX3NlcnZpY2VfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc2VydmljZSAqc2MpXG4gXHRyYnRyZWVfcG9zdG9yZGVyX2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3IsIHRtcHIsIFx1MDAyNnNjLVx1MDAzZXJhbmdlcywgdHJlZV9ub2RlKSB7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0bXAsIFx1MDAyNnNyLVx1MDAzZWFsbF9wdWJsLCBhbGxfcHVibCkge1xuIFx0XHRcdHRpcGNfc2VydmljZV9yZW1vdmVfcHVibChzciwgXHUwMDI2cC1cdTAwM2VzaywgcC1cdTAwM2VrZXkpO1xuJiM0MztcdFx0XHQvKiB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoKSBkb2VzIG5vdCBkZWxldGVcbiYjNDM7XHRcdFx0ICogJiMzOTtwLVx1MDAzZWJpbmRpbmdfbm9kZSYjMzk7IHdpdGggdHlwZSBUSVBDX05PREVfU1RBVEUgYW5kXG4mIzQzO1x0XHRcdCAqIHJhbmdlIFt0bi1cdTAwM2Vub2RlX2FkZHIsIHRuLVx1MDAzZW5vZGVfYWRkcl0gZnJvbVxuJiM0MztcdFx0XHQgKiAmIzM5O3RuLVx1MDAzZWNsdXN0ZXJfc2NvcGUmIzM5Oy4gU28sIGRlbGV0ZSBpdCBoZXJlLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKHAtXHUwMDNlc3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBwLVx1MDAzZXNyLmxvd2VyID09IHRuLVx1MDAzZW5vZGVfYWRkciBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIHAtXHUwMDNlc3IudXBwZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyKVxuJiM0MztcdFx0XHRcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbiBcdFx0XHRrZnJlZV9yY3UocCwgcmN1KTtcbiBcdFx0fVxuIFx0XHRyYl9lcmFzZV9hdWdtZW50ZWQoXHUwMDI2c3ItXHUwMDNldHJlZV9ub2RlLCBcdTAwMjZzYy1cdTAwM2VyYW5nZXMsIFx1MDAyNnNyX2NhbGxiYWNrcyk7XG5AQCAtOTQ5LDYgJiM0MzsxMTAxLDggQEAgdm9pZCB0aXBjX25hbWV0Ymxfc3RvcChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRcdFx0dGlwY19zZXJ2aWNlX2RlbGV0ZShuZXQsIHNlcnZpY2UpO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1x0dG4tXHUwMDNlbnRfc3RvcCA9IHRydWU7XG4mIzQzO1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFxuIFx0LyogVE9ETzogY2xlYXIgdG4tXHUwMDNlbmFtZXRibCwgaW1wbGVtZW50IHByb3BlciBSQ1UgcnVsZXMgPyAqL1xuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuaCBiL25ldC90aXBjL25hbWVfdGFibGUuaFxuaW5kZXggN2ZmNmVlZWJhYWU2NC4uNDM5MGU3OWE0NjYwZSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oXG5AQCAtOTcsOCAmIzQzOzk3LDcgQEAgc3RydWN0IHB1YmxpY2F0aW9uIHtcbiAgKiBAY2x1c3Rlcl9zY29wZTogYWxsIGxvY2FsIHB1YmxpY2F0aW9ucyB3aXRoIGNsdXN0ZXIgc2NvcGVcbiAgKiAgICAgICAgICAgICAgIC0gdXNlZCBieSBuYW1lX2Rpc3RyIHRvIHNlbmQgYnVsayB1cGRhdGVzIHRvIG5ldyBub2Rlc1xuICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgZHVyaW5nIHJlLWluaXQgb2YgbmFtZSB0YWJsZVxuLSAqIEBjbHVzdGVyX3Njb3BlX2xvY2s6IGxvY2sgZm9yIGFjY2Vzc2luZyBAY2x1c3Rlcl9zY29wZVxuLSAqIEBsb2NhbF9wdWJsX2NvdW50OiBudW1iZXIgb2YgcHVibGljYXRpb25zIGlzc3VlZCBieSB0aGlzIG5vZGVcbiYjNDM7ICogQGxvY2FsX3B1YmxfY291bnQ6IHRoZSBudW1iZXIgb2YgdXNlciYjMzk7cyBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZVxuICAqIEByY19kZXN0czogZGVzdGluYXRpb24gbm9kZSBjb3VudGVyXG4gICogQHNuZF9ueHQ6IG5leHQgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHVzZWRcbiAgKi9cbkBAIC0xMDcsNyAmIzQzOzEwNiw2IEBAIHN0cnVjdCBuYW1lX3RhYmxlIHtcbiBcdHN0cnVjdCBobGlzdF9oZWFkIHNlcnZpY2VzW1RJUENfTkFNRVRCTF9TSVpFXTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbm9kZV9zY29wZTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgY2x1c3Rlcl9zY29wZTtcbi1cdHJ3bG9ja190IGNsdXN0ZXJfc2NvcGVfbG9jaztcbiBcdHUzMiBsb2NhbF9wdWJsX2NvdW50O1xuIFx0dTMyIHJjX2Rlc3RzO1xuIFx0dTMyIHNuZF9ueHQ7XG5AQCAtMTI2LDEzICYjNDM7MTI0LDE1IEBAIGJvb2wgdGlwY19uYW1ldGJsX2xvb2t1cF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiB2b2lkIHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2dyb3VwICpncnAsXG4gXHRcdFx0ICAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhKTtcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuLVx0XHRcdFx0XHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4mIzQzO1x0XHRcdFx0XHQgdTMyIGtleSwgaW50ICplcnIpO1xuIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdCAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4tXHRcdFx0XHRcdCAgICAgdTMyIGtleSk7XG4mIzQzO1x0XHRcdFx0XHQgICAgIHUzMiBrZXksIGludCAqZXJyKTtcbiYjNDM7aW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldCk7XG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcmVtb3ZlX3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmV0LmMgYi9uZXQvdGlwYy9uZXQuY1xuaW5kZXggN2U2NWQwYjBjNGE4ZC4uN2EyYzFlNjdhY2EzZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uZXQuY1xuQEAgLTExMCwxMSAmIzQzOzExMCwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTtcbiBcbiBpbnQgdGlwY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpub2RlX2lkLCB1MzIgYWRkcilcbiB7XG4mIzQzO1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4mIzQzO1xuIFx0aWYgKHRpcGNfb3duX2lkKG5ldCkpIHtcbiBcdFx0cHJfaW5mbyhcJiMzNDtDYW5ub3QgY29uZmlndXJlIG5vZGUgaWRlbnRpdHkgdHdpY2VcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXHRwcl9pbmZvKFwmIzM0O1N0YXJ0ZWQgaW4gbmV0d29yayBtb2RlXFxuXCYjMzQ7KTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQsIDApO1xuIFxuIFx0aWYgKG5vZGVfaWQpXG4gXHRcdHRpcGNfc2V0X25vZGVfaWQobmV0LCBub2RlX2lkKTtcbkBAIC0xMjUsOCAmIzQzOzEyOCw4IEBAIGludCB0aXBjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdTggKm5vZGVfaWQsIHUzMiBhZGRyKVxuIFxuIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4ge1xuLVx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4gXHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzayA9IHswLCBhZGRyfTtcbiYjNDM7XHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCB0aXBjX3VhZGRyIHVhO1xuIFxuIFx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG5AQCAtMTM4LDcgJiM0MzsxNDEsMTEgQEAgc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcbiBcdHRpcGNfbmFtZWRfcmVpbml0KG5ldCk7XG4gXHR0aXBjX3NrX3JlaW5pdChuZXQpO1xuIFx0dGlwY19tb25fcmVpbml0X3NlbGYobmV0KTtcbi1cdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBhZGRyKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQsIDEpO1xuJiM0MztcdC8qIFJlZGlzdHJpYnV0ZSBidWxrIG9mIHB1YmxpY2F0aW9ucyB2aWEgbm9kZS11cCBldmVudCBvciBub2RlJiMzOTtzIHRpbWVyXG4mIzQzO1x0ICogaWYgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBmYWlscy5cbiYjNDM7XHQgKi9cbiYjNDM7XHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgYWRkciwgTlVMTCk7XG4gfVxuIFxuIHZvaWQgdGlwY19uZXRfZmluYWxpemVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5jIGIvbmV0L3RpcGMvbm9kZS5jXG5pbmRleCA2ODNhMTM2ZTUzZWZjLi5mMWVlZTY3NGE2NzhlIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9ub2RlLmNcbkBAIC0xMTEsNiAmIzQzOzExMSw3IEBAIHN0cnVjdCB0aXBjX2JjbGlua19lbnRyeSB7XG4gICogQHBlZXJfbmV0OiBwZWVyJiMzOTtzIG5ldCBuYW1lc3BhY2VcbiAgKiBAcGVlcl9oYXNoX21peDogaGFzaCBmb3IgdGhpcyBwZWVyIChGSVhNRSlcbiAgKiBAY3J5cHRvX3J4OiBSWCBjcnlwdG8gaGFuZGxlclxuJiM0MzsgKiBAZGlzdF9idWxrOiBmbGFnIHRvIHJlZGlzdHJpYnV0ZSBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9uc1xuICAqL1xuIHN0cnVjdCB0aXBjX25vZGUge1xuIFx0dTMyIGFkZHI7XG5AQCAtMTQ1LDYgJiM0MzsxNDYsNyBAQCBzdHJ1Y3QgdGlwY19ub2RlIHtcbiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPXG4gXHRzdHJ1Y3QgdGlwY19jcnlwdG8gKmNyeXB0b19yeDtcbiAjZW5kaWZcbiYjNDM7XHRhdG9taWNfdCBkaXN0X2J1bGs7XG4gfTtcbiBcbiAvKiBOb2RlIEZTTSBzdGF0ZXMgYW5kIGV2ZW50czpcbkBAIC0zNDUsNiAmIzQzOzM0NywxNyBAQCBzdGF0aWMgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcbiBcdHJldHVybiBub2RlO1xuIH1cbiBcbiYjNDM7dm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRpcGNfbm9kZSAqbm9kZTtcbiYjNDM7XG4mIzQzO1x0bm9kZSA9IHRpcGNfbm9kZV9maW5kKG5ldCwgYWRkcik7XG4mIzQzO1x0aWYgKG5vZGUpIHtcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2bm9kZS1cdTAwM2VkaXN0X2J1bGssIDEpO1xuJiM0MztcdFx0dGlwY19ub2RlX3B1dChub2RlKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyogdGlwY19ub2RlX2ZpbmRfYnlfaWQgLSBsb2NhdGUgc3BlY2lmaWVkIG5vZGUgb2JqZWN0IGJ5IGl0cyAxMjgtYml0IGlkXG4gICogTm90ZTogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSB3aGVuIGEgZGlzY292ZXJ5IHJlcXVlc3QgZmFpbGVkXG4gICogdG8gZmluZCB0aGUgbm9kZSBieSBpdHMgMzItYml0IGlkLCBhbmQgaXMgbm90IHRpbWUgY3JpdGljYWxcbkBAIC0zOTMsNiAmIzQzOzQwNiwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrX2Zhc3Qoc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdHdyaXRlX3VubG9ja19iaChcdTAwMjZuLVx1MDAzZWxvY2spO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdGlwY19ub2RlX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbilcbiYjNDM7e1xuJiM0MztcdGludCBiZWFyZXJfaWQ7XG4mIzQzO1xuJiM0MztcdGZvciAoYmVhcmVyX2lkID0gMDsgYmVhcmVyX2lkIFx1MDAzYyBNQVhfQkVBUkVSUzsgYmVhcmVyX2lkJiM0MzsmIzQzOylcbiYjNDM7XHRcdHRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxuIFx0X19yZWxlYXNlcyhuLVx1MDAzZWxvY2spXG4ge1xuQEAgLTQwMiw2ICYjNDM7NDIzLDcgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxuIFx0c3RydWN0IGxpc3RfaGVhZCAqcHVibF9saXN0O1xuIFx0c3RydWN0IHRpcGNfdWFkZHIgdWE7XG4gXHR1MzIgYmVhcmVyX2lkLCBub2RlO1xuJiM0MztcdGludCByYyA9IDAsIGVyciA9IDA7XG4gXG4gXHRpZiAobGlrZWx5KCFmbGFncykpIHtcbiBcdFx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm4tXHUwMDNlbG9jayk7XG5AQCAtNDI1LDE2ICYjNDM7NDQ3LDI0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdFx0dGlwY19wdWJsX25vdGlmeShuZXQsIHB1YmxfbGlzdCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9OT0RFX1VQKVxuLVx0XHR0aXBjX25hbWVkX25vZGVfdXAobmV0LCBub2RlLCBuLVx1MDAzZWNhcGFiaWxpdGllcyk7XG4mIzQzO1x0XHRyYyA9IHRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tXHUwMDNlY2FwYWJpbGl0aWVzKTtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgVElQQ19OT1RJRllfTElOS19VUCkge1xuIFx0XHR0aXBjX21vbl9wZWVyX3VwKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTtcbi1cdFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIHNrLnJlZik7XG4mIzQzO1x0XHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmLCBcdTAwMjZlcnIpO1xuIFx0fVxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9MSU5LX0RPV04pIHtcbiBcdFx0dGlwY19tb25fcGVlcl9kb3duKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTtcbiBcdFx0dGlwY19uYW1ldGJsX3dpdGhkcmF3KG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBzay5yZWYpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHQvKiBNZW1vcnkgYWxsb2NhdGlvbiBoYXMgZmFpbGVkLiBCcmluZyB0aGUgbm9kZSBkb3duIHRvIHN0YXJ0IG92ZXIgYnVsa1xuJiM0MztcdCAqIGRpc3RyaWJ1dGlvbiB3aGVuIHRoZSBmaXJzdCBsaW5rIGlzIHVwIGFnYWluLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMClcbiYjNDM7XHRcdHRpcGNfbm9kZV9kb3duKG4pO1xuJiM0MztcdGVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUylcbiYjNDM7XHRcdHRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV9hc3NpZ25fcGVlcl9uZXQoc3RydWN0IHRpcGNfbm9kZSAqbiwgdTMyIGhhc2hfbWl4ZXMpXG5AQCAtNTY0LDYgJiM0Mzs1OTQsNyBAQCBzdHJ1Y3QgdGlwY19ub2RlICp0aXBjX25vZGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIsIHU4ICpwZWVyX2lkLFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bi1cdTAwM2VsaXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlcHVibF9saXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlY29ubl9za3MpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2bi1cdTAwM2VkaXN0X2J1bGssIDApO1xuIFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZuLVx1MDAzZWJjX2VudHJ5Lm5hbWVkcSk7XG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm4tXHUwMDNlYmNfZW50cnkuaW5wdXRxMSk7XG4gXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bi1cdTAwM2ViY19lbnRyeS5hcnJ2cSk7XG5AQCAtODAzLDcgJiM0Mzs4MzQsOCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdHN0cnVjdCB0aXBjX25vZGUgKm4gPSB0aW1lcl9jb250YWluZXJfb2YobiwgdCwgdGltZXIpO1xuIFx0c3RydWN0IHRpcGNfbGlua19lbnRyeSAqbGU7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHhtaXRxO1xuLVx0aW50IHJlbWFpbnMgPSBuLVx1MDAzZWxpbmtfY250O1xuJiM0MztcdGludCByZW1haW5zID0gMDtcbiYjNDM7XHRpbnQgZGlzdF9yYyA9IDA7XG4gXHRpbnQgYmVhcmVyX2lkO1xuIFx0aW50IHJjID0gMDtcbiBcbkBAIC04MTQsNiAmIzQzOzg0Niw5IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4mIzQzO1x0aWYgKGF0b21pY194Y2hnKFx1MDAyNm4tXHUwMDNlZGlzdF9idWxrLCAwKSlcbiYjNDM7XHRcdGRpc3RfcmMgPSB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUobi1cdTAwM2VuZXQsIG4tXHUwMDNlYWRkcik7XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfVElQQ19DUllQVE9cbiBcdC8qIFRha2UgYW55IGNyeXB0byBrZXkgcmVsYXRlZCBhY3Rpb25zIGZpcnN0ICovXG4gXHR0aXBjX2NyeXB0b190aW1lb3V0KG4tXHUwMDNlY3J5cHRvX3J4KTtcbkBAIC04MjUsNiAmIzQzOzg2MCw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0ICovXG4gXHR0aXBjX25vZGVfcmVhZF9sb2NrKG4pO1xuIFx0bi1cdTAwM2VrZWVwYWxpdmVfaW50diA9IDEwMDAwO1xuJiM0MztcdHJlbWFpbnMgPSBuLVx1MDAzZWxpbmtfY250O1xuIFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xuIFx0Zm9yIChiZWFyZXJfaWQgPSAwOyByZW1haW5zIFx1MDAyNlx1MDAyNiAoYmVhcmVyX2lkIFx1MDAzYyBNQVhfQkVBUkVSUyk7IGJlYXJlcl9pZCYjNDM7JiM0MzspIHtcbiBcdFx0dGlwY19ub2RlX3JlYWRfbG9jayhuKTtcbkBAIC04MzUsMTEgJiM0Mzs4NzEsMTMgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdFx0dGlwY19ub2RlX2NhbGN1bGF0ZV90aW1lcihuLCBsZS1cdTAwM2VsaW5rKTtcbiBcdFx0XHRyYyA9IHRpcGNfbGlua190aW1lb3V0KGxlLVx1MDAzZWxpbmssIFx1MDAyNnhtaXRxKTtcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsZS1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRyZW1haW5zLS07XG4mIzQzO1x0XHRcdGlmIChkaXN0X3JjIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJlbWFpbnMtLTtcbiBcdFx0fVxuIFx0XHR0aXBjX25vZGVfcmVhZF91bmxvY2sobik7XG4gXHRcdHRpcGNfYmVhcmVyX3htaXQobi1cdTAwM2VuZXQsIGJlYXJlcl9pZCwgXHUwMDI2eG1pdHEsIFx1MDAyNmxlLVx1MDAzZW1hZGRyLCBuKTtcbi1cdFx0aWYgKHJjIFx1MDAyNiBUSVBDX0xJTktfRE9XTl9FVlQpXG4mIzQzO1x0XHQvKiBGb3JjZSB0aGUgbm9kZSBkb3duIGluIGNhc2UgdGhlIHJlZGlzdHJpYnV0aW9uIGZhaWxlZCAqL1xuJiM0MztcdFx0aWYgKChyYyBcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKSB8fCBkaXN0X3JjIFx1MDAzYyAwKVxuIFx0XHRcdHRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7XG4gXHR9XG4gXHRtb2RfdGltZXIoXHUwMDI2bi1cdTAwM2V0aW1lciwgamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKG4tXHUwMDNla2VlcGFsaXZlX2ludHYpKTtcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmggYi9uZXQvdGlwYy9ub2RlLmhcbmluZGV4IDE1NGE1YmJiMGQyOWQuLjBmNzc3Y2ZlN2MwMWUgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9ub2RlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25vZGUuaFxuQEAgLTEyOCw0ICYjNDM7MTI4LDUgQEAgaW50IHRpcGNfbmxfbm9kZV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGludCB0aXBjX25sX25vZGVfZmx1c2hfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuICNlbmRpZlxuIHZvaWQgdGlwY19ub2RlX3ByZV9jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpleGl0X25ldCk7XG4mIzQzO3ZvaWQgdGlwY19ub2RlX3NldF9kaXN0X2J1bGsoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcik7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuY1xuaW5kZXggZDVkNzBlYjIzMGI1Ni4uNmI4M2JkZmM0MzljMyAxMDA2NDRcbi0tLSBhL25ldC90aXBjL3NvY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9zb2NrZXQuY1xuQEAgLTI5MTksNyAmIzQzOzI5MTksNyBAQCBzdGF0aWMgaW50IHRpcGNfc2tfcHVibGlzaChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcbiBcdFx0cmV0dXJuIC1FQUREUklOVVNFO1xuIFx0c2thZGRyLnJlZiA9IHRzay1cdTAwM2Vwb3J0aWQ7XG4gXHRza2FkZHIubm9kZSA9IHRpcGNfb3duX2FkZHIobmV0KTtcbi1cdHAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCBcdTAwMjZza2FkZHIsIGtleSk7XG4mIzQzO1x0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFx1MDAyNnNrYWRkciwga2V5LCBOVUxMKTtcbiBcdGlmICh1bmxpa2VseSghcCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19uYW1lZF9kaXN0cmlidXRlJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZXRibF9wdWJsaXNoJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZWRfbm9kZV91cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBUSVBDIGxvZ2ljIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBkdXJpbmcgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24uIEl0IGFkZHMgZXJyb3IgY29kZSByZXR1cm5zIHRvIGZ1bmN0aW9ucyBsaWtlIGB0aXBjX25hbWV0YmxfcHVibGlzaGAgYW5kIGB0aXBjX25hbWVkX25vZGVfdXBgLCBhbmQgaW50cm9kdWNlcyBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgIGFuZCBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCB0byBoYW5kbGUgYnVsayByZWRpc3RyaWJ1dGlvbiBvZiBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWE3YzNkNGI5YjQwYTkzZDMxMTQ1OWJjYmUyYmQ2NmJkOTIyZDM4NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA3OjAzOjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5jIGIvbmV0L3RpcGMvY29yZS5jCmluZGV4IDMxNTk3NWMzYmU4MTguLjBmMWQzZGRlYWUwOTUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9jb3JlLmMKQEAgLTYxLDYgJiM0Mzs2MSw5IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCB0aXBjX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAl0bi0mZ3Q7dHJpYWxfYWRkciA9IDA7CiAJdG4tJmd0O2FkZHJfdHJpYWxfZW5kID0gMDsKIAl0bi0mZ3Q7Y2FwYWJpbGl0aWVzID0gVElQQ19OT0RFX0NBUEFCSUxJVElFUzsKJiM0MzsJdG4tJmd0O250X3N0b3AgPSBmYWxzZTsKJiM0MzsJdG4tJmd0O250X3NlbGZfbm9kZV9leGlzdCA9IGZhbHNlOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7dG4tJmd0O25vZGVfYWRkcl9zZXQsIDApOwogCUlOSVRfV09SSygmYW1wO3RuLSZndDt3b3JrLCB0aXBjX25ldF9maW5hbGl6ZV93b3JrKTsKIAltZW1zZXQodG4tJmd0O25vZGVfaWQsIDAsIHNpemVvZih0bi0mZ3Q7bm9kZV9pZCkpOwogCW1lbXNldCh0bi0mZ3Q7bm9kZV9pZF9zdHJpbmcsIDAsIHNpemVvZih0bi0mZ3Q7bm9kZV9pZF9zdHJpbmcpKTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuaCBiL25ldC90aXBjL2NvcmUuaAppbmRleCA5Y2U1ZjlmZjZjYzAzLi45NzViMWQ0ODE4NmU2IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvY29yZS5oCkBAIC0xNDUsNiAmIzQzOzE0NSwxMiBAQCBzdHJ1Y3QgdGlwY19uZXQgewogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCS8qIFRoZSBudW1iZXJzIG9mIHdvcmsgcXVldWVzIGluIHNjaGVkdWxlICovCiAJYXRvbWljX3Qgd3FfY291bnQ7CiYjNDM7CS8qIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbm9kZSYjMzk7cyBhZGRyZXNzIGlzIHNldCAqLwomIzQzOwlhdG9taWNfdCBub2RlX2FkZHJfc2V0OwomIzQzOwkvKiBUaGUgbmFtZSB0YWJsZSBoYXMgc3RvcHBlZCB3b3JraW5nICovCiYjNDM7CWJvb2wgbnRfc3RvcDsKJiM0MzsJLyogTm9kZSYjMzk7cyBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBuYW1lIHRhYmxlICovCiYjNDM7CWJvb2wgbnRfc2VsZl9ub2RlX2V4aXN0OwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlwY19uZXQgKnRpcGNfbmV0KHN0cnVjdCBuZXQgKm5ldCkKZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuYyBiL25ldC90aXBjL25hbWVfZGlzdHIuYwppbmRleCBiYTRmNDkwNmUxM2I3Li44M2UzZWQ4ZjJjNTEyIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCkBAIC05NSw5ICYjNDM7OTUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKQogCQlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO3AtJmd0O2JpbmRpbmdfbm9kZSwgJmFtcDtudC0mZ3Q7bm9kZV9zY29wZSk7CiAJCXJldHVybiBOVUxMOwogCX0KLQl3cml0ZV9sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmYW1wO3AtJmd0O2JpbmRpbmdfbm9kZSwgJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiAJc2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgSVRFTV9TSVpFLCAwKTsKIAlpZiAoIXNrYikgewogCQlwcl93YXJuKCYjMzQ7UHVibGljYXRpb24gZGlzdHJpYnV0aW9uIGZhaWx1cmVcbiYjMzQ7KTsKQEAgLTEyMSw5ICYjNDM7MTE5LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnApCiAJc3RydWN0IGRpc3RyX2l0ZW0gKml0ZW07CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCXdyaXRlX2xvY2tfYmgoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKIAlsaXN0X2RlbCgmYW1wO3AtJmd0O2JpbmRpbmdfbm9kZSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiAJaWYgKHAtJmd0O3Njb3BlID09IFRJUENfTk9ERV9TQ09QRSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTE0Niw5ICYjNDM7MTQyLDE0IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKQogICogQGRub2RlOiBub2RlIHRvIGJlIHVwZGF0ZWQKICAqIEBwbHM6IGxpbmtlZCBsaXN0IG9mIHB1YmxpY2F0aW9uIGl0ZW1zIHRvIGJlIHBhY2tlZCBpbnRvIGJ1ZmZlciBjaGFpbgogICogQHNlcW5vOiBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgbWVzc2FnZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3MKJiM0MzsgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlCiYjNDM7ICoKICAqLwotc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCi0JCQkgICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pCiYjNDM7c3RhdGljIGludCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKJiM0MzsJCQkgICAgdTMyIGRub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbHMsIHUxNiBzZXFubykKIHsKIAlzdHJ1Y3QgcHVibGljYXRpb24gKnB1Ymw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CkBAIC0xNjQsOCAmIzQzOzE2NSw5IEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAogCQkJc2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgbXNnX3JlbSwKIAkJCQkJCWRub2RlKTsKIAkJCWlmICghc2tiKSB7CiYjNDM7CQkJCV9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpOwogCQkJCXByX3dhcm4oJiMzNDtCdWxrIHB1YmxpY2F0aW9uIGZhaWx1cmVcbiYjMzQ7KTsKLQkJCQlyZXR1cm47CiYjNDM7CQkJCXJldHVybiAtRU5PQlVGUzsKIAkJCX0KIAkJCWhkciA9IGJ1Zl9tc2coc2tiKTsKIAkJCW1zZ19zZXRfYmNfYWNrX2ludmFsaWQoaGRyLCB0cnVlKTsKQEAgLTE5NSw2ICYjNDM7MTk3LDkwIEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAogCWhkciA9IGJ1Zl9tc2coc2tiX3BlZWtfdGFpbChsaXN0KSk7CiAJbXNnX3NldF9sYXN0X2J1bGsoaGRyKTsKIAltc2dfc2V0X25hbWVkX3NlcW5vKGhkciwgc2Vxbm8pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBidWlsZCBhIGxpc3Qgb2YgcHVibGljYXRpb25zIG5lZWQgdG8gYmUgZGlzdHJpYnV0ZWQKJiM0MzsgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZQomIzQzOyAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZQomIzQzOyAqIEBoZWFkOiBsaXN0IG9mIHB1YmxpY2F0aW9ucwomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3MKJiM0MzsgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlCiYjNDM7ICoKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLAomIzQzOwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoZWFkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7CiYjNDM7CXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwomIzQzOwomIzQzOwkvKiBOYW1lIHRhYmxlIGhhcyBiZWVuIGRlbGV0ZWQgYWZ0ZXIgbmFtZXNwYWNlIHRlYXJkb3duIG9yCiYjNDM7CSAqIFRJUEMgbW9kdWxlIGV4aXQuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkodG4tJmd0O250X3N0b3ApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIE5vZGUmIzM5O3Mgc2VsZi1hZGRyZXNzIGlzIG5vdCBzZXQgeWV0ICovCiYjNDM7CWlmICghYXRvbWljX3JlYWQoJmFtcDt0bi0mZ3Q7bm9kZV9hZGRyX3NldCkpIHsKJiM0MzsJCS8qIERlZmVyIHRoZSBkaXN0cmlidXRpb24gdG8gbm9kZSYjMzk7cyB0aW1lciAqLwomIzQzOwkJdGlwY19ub2RlX3NldF9kaXN0X2J1bGsobmV0LCBkbm9kZSk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQcmV2aW91cyBjYWxsIHRvIHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKCkgd2FzIHN1Y2Nlc3NmdWwuCiYjNDM7CSAqIFRoZSBub2RlJiMzOTtzIHNlbGYtYWRkcmVzcyBwdWJsaWNhdGlvbiB3YXMgYWRkZWQgdG8gJiMzOTtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSYjMzk7LgomIzQzOwkgKiBTbywgJiMzOTtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSYjMzk7IGlzIG5vdCBlbXB0eSBub3cuIEdvIHRvIGRpc3RyaWJ1dGlvbi4KJiM0MzsJICovCiYjNDM7CWlmICh0bi0mZ3Q7bnRfc2VsZl9ub2RlX2V4aXN0KQomIzQzOwkJZ290byBkaXN0cmlidXRlOwomIzQzOwomIzQzOwlpZiAodGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIobmV0KSkKJiM0MzsJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsKJiM0MzsJdG4tJmd0O250X3NlbGZfbm9kZV9leGlzdCA9IHRydWU7CiYjNDM7CiYjNDM7ZGlzdHJpYnV0ZToKJiM0MzsJaWYgKG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBoZWFkLCBkbm9kZSwKJiM0MzsJCQkgICAgICZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGUsIG50LSZndDtzbmRfbnh0KSA9PSAtRU5PQlVGUykKJiM0MzsJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHRpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGRpc3RyaWJ1dGUgYWxsIHB1YmxpY2F0aW9ucyB0byBzcGVjaWZpZWQgbm9kZQomIzQzOyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgomIzQzOyAqLwomIzQzO2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkOwomIzQzOwlpbnQgcmMgPSAwOwomIzQzOwomIzQzOwlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtoZWFkKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiYjNDM7CXJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgJmFtcDtoZWFkKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKJiM0MzsJaWYgKCFyYyAmYW1wOyZhbXA7ICFza2JfcXVldWVfZW1wdHkoJmFtcDtoZWFkKSkgewomIzQzOwkJcmMgPSB0aXBjX25vZGVfeG1pdChuZXQsICZhbXA7aGVhZCwgZG5vZGUsIDApOwomIzQzOwkJLyogVGhlIGxpbmsgaXMgY29uZ2VzdGVkIGFmdGVyIHRoZSBsaXN0IGlzIGluc2VydGVkIGludG8gdGhlCiYjNDM7CQkgKiBsaW5rJiMzOTtzIHNlbmQgcXVldWUuIFJldHVybiAwLCBhcyB0aGlzIGlzIG5vcm1hbC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHJjID09IC1FTElOS0NPTkcpCiYjNDM7CQkJcmMgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0yMDIsMjUgJiM0MzsyODgsMzYgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCiAgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZQogICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlCiAgKiBAY2FwYWJpbGl0aWVzOiBwZWVyIG5vZGUmIzM5O3MgY2FwYWJpbGl0aWVzCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgogICovCi12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcykKJiM0MztpbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKQogewogCXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwogCXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCBza19idWZmX2hlYWQgaGVhZDsKLQl1MTYgc2Vxbm87CiYjNDM7CWludCByYyA9IDA7CiAKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtoZWFkKTsKIAlzcGluX2xvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKIAlpZiAoIShjYXBhYmlsaXRpZXMgJmFtcDsgVElQQ19OQU1FRF9CQ0FTVCkpCiAJCW50LSZndDtyY19kZXN0cyYjNDM7JiM0Mzs7Ci0Jc2Vxbm8gPSBudC0mZ3Q7c25kX254dDsKJiM0MzsKJiM0MzsJcmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCAmYW1wO2hlYWQpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiYjNDM7CWlmICghcmMgJmFtcDsmYW1wOyAhc2tiX3F1ZXVlX2VtcHR5KCZhbXA7aGVhZCkpIHsKJiM0MzsJCXJjID0gdGlwY19ub2RlX3htaXQobmV0LCAmYW1wO2hlYWQsIGRub2RlLCAwKTsKJiM0MzsJCS8qIFRoZSBsaW5rIGlzIGNvbmdlc3RlZCBhZnRlciB0aGUgbGlzdCBpcyBpbnNlcnRlZCBpbnRvIHRoZQomIzQzOwkJICogbGluayYjMzk7cyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyYyA9PSAtRUxJTktDT05HKQomIzQzOwkJCXJjID0gMDsKJiM0MzsJfQogCi0JcmVhZF9sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7Ci0JbmFtZWRfZGlzdHJpYnV0ZShuZXQsICZhbXA7aGVhZCwgZG5vZGUsICZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGUsIHNlcW5vKTsKLQl0aXBjX25vZGVfeG1pdChuZXQsICZhbXA7aGVhZCwgZG5vZGUsIDApOwotCXJlYWRfdW5sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiYjNDM7CXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0yOTksNyAmIzQzOzM5Niw3IEBAIHN0YXRpYyBib29sIHRpcGNfdXBkYXRlX25hbWV0Ymwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZGlzdHJfaXRlbSAqaSwKIAlzay5ub2RlID0gbm9kZTsKIAogCWlmIChkdHlwZSA9PSBQVUJMSUNBVElPTikgewotCQlwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgJmFtcDt1YSwgJmFtcDtzaywga2V5KTsKJiM0MzsJCXAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBrZXksIE5VTEwpOwogCQlpZiAocCkgewogCQkJdGlwY19ub2RlX3N1YnNjcmliZShuZXQsICZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlLCBub2RlKTsKIAkJCXJldHVybiB0cnVlOwpAQCAtNDE2LDUgJiM0Mzs1MTMsNiBAQCB2b2lkIHRpcGNfbmFtZWRfcmVpbml0KHN0cnVjdCBuZXQgKm5ldCkKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCAmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlLCBiaW5kaW5nX25vZGUpCiAJCXAtJmd0O3NrLm5vZGUgPSBzZWxmOwogCW50LSZndDtyY19kZXN0cyA9IDA7CiYjNDM7CXRuLSZndDtudF9zdG9wID0gZmFsc2U7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaAppbmRleCBjNjc3ZjZmMDgyZGZiLi4yMDQzMDk2YWU5NjdkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oCkBAIC02OSwxMSAmIzQzOzY5LDEyIEBAIHN0cnVjdCBkaXN0cl9pdGVtIHsKIAogc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7CiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7Ci12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7CiYjNDM7aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7CiB2b2lkIHRpcGNfbmFtZWRfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbmFtZWRxLAogCQkgICAgdTE2ICpyY3Zfbnh0LCBib29sICpvcGVuKTsKIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KTsKIHZvaWQgdGlwY19wdWJsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKm5zdWJfbGlzdCwKIAkJICAgICAgdTMyIGFkZHIsIHUxNiBjYXBhYmlsaXRpZXMpOwomIzQzO2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuYwppbmRleCAyNTNjNzJkMTM2NmViLi5iZWVkNDBhMjEzNjhhIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jCkBAIC0zMjksNyAmIzQzOzMyOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYywKIAogc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkgICAgIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLAotCQkJCSAgICAgc3RydWN0IHB1YmxpY2F0aW9uICpwKQomIzQzOwkJCQkgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcCwgaW50ICplcnIpCiB7CiAJc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uICpzdWIsICp0bXA7CiAJc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyOwpAQCAtMzM5LDEwICYjNDM7MzM5LDEyIEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJYm9vbCByZXMgPSBmYWxzZTsKIAl1MzIga2V5ID0gcC0mZ3Q7a2V5OwogCi0Jc3Bpbl9sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwogCXNyID0gdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzYywgcCk7Ci0JaWYgKCFzcikKLQkJZ290byAgZXhpdDsKJiM0MzsJaWYgKCFzcikgewomIzQzOwkJaWYgKGVycikKJiM0MzsJCQkqZXJyID0gLUVOT0JVRlM7CiYjNDM7CQlnb3RvIGV4aXQ7CiYjNDM7CX0KIAogCWZpcnN0ID0gbGlzdF9lbXB0eSgmYW1wO3NyLSZndDthbGxfcHVibCk7CiAKQEAgLTM1Myw2ICYjNDM7MzU1LDggQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIGJpbmQgZHVwbGljYXRlICV1LCV1LCV1LyV1OiV1LyV1XG4mIzM0OywKIAkJCQkgcC0mZ3Q7c3IudHlwZSwgcC0mZ3Q7c3IubG93ZXIsIHAtJmd0O3NyLnVwcGVyLAogCQkJCSBub2RlLCBwLSZndDtzay5yZWYsIGtleSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJKmVyciA9IC1FRVhJU1Q7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CkBAIC0zNzEsNyAmIzQzOzM3NSw2IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJaWYgKCFyZXMpCiAJCXByX3dhcm4oJiMzNDtGYWlsZWQgdG8gYmluZCB0byAldSwldSwldVxuJiMzNDssCiAJCQlwLSZndDtzci50eXBlLCBwLSZndDtzci5sb3dlciwgcC0mZ3Q7c3IudXBwZXIpOwotCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTQ3OCwyMCAmIzQzOzQ4MSwzMyBAQCBzdGF0aWMgc3RydWN0IHRpcGNfc2VydmljZSAqdGlwY19zZXJ2aWNlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LAogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCi0JCQkJCSAgICAgdTMyIGtleSkKJiM0MzsJCQkJCSAgICAgdTMyIGtleSwgaW50ICplcnIpCiB7CiAJc3RydWN0IHRpcGNfc2VydmljZSAqc2M7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwOwogCiAJcCA9IHRpcGNfcHVibF9jcmVhdGUodWEsIHNrLCBrZXkpOwotCWlmICghcCkKJiM0MzsJaWYgKCFwKSB7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCSplcnIgPSAtRU5PQlVGUzsKIAkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KIAogCXNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCB1YSk7CiAJaWYgKCFzYykKIAkJc2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgdWEpOwotCWlmIChzYyAmYW1wOyZhbXA7IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwKSkKLQkJcmV0dXJuIHA7CiYjNDM7CiYjNDM7CWlmIChzYykgewomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwomIzQzOwkJaWYgKHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwLCBlcnIpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CQkJcmV0dXJuIHA7CiYjNDM7CQl9CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3NjLSZndDtsb2NrKTsKJiM0MzsJfSBlbHNlIGlmIChlcnIpIHsKJiM0MzsJCSplcnIgPSAtRU5PQlVGUzsKJiM0MzsJfQomIzQzOwogCWtmcmVlKHApOwogCXJldHVybiBOVUxMOwogfQpAQCAtNzYwLDI2ICYjNDM7Nzc2LDU1IEBAIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCwKIC8qIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIHNlcnZpY2UgYmluZGluZyB0byBuYW1lIHRhYmxlCiAgKi8KIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCi0JCQkJCSBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpCiYjNDM7CQkJCQkgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLAomIzQzOwkJCQkJIHUzMiBrZXksIGludCAqZXJyKQogewogCXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwomIzQzOwl1MzIgbWF4X3VzZXJfcHViID0gVElQQ19NQVhfUFVCTCAtIDE7CiAJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKJiM0MzsJYm9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7CiYjNDM7CWludCBlcnJvciA9IDA7CiAJdTMyIHJjX2Rlc3RzOwogCiYjNDM7CWlmICh1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgfHwgdWEtJmd0O3NyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8CiYjNDM7CSAgICB1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpCiYjNDM7CQlwcm90b2NvbF90eXBlID0gdHJ1ZTsKJiM0MzsKIAlzcGluX2xvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKJiM0MzsJaWYgKHByb3RvY29sX3R5cGUpCiYjNDM7CQlnb3RvIGluc2VydDsKIAotCWlmIChudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCAmZ3Q7PSBUSVBDX01BWF9QVUJMKSB7Ci0JCXByX3dhcm4oJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcbiYjMzQ7LCBUSVBDX01BWF9QVUJMKTsKJiM0MzsJLyogUmVzZXJ2ZSBvbmUgZW50cnkgZm9yIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlIGJlY2F1c2UgaXQgaGFzIGNsdXN0ZXIKJiM0MzsJICogc2NvcGUgYW5kIGl0IGlzIGRpc3RyaWJ1dGVkIGluIGJ1bGsuIFNvLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdXNlciYjMzk7cwomIzQzOwkgKiBwdWJsaWNhdGlvbnMgaXMgKFRJUENfTUFYX1BVQkwgLSAxKS4KJiM0MzsJICovCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCAmZ3Q7PSBtYXhfdXNlcl9wdWIpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcbiYjMzQ7LCBtYXhfdXNlcl9wdWIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0JcCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIHVhLCBzaywga2V5KTsKJiM0MztpbnNlcnQ6CiYjNDM7CXAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSwgJmFtcDtlcnJvcik7CiAJaWYgKHApIHsKLQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQmIzQzOyYjNDM7OwomIzQzOwkJLyogTm90IGNvdW50IG5vZGUgc3RhdGUsIGxpbmsgc3RhdGUgYW5kIHRvcG9sb2d5IHNlcnZlciB0eXBlcwomIzQzOwkJICogc28gdGhhdCBtYXhpbXVtIG50LSZndDtsb2NhbF9wdWJsX2NvdW50IGRvZXMgbm90IHByZXZlbnQKJiM0MzsJCSAqIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgZnJvbSBiZWluZyBpbnNlcnRlZCBpbnRvIHRoZSBuYW1lCiYjNDM7CQkgKiB0YWJsZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFwcm90b2NvbF90eXBlKQomIzQzOwkJCW50LSZndDtsb2NhbF9wdWJsX2NvdW50JiM0MzsmIzQzOzsKIAkJc2tiID0gdGlwY19uYW1lZF9wdWJsaXNoKG5ldCwgcCk7CiYjNDM7CQkvKiBMb2NhbC1zY29wZSBwdWJsaWNhdGlvbiBpcyBub3QgcHVibGlzaGVkIChza2IgaXMgTlVMTCksIG9ubHkKJiM0MzsJCSAqIGNsdXN0ZXItY29wZSBvbmUgaXMuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghc2tiICZhbXA7JmFtcDsgcC0mZ3Q7c2NvcGUgPT0gVElQQ19DTFVTVEVSX1NDT1BFICZhbXA7JmFtcDsgZXJyKQomIzQzOwkJCSplcnIgPSAtRU5PQlVGUzsKJiM0MzsJfSBlbHNlIGlmICgoZXJyb3IgPT0gLUVOT0JVRlMpICZhbXA7JmFtcDsgZXJyKSB7CiYjNDM7CQkqZXJyID0gLUVOT0JVRlM7CiAJfQomIzQzOwogCXJjX2Rlc3RzID0gbnQtJmd0O3JjX2Rlc3RzOwogZXhpdDoKIAlzcGluX3VubG9ja19iaCgmYW1wO3RuLSZndDtuYW1ldGJsX2xvY2spOwpAQCAtNzg3LDcgJiM0Mzs4MzIsMTAyIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAJaWYgKHNrYikKIAkJdGlwY19ub2RlX2Jyb2FkY2FzdChuZXQsIHNrYiwgcmNfZGVzdHMpOwogCXJldHVybiBwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiAtIGluc2VydCBwdWJsaWNhdGlvbiBvZiBub2RlJiMzOTtzIHNlbGYgYWRkcmVzcwomIzQzOyAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgomIzQzOyAqLwomIzQzO2ludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTsKJiM0MzsJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiYjNDM7CXN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrOwomIzQzOwlzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3I7CiYjNDM7CXN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjOwomIzQzOwlib29sIHNjX2NyZWF0ZWQgPSBmYWxzZTsKJiM0MzsJc3RydWN0IHB1YmxpY2F0aW9uICpwOwomIzQzOwlzdHJ1Y3QgdGlwY191YWRkciB1YTsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CXNrLnJlZiA9IDA7CiYjNDM7CXNrLm5vZGUgPSB0bi0mZ3Q7bm9kZV9hZGRyOwomIzQzOwl0aXBjX3VhZGRyKCZhbXA7dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLAomIzQzOwkJICAgVElQQ19OT0RFX1NUQVRFLCB0bi0mZ3Q7bm9kZV9hZGRyLCB0bi0mZ3Q7bm9kZV9hZGRyKTsKJiM0MzsJc2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsICZhbXA7dWEpOwomIzQzOwlpZiAoIXNjKSB7CiYjNDM7CQlzYyA9IHRpcGNfc2VydmljZV9jcmVhdGUobmV0LCAmYW1wO3VhKTsKJiM0MzsJCWlmICghc2MpCiYjNDM7CQkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwkJc2NfY3JlYXRlZCA9IHRydWU7CiYjNDM7CX0KIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CS8qIENoZWNrIHdoZXRoZXIgYSByYW5nZSBleGlzdHMgaW4gdGhlIG5hbWUgdGFibGUgd2l0aAomIzQzOwkgKiBsb3dlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyLCB1cHBlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyLCBhbmQgdHlwZQomIzQzOwkgKiBUSVBDX05PREVfU1RBVEUgKDApLiBJZiAmIzM5O3NyJiMzOTsgaXMgbm90IE5VTEwsIHRoaXMgcmFuZ2UgZXhpc3RzCiYjNDM7CSAqIGR1ZSB0byBhIHByZXZpb3VzIGNhbGwgdG8gdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoKQomIzQzOwkgKiBvciB0aXBjX25ldF9maW5hbGl6ZSgpLgomIzQzOwkgKgomIzQzOwkgKiBOb3RlIHRoYXQgdXNlciBhcHBsaWNhdGlvbnMgY2FuIG9ubHkgaW5zZXJ0IHR5cGVzIGdyZWF0ZXIgdGhhbgomIzQzOwkgKiBvciBlcXVhbCB0byA2NCAoVElQQ19SRVNFUlZFRF9UWVBFUyksIGFzIGVuZm9yY2VkIGJ5IHRpcGNfYmluZCgpLgomIzQzOwkgKiBSZW1vdGUgbm9kZXMgYWxzbyBvbmx5IHNlbmQgcHJvdG9jb2wgcHVibGljYXRpb25zIHdpdGggdHlwZQomIzQzOwkgKiBUSVBDX05PREVfU1RBVEUgKDApLCB3aXRoIGJvdGggbG93ZXIgYW5kIHVwcGVyIHNldCB0byB0aGUgcmVtb3RlCiYjNDM7CSAqIG5vZGUmIzM5O3MgYWRkcmVzcy4gVGhlc2UgcmFuZ2VzIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGlzIG5vZGUmIzM5O3MKJiM0MzsJICogcmFuZ2UgYmVjYXVzZSBhIHJlbW90ZSBub2RlJiMzOTtzIGFkZHJlc3MgbXVzdCBkaWZmZXIgZnJvbSB0aGlzCiYjNDM7CSAqIG5vZGUmIzM5O3MgYWRkcmVzcyAodG4tJmd0O25vZGVfYWRkcikuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZXJlZm9yZSwgdGlwY191cGRhdGVfbmFtZXRibCgpIGNhbm5vdCBidWlsZCBhbmQgaW5zZXJ0IGEgcmVtb3RlCiYjNDM7CSAqIHB1YmxpY2F0aW9uIHdpdGggdGhlIHNhbWUgdHlwZSAoMCkgYW5kIHJhbmdlCiYjNDM7CSAqIChsb3dlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyLCB1cHBlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyKSBhcyB0aGlzIG5vZGUmIzM5O3MKJiM0MzsJICogc2VsZi1hZGRyZXNzIHB1YmxpY2F0aW9uIGluIHRoZSBuYW1lIHRhYmxlLgomIzQzOwkgKgomIzQzOwkgKiBCZWNhdXNlIHRoZSBjb21iaW5hdGlvbiBvZiB0eXBlIDAgYW5kCiYjNDM7CSAqIChsb3dlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyLCB1cHBlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyKSBpcyB1bmlxdWUgaW4gdGhlCiYjNDM7CSAqIG5hbWUgdGFibGUsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY2hlY2sgc2subm9kZSwgc2sucmVmLCBrZXksIG9yCiYjNDM7CSAqIGNsdXN0ZXJfc2NvcGUgbWVtYmVyc2hpcC4KJiM0MzsJICovCiYjNDM7CXNyID0gdGlwY19zZXJ2aWNlX2ZpbmRfcmFuZ2Uoc2MsICZhbXA7dWEpOwomIzQzOwkvKiAxLiB0aXBjX25ldF9maW5hbGl6ZV93b3JrKCkgaXMgbm90IHNjaGVkdWxlZCBiZWNhdXNlIG9mIG5hbWVzcGFjZQomIzQzOwkgKiAgICB0ZWFyZG93bi4KJiM0MzsJICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS0mZ3Q7IHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIGZhaWxlZAomIzQzOwkgKiAgICB0byBpbnNlcnQgbm9kZSBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaW50byBudC0mZ3Q7Y2x1c3Rlcl9zY29wZQomIzQzOwkgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4KJiM0MzsJICogMy4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS0mZ3Q7IHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdAomIzQzOwkgKiAgICBleGVjdXRlZCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXNyKSB7CiYjNDM7CQlwID0gdGlwY19wdWJsX2NyZWF0ZSgmYW1wO3VhLCAmYW1wO3NrLCB0bi0mZ3Q7bm9kZV9hZGRyKTsKJiM0MzsJCWlmICghcCkKJiM0MzsJCQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwkJaWYgKCF0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgJmFtcDtlcnIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoZXJyID09IC1FTk9CVUZTKSkgewomIzQzOwkJCWtmcmVlKHApOwomIzQzOwkJCWdvdG8gZXJyb3I7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlsaXN0X2FkZF90YWlsKCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlLCAmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlKTsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MztlcnJvcjoKJiM0MzsJCWlmIChzY19jcmVhdGVkKSB7CiYjNDM7CQkJaGxpc3RfZGVsX2luaXRfcmN1KCZhbXA7c2MtJmd0O3NlcnZpY2VfbGlzdCk7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CQkJa2ZyZWVfcmN1KHNjLCByY3UpOwomIzQzOwkJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwl9CiYjNDM7ZXhpdDoKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiAwOwogfQogCiAvKioKQEAgLTgxMCw3ICYjNDM7OTUwLDEwIEBAIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAogCiAJcCA9IHRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChuZXQsIHVhLCBzaywga2V5KTsKIAlpZiAocCkgewotCQludC0mZ3Q7bG9jYWxfcHVibF9jb3VudC0tOwomIzQzOwkJaWYgKHAtJmd0O3NyLnR5cGUgIT0gVElQQ19OT0RFX1NUQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwLSZndDtzci50eXBlICE9IFRJUENfTElOS19TVEFURSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcC0mZ3Q7c3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpCiYjNDM7CQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQtLTsKIAkJc2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApOwogCQlsaXN0X2RlbF9pbml0KCZhbXA7cC0mZ3Q7YmluZGluZ19zb2NrKTsKIAkJa2ZyZWVfcmN1KHAsIHJjdSk7CkBAIC04OTksNyAmIzQzOzEwNDIsNiBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KQogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtudC0mZ3Q7bm9kZV9zY29wZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSk7Ci0Jcndsb2NrX2luaXQoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKIAl0bi0mZ3Q7bmFtZXRibCA9IG50OwogCXNwaW5fbG9ja19pbml0KCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiAJcmV0dXJuIDA7CkBAIC05MTIsNiAmIzQzOzEwNTQsNyBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KQogICovCiBzdGF0aWMgdm9pZCB0aXBjX3NlcnZpY2VfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc2VydmljZSAqc2MpCiB7CiYjNDM7CXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzciwgKnRtcHI7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwLCAqdG1wOwogCkBAIC05MTksNiAmIzQzOzEwNjIsMTUgQEAgc3RhdGljIHZvaWQgdGlwY19zZXJ2aWNlX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjKQogCXJidHJlZV9wb3N0b3JkZXJfZm9yX2VhY2hfZW50cnlfc2FmZShzciwgdG1wciwgJmFtcDtzYy0mZ3Q7cmFuZ2VzLCB0cmVlX25vZGUpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgJmFtcDtzci0mZ3Q7YWxsX3B1YmwsIGFsbF9wdWJsKSB7CiAJCQl0aXBjX3NlcnZpY2VfcmVtb3ZlX3B1Ymwoc3IsICZhbXA7cC0mZ3Q7c2ssIHAtJmd0O2tleSk7CiYjNDM7CQkJLyogdGlwY19uYW1ldGJsX3dpdGhkcmF3KCkgZG9lcyBub3QgZGVsZXRlCiYjNDM7CQkJICogJiMzOTtwLSZndDtiaW5kaW5nX25vZGUmIzM5OyB3aXRoIHR5cGUgVElQQ19OT0RFX1NUQVRFIGFuZAomIzQzOwkJCSAqIHJhbmdlIFt0bi0mZ3Q7bm9kZV9hZGRyLCB0bi0mZ3Q7bm9kZV9hZGRyXSBmcm9tCiYjNDM7CQkJICogJiMzOTt0bi0mZ3Q7Y2x1c3Rlcl9zY29wZSYjMzk7LiBTbywgZGVsZXRlIGl0IGhlcmUuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHAtJmd0O3NyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgcC0mZ3Q7c3IubG93ZXIgPT0gdG4tJmd0O25vZGVfYWRkciAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHAtJmd0O3NyLnVwcGVyID09IHRuLSZndDtub2RlX2FkZHIpCiYjNDM7CQkJCWxpc3RfZGVsKCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlKTsKIAkJCWtmcmVlX3JjdShwLCByY3UpOwogCQl9CiAJCXJiX2VyYXNlX2F1Z21lbnRlZCgmYW1wO3NyLSZndDt0cmVlX25vZGUsICZhbXA7c2MtJmd0O3JhbmdlcywgJmFtcDtzcl9jYWxsYmFja3MpOwpAQCAtOTQ5LDYgJiM0MzsxMTAxLDggQEAgdm9pZCB0aXBjX25hbWV0Ymxfc3RvcChzdHJ1Y3QgbmV0ICpuZXQpCiAJCQl0aXBjX3NlcnZpY2VfZGVsZXRlKG5ldCwgc2VydmljZSk7CiAJCX0KIAl9CiYjNDM7CXRuLSZndDtudF9zdG9wID0gdHJ1ZTsKJiM0MzsJdG4tJmd0O250X3NlbGZfbm9kZV9leGlzdCA9IGZhbHNlOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiAKIAkvKiBUT0RPOiBjbGVhciB0bi0mZ3Q7bmFtZXRibCwgaW1wbGVtZW50IHByb3BlciBSQ1UgcnVsZXMgPyAqLwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV90YWJsZS5oIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oCmluZGV4IDdmZjZlZWViYWFlNjQuLjQzOTBlNzlhNDY2MGUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmgKQEAgLTk3LDggJiM0Mzs5Nyw3IEBAIHN0cnVjdCBwdWJsaWNhdGlvbiB7CiAgKiBAY2x1c3Rlcl9zY29wZTogYWxsIGxvY2FsIHB1YmxpY2F0aW9ucyB3aXRoIGNsdXN0ZXIgc2NvcGUKICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgdG8gc2VuZCBidWxrIHVwZGF0ZXMgdG8gbmV3IG5vZGVzCiAgKiAgICAgICAgICAgICAgIC0gdXNlZCBieSBuYW1lX2Rpc3RyIGR1cmluZyByZS1pbml0IG9mIG5hbWUgdGFibGUKLSAqIEBjbHVzdGVyX3Njb3BlX2xvY2s6IGxvY2sgZm9yIGFjY2Vzc2luZyBAY2x1c3Rlcl9zY29wZQotICogQGxvY2FsX3B1YmxfY291bnQ6IG51bWJlciBvZiBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZQomIzQzOyAqIEBsb2NhbF9wdWJsX2NvdW50OiB0aGUgbnVtYmVyIG9mIHVzZXImIzM5O3MgcHVibGljYXRpb25zIGlzc3VlZCBieSB0aGlzIG5vZGUKICAqIEByY19kZXN0czogZGVzdGluYXRpb24gbm9kZSBjb3VudGVyCiAgKiBAc25kX254dDogbmV4dCBzZXF1ZW5jZSBudW1iZXIgdG8gYmUgdXNlZAogICovCkBAIC0xMDcsNyAmIzQzOzEwNiw2IEBAIHN0cnVjdCBuYW1lX3RhYmxlIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBzZXJ2aWNlc1tUSVBDX05BTUVUQkxfU0laRV07CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlX3Njb3BlOwogCXN0cnVjdCBsaXN0X2hlYWQgY2x1c3Rlcl9zY29wZTsKLQlyd2xvY2tfdCBjbHVzdGVyX3Njb3BlX2xvY2s7CiAJdTMyIGxvY2FsX3B1YmxfY291bnQ7CiAJdTMyIHJjX2Rlc3RzOwogCXUzMiBzbmRfbnh0OwpAQCAtMTI2LDEzICYjNDM7MTI0LDE1IEBAIGJvb2wgdGlwY19uYW1ldGJsX2xvb2t1cF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCwKIAkJCSAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7CiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAotCQkJCQkgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTsKJiM0MzsJCQkJCSBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCiYjNDM7CQkJCQkgdTMyIGtleSwgaW50ICplcnIpOwogdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAJCQkgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpOwogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCi0JCQkJCSAgICAgdTMyIGtleSk7CiYjNDM7CQkJCQkgICAgIHUzMiBrZXksIGludCAqZXJyKTsKJiM0MztpbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KTsKIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAJCQkJCSAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmV0LmMgYi9uZXQvdGlwYy9uZXQuYwppbmRleCA3ZTY1ZDBiMGM0YThkLi43YTJjMWU2N2FjYTNkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uZXQuYwpAQCAtMTEwLDExICYjNDM7MTEwLDE0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpOwogCiBpbnQgdGlwY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpub2RlX2lkLCB1MzIgYWRkcikKIHsKJiM0MzsJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiYjNDM7CiAJaWYgKHRpcGNfb3duX2lkKG5ldCkpIHsKIAkJcHJfaW5mbygmIzM0O0Nhbm5vdCBjb25maWd1cmUgbm9kZSBpZGVudGl0eSB0d2ljZVxuJiMzNDspOwogCQlyZXR1cm4gLTE7CiAJfQogCXByX2luZm8oJiMzNDtTdGFydGVkIGluIG5ldHdvcmsgbW9kZVxuJiMzNDspOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7dG4tJmd0O25vZGVfYWRkcl9zZXQsIDApOwogCiAJaWYgKG5vZGVfaWQpCiAJCXRpcGNfc2V0X25vZGVfaWQobmV0LCBub2RlX2lkKTsKQEAgLTEyNSw4ICYjNDM7MTI4LDggQEAgaW50IHRpcGNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1OCAqbm9kZV9pZCwgdTMyIGFkZHIpCiAKIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpCiB7Ci0Jc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiAJc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2sgPSB7MCwgYWRkcn07CiYjNDM7CXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCB0aXBjX3VhZGRyIHVhOwogCiAJdGlwY191YWRkcigmYW1wO3VhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSwKQEAgLTEzOCw3ICYjNDM7MTQxLDExIEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpCiAJdGlwY19uYW1lZF9yZWluaXQobmV0KTsKIAl0aXBjX3NrX3JlaW5pdChuZXQpOwogCXRpcGNfbW9uX3JlaW5pdF9zZWxmKG5ldCk7Ci0JdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBhZGRyKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3RuLSZndDtub2RlX2FkZHJfc2V0LCAxKTsKJiM0MzsJLyogUmVkaXN0cmlidXRlIGJ1bGsgb2YgcHVibGljYXRpb25zIHZpYSBub2RlLXVwIGV2ZW50IG9yIG5vZGUmIzM5O3MgdGltZXIKJiM0MzsJICogaWYgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBmYWlscy4KJiM0MzsJICovCiYjNDM7CXRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgJmFtcDt1YSwgJmFtcDtzaywgYWRkciwgTlVMTCk7CiB9CiAKIHZvaWQgdGlwY19uZXRfZmluYWxpemVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmMgYi9uZXQvdGlwYy9ub2RlLmMKaW5kZXggNjgzYTEzNmU1M2VmYy4uZjFlZWU2NzRhNjc4ZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25vZGUuYwpAQCAtMTExLDYgJiM0MzsxMTEsNyBAQCBzdHJ1Y3QgdGlwY19iY2xpbmtfZW50cnkgewogICogQHBlZXJfbmV0OiBwZWVyJiMzOTtzIG5ldCBuYW1lc3BhY2UKICAqIEBwZWVyX2hhc2hfbWl4OiBoYXNoIGZvciB0aGlzIHBlZXIgKEZJWE1FKQogICogQGNyeXB0b19yeDogUlggY3J5cHRvIGhhbmRsZXIKJiM0MzsgKiBAZGlzdF9idWxrOiBmbGFnIHRvIHJlZGlzdHJpYnV0ZSBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9ucwogICovCiBzdHJ1Y3QgdGlwY19ub2RlIHsKIAl1MzIgYWRkcjsKQEAgLTE0NSw2ICYjNDM7MTQ2LDcgQEAgc3RydWN0IHRpcGNfbm9kZSB7CiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPCiAJc3RydWN0IHRpcGNfY3J5cHRvICpjcnlwdG9fcng7CiAjZW5kaWYKJiM0MzsJYXRvbWljX3QgZGlzdF9idWxrOwogfTsKIAogLyogTm9kZSBGU00gc3RhdGVzIGFuZCBldmVudHM6CkBAIC0zNDUsNiAmIzQzOzM0NywxNyBAQCBzdGF0aWMgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcikKIAlyZXR1cm4gbm9kZTsKIH0KIAomIzQzO3ZvaWQgdGlwY19ub2RlX3NldF9kaXN0X2J1bGsoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0aXBjX25vZGUgKm5vZGU7CiYjNDM7CiYjNDM7CW5vZGUgPSB0aXBjX25vZGVfZmluZChuZXQsIGFkZHIpOwomIzQzOwlpZiAobm9kZSkgewomIzQzOwkJYXRvbWljX3NldCgmYW1wO25vZGUtJmd0O2Rpc3RfYnVsaywgMSk7CiYjNDM7CQl0aXBjX25vZGVfcHV0KG5vZGUpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyogdGlwY19ub2RlX2ZpbmRfYnlfaWQgLSBsb2NhdGUgc3BlY2lmaWVkIG5vZGUgb2JqZWN0IGJ5IGl0cyAxMjgtYml0IGlkCiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gYSBkaXNjb3ZlcnkgcmVxdWVzdCBmYWlsZWQKICAqIHRvIGZpbmQgdGhlIG5vZGUgYnkgaXRzIDMyLWJpdCBpZCwgYW5kIGlzIG5vdCB0aW1lIGNyaXRpY2FsCkBAIC0zOTMsNiAmIzQzOzQwNiwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrX2Zhc3Qoc3RydWN0IHRpcGNfbm9kZSAqbikKIAl3cml0ZV91bmxvY2tfYmgoJmFtcDtuLSZndDtsb2NrKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRpcGNfbm9kZV9kb3duKHN0cnVjdCB0aXBjX25vZGUgKm4pCiYjNDM7ewomIzQzOwlpbnQgYmVhcmVyX2lkOwomIzQzOwomIzQzOwlmb3IgKGJlYXJlcl9pZCA9IDA7IGJlYXJlcl9pZCAmbHQ7IE1BWF9CRUFSRVJTOyBiZWFyZXJfaWQmIzQzOyYjNDM7KQomIzQzOwkJdGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pCiAJX19yZWxlYXNlcyhuLSZndDtsb2NrKQogewpAQCAtNDAyLDYgJiM0Mzs0MjMsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pCiAJc3RydWN0IGxpc3RfaGVhZCAqcHVibF9saXN0OwogCXN0cnVjdCB0aXBjX3VhZGRyIHVhOwogCXUzMiBiZWFyZXJfaWQsIG5vZGU7CiYjNDM7CWludCByYyA9IDAsIGVyciA9IDA7CiAKIAlpZiAobGlrZWx5KCFmbGFncykpIHsKIAkJd3JpdGVfdW5sb2NrX2JoKCZhbXA7bi0mZ3Q7bG9jayk7CkBAIC00MjUsMTYgJiM0Mzs0NDcsMjQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKQogCQl0aXBjX3B1Ymxfbm90aWZ5KG5ldCwgcHVibF9saXN0LCBub2RlLCBuLSZndDtjYXBhYmlsaXRpZXMpOwogCiAJaWYgKGZsYWdzICZhbXA7IFRJUENfTk9USUZZX05PREVfVVApCi0JCXRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tJmd0O2NhcGFiaWxpdGllcyk7CiYjNDM7CQlyYyA9IHRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tJmd0O2NhcGFiaWxpdGllcyk7CiAKIAlpZiAoZmxhZ3MgJmFtcDsgVElQQ19OT1RJRllfTElOS19VUCkgewogCQl0aXBjX21vbl9wZWVyX3VwKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTsKLQkJdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYpOwomIzQzOwkJdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYsICZhbXA7ZXJyKTsKIAl9CiAJaWYgKGZsYWdzICZhbXA7IFRJUENfTk9USUZZX0xJTktfRE9XTikgewogCQl0aXBjX21vbl9wZWVyX2Rvd24obmV0LCBub2RlLCBiZWFyZXJfaWQpOwogCQl0aXBjX25hbWV0Ymxfd2l0aGRyYXcobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYpOwogCX0KJiM0MzsKJiM0MzsJLyogTWVtb3J5IGFsbG9jYXRpb24gaGFzIGZhaWxlZC4gQnJpbmcgdGhlIG5vZGUgZG93biB0byBzdGFydCBvdmVyIGJ1bGsKJiM0MzsJICogZGlzdHJpYnV0aW9uIHdoZW4gdGhlIGZpcnN0IGxpbmsgaXMgdXAgYWdhaW4uCiYjNDM7CSAqLwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJdGlwY19ub2RlX2Rvd24obik7CiYjNDM7CWVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUykKJiM0MzsJCXRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV9hc3NpZ25fcGVlcl9uZXQoc3RydWN0IHRpcGNfbm9kZSAqbiwgdTMyIGhhc2hfbWl4ZXMpCkBAIC01NjQsNiAmIzQzOzU5NCw3IEBAIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkciwgdTggKnBlZXJfaWQsCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuLSZndDtsaXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO24tJmd0O3B1YmxfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuLSZndDtjb25uX3Nrcyk7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtuLSZndDtkaXN0X2J1bGssIDApOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5uYW1lZHEpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5pbnB1dHExKTsKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5hcnJ2cSk7CkBAIC04MDMsNyAmIzQzOzgzNCw4IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCXN0cnVjdCB0aXBjX25vZGUgKm4gPSB0aW1lcl9jb250YWluZXJfb2YobiwgdCwgdGltZXIpOwogCXN0cnVjdCB0aXBjX2xpbmtfZW50cnkgKmxlOwogCXN0cnVjdCBza19idWZmX2hlYWQgeG1pdHE7Ci0JaW50IHJlbWFpbnMgPSBuLSZndDtsaW5rX2NudDsKJiM0MzsJaW50IHJlbWFpbnMgPSAwOwomIzQzOwlpbnQgZGlzdF9yYyA9IDA7CiAJaW50IGJlYXJlcl9pZDsKIAlpbnQgcmMgPSAwOwogCkBAIC04MTQsNiAmIzQzOzg0Niw5IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCQlyZXR1cm47CiAJfQogCiYjNDM7CWlmIChhdG9taWNfeGNoZygmYW1wO24tJmd0O2Rpc3RfYnVsaywgMCkpCiYjNDM7CQlkaXN0X3JjID0gdGlwY19uYW1lZF9kaXN0cmlidXRlKG4tJmd0O25ldCwgbi0mZ3Q7YWRkcik7CiYjNDM7CiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPCiAJLyogVGFrZSBhbnkgY3J5cHRvIGtleSByZWxhdGVkIGFjdGlvbnMgZmlyc3QgKi8KIAl0aXBjX2NyeXB0b190aW1lb3V0KG4tJmd0O2NyeXB0b19yeCk7CkBAIC04MjUsNiAmIzQzOzg2MCw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCSAqLwogCXRpcGNfbm9kZV9yZWFkX2xvY2sobik7CiAJbi0mZ3Q7a2VlcGFsaXZlX2ludHYgPSAxMDAwMDsKJiM0MzsJcmVtYWlucyA9IG4tJmd0O2xpbmtfY250OwogCXRpcGNfbm9kZV9yZWFkX3VubG9jayhuKTsKIAlmb3IgKGJlYXJlcl9pZCA9IDA7IHJlbWFpbnMgJmFtcDsmYW1wOyAoYmVhcmVyX2lkICZsdDsgTUFYX0JFQVJFUlMpOyBiZWFyZXJfaWQmIzQzOyYjNDM7KSB7CiAJCXRpcGNfbm9kZV9yZWFkX2xvY2sobik7CkBAIC04MzUsMTEgJiM0Mzs4NzEsMTMgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAJCQl0aXBjX25vZGVfY2FsY3VsYXRlX3RpbWVyKG4sIGxlLSZndDtsaW5rKTsKIAkJCXJjID0gdGlwY19saW5rX3RpbWVvdXQobGUtJmd0O2xpbmssICZhbXA7eG1pdHEpOwogCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtsZS0mZ3Q7bG9jayk7Ci0JCQlyZW1haW5zLS07CiYjNDM7CQkJaWYgKGRpc3RfcmMgJmx0OyAwKQomIzQzOwkJCQlyZW1haW5zLS07CiAJCX0KIAkJdGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pOwogCQl0aXBjX2JlYXJlcl94bWl0KG4tJmd0O25ldCwgYmVhcmVyX2lkLCAmYW1wO3htaXRxLCAmYW1wO2xlLSZndDttYWRkciwgbik7Ci0JCWlmIChyYyAmYW1wOyBUSVBDX0xJTktfRE9XTl9FVlQpCiYjNDM7CQkvKiBGb3JjZSB0aGUgbm9kZSBkb3duIGluIGNhc2UgdGhlIHJlZGlzdHJpYnV0aW9uIGZhaWxlZCAqLwomIzQzOwkJaWYgKChyYyAmYW1wOyBUSVBDX0xJTktfRE9XTl9FVlQpIHx8IGRpc3RfcmMgJmx0OyAwKQogCQkJdGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTsKIAl9CiAJbW9kX3RpbWVyKCZhbXA7bi0mZ3Q7dGltZXIsIGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhuLSZndDtrZWVwYWxpdmVfaW50dikpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5oIGIvbmV0L3RpcGMvbm9kZS5oCmluZGV4IDE1NGE1YmJiMGQyOWQuLjBmNzc3Y2ZlN2MwMWUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25vZGUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9ub2RlLmgKQEAgLTEyOCw0ICYjNDM7MTI4LDUgQEAgaW50IHRpcGNfbmxfbm9kZV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogaW50IHRpcGNfbmxfbm9kZV9mbHVzaF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiAjZW5kaWYKIHZvaWQgdGlwY19ub2RlX3ByZV9jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpleGl0X25ldCk7CiYjNDM7dm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuYwppbmRleCBkNWQ3MGViMjMwYjU2Li42YjgzYmRmYzQzOWMzIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9zb2NrZXQuYwpAQCAtMjkxOSw3ICYjNDM7MjkxOSw3IEBAIHN0YXRpYyBpbnQgdGlwY19za19wdWJsaXNoKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKQogCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJc2thZGRyLnJlZiA9IHRzay0mZ3Q7cG9ydGlkOwogCXNrYWRkci5ub2RlID0gdGlwY19vd25fYWRkcihuZXQpOwotCXAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCAmYW1wO3NrYWRkciwga2V5KTsKJiM0MzsJcCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsICZhbXA7c2thZGRyLCBrZXksIE5VTEwpOwogCWlmICh1bmxpa2VseSghcCkpCiAJCXJldHVybiAtRUlOVkFMOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzQxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRJUEMgUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFRJUEMgc3Vic3lzdGVtIGluIHRoZSBMaW51eCBrZXJuZWwuIFNlZW1zIGxpa2UgYSBub24tdHJpdmlhbCBjaGFuZ2UsIHRvdWNoaW5nIGEgZ29vZCBjaHVuayBvZiB0aGUgY29yZSBjb2RlOiBgbmV0L3RpcGMvY29yZS5jYCwgYC5oYCwgYG5hbWVfZGlzdHIuY2AsIGAuaGAsIGBuYW1lX3RhYmxlLmNgLCBgLmhgLCBgbmV0LmNgLCBgbm9kZS5jYCwgYC5oYCwgYW5kIGBzb2NrZXQuY2AuIEJhc2VkIG9uIHRoZSBmaWxlIG1vZGlmaWNhdGlvbnMsIHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiBpbXByb3ZpbmcgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24gYW5kIGFkZHJlc3NpbmcgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzIHRoYXQgY3JvcCB1cCBkdXJpbmcgcHVibGljYXRpb24uCgpGcm9tIG15IHVuZGVyc3RhbmRpbmcsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgbmV3IGZpZWxkcyB0byB0aGUgYHN0cnVjdCB0aXBjX25ldGAgc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgYG50X3N0b3BgLCBgbnRfc2VsZl9ub2RlX2V4aXN0YCwgYW5kIGBub2RlX2FkZHJfc2V0YCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBjb25jZXJ0ZWQgZWZmb3J0IHRvIGltcHJvdmUgZXJyb3IgaGFuZGxpbmcgdGhyb3VnaG91dCB0aGUgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24gY29kZS4gSSBzZWUgY2hhbmdlcyB3aGVyZSBmdW5jdGlvbnMgdGhhdCBwcmV2aW91c2x5IGp1c3Qgc2lsZW50bHkgZmFpbGVkIGFyZSBub3cgcmV0dXJuaW5nIGVycm9yIGNvZGVzIOKAkyBgLUVOT0JVRlNgIGluIHRoZSBjYXNlIG9mIGBuYW1lZF9kaXN0cmlidXRlYCwgZm9yIGluc3RhbmNlLiBUaGVyZSYjMzk7cyBzb21lIHJlZmFjdG9yaW5nLCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZWAgYW5kIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgIGJlaW5nIGFkZGVkLCBhbmQgY2hhbmdlcyB0byBgdGlwY19uYW1lZF9ub2RlX3VwYCBhbmQgYHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibGAgbm93IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGVycm9ycy4gVGhlcmUgYXJlIGNoYW5nZXMgZm9yIGJ1bGsgcmVkaXN0cmlidXRpb24gaW4gYHRpcGNfbm9kZV90aW1lb3V0YCwgYXMgd2VsbCBhcyBhIG5ldyBmdW5jdGlvbiBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgLgoKVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBob3cgVElQQyBvcGVyYXRlcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBJIGtub3cgVElQQyBjYW4gYmUgdXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEdpdmVuIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbmQgdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcHJvYmxlbXMsIEkgdGhpbmsgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIGZsYWcgaXQgYXMgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQuIEJhc2VkIG9uIHRoZSBjaGFuZ2VzLCB0aGUgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIGFyZToKCiogICBgdGlwY19uYW1lZF9kaXN0cmlidXRlYAoqICAgYHRpcGNfbmFtZWRfbm9kZV91cGAKKiAgIGB0aXBjX25hbWV0YmxfcHVibGlzaGAKKiAgIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAKKiAgIGB0aXBjX25vZGVfdGltZW91dGAKKiAgIGB0aXBjX3NrX3B1Ymxpc2hgCgpUaG9zZSBzZWVtIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnRzIHdoZXJlIHdlIGNvdWxkIHRyaWdnZXIgdGhlc2UgZGlzdHJpYnV0aW9uL2FsbG9jYXRpb24gaXNzdWVzLiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9uczsgb2J2aW91c2x5LCBgQ09ORklHX1RJUENgIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgY29kZSB0byBldmVuIGJlIGNvbXBpbGVkLiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIHZlcmlmeSB0aGUgZGV0YWlscyBvZiBob3cgdGhlIHBhdGNoIGNoYW5nZXMgdGhvc2UgZnVuY3Rpb25zLCB0byBpbmZvcm0gdGhlIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19uYW1lZF9kaXN0cmlidXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL25hbWVfZGlzdHIuYz0xNTE9c3RhdGljIGludCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjA0LS8qKlxubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjIwNTogKiBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGJ1aWxkIGEgbGlzdCBvZiBwdWJsaWNhdGlvbnMgbmVlZCB0byBiZSBkaXN0cmlidXRlZFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTIwNi0gKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yMTQtICovXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MjE1OnN0YXRpYyBpbnQgX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjE2LVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGVhZClcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjU0LS8qKlxubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjI1NTogKiB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBkaXN0cmlidXRlIGFsbCBwdWJsaWNhdGlvbnMgdG8gc3BlY2lmaWVkIG5vZGVcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yNTYtICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2Vcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjYzLSAqL1xubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjI2NDppbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI2NS17XG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI3MS1cdHNwaW5fbG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjI3MjpcdHJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgXHUwMDI2aGVhZCk7XG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjczLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM9Mjk3PWludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTMwOC1cbm5ldC90aXBjL25hbWVfZGlzdHIuYzozMDk6XHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFx1MDAyNmhlYWQpO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTMxMC1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5oPTc2PXZvaWQgdGlwY19wdWJsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKm5zdWJfbGlzdCxcbm5ldC90aXBjL25hbWVfZGlzdHIuaC03Ny1cdFx0ICAgICAgdTMyIGFkZHIsIHUxNiBjYXBhYmlsaXRpZXMpO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5oOjc4OmludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5oLTc5LVxuLS1cbm5ldC90aXBjL25vZGUuYz04MzI9c3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTg0OS1cdGlmIChhdG9taWNfeGNoZyhcdTAwMjZuLVx1MDAzZWRpc3RfYnVsaywgMCkpXG5uZXQvdGlwYy9ub2RlLmM6ODUwOlx0XHRkaXN0X3JjID0gdGlwY19uYW1lZF9kaXN0cmlidXRlKG4tXHUwMDNlbmV0LCBuLVx1MDAzZWFkZHIpO1xubmV0L3RpcGMvbm9kZS5jLTg1MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY2MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaW52b2x2ZXMgYSBmZXcga2V5IHF1ZXN0aW9ucy4gRmlyc3QsIHdoYXQmIzM5O3MgaXRzIGludGVuZGVkIHJvbGUgd2l0aGluIHRoZSBUSVBDIChUcmFuc3BhcmVudCBJbnRlci1Qcm9jZXNzIENvbW11bmljYXRpb24pIGZyYW1ld29yaz8gRnJvbSB0aGUgbmFtZSwgSSYjMzk7bSBpbmZlcnJpbmcgaXQmIzM5O3MgcmVsYXRlZCB0byBpbnNlcnRpbmcsIGxpa2VseSBhIHNlbGYtbm9kZSBvciBpdHMgcHVibGljIHJlcHJlc2VudGF0aW9uLCBpbnRvIGEgbmFtZSB0YWJsZS4gVGhpcyBzdWdnZXN0cyBpdOKAmXMgYSBmdW5kYW1lbnRhbCBvcGVyYXRpb24gZm9yIHB1Ymxpc2hpbmcgbm9kZSBpbmZvcm1hdGlvbiwgcHJvYmFibHkgZm9yIGRpc2NvdmVyeSBhbmQgY29tbXVuaWNhdGlvbi4KCk5leHQsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFuZCB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSwgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBJcyBpdCBjYWxsZWQgZHVyaW5nIG5vZGUgaW5pdGlhbGl6YXRpb24sIHJlZ2lzdHJhdGlvbiwgb3IgcGVyaGFwcyBkeW5hbWljYWxseSB3aGVuIGEgbm9kZSYjMzk7cyBjYXBhYmlsaXRpZXMgY2hhbmdlPyBLbm93aW5nIHRoZSBjYWxsaW5nIHNlcXVlbmNlIGlzIGNyaXRpY2FsIHRvIGdyYXNwaW5nIGl0cyBzaWduaWZpY2FuY2Ugd2l0aGluIHRoZSBvdmVyYWxsIFRJUEMgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCB0byBjb25maXJtIHRoYXQgdW5kZXJzdGFuZGluZy4KCkZ1bmN0aW9uIGludGVybmFscyBhcmUgYWxzbyBjcnVjaWFsLCBvZiBjb3Vyc2UuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDogdGhlIG5hbWUgdGFibGUgaXRzZWxmLCB0aGUgZm9ybWF0IG9mIHRoZSBzZWxmLW5vZGUgcmVwcmVzZW50YXRpb24gYmVpbmcgaW5zZXJ0ZWQsIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdXNlZCB0byBlbnN1cmUgdGhyZWFkIHNhZmV0eS4gQ29uc2lkZXJpbmcgaXQmIzM5O3MgYSAmIzM0O3B1YmxpYyYjMzQ7IGluc2VydGlvbiwgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBsZXZlbCBvZiB2aXNpYmlsaXR5IGNvbnRyb2wgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgdG8gYmUgYXQgcGxheS4gSG93IGlzIHRoZSBpbnNlcnRpb24gcHJvY2VzcyBwcm90ZWN0ZWQgZnJvbSByYWNlIGNvbmRpdGlvbnMgb3IgY29ycnVwdGlvbj8gV2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBkZWFkbG9ja3MgSSBuZWVkIHRvIGtlZXAgaW4gbWluZD8KCkZ1cnRoZXJtb3JlLCBJJiMzOTtsbCBiZSBjb25zaWRlcmluZyB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzLiBXaGF0IGhhcHBlbnMgaWYgdGhlIG5hbWUgdGFibGUgaXMgZnVsbCwgb3IgaWYgdGhlIHByb3ZpZGVkIG5vZGUgaW5mb3JtYXRpb24gaXMgaW52YWxpZD8gSG93IGFyZSB0aGVzZSBzY2VuYXJpb3MgaGFuZGxlZCwgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdmVyYWxsIHN5c3RlbSYjMzk7cyBzdGFiaWxpdHkgYW5kIHJlbGlhYmlsaXR5PyBBcmUgdGhlcmUgYW55IGVycm9yIGNvZGVzIG9yIGxvZ2dpbmcgbWVzc2FnZXMgb2YgaW50ZXJlc3Q/CgpGaW5hbGx5LCBpZiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBpcyBpbiBhIGxhbmd1YWdlIGxpa2UgQywgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gQXJlIHRoZXJlIGFueSBtZW1vcnkgbGVha3MsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIG90aGVyIHZ1bG5lcmFiaWxpdGllcyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdXNlIG9mIGBrbWFsbG9jYCwgYGtmcmVlYCwgYG1lbWNweWAsIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucy4KClVsdGltYXRlbHksIEkgbmVlZCB0byBmb3JtIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UsIGltcGxlbWVudGF0aW9uLCBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBUSVBDIHN5c3RlbS4gT25seSB0aGVuIGNhbiBJIGRldGVybWluZSBpZiBpdCBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCBhbmQgaWRlbnRpZnkgYW55IHBvc3NpYmxlIGFyZWFzIG9mIGNvbmNlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvbmFtZV9kaXN0ci5jPTIxNT1zdGF0aWMgaW50IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLFxuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yMzMtXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MjM0Olx0LyogUHJldmlvdXMgY2FsbCB0byB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YigpIHdhcyBzdWNjZXNzZnVsLlxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTIzNS1cdCAqIFRoZSBub2RlJiMzOTtzIHNlbGYtYWRkcmVzcyBwdWJsaWNhdGlvbiB3YXMgYWRkZWQgdG8gJiMzOTtudC1cdTAwM2VjbHVzdGVyX3Njb3BlJiMzOTsuXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI0MC1cbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyNDE6XHRpZiAodGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIobmV0KSlcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yNDItXHRcdHJldHVybiAtRU5PQlVGUztcbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM9Nzc4PXN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTgzNy0vKipcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4Mzg6ICogdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIgLSBpbnNlcnQgcHVibGljYXRpb24gb2Ygbm9kZSYjMzk7cyBzZWxmIGFkZHJlc3Ncbm5ldC90aXBjL25hbWVfdGFibGUuYy04MzktICogQG5ldDogbmV0d29yayBuYW1lc3BhY2Vcbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODQ1LSAqL1xubmV0L3RpcGMvbmFtZV90YWJsZS5jOjg0NjppbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg0Ny17XG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg3My1cdCAqIFRJUENfTk9ERV9TVEFURSAoMCkuIElmICYjMzk7c3ImIzM5OyBpcyBub3QgTlVMTCwgdGhpcyByYW5nZSBleGlzdHNcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4NzQ6XHQgKiBkdWUgdG8gYSBwcmV2aW91cyBjYWxsIHRvIHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKClcbm5ldC90aXBjL25hbWVfdGFibGUuYy04NzUtXHQgKiBvciB0aXBjX25ldF9maW5hbGl6ZSgpLlxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuaD0xMzE9c3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuaC0xMzQtXHRcdFx0XHRcdCAgICAgdTMyIGtleSwgaW50ICplcnIpO1xubmV0L3RpcGMvbmFtZV90YWJsZS5oOjEzNTppbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KTtcbm5ldC90aXBjL25hbWVfdGFibGUuaC0xMzYtc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcmVtb3ZlX3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODk2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIHRoZSBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYHRpcGNfbmFtZXRibF9wdWJsaXNoYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgaXQmIzM5O3MgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBpc3N1ZSBoZXJlIHRoYXQgSSBuZWVkIHRvIHBpbnBvaW50LiBVbmRlcnN0YW5kaW5nIHRoZSBleGFjdCBzdGF0ZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfbmFtZXRibF9wdWJsaXNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL25hbWVfdGFibGUuYz03NDg9dm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuYy03NzUtXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6Nzc2Oi8qIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIHNlcnZpY2UgYmluZGluZyB0byBuYW1lIHRhYmxlXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtNzc3LSAqL1xubmV0L3RpcGMvbmFtZV90YWJsZS5jOjc3ODpzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTc3OS1cdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM9ODQ2PWludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg5Ny1cdCAqICAgIHRlYXJkb3duLlxubmV0L3RpcGMvbmFtZV90YWJsZS5jOjg5ODpcdCAqIDIuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXHUwMDNlIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIGZhaWxlZFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg5OS1cdCAqICAgIHRvIGluc2VydCBub2RlIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpbnRvIG50LVx1MDAzZWNsdXN0ZXJfc2NvcGVcbm5ldC90aXBjL25hbWVfdGFibGUuYy05MDAtXHQgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbm5ldC90aXBjL25hbWVfdGFibGUuYzo5MDE6XHQgKiAzLiBPciB0aXBjX25ldF9maW5hbGl6ZSgpIC0tLVx1MDAzZSB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGhhcyBub3Rcbm5ldC90aXBjL25hbWVfdGFibGUuYy05MDItXHQgKiAgICBleGVjdXRlZCB5ZXQuXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5oPTEyND12b2lkIHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2dyb3VwICpncnAsXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmgtMTI1LVx0XHRcdCAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7XG5uZXQvdGlwYy9uYW1lX3RhYmxlLmg6MTI2OnN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmgtMTI3LVx0XHRcdFx0XHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxuLS1cbm5ldC90aXBjL25ldC5jPTEyOT1zdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuLS1cbm5ldC90aXBjL25ldC5jLTE0NS1cdC8qIFJlZGlzdHJpYnV0ZSBidWxrIG9mIHB1YmxpY2F0aW9ucyB2aWEgbm9kZS11cCBldmVudCBvciBub2RlJiMzOTtzIHRpbWVyXG5uZXQvdGlwYy9uZXQuYzoxNDY6XHQgKiBpZiB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGZhaWxzLlxubmV0L3RpcGMvbmV0LmMtMTQ3LVx0ICovXG5uZXQvdGlwYy9uZXQuYzoxNDg6XHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgYWRkciwgTlVMTCk7XG5uZXQvdGlwYy9uZXQuYy0xNDktfVxuLS1cbm5ldC90aXBjL25vZGUuYz00MTc9c3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxuLS1cbm5ldC90aXBjL25vZGUuYy00NTMtXHRcdHRpcGNfbW9uX3BlZXJfdXAobmV0LCBub2RlLCBiZWFyZXJfaWQpO1xubmV0L3RpcGMvbm9kZS5jOjQ1NDpcdFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIHNrLnJlZiwgXHUwMDI2ZXJyKTtcbm5ldC90aXBjL25vZGUuYy00NTUtXHR9XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjkwNz1zdGF0aWMgaW50IHRpcGNfc2tfcHVibGlzaChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTIxLVx0c2thZGRyLm5vZGUgPSB0aXBjX293bl9hZGRyKG5ldCk7XG5uZXQvdGlwYy9zb2NrZXQuYzoyOTIyOlx0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFx1MDAyNnNrYWRkciwga2V5LCBOVUxMKTtcbm5ldC90aXBjL3NvY2tldC5jLTI5MjMtXHRpZiAodW5saWtlbHkoIXApKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDE1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBgdGlwY19uYW1lZF9ub2RlX3VwYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSB0YXNrIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBleHBlcmllbmNlIHRlbGxzIG1lIGl0JiMzOTtzIGFsd2F5cyB3aXNlIHRvIGJlIG1ldGhvZGljYWwsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGxpa2UgYHRpcGNfbmFtZWRfbm9kZV91cGAuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsICYjMzQ7V2hhdCBjb250ZXh0IGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgdXNlZCBpbj8mIzM0OyBJcyBpdCBwYXJ0IG9mIHRoZSBjb3JlIFRJUEMgaW1wbGVtZW50YXRpb24sIG9yIGlzIGl0IGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbiBsYXllcmVkIG9uIHRvcD8gS25vd2luZyB0aGF0IGluZmx1ZW5jZXMgbXkgZXhwZWN0YXRpb25zIGZvciB0aGluZ3MgbGlrZSBlcnJvciBoYW5kbGluZyBhbmQgdGhlIGtpbmRzIG9mIGRhdGEgc3RydWN0dXJlcyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoLiBJJiMzOTttIGFzc3VtaW5nLCBiYXNlZCBvbiB0aGUgbmFtZSwgdGhhdCBpdCBsaWtlbHkgZGVhbHMgd2l0aCBicmluZ2luZyB1cCBhIG5hbWVkIG5vZGUgd2l0aGluIHRoZSBUSVBDIG5ldHdvcmsuIFRoYXQgaW1wbGllcyBzb21lIGtpbmQgb2YgcmVnaXN0cmF0aW9uIG9yIGFubm91bmNlbWVudCB0byB0aGUgbmV0d29yaywgYW5kIHRoZSBwb3RlbnRpYWwgbmVlZCBmb3Igc29tZSBmb3JtIG9mIHN5bmNocm9uaXphdGlvbiBvciBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBub2RlIHN0YXJ0dXAgb3IgcmVnaXN0cmF0aW9uLiBJIHdpbGwgYmUgbG9va2luZyBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBjaGVja2luZyBmb3IgYWRlcXVhdGUgdGhyZWFkIHNhZmV0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGVycm9ycy4gRG9lcyBpdCByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMsIG9yIGRvZXMgaXQgcmVseSBvbiBleGNlcHRpb25zPyBIb3cgYXJlIHRoZXNlIGVycm9ycyBwcm9wYWdhdGVkIHVwIHRoZSBjYWxsIHN0YWNrPyBUaGlzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgcm9idXN0IHN5c3RlbSBkZXNpZ24uIEFsc28sIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdCB3aXRoPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGltcGFjdCBpdHMgYmVoYXZpb3Igb3Igc3VjY2Vzcz8gSXTigJlzIGFsc28gaW1wZXJhdGl2ZSB0byBrZWVwIGluIG1pbmQsIEkgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLCB0byBzZWUgd2hhdCBpbnB1dCBpdCB0YWtlcyBhbmQgd2hhdCBpdCByZXR1cm5zLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhbGwgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCwgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24uIEZpbmFsbHksIHRoZSBkb2N1bWVudGF0aW9uIChpZiBhbnkpIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgSSB3aWxsIGFsc28gd2FudCB0byB0cmFjZSBpdHMgdXNhZ2UgaW4gdmFyaW91cyBjb2RlIHRvIGRldGVybWluZSBob3cgaXQgaXMgdXRpbGl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfbmFtZWRfbm9kZV91cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MjY0PWludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI4Ni0vKipcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyODc6ICogdGlwY19uYW1lZF9ub2RlX3VwIC0gdGVsbCBzcGVjaWZpZWQgbm9kZSBhYm91dCBhbGwgcHVibGljYXRpb25zIGJ5IHRoaXMgbm9kZVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI4OC0gKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yOTYtICovXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6Mjk3OmludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjk4LXtcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmg9NzE9c3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5oOjcyOmludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5oLTczLXZvaWQgdGlwY19uYW1lZF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpuYW1lZHEsXG4tLVxubmV0L3RpcGMvbm9kZS5jPTQxNz1zdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4tLVxubmV0L3RpcGMvbm9kZS5jLTQ0OS1cdGlmIChmbGFncyBcdTAwMjYgVElQQ19OT1RJRllfTk9ERV9VUClcbm5ldC90aXBjL25vZGUuYzo0NTA6XHRcdHJjID0gdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xubmV0L3RpcGMvbm9kZS5jLTQ1MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NTEKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBDYW5kaWRhdGUgSWRlbnRpZmljYXRpb24gd2l0aGluIFRJUEMgQ29yZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgaGVhcnQgb2YgVElQQywgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uIGFuZCBkZWFscyB3aXRoIHRob3NlIHBlc2t5IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgZmV3IGtleSBmdW5jdGlvbnMgYXMgcmlwZSBmb3IgZnV6emluZzogYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGFuZCBgdGlwY19uYW1lZF9ub2RlX3VwYC4gVGhvc2UgYXJlIHRoZSBjb3JlIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGlzaGluZyBtZWNoYW5pc21zLCBzbyB0aGV5JiMzOTtyZSBuYXR1cmFsbHkgZ29pbmcgdG8gYmUgcG90ZW50aWFsIHdlYWsgcG9pbnRzLiBBbmQsIGdpdmVuIHRoYXQgYHRpcGNfc2tfcHVibGlzaGAgY2FsbHMgaW50byBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCB0aGF0IGxpa2VseSBtYWtlcyBpdCBhIGdvb2QgZnV6eiB0YXJnZXQgYXMgd2VsbC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYEtjb25maWdgIGZvciBUSVBDIHN1cHBvcnQgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGVuYWJsZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgY29uZmlndXJlZCB0byBwcm9wZXJseSBjcmFmdCBhIGZ1enppbmcgY2FtcGFpZ24gdGhhdCBjb3ZlcnMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVElQQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9LY29uZmlnLTUtXG5uZXQvdGlwYy9LY29uZmlnOjY6bWVudWNvbmZpZyBUSVBDXG5uZXQvdGlwYy9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtUaGUgVElQQyBQcm90b2NvbFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctMjMtXG5uZXQvdGlwYy9LY29uZmlnOjI0OmNvbmZpZyBUSVBDX01FRElBX0lCXG5uZXQvdGlwYy9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtJbmZpbmlCYW5kIG1lZGlhIHR5cGUgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctMjktXHQgIElQLW92ZXItSW5maW5pQmFuZCBkZXZpY2VzLlxubmV0L3RpcGMvS2NvbmZpZzozMDpjb25maWcgVElQQ19NRURJQV9VRFBcbm5ldC90aXBjL0tjb25maWctMzEtXHRib29sIFwmIzM0O0lQL1VEUCBtZWRpYSB0eXBlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTM3LVxubmV0L3RpcGMvS2NvbmZpZzozODpjb25maWcgVElQQ19DUllQVE9cbm5ldC90aXBjL0tjb25maWctMzktXHRib29sIFwmIzM0O1RJUEMgZW5jcnlwdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3RpcGMvS2NvbmZpZy01Mi1cbm5ldC90aXBjL0tjb25maWc6NTM6Y29uZmlnIFRJUENfRElBR1xubmV0L3RpcGMvS2NvbmZpZy01NC1cdHRyaXN0YXRlIFwmIzM0O1RJUEM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ1OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipUYWNrbGluZyB0aGUgVElQQyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgYFRJUENgLiBSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMuIEJlZm9yZSBJIGV2ZW4gKnRoaW5rKiBhYm91dCBjb25maWd1cmluZyBUSVBDLCBJIG5lZWQgdG8ga25vdyB3aGF0IGl0IHJlbGllcyBvbi4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgaW4gcGxhY2UgYmVmb3JlIEkgZXZlbiBzdGFydC4gSSYjMzk7bGwgbmVlZCB0byBydW4gYSBxdWljayBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLCBlbnN1cmluZyBhbGwgbmVjZXNzYXJ5IGNvbXBvbmVudHMgYXJlIGluc3RhbGxlZCBhbmQgb3BlcmF0aW9uYWwuIFNraXBwaW5nIHRoaXMgc3RlcCB3b3VsZCBiZSBhIHJvb2tpZSBtaXN0YWtlOyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IHJ1biBpbnRvIGFueSB1bm5lY2Vzc2FyeSByb2FkYmxvY2tzIGRvd24gdGhlIGxpbmUuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBwcm9jZWR1cmUuIERlcGVuZGVuY2llcyBmaXJzdC4gQWx3YXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBUSVBDIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBUSVBDXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtUaGUgVElQQyBQcm90b2NvbFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoZSBUcmFuc3BhcmVudCBJbnRlciBQcm9jZXNzIENvbW11bmljYXRpb24gKFRJUEMpIHByb3RvY29sIGlzXG4gIDExOlx0XHQgIHNwZWNpYWxseSBkZXNpZ25lZCBmb3IgaW50cmEgY2x1c3RlciBjb21tdW5pY2F0aW9uLiBUaGlzIHByb3RvY29sXG4gIDEyOlx0XHQgIG9yaWdpbmF0ZXMgZnJvbSBFcmljc3NvbiB3aGVyZSBpdCBoYXMgYmVlbiB1c2VkIGluIGNhcnJpZXIgZ3JhZGVcbiAgMTM6XHRcdCAgY2x1c3RlciBhcHBsaWNhdGlvbnMgZm9yIG1hbnkgeWVhcnMuXG4gIDE0Olx0XG4gIDE1Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFRJUEMsIHNlZSBodHRwOi8vdGlwYy5zb3VyY2Vmb3JnZS5uZXQuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIFRoaXMgcHJvdG9jb2wgc3VwcG9ydCBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSAoID0gY29kZSB3aGljaFxuICAxODpcdFx0ICBjYW4gYmUgaW5zZXJ0ZWQgaW4gYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgd2hlbmV2ZXIgeW91XG4gIDE5Olx0XHQgIHdhbnQpLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRpcGMuIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXRcbiAgMjA6XHRcdCAgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmUgYW5kIHJlYWQgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnJzdFx1MDAzZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVElQQyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGNvbmZpZ3VyaW5nIFRJUEMsIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IGl0IGhhcyBhIGRlcGVuZGVuY3kgb24gSU5FVC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQsIGFuZCBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gaW5jbHVkZSBgVElQQ2Agd2l0aGluIGBFbmFibGVDb25maWdzYCB0byBhY2NvdW50IGZvciB0aGF0LgoKTm93LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBzcGVjaWZpYyBzeW1ib2xzIHdpdGhpbiB0aGUgVElQQyBzeXN0ZW0uIEkmIzM5O3ZlIGdvdCBteSBmb2N1cyBuYXJyb3dlZCBkb3duIHRvIHRoZXNlOiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCwgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGFuZCBgdGlwY19za19wdWJsaXNoYC4gVGhlc2UgYXJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBUSVBDIGhhbmRsZXMgbmFtZSBkaXN0cmlidXRpb24gYW5kIHNvY2tldCBwdWJsaXNoaW5nIOKAkyBjb3JlIGZ1bmN0aW9uYWxpdGllcy4KCkJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgaWYgYHRpcGNfc2tfcHVibGlzaGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIHdpbGwgaW5mbHVlbmNlIGhvdyBpdHMgc2NvcGUgaXMgZGV0ZXJtaW5lZC4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NrX3B1Ymxpc2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9MTUwPXN0YXRpYyB2b2lkIHRpcGNfc2tfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNTE6c3RhdGljIGludCB0aXBjX3NrX3B1Ymxpc2goc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY191YWRkciAqdWEpO1xubmV0L3RpcGMvc29ja2V0LmMtMTUyLXN0YXRpYyBpbnQgdGlwY19za193aXRoZHJhdyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9Njc2PXN0YXRpYyBpbnQgX190aXBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpza2FkZHIsIGludCBhbGVuKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTcwMS1cdFx0cmV0dXJuIHRpcGNfc2tfd2l0aGRyYXcodHNrLCB1YSk7XG5uZXQvdGlwYy9zb2NrZXQuYzo3MDI6XHRyZXR1cm4gdGlwY19za19wdWJsaXNoKHRzaywgdWEpO1xubmV0L3RpcGMvc29ja2V0LmMtNzAzLX1cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yODcwPXN0YXRpYyB2b2lkIHRpcGNfc2tfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTA2LVxubmV0L3RpcGMvc29ja2V0LmM6MjkwNzpzdGF0aWMgaW50IHRpcGNfc2tfcHVibGlzaChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcbm5ldC90aXBjL3NvY2tldC5jLTI5MDgte1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMwNzI9c3RhdGljIGludCB0aXBjX3NrX2pvaW4oc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY19ncm91cF9yZXEgKm1yZXEpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzA5Ny1cdHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChuZXQsIGdycCwgXHUwMDI2dWEpO1xubmV0L3RpcGMvc29ja2V0LmM6MzA5ODpcdHJjID0gdGlwY19za19wdWJsaXNoKHRzaywgXHUwMDI2dWEpO1xubmV0L3RpcGMvc29ja2V0LmMtMzA5OS1cdGlmIChyYykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc1MgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIGtlcm5lbCBpbnRlcm5hbHMgYW5kIG5ldHdvcmtpbmc6CgoqKkZvY3VzaW5nIG9uIHRoZSBSaWdodCBTeW1ib2wgZm9yIHRoZSBKb2IqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgaWRlbnRpZnkgdGhlIGVudHJ5IHBvaW50IGZvciBzb21lIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgZnVuY3Rpb25hbGl0eS4gSSBzZWUgYHRpcGNfc2tfcHVibGlzaGAgYW5kIHJlYWxpemUgaW1tZWRpYXRlbHkgdGhhdCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBtZWFucyBpdCYjMzk7cyBsaW1pdGVkIGluIHNjb3BlLCBsaWtlbHkgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBtb2R1bGUgb3IgZmlsZS4gVGhlcmVmb3JlLCBpdCYjMzk7cyBub3QgYSB1c2VmdWwgc3ltYm9sIHRvIHplcm8gaW4gb24gaWYgSSYjMzk7bSB0cnlpbmcgdG8gZmluZCB0aGUgcHJpbWFyeSBpbnRlcmZhY2UuIGBfX3RpcGNfYmluZGAgaXMgYWxzbyBzdGF0aWMsIHNvIEkgY2FuIHRvc3MgdGhhdCBvbmUgYXNpZGUgdG9vLiBOb3csICpgdGlwY19iaW5kYCouLi4gYWgsICp0aGF0JiMzOTtzKiB0aGUgbGlrZWx5IGNhbmRpZGF0ZSEgSXQmIzM5O3MgdGhlIG5vbi1zdGF0aWMgb25lLCB0aGUgcHVibGljLWZhY2luZyBlbnRyeSBwb2ludCBJJiMzOTttIGxvb2tpbmcgZm9yLiBUaGF0JiMzOTtzIHByb2JhYmx5IHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGV4cG9zZWQgYW5kIGNhbGxhYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBvciBldmVuIGZyb20gdXNlcnNwYWNlLCB3aGljaCBpcyB3aGVyZSBJJiMzOTtkIGZvY3VzIG15IGF0dGVudGlvbi4gSXQmIzM5O3MgdGhlIGtleSBzeW1ib2wgSSYjMzk7bGwgd2FudCB0byB0cmFjZSBvciBhbmFseXplIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfYmluZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9uYW1lX3RhYmxlLmM9ODQ2PWludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg3Ny1cdCAqIE5vdGUgdGhhdCB1c2VyIGFwcGxpY2F0aW9ucyBjYW4gb25seSBpbnNlcnQgdHlwZXMgZ3JlYXRlciB0aGFuXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6ODc4Olx0ICogb3IgZXF1YWwgdG8gNjQgKFRJUENfUkVTRVJWRURfVFlQRVMpLCBhcyBlbmZvcmNlZCBieSB0aXBjX2JpbmQoKS5cbm5ldC90aXBjL25hbWVfdGFibGUuYy04NzktXHQgKiBSZW1vdGUgbm9kZXMgYWxzbyBvbmx5IHNlbmQgcHJvdG9jb2wgcHVibGljYXRpb25zIHdpdGggdHlwZVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTYyNj1zdGF0aWMgaW50IHRpcGNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTY2MS0vKipcbm5ldC90aXBjL3NvY2tldC5jOjY2MjogKiBfX3RpcGNfYmluZCAtIGFzc29jaWF0ZSBvciBkaXNhc3NvY2lhdGUgVElQQyBuYW1lKHMpIHdpdGggYSBzb2NrZXRcbm5ldC90aXBjL3NvY2tldC5jLTY2My0gKiBAc29jazogc29ja2V0IHN0cnVjdHVyZVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTY3NS0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjY3NjpzdGF0aWMgaW50IF9fdGlwY19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2thZGRyLCBpbnQgYWxlbilcbm5ldC90aXBjL3NvY2tldC5jLTY3Ny17XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9NzA1PWludCB0aXBjX3NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpza2FkZHIsIGludCBhbGVuKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTcwOS1cdGxvY2tfc29jayhzb2NrLVx1MDAzZXNrKTtcbm5ldC90aXBjL3NvY2tldC5jOjcxMDpcdHJlcyA9IF9fdGlwY19iaW5kKHNvY2ssIHNrYWRkciwgYWxlbik7XG5uZXQvdGlwYy9zb2NrZXQuYy03MTEtXHRyZWxlYXNlX3NvY2soc29jay1cdTAwM2Vzayk7XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNzE0LVxubmV0L3RpcGMvc29ja2V0LmM6NzE1OnN0YXRpYyBpbnQgdGlwY19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpza2FkZHIsIGludCBhbGVuKVxubmV0L3RpcGMvc29ja2V0LmMtNzE2LXtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1zZ19vcHMgPSB7XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzM2Mi1cdC5yZWxlYXNlXHQ9IHRpcGNfcmVsZWFzZSxcbm5ldC90aXBjL3NvY2tldC5jOjMzNjM6XHQuYmluZFx0XHQ9IHRpcGNfYmluZCxcbm5ldC90aXBjL3NvY2tldC5jLTMzNjQtXHQuY29ubmVjdFx0PSB0aXBjX2Nvbm5lY3QsXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzM3OT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTMzODItXHQucmVsZWFzZVx0PSB0aXBjX3JlbGVhc2UsXG5uZXQvdGlwYy9zb2NrZXQuYzozMzgzOlx0LmJpbmRcdFx0PSB0aXBjX2JpbmQsXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzg0LVx0LmNvbm5lY3RcdD0gdGlwY19jb25uZWN0LFxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMzOTk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc3RyZWFtX29wcyA9IHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDAyLVx0LnJlbGVhc2VcdD0gdGlwY19yZWxlYXNlLFxubmV0L3RpcGMvc29ja2V0LmM6MzQwMzpcdC5iaW5kXHRcdD0gdGlwY19iaW5kLFxubmV0L3RpcGMvc29ja2V0LmMtMzQwNC1cdC5jb25uZWN0XHQ9IHRpcGNfY29ubmVjdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NzAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFRJUEMgQmluZGluZyBhbmQgRGlzdHJpYnV0aW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgVElQQyBmdW5jdGlvbnMuIEkgbm90aWNlZCBgdGlwY19iaW5kYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGEgYml0IHVudXN1YWwgZm9yIGFuIG9wZXJhdGlvbiBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGRlc2lnbiBkZWNpc2lvbiBmb3IgbGF0ZXIgYW5hbHlzaXMuIE5leHQsIEkgc2hvdWxkIGludmVzdGlnYXRlIGB0aXBjX3NrX2JpbmRgLCB3aGljaCBJICpiZWxpZXZlKiBpcyBub24tc3RhdGljLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0LiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAgdG8gc2VlIHdoYXQgaXMgZ29pbmcgb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfbmFtZWRfZGlzdHJpYnV0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MTUxPXN0YXRpYyBpbnQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTIwNC0vKipcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyMDU6ICogX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBidWlsZCBhIGxpc3Qgb2YgcHVibGljYXRpb25zIG5lZWQgdG8gYmUgZGlzdHJpYnV0ZWRcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yMDYtICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2Vcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjE0LSAqL1xubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjIxNTpzdGF0aWMgaW50IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTIxNi1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI1NC0vKipcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyNTU6ICogdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gZGlzdHJpYnV0ZSBhbGwgcHVibGljYXRpb25zIHRvIHNwZWNpZmllZCBub2RlXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjU2LSAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI2My0gKi9cbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyNjQ6aW50IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSlcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yNjUte1xuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yNzEtXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyNzI6XHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFx1MDAyNmhlYWQpO1xubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI3My1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jPTI5Nz1pbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zMDgtXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MzA5Olx0cmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCBcdTAwMjZoZWFkKTtcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zMTAtXHRzcGluX3VubG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuaD03Nj12b2lkIHRpcGNfcHVibF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpuc3ViX2xpc3QsXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmgtNzctXHRcdCAgICAgIHUzMiBhZGRyLCB1MTYgY2FwYWJpbGl0aWVzKTtcbm5ldC90aXBjL25hbWVfZGlzdHIuaDo3ODppbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKTtcbm5ldC90aXBjL25hbWVfZGlzdHIuaC03OS1cbi0tXG5uZXQvdGlwYy9ub2RlLmM9ODMyPXN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC90aXBjL25vZGUuYy04NDktXHRpZiAoYXRvbWljX3hjaGcoXHUwMDI2bi1cdTAwM2VkaXN0X2J1bGssIDApKVxubmV0L3RpcGMvbm9kZS5jOjg1MDpcdFx0ZGlzdF9yYyA9IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShuLVx1MDAzZW5ldCwgbi1cdTAwM2VhZGRyKTtcbm5ldC90aXBjL25vZGUuYy04NTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTEyCgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUSVBDIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb24gZGVjbGFyYXRpb25zLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGFuZCBgdGlwY19uYW1lZF9ub2RlX3VwYCBhcmUgKm5vdCogc3RhdGljLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIHRoZW0gYXMgcG90ZW50aWFsIHBvaW50cyBvZiBpbnRlcmFjdGlvbiBhbmQgZW50cnkgcG9pbnRzIGZvciB2YXJpb3VzIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBUSVBDIHN5c3RlbS4gVGhlc2UgYXJlIGRlZmluaXRlbHkgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24uCgpTbyBteSBpbml0aWFsIHRob3VnaHQgaXMsIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgLCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBhbmQgYHRpcGNfbmFtZWRfbm9kZV91cGAuCgpUaGUgJiMzNDtFbmFibGVDb25maWdzOiBUSVBDJiMzNDsgaXMgYSBnaXZlbiwgc28gSSYjMzk7bSBhbHJlYWR5IGxvb2tpbmcgYXQgVElQQy1yZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFRoZSBkZXNjcmlwdGlvbiBjb25maXJtcyB3aGF0IEkgc3VzcGVjdGVkLiBUaGUgcGF0Y2gmIzM5O3MgY29yZSBtb2RpZmljYXRpb24gY2VudGVycyBhcm91bmQgaGFuZGxpbmcgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZHVyaW5nIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uIHdpdGhpbiB0aGUgVElQQyBzeXN0ZW0uIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgZXJyb3IgY29kZSByZXR1cm5zIHRvIGNydWNpYWwgZnVuY3Rpb25zIGxpa2UgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZWRfbm9kZV91cGAsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhlIHByZXZpb3VzIGNvZGUgcGF0aCBkaWQgbm90IHJlbGlhYmx5IGhhbmRsZSBmYWlsdXJlcy4gTmV3IGZ1bmN0aW9ucywgbmFtZWx5IGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAgYW5kIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBoYXZlIGJlZW4gaW50cm9kdWNlZCB0byBkZWFsIHdpdGggYnVsayByZWRpc3RyaWJ1dGlvbiBvZiBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9ucy4KCkNvbnNpZGVyaW5nIHRoaXMgaXMgYSBtb2RpZmljYXRpb24gdG8gZnVuZGFtZW50YWwga2VybmVsIGxvZ2ljIHdpdGhpbiBUSVBDIHRoYXTigJlzIGFsc28gcmVhY2hhYmxlLCBpdCYjMzk7cyBhYnNvbHV0ZWx5IHJpcGUgZm9yIGZ1enppbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIGltcHJvdmUgcm9idXN0bmVzcyBhbmQgcmVzaWxpZW5jZSBpbiB0aGUgZmFjZSBvZiBtZW1vcnkgcHJlc3N1cmUsIGFuZCB0aGF0JiMzOTtzIGV4YWN0bHkgdGhlIGtpbmQgb2Ygc2NlbmFyaW8gZnV6emluZyBpcyBkZXNpZ25lZCB0byB1bmNvdmVyLiBJJiMzOTtsbCBuZWVkIHRvIGRldmVsb3AgZnV6emluZyBzdHJhdGVnaWVzIHRoYXQgc3BlY2lmaWNhbGx5IHRhcmdldCB0aGVzZSBuZXcgZXJyb3IgcGF0aHMgYW5kIGFsbG9jYXRpb24gc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfbmFtZWRfZGlzdHJpYnV0ZSYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0YmxfcHVibGlzaCYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWVkX25vZGVfdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgVElQQyBsb2dpYyB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZHVyaW5nIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uLiBJdCBhZGRzIGVycm9yIGNvZGUgcmV0dXJucyB0byBmdW5jdGlvbnMgbGlrZSBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGFuZCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgYW5kIGludHJvZHVjZXMgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCBhbmQgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAgdG8gaGFuZGxlIGJ1bGsgcmVkaXN0cmlidXRpb24gb2YgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfbmFtZWRfZGlzdHJpYnV0ZSYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0YmxfcHVibGlzaCYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWVkX25vZGVfdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgVElQQyBsb2dpYyB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZHVyaW5nIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uLiBJdCBhZGRzIGVycm9yIGNvZGUgcmV0dXJucyB0byBmdW5jdGlvbnMgbGlrZSBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGFuZCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgYW5kIGludHJvZHVjZXMgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCBhbmQgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAgdG8gaGFuZGxlIGJ1bGsgcmVkaXN0cmlidXRpb24gb2YgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT45bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVElQQyBzdWJzeXN0ZW0gdG8gaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIChyZXR1cm5pbmcgYC1FTk9CVUZTYCkgZHVyaW5nIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uLiBJdCBhZGRzIGVycm9yIGhhbmRsaW5nIHRvIGZ1bmN0aW9ucyBsaWtlIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgYW5kIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGFuZCBpbnRyb2R1Y2VzIGZsYWdzIHRvIHRyYWNrIHRoZSBzdGF0ZSBvZiB0aGUgbmFtZSB0YWJsZSBhbmQgbm9kZSBhZGRyZXNzLiBBbGwgbmV3bHkgaW50cm9kdWNlZCB2YXJpYWJsZXMgYW5kIHN0cnVjdHVyZXMgKGUuZy4sIGBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBza2AsIGBzdHJ1Y3QgdGlwY191YWRkciB1YWApIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIChlLmcuLCB2aWEgZXhwbGljaXQgYXNzaWdubWVudCBvciB0aGUgYHRpcGNfdWFkZHIoKWAgaGVscGVyKS4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLCB3aGljaCBkbyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWE3YzNkNGI5YjQwYTkzZDMxMTQ1OWJjYmUyYmQ2NmJkOTIyZDM4NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA3OjAzOjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5jIGIvbmV0L3RpcGMvY29yZS5jCmluZGV4IDMxNTk3NWMzYmU4MTguLjBmMWQzZGRlYWUwOTUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9jb3JlLmMKQEAgLTYxLDYgJiM0Mzs2MSw5IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCB0aXBjX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAl0bi0mZ3Q7dHJpYWxfYWRkciA9IDA7CiAJdG4tJmd0O2FkZHJfdHJpYWxfZW5kID0gMDsKIAl0bi0mZ3Q7Y2FwYWJpbGl0aWVzID0gVElQQ19OT0RFX0NBUEFCSUxJVElFUzsKJiM0MzsJdG4tJmd0O250X3N0b3AgPSBmYWxzZTsKJiM0MzsJdG4tJmd0O250X3NlbGZfbm9kZV9leGlzdCA9IGZhbHNlOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7dG4tJmd0O25vZGVfYWRkcl9zZXQsIDApOwogCUlOSVRfV09SSygmYW1wO3RuLSZndDt3b3JrLCB0aXBjX25ldF9maW5hbGl6ZV93b3JrKTsKIAltZW1zZXQodG4tJmd0O25vZGVfaWQsIDAsIHNpemVvZih0bi0mZ3Q7bm9kZV9pZCkpOwogCW1lbXNldCh0bi0mZ3Q7bm9kZV9pZF9zdHJpbmcsIDAsIHNpemVvZih0bi0mZ3Q7bm9kZV9pZF9zdHJpbmcpKTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuaCBiL25ldC90aXBjL2NvcmUuaAppbmRleCA5Y2U1ZjlmZjZjYzAzLi45NzViMWQ0ODE4NmU2IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvY29yZS5oCkBAIC0xNDUsNiAmIzQzOzE0NSwxMiBAQCBzdHJ1Y3QgdGlwY19uZXQgewogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCS8qIFRoZSBudW1iZXJzIG9mIHdvcmsgcXVldWVzIGluIHNjaGVkdWxlICovCiAJYXRvbWljX3Qgd3FfY291bnQ7CiYjNDM7CS8qIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbm9kZSYjMzk7cyBhZGRyZXNzIGlzIHNldCAqLwomIzQzOwlhdG9taWNfdCBub2RlX2FkZHJfc2V0OwomIzQzOwkvKiBUaGUgbmFtZSB0YWJsZSBoYXMgc3RvcHBlZCB3b3JraW5nICovCiYjNDM7CWJvb2wgbnRfc3RvcDsKJiM0MzsJLyogTm9kZSYjMzk7cyBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBuYW1lIHRhYmxlICovCiYjNDM7CWJvb2wgbnRfc2VsZl9ub2RlX2V4aXN0OwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlwY19uZXQgKnRpcGNfbmV0KHN0cnVjdCBuZXQgKm5ldCkKZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuYyBiL25ldC90aXBjL25hbWVfZGlzdHIuYwppbmRleCBiYTRmNDkwNmUxM2I3Li44M2UzZWQ4ZjJjNTEyIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCkBAIC05NSw5ICYjNDM7OTUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKQogCQlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO3AtJmd0O2JpbmRpbmdfbm9kZSwgJmFtcDtudC0mZ3Q7bm9kZV9zY29wZSk7CiAJCXJldHVybiBOVUxMOwogCX0KLQl3cml0ZV9sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmYW1wO3AtJmd0O2JpbmRpbmdfbm9kZSwgJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiAJc2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgSVRFTV9TSVpFLCAwKTsKIAlpZiAoIXNrYikgewogCQlwcl93YXJuKCYjMzQ7UHVibGljYXRpb24gZGlzdHJpYnV0aW9uIGZhaWx1cmVcbiYjMzQ7KTsKQEAgLTEyMSw5ICYjNDM7MTE5LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnApCiAJc3RydWN0IGRpc3RyX2l0ZW0gKml0ZW07CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCXdyaXRlX2xvY2tfYmgoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKIAlsaXN0X2RlbCgmYW1wO3AtJmd0O2JpbmRpbmdfbm9kZSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiAJaWYgKHAtJmd0O3Njb3BlID09IFRJUENfTk9ERV9TQ09QRSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTE0Niw5ICYjNDM7MTQyLDE0IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKQogICogQGRub2RlOiBub2RlIHRvIGJlIHVwZGF0ZWQKICAqIEBwbHM6IGxpbmtlZCBsaXN0IG9mIHB1YmxpY2F0aW9uIGl0ZW1zIHRvIGJlIHBhY2tlZCBpbnRvIGJ1ZmZlciBjaGFpbgogICogQHNlcW5vOiBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgbWVzc2FnZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3MKJiM0MzsgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlCiYjNDM7ICoKICAqLwotc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCi0JCQkgICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pCiYjNDM7c3RhdGljIGludCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKJiM0MzsJCQkgICAgdTMyIGRub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbHMsIHUxNiBzZXFubykKIHsKIAlzdHJ1Y3QgcHVibGljYXRpb24gKnB1Ymw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CkBAIC0xNjQsOCAmIzQzOzE2NSw5IEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAogCQkJc2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgbXNnX3JlbSwKIAkJCQkJCWRub2RlKTsKIAkJCWlmICghc2tiKSB7CiYjNDM7CQkJCV9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpOwogCQkJCXByX3dhcm4oJiMzNDtCdWxrIHB1YmxpY2F0aW9uIGZhaWx1cmVcbiYjMzQ7KTsKLQkJCQlyZXR1cm47CiYjNDM7CQkJCXJldHVybiAtRU5PQlVGUzsKIAkJCX0KIAkJCWhkciA9IGJ1Zl9tc2coc2tiKTsKIAkJCW1zZ19zZXRfYmNfYWNrX2ludmFsaWQoaGRyLCB0cnVlKTsKQEAgLTE5NSw2ICYjNDM7MTk3LDkwIEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAogCWhkciA9IGJ1Zl9tc2coc2tiX3BlZWtfdGFpbChsaXN0KSk7CiAJbXNnX3NldF9sYXN0X2J1bGsoaGRyKTsKIAltc2dfc2V0X25hbWVkX3NlcW5vKGhkciwgc2Vxbm8pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBidWlsZCBhIGxpc3Qgb2YgcHVibGljYXRpb25zIG5lZWQgdG8gYmUgZGlzdHJpYnV0ZWQKJiM0MzsgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZQomIzQzOyAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZQomIzQzOyAqIEBoZWFkOiBsaXN0IG9mIHB1YmxpY2F0aW9ucwomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3MKJiM0MzsgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlCiYjNDM7ICoKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLAomIzQzOwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoZWFkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7CiYjNDM7CXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwomIzQzOwomIzQzOwkvKiBOYW1lIHRhYmxlIGhhcyBiZWVuIGRlbGV0ZWQgYWZ0ZXIgbmFtZXNwYWNlIHRlYXJkb3duIG9yCiYjNDM7CSAqIFRJUEMgbW9kdWxlIGV4aXQuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkodG4tJmd0O250X3N0b3ApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIE5vZGUmIzM5O3Mgc2VsZi1hZGRyZXNzIGlzIG5vdCBzZXQgeWV0ICovCiYjNDM7CWlmICghYXRvbWljX3JlYWQoJmFtcDt0bi0mZ3Q7bm9kZV9hZGRyX3NldCkpIHsKJiM0MzsJCS8qIERlZmVyIHRoZSBkaXN0cmlidXRpb24gdG8gbm9kZSYjMzk7cyB0aW1lciAqLwomIzQzOwkJdGlwY19ub2RlX3NldF9kaXN0X2J1bGsobmV0LCBkbm9kZSk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQcmV2aW91cyBjYWxsIHRvIHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKCkgd2FzIHN1Y2Nlc3NmdWwuCiYjNDM7CSAqIFRoZSBub2RlJiMzOTtzIHNlbGYtYWRkcmVzcyBwdWJsaWNhdGlvbiB3YXMgYWRkZWQgdG8gJiMzOTtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSYjMzk7LgomIzQzOwkgKiBTbywgJiMzOTtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSYjMzk7IGlzIG5vdCBlbXB0eSBub3cuIEdvIHRvIGRpc3RyaWJ1dGlvbi4KJiM0MzsJICovCiYjNDM7CWlmICh0bi0mZ3Q7bnRfc2VsZl9ub2RlX2V4aXN0KQomIzQzOwkJZ290byBkaXN0cmlidXRlOwomIzQzOwomIzQzOwlpZiAodGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIobmV0KSkKJiM0MzsJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsKJiM0MzsJdG4tJmd0O250X3NlbGZfbm9kZV9leGlzdCA9IHRydWU7CiYjNDM7CiYjNDM7ZGlzdHJpYnV0ZToKJiM0MzsJaWYgKG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBoZWFkLCBkbm9kZSwKJiM0MzsJCQkgICAgICZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGUsIG50LSZndDtzbmRfbnh0KSA9PSAtRU5PQlVGUykKJiM0MzsJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHRpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGRpc3RyaWJ1dGUgYWxsIHB1YmxpY2F0aW9ucyB0byBzcGVjaWZpZWQgbm9kZQomIzQzOyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgomIzQzOyAqLwomIzQzO2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkOwomIzQzOwlpbnQgcmMgPSAwOwomIzQzOwomIzQzOwlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtoZWFkKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiYjNDM7CXJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgJmFtcDtoZWFkKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKJiM0MzsJaWYgKCFyYyAmYW1wOyZhbXA7ICFza2JfcXVldWVfZW1wdHkoJmFtcDtoZWFkKSkgewomIzQzOwkJcmMgPSB0aXBjX25vZGVfeG1pdChuZXQsICZhbXA7aGVhZCwgZG5vZGUsIDApOwomIzQzOwkJLyogVGhlIGxpbmsgaXMgY29uZ2VzdGVkIGFmdGVyIHRoZSBsaXN0IGlzIGluc2VydGVkIGludG8gdGhlCiYjNDM7CQkgKiBsaW5rJiMzOTtzIHNlbmQgcXVldWUuIFJldHVybiAwLCBhcyB0aGlzIGlzIG5vcm1hbC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHJjID09IC1FTElOS0NPTkcpCiYjNDM7CQkJcmMgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0yMDIsMjUgJiM0MzsyODgsMzYgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCiAgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZQogICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlCiAgKiBAY2FwYWJpbGl0aWVzOiBwZWVyIG5vZGUmIzM5O3MgY2FwYWJpbGl0aWVzCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgogICovCi12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcykKJiM0MztpbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKQogewogCXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwogCXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCBza19idWZmX2hlYWQgaGVhZDsKLQl1MTYgc2Vxbm87CiYjNDM7CWludCByYyA9IDA7CiAKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtoZWFkKTsKIAlzcGluX2xvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKIAlpZiAoIShjYXBhYmlsaXRpZXMgJmFtcDsgVElQQ19OQU1FRF9CQ0FTVCkpCiAJCW50LSZndDtyY19kZXN0cyYjNDM7JiM0Mzs7Ci0Jc2Vxbm8gPSBudC0mZ3Q7c25kX254dDsKJiM0MzsKJiM0MzsJcmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCAmYW1wO2hlYWQpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiYjNDM7CWlmICghcmMgJmFtcDsmYW1wOyAhc2tiX3F1ZXVlX2VtcHR5KCZhbXA7aGVhZCkpIHsKJiM0MzsJCXJjID0gdGlwY19ub2RlX3htaXQobmV0LCAmYW1wO2hlYWQsIGRub2RlLCAwKTsKJiM0MzsJCS8qIFRoZSBsaW5rIGlzIGNvbmdlc3RlZCBhZnRlciB0aGUgbGlzdCBpcyBpbnNlcnRlZCBpbnRvIHRoZQomIzQzOwkJICogbGluayYjMzk7cyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyYyA9PSAtRUxJTktDT05HKQomIzQzOwkJCXJjID0gMDsKJiM0MzsJfQogCi0JcmVhZF9sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7Ci0JbmFtZWRfZGlzdHJpYnV0ZShuZXQsICZhbXA7aGVhZCwgZG5vZGUsICZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGUsIHNlcW5vKTsKLQl0aXBjX25vZGVfeG1pdChuZXQsICZhbXA7aGVhZCwgZG5vZGUsIDApOwotCXJlYWRfdW5sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiYjNDM7CXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0yOTksNyAmIzQzOzM5Niw3IEBAIHN0YXRpYyBib29sIHRpcGNfdXBkYXRlX25hbWV0Ymwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZGlzdHJfaXRlbSAqaSwKIAlzay5ub2RlID0gbm9kZTsKIAogCWlmIChkdHlwZSA9PSBQVUJMSUNBVElPTikgewotCQlwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgJmFtcDt1YSwgJmFtcDtzaywga2V5KTsKJiM0MzsJCXAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBrZXksIE5VTEwpOwogCQlpZiAocCkgewogCQkJdGlwY19ub2RlX3N1YnNjcmliZShuZXQsICZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlLCBub2RlKTsKIAkJCXJldHVybiB0cnVlOwpAQCAtNDE2LDUgJiM0Mzs1MTMsNiBAQCB2b2lkIHRpcGNfbmFtZWRfcmVpbml0KHN0cnVjdCBuZXQgKm5ldCkKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCAmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlLCBiaW5kaW5nX25vZGUpCiAJCXAtJmd0O3NrLm5vZGUgPSBzZWxmOwogCW50LSZndDtyY19kZXN0cyA9IDA7CiYjNDM7CXRuLSZndDtudF9zdG9wID0gZmFsc2U7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaAppbmRleCBjNjc3ZjZmMDgyZGZiLi4yMDQzMDk2YWU5NjdkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oCkBAIC02OSwxMSAmIzQzOzY5LDEyIEBAIHN0cnVjdCBkaXN0cl9pdGVtIHsKIAogc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7CiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7Ci12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7CiYjNDM7aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7CiB2b2lkIHRpcGNfbmFtZWRfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbmFtZWRxLAogCQkgICAgdTE2ICpyY3Zfbnh0LCBib29sICpvcGVuKTsKIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KTsKIHZvaWQgdGlwY19wdWJsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKm5zdWJfbGlzdCwKIAkJICAgICAgdTMyIGFkZHIsIHUxNiBjYXBhYmlsaXRpZXMpOwomIzQzO2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuYwppbmRleCAyNTNjNzJkMTM2NmViLi5iZWVkNDBhMjEzNjhhIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jCkBAIC0zMjksNyAmIzQzOzMyOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYywKIAogc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkgICAgIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLAotCQkJCSAgICAgc3RydWN0IHB1YmxpY2F0aW9uICpwKQomIzQzOwkJCQkgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcCwgaW50ICplcnIpCiB7CiAJc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uICpzdWIsICp0bXA7CiAJc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyOwpAQCAtMzM5LDEwICYjNDM7MzM5LDEyIEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJYm9vbCByZXMgPSBmYWxzZTsKIAl1MzIga2V5ID0gcC0mZ3Q7a2V5OwogCi0Jc3Bpbl9sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwogCXNyID0gdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzYywgcCk7Ci0JaWYgKCFzcikKLQkJZ290byAgZXhpdDsKJiM0MzsJaWYgKCFzcikgewomIzQzOwkJaWYgKGVycikKJiM0MzsJCQkqZXJyID0gLUVOT0JVRlM7CiYjNDM7CQlnb3RvIGV4aXQ7CiYjNDM7CX0KIAogCWZpcnN0ID0gbGlzdF9lbXB0eSgmYW1wO3NyLSZndDthbGxfcHVibCk7CiAKQEAgLTM1Myw2ICYjNDM7MzU1LDggQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIGJpbmQgZHVwbGljYXRlICV1LCV1LCV1LyV1OiV1LyV1XG4mIzM0OywKIAkJCQkgcC0mZ3Q7c3IudHlwZSwgcC0mZ3Q7c3IubG93ZXIsIHAtJmd0O3NyLnVwcGVyLAogCQkJCSBub2RlLCBwLSZndDtzay5yZWYsIGtleSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJKmVyciA9IC1FRVhJU1Q7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CkBAIC0zNzEsNyAmIzQzOzM3NSw2IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJaWYgKCFyZXMpCiAJCXByX3dhcm4oJiMzNDtGYWlsZWQgdG8gYmluZCB0byAldSwldSwldVxuJiMzNDssCiAJCQlwLSZndDtzci50eXBlLCBwLSZndDtzci5sb3dlciwgcC0mZ3Q7c3IudXBwZXIpOwotCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTQ3OCwyMCAmIzQzOzQ4MSwzMyBAQCBzdGF0aWMgc3RydWN0IHRpcGNfc2VydmljZSAqdGlwY19zZXJ2aWNlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LAogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCi0JCQkJCSAgICAgdTMyIGtleSkKJiM0MzsJCQkJCSAgICAgdTMyIGtleSwgaW50ICplcnIpCiB7CiAJc3RydWN0IHRpcGNfc2VydmljZSAqc2M7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwOwogCiAJcCA9IHRpcGNfcHVibF9jcmVhdGUodWEsIHNrLCBrZXkpOwotCWlmICghcCkKJiM0MzsJaWYgKCFwKSB7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCSplcnIgPSAtRU5PQlVGUzsKIAkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KIAogCXNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCB1YSk7CiAJaWYgKCFzYykKIAkJc2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgdWEpOwotCWlmIChzYyAmYW1wOyZhbXA7IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwKSkKLQkJcmV0dXJuIHA7CiYjNDM7CiYjNDM7CWlmIChzYykgewomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwomIzQzOwkJaWYgKHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwLCBlcnIpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CQkJcmV0dXJuIHA7CiYjNDM7CQl9CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3NjLSZndDtsb2NrKTsKJiM0MzsJfSBlbHNlIGlmIChlcnIpIHsKJiM0MzsJCSplcnIgPSAtRU5PQlVGUzsKJiM0MzsJfQomIzQzOwogCWtmcmVlKHApOwogCXJldHVybiBOVUxMOwogfQpAQCAtNzYwLDI2ICYjNDM7Nzc2LDU1IEBAIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCwKIC8qIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIHNlcnZpY2UgYmluZGluZyB0byBuYW1lIHRhYmxlCiAgKi8KIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCi0JCQkJCSBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpCiYjNDM7CQkJCQkgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLAomIzQzOwkJCQkJIHUzMiBrZXksIGludCAqZXJyKQogewogCXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwomIzQzOwl1MzIgbWF4X3VzZXJfcHViID0gVElQQ19NQVhfUFVCTCAtIDE7CiAJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKJiM0MzsJYm9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7CiYjNDM7CWludCBlcnJvciA9IDA7CiAJdTMyIHJjX2Rlc3RzOwogCiYjNDM7CWlmICh1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgfHwgdWEtJmd0O3NyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8CiYjNDM7CSAgICB1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpCiYjNDM7CQlwcm90b2NvbF90eXBlID0gdHJ1ZTsKJiM0MzsKIAlzcGluX2xvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKJiM0MzsJaWYgKHByb3RvY29sX3R5cGUpCiYjNDM7CQlnb3RvIGluc2VydDsKIAotCWlmIChudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCAmZ3Q7PSBUSVBDX01BWF9QVUJMKSB7Ci0JCXByX3dhcm4oJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcbiYjMzQ7LCBUSVBDX01BWF9QVUJMKTsKJiM0MzsJLyogUmVzZXJ2ZSBvbmUgZW50cnkgZm9yIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlIGJlY2F1c2UgaXQgaGFzIGNsdXN0ZXIKJiM0MzsJICogc2NvcGUgYW5kIGl0IGlzIGRpc3RyaWJ1dGVkIGluIGJ1bGsuIFNvLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdXNlciYjMzk7cwomIzQzOwkgKiBwdWJsaWNhdGlvbnMgaXMgKFRJUENfTUFYX1BVQkwgLSAxKS4KJiM0MzsJICovCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCAmZ3Q7PSBtYXhfdXNlcl9wdWIpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcbiYjMzQ7LCBtYXhfdXNlcl9wdWIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0JcCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIHVhLCBzaywga2V5KTsKJiM0MztpbnNlcnQ6CiYjNDM7CXAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSwgJmFtcDtlcnJvcik7CiAJaWYgKHApIHsKLQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQmIzQzOyYjNDM7OwomIzQzOwkJLyogTm90IGNvdW50IG5vZGUgc3RhdGUsIGxpbmsgc3RhdGUgYW5kIHRvcG9sb2d5IHNlcnZlciB0eXBlcwomIzQzOwkJICogc28gdGhhdCBtYXhpbXVtIG50LSZndDtsb2NhbF9wdWJsX2NvdW50IGRvZXMgbm90IHByZXZlbnQKJiM0MzsJCSAqIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgZnJvbSBiZWluZyBpbnNlcnRlZCBpbnRvIHRoZSBuYW1lCiYjNDM7CQkgKiB0YWJsZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFwcm90b2NvbF90eXBlKQomIzQzOwkJCW50LSZndDtsb2NhbF9wdWJsX2NvdW50JiM0MzsmIzQzOzsKIAkJc2tiID0gdGlwY19uYW1lZF9wdWJsaXNoKG5ldCwgcCk7CiYjNDM7CQkvKiBMb2NhbC1zY29wZSBwdWJsaWNhdGlvbiBpcyBub3QgcHVibGlzaGVkIChza2IgaXMgTlVMTCksIG9ubHkKJiM0MzsJCSAqIGNsdXN0ZXItY29wZSBvbmUgaXMuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghc2tiICZhbXA7JmFtcDsgcC0mZ3Q7c2NvcGUgPT0gVElQQ19DTFVTVEVSX1NDT1BFICZhbXA7JmFtcDsgZXJyKQomIzQzOwkJCSplcnIgPSAtRU5PQlVGUzsKJiM0MzsJfSBlbHNlIGlmICgoZXJyb3IgPT0gLUVOT0JVRlMpICZhbXA7JmFtcDsgZXJyKSB7CiYjNDM7CQkqZXJyID0gLUVOT0JVRlM7CiAJfQomIzQzOwogCXJjX2Rlc3RzID0gbnQtJmd0O3JjX2Rlc3RzOwogZXhpdDoKIAlzcGluX3VubG9ja19iaCgmYW1wO3RuLSZndDtuYW1ldGJsX2xvY2spOwpAQCAtNzg3LDcgJiM0Mzs4MzIsMTAyIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAJaWYgKHNrYikKIAkJdGlwY19ub2RlX2Jyb2FkY2FzdChuZXQsIHNrYiwgcmNfZGVzdHMpOwogCXJldHVybiBwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiAtIGluc2VydCBwdWJsaWNhdGlvbiBvZiBub2RlJiMzOTtzIHNlbGYgYWRkcmVzcwomIzQzOyAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgomIzQzOyAqLwomIzQzO2ludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTsKJiM0MzsJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiYjNDM7CXN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrOwomIzQzOwlzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3I7CiYjNDM7CXN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjOwomIzQzOwlib29sIHNjX2NyZWF0ZWQgPSBmYWxzZTsKJiM0MzsJc3RydWN0IHB1YmxpY2F0aW9uICpwOwomIzQzOwlzdHJ1Y3QgdGlwY191YWRkciB1YTsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CXNrLnJlZiA9IDA7CiYjNDM7CXNrLm5vZGUgPSB0bi0mZ3Q7bm9kZV9hZGRyOwomIzQzOwl0aXBjX3VhZGRyKCZhbXA7dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLAomIzQzOwkJICAgVElQQ19OT0RFX1NUQVRFLCB0bi0mZ3Q7bm9kZV9hZGRyLCB0bi0mZ3Q7bm9kZV9hZGRyKTsKJiM0MzsJc2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsICZhbXA7dWEpOwomIzQzOwlpZiAoIXNjKSB7CiYjNDM7CQlzYyA9IHRpcGNfc2VydmljZV9jcmVhdGUobmV0LCAmYW1wO3VhKTsKJiM0MzsJCWlmICghc2MpCiYjNDM7CQkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwkJc2NfY3JlYXRlZCA9IHRydWU7CiYjNDM7CX0KIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CS8qIENoZWNrIHdoZXRoZXIgYSByYW5nZSBleGlzdHMgaW4gdGhlIG5hbWUgdGFibGUgd2l0aAomIzQzOwkgKiBsb3dlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyLCB1cHBlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyLCBhbmQgdHlwZQomIzQzOwkgKiBUSVBDX05PREVfU1RBVEUgKDApLiBJZiAmIzM5O3NyJiMzOTsgaXMgbm90IE5VTEwsIHRoaXMgcmFuZ2UgZXhpc3RzCiYjNDM7CSAqIGR1ZSB0byBhIHByZXZpb3VzIGNhbGwgdG8gdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoKQomIzQzOwkgKiBvciB0aXBjX25ldF9maW5hbGl6ZSgpLgomIzQzOwkgKgomIzQzOwkgKiBOb3RlIHRoYXQgdXNlciBhcHBsaWNhdGlvbnMgY2FuIG9ubHkgaW5zZXJ0IHR5cGVzIGdyZWF0ZXIgdGhhbgomIzQzOwkgKiBvciBlcXVhbCB0byA2NCAoVElQQ19SRVNFUlZFRF9UWVBFUyksIGFzIGVuZm9yY2VkIGJ5IHRpcGNfYmluZCgpLgomIzQzOwkgKiBSZW1vdGUgbm9kZXMgYWxzbyBvbmx5IHNlbmQgcHJvdG9jb2wgcHVibGljYXRpb25zIHdpdGggdHlwZQomIzQzOwkgKiBUSVBDX05PREVfU1RBVEUgKDApLCB3aXRoIGJvdGggbG93ZXIgYW5kIHVwcGVyIHNldCB0byB0aGUgcmVtb3RlCiYjNDM7CSAqIG5vZGUmIzM5O3MgYWRkcmVzcy4gVGhlc2UgcmFuZ2VzIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGlzIG5vZGUmIzM5O3MKJiM0MzsJICogcmFuZ2UgYmVjYXVzZSBhIHJlbW90ZSBub2RlJiMzOTtzIGFkZHJlc3MgbXVzdCBkaWZmZXIgZnJvbSB0aGlzCiYjNDM7CSAqIG5vZGUmIzM5O3MgYWRkcmVzcyAodG4tJmd0O25vZGVfYWRkcikuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZXJlZm9yZSwgdGlwY191cGRhdGVfbmFtZXRibCgpIGNhbm5vdCBidWlsZCBhbmQgaW5zZXJ0IGEgcmVtb3RlCiYjNDM7CSAqIHB1YmxpY2F0aW9uIHdpdGggdGhlIHNhbWUgdHlwZSAoMCkgYW5kIHJhbmdlCiYjNDM7CSAqIChsb3dlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyLCB1cHBlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyKSBhcyB0aGlzIG5vZGUmIzM5O3MKJiM0MzsJICogc2VsZi1hZGRyZXNzIHB1YmxpY2F0aW9uIGluIHRoZSBuYW1lIHRhYmxlLgomIzQzOwkgKgomIzQzOwkgKiBCZWNhdXNlIHRoZSBjb21iaW5hdGlvbiBvZiB0eXBlIDAgYW5kCiYjNDM7CSAqIChsb3dlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyLCB1cHBlciA9PSB0bi0mZ3Q7bm9kZV9hZGRyKSBpcyB1bmlxdWUgaW4gdGhlCiYjNDM7CSAqIG5hbWUgdGFibGUsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY2hlY2sgc2subm9kZSwgc2sucmVmLCBrZXksIG9yCiYjNDM7CSAqIGNsdXN0ZXJfc2NvcGUgbWVtYmVyc2hpcC4KJiM0MzsJICovCiYjNDM7CXNyID0gdGlwY19zZXJ2aWNlX2ZpbmRfcmFuZ2Uoc2MsICZhbXA7dWEpOwomIzQzOwkvKiAxLiB0aXBjX25ldF9maW5hbGl6ZV93b3JrKCkgaXMgbm90IHNjaGVkdWxlZCBiZWNhdXNlIG9mIG5hbWVzcGFjZQomIzQzOwkgKiAgICB0ZWFyZG93bi4KJiM0MzsJICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS0mZ3Q7IHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIGZhaWxlZAomIzQzOwkgKiAgICB0byBpbnNlcnQgbm9kZSBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaW50byBudC0mZ3Q7Y2x1c3Rlcl9zY29wZQomIzQzOwkgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4KJiM0MzsJICogMy4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS0mZ3Q7IHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdAomIzQzOwkgKiAgICBleGVjdXRlZCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXNyKSB7CiYjNDM7CQlwID0gdGlwY19wdWJsX2NyZWF0ZSgmYW1wO3VhLCAmYW1wO3NrLCB0bi0mZ3Q7bm9kZV9hZGRyKTsKJiM0MzsJCWlmICghcCkKJiM0MzsJCQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwkJaWYgKCF0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgJmFtcDtlcnIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoZXJyID09IC1FTk9CVUZTKSkgewomIzQzOwkJCWtmcmVlKHApOwomIzQzOwkJCWdvdG8gZXJyb3I7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlsaXN0X2FkZF90YWlsKCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlLCAmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlKTsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MztlcnJvcjoKJiM0MzsJCWlmIChzY19jcmVhdGVkKSB7CiYjNDM7CQkJaGxpc3RfZGVsX2luaXRfcmN1KCZhbXA7c2MtJmd0O3NlcnZpY2VfbGlzdCk7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CQkJa2ZyZWVfcmN1KHNjLCByY3UpOwomIzQzOwkJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwl9CiYjNDM7ZXhpdDoKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiAwOwogfQogCiAvKioKQEAgLTgxMCw3ICYjNDM7OTUwLDEwIEBAIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAogCiAJcCA9IHRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChuZXQsIHVhLCBzaywga2V5KTsKIAlpZiAocCkgewotCQludC0mZ3Q7bG9jYWxfcHVibF9jb3VudC0tOwomIzQzOwkJaWYgKHAtJmd0O3NyLnR5cGUgIT0gVElQQ19OT0RFX1NUQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwLSZndDtzci50eXBlICE9IFRJUENfTElOS19TVEFURSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcC0mZ3Q7c3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpCiYjNDM7CQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQtLTsKIAkJc2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApOwogCQlsaXN0X2RlbF9pbml0KCZhbXA7cC0mZ3Q7YmluZGluZ19zb2NrKTsKIAkJa2ZyZWVfcmN1KHAsIHJjdSk7CkBAIC04OTksNyAmIzQzOzEwNDIsNiBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KQogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtudC0mZ3Q7bm9kZV9zY29wZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSk7Ci0Jcndsb2NrX2luaXQoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKIAl0bi0mZ3Q7bmFtZXRibCA9IG50OwogCXNwaW5fbG9ja19pbml0KCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiAJcmV0dXJuIDA7CkBAIC05MTIsNiAmIzQzOzEwNTQsNyBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KQogICovCiBzdGF0aWMgdm9pZCB0aXBjX3NlcnZpY2VfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc2VydmljZSAqc2MpCiB7CiYjNDM7CXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzciwgKnRtcHI7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwLCAqdG1wOwogCkBAIC05MTksNiAmIzQzOzEwNjIsMTUgQEAgc3RhdGljIHZvaWQgdGlwY19zZXJ2aWNlX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjKQogCXJidHJlZV9wb3N0b3JkZXJfZm9yX2VhY2hfZW50cnlfc2FmZShzciwgdG1wciwgJmFtcDtzYy0mZ3Q7cmFuZ2VzLCB0cmVlX25vZGUpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgJmFtcDtzci0mZ3Q7YWxsX3B1YmwsIGFsbF9wdWJsKSB7CiAJCQl0aXBjX3NlcnZpY2VfcmVtb3ZlX3B1Ymwoc3IsICZhbXA7cC0mZ3Q7c2ssIHAtJmd0O2tleSk7CiYjNDM7CQkJLyogdGlwY19uYW1ldGJsX3dpdGhkcmF3KCkgZG9lcyBub3QgZGVsZXRlCiYjNDM7CQkJICogJiMzOTtwLSZndDtiaW5kaW5nX25vZGUmIzM5OyB3aXRoIHR5cGUgVElQQ19OT0RFX1NUQVRFIGFuZAomIzQzOwkJCSAqIHJhbmdlIFt0bi0mZ3Q7bm9kZV9hZGRyLCB0bi0mZ3Q7bm9kZV9hZGRyXSBmcm9tCiYjNDM7CQkJICogJiMzOTt0bi0mZ3Q7Y2x1c3Rlcl9zY29wZSYjMzk7LiBTbywgZGVsZXRlIGl0IGhlcmUuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHAtJmd0O3NyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgcC0mZ3Q7c3IubG93ZXIgPT0gdG4tJmd0O25vZGVfYWRkciAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHAtJmd0O3NyLnVwcGVyID09IHRuLSZndDtub2RlX2FkZHIpCiYjNDM7CQkJCWxpc3RfZGVsKCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlKTsKIAkJCWtmcmVlX3JjdShwLCByY3UpOwogCQl9CiAJCXJiX2VyYXNlX2F1Z21lbnRlZCgmYW1wO3NyLSZndDt0cmVlX25vZGUsICZhbXA7c2MtJmd0O3JhbmdlcywgJmFtcDtzcl9jYWxsYmFja3MpOwpAQCAtOTQ5LDYgJiM0MzsxMTAxLDggQEAgdm9pZCB0aXBjX25hbWV0Ymxfc3RvcChzdHJ1Y3QgbmV0ICpuZXQpCiAJCQl0aXBjX3NlcnZpY2VfZGVsZXRlKG5ldCwgc2VydmljZSk7CiAJCX0KIAl9CiYjNDM7CXRuLSZndDtudF9zdG9wID0gdHJ1ZTsKJiM0MzsJdG4tJmd0O250X3NlbGZfbm9kZV9leGlzdCA9IGZhbHNlOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiAKIAkvKiBUT0RPOiBjbGVhciB0bi0mZ3Q7bmFtZXRibCwgaW1wbGVtZW50IHByb3BlciBSQ1UgcnVsZXMgPyAqLwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV90YWJsZS5oIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oCmluZGV4IDdmZjZlZWViYWFlNjQuLjQzOTBlNzlhNDY2MGUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmgKQEAgLTk3LDggJiM0Mzs5Nyw3IEBAIHN0cnVjdCBwdWJsaWNhdGlvbiB7CiAgKiBAY2x1c3Rlcl9zY29wZTogYWxsIGxvY2FsIHB1YmxpY2F0aW9ucyB3aXRoIGNsdXN0ZXIgc2NvcGUKICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgdG8gc2VuZCBidWxrIHVwZGF0ZXMgdG8gbmV3IG5vZGVzCiAgKiAgICAgICAgICAgICAgIC0gdXNlZCBieSBuYW1lX2Rpc3RyIGR1cmluZyByZS1pbml0IG9mIG5hbWUgdGFibGUKLSAqIEBjbHVzdGVyX3Njb3BlX2xvY2s6IGxvY2sgZm9yIGFjY2Vzc2luZyBAY2x1c3Rlcl9zY29wZQotICogQGxvY2FsX3B1YmxfY291bnQ6IG51bWJlciBvZiBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZQomIzQzOyAqIEBsb2NhbF9wdWJsX2NvdW50OiB0aGUgbnVtYmVyIG9mIHVzZXImIzM5O3MgcHVibGljYXRpb25zIGlzc3VlZCBieSB0aGlzIG5vZGUKICAqIEByY19kZXN0czogZGVzdGluYXRpb24gbm9kZSBjb3VudGVyCiAgKiBAc25kX254dDogbmV4dCBzZXF1ZW5jZSBudW1iZXIgdG8gYmUgdXNlZAogICovCkBAIC0xMDcsNyAmIzQzOzEwNiw2IEBAIHN0cnVjdCBuYW1lX3RhYmxlIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBzZXJ2aWNlc1tUSVBDX05BTUVUQkxfU0laRV07CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlX3Njb3BlOwogCXN0cnVjdCBsaXN0X2hlYWQgY2x1c3Rlcl9zY29wZTsKLQlyd2xvY2tfdCBjbHVzdGVyX3Njb3BlX2xvY2s7CiAJdTMyIGxvY2FsX3B1YmxfY291bnQ7CiAJdTMyIHJjX2Rlc3RzOwogCXUzMiBzbmRfbnh0OwpAQCAtMTI2LDEzICYjNDM7MTI0LDE1IEBAIGJvb2wgdGlwY19uYW1ldGJsX2xvb2t1cF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCwKIAkJCSAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7CiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAotCQkJCQkgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTsKJiM0MzsJCQkJCSBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCiYjNDM7CQkJCQkgdTMyIGtleSwgaW50ICplcnIpOwogdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAJCQkgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpOwogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCi0JCQkJCSAgICAgdTMyIGtleSk7CiYjNDM7CQkJCQkgICAgIHUzMiBrZXksIGludCAqZXJyKTsKJiM0MztpbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KTsKIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAJCQkJCSAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmV0LmMgYi9uZXQvdGlwYy9uZXQuYwppbmRleCA3ZTY1ZDBiMGM0YThkLi43YTJjMWU2N2FjYTNkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uZXQuYwpAQCAtMTEwLDExICYjNDM7MTEwLDE0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpOwogCiBpbnQgdGlwY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpub2RlX2lkLCB1MzIgYWRkcikKIHsKJiM0MzsJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiYjNDM7CiAJaWYgKHRpcGNfb3duX2lkKG5ldCkpIHsKIAkJcHJfaW5mbygmIzM0O0Nhbm5vdCBjb25maWd1cmUgbm9kZSBpZGVudGl0eSB0d2ljZVxuJiMzNDspOwogCQlyZXR1cm4gLTE7CiAJfQogCXByX2luZm8oJiMzNDtTdGFydGVkIGluIG5ldHdvcmsgbW9kZVxuJiMzNDspOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7dG4tJmd0O25vZGVfYWRkcl9zZXQsIDApOwogCiAJaWYgKG5vZGVfaWQpCiAJCXRpcGNfc2V0X25vZGVfaWQobmV0LCBub2RlX2lkKTsKQEAgLTEyNSw4ICYjNDM7MTI4LDggQEAgaW50IHRpcGNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1OCAqbm9kZV9pZCwgdTMyIGFkZHIpCiAKIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpCiB7Ci0Jc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiAJc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2sgPSB7MCwgYWRkcn07CiYjNDM7CXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCB0aXBjX3VhZGRyIHVhOwogCiAJdGlwY191YWRkcigmYW1wO3VhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSwKQEAgLTEzOCw3ICYjNDM7MTQxLDExIEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpCiAJdGlwY19uYW1lZF9yZWluaXQobmV0KTsKIAl0aXBjX3NrX3JlaW5pdChuZXQpOwogCXRpcGNfbW9uX3JlaW5pdF9zZWxmKG5ldCk7Ci0JdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBhZGRyKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3RuLSZndDtub2RlX2FkZHJfc2V0LCAxKTsKJiM0MzsJLyogUmVkaXN0cmlidXRlIGJ1bGsgb2YgcHVibGljYXRpb25zIHZpYSBub2RlLXVwIGV2ZW50IG9yIG5vZGUmIzM5O3MgdGltZXIKJiM0MzsJICogaWYgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBmYWlscy4KJiM0MzsJICovCiYjNDM7CXRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgJmFtcDt1YSwgJmFtcDtzaywgYWRkciwgTlVMTCk7CiB9CiAKIHZvaWQgdGlwY19uZXRfZmluYWxpemVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmMgYi9uZXQvdGlwYy9ub2RlLmMKaW5kZXggNjgzYTEzNmU1M2VmYy4uZjFlZWU2NzRhNjc4ZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25vZGUuYwpAQCAtMTExLDYgJiM0MzsxMTEsNyBAQCBzdHJ1Y3QgdGlwY19iY2xpbmtfZW50cnkgewogICogQHBlZXJfbmV0OiBwZWVyJiMzOTtzIG5ldCBuYW1lc3BhY2UKICAqIEBwZWVyX2hhc2hfbWl4OiBoYXNoIGZvciB0aGlzIHBlZXIgKEZJWE1FKQogICogQGNyeXB0b19yeDogUlggY3J5cHRvIGhhbmRsZXIKJiM0MzsgKiBAZGlzdF9idWxrOiBmbGFnIHRvIHJlZGlzdHJpYnV0ZSBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9ucwogICovCiBzdHJ1Y3QgdGlwY19ub2RlIHsKIAl1MzIgYWRkcjsKQEAgLTE0NSw2ICYjNDM7MTQ2LDcgQEAgc3RydWN0IHRpcGNfbm9kZSB7CiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPCiAJc3RydWN0IHRpcGNfY3J5cHRvICpjcnlwdG9fcng7CiAjZW5kaWYKJiM0MzsJYXRvbWljX3QgZGlzdF9idWxrOwogfTsKIAogLyogTm9kZSBGU00gc3RhdGVzIGFuZCBldmVudHM6CkBAIC0zNDUsNiAmIzQzOzM0NywxNyBAQCBzdGF0aWMgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcikKIAlyZXR1cm4gbm9kZTsKIH0KIAomIzQzO3ZvaWQgdGlwY19ub2RlX3NldF9kaXN0X2J1bGsoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0aXBjX25vZGUgKm5vZGU7CiYjNDM7CiYjNDM7CW5vZGUgPSB0aXBjX25vZGVfZmluZChuZXQsIGFkZHIpOwomIzQzOwlpZiAobm9kZSkgewomIzQzOwkJYXRvbWljX3NldCgmYW1wO25vZGUtJmd0O2Rpc3RfYnVsaywgMSk7CiYjNDM7CQl0aXBjX25vZGVfcHV0KG5vZGUpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyogdGlwY19ub2RlX2ZpbmRfYnlfaWQgLSBsb2NhdGUgc3BlY2lmaWVkIG5vZGUgb2JqZWN0IGJ5IGl0cyAxMjgtYml0IGlkCiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gYSBkaXNjb3ZlcnkgcmVxdWVzdCBmYWlsZWQKICAqIHRvIGZpbmQgdGhlIG5vZGUgYnkgaXRzIDMyLWJpdCBpZCwgYW5kIGlzIG5vdCB0aW1lIGNyaXRpY2FsCkBAIC0zOTMsNiAmIzQzOzQwNiwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrX2Zhc3Qoc3RydWN0IHRpcGNfbm9kZSAqbikKIAl3cml0ZV91bmxvY2tfYmgoJmFtcDtuLSZndDtsb2NrKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRpcGNfbm9kZV9kb3duKHN0cnVjdCB0aXBjX25vZGUgKm4pCiYjNDM7ewomIzQzOwlpbnQgYmVhcmVyX2lkOwomIzQzOwomIzQzOwlmb3IgKGJlYXJlcl9pZCA9IDA7IGJlYXJlcl9pZCAmbHQ7IE1BWF9CRUFSRVJTOyBiZWFyZXJfaWQmIzQzOyYjNDM7KQomIzQzOwkJdGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pCiAJX19yZWxlYXNlcyhuLSZndDtsb2NrKQogewpAQCAtNDAyLDYgJiM0Mzs0MjMsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pCiAJc3RydWN0IGxpc3RfaGVhZCAqcHVibF9saXN0OwogCXN0cnVjdCB0aXBjX3VhZGRyIHVhOwogCXUzMiBiZWFyZXJfaWQsIG5vZGU7CiYjNDM7CWludCByYyA9IDAsIGVyciA9IDA7CiAKIAlpZiAobGlrZWx5KCFmbGFncykpIHsKIAkJd3JpdGVfdW5sb2NrX2JoKCZhbXA7bi0mZ3Q7bG9jayk7CkBAIC00MjUsMTYgJiM0Mzs0NDcsMjQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKQogCQl0aXBjX3B1Ymxfbm90aWZ5KG5ldCwgcHVibF9saXN0LCBub2RlLCBuLSZndDtjYXBhYmlsaXRpZXMpOwogCiAJaWYgKGZsYWdzICZhbXA7IFRJUENfTk9USUZZX05PREVfVVApCi0JCXRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tJmd0O2NhcGFiaWxpdGllcyk7CiYjNDM7CQlyYyA9IHRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tJmd0O2NhcGFiaWxpdGllcyk7CiAKIAlpZiAoZmxhZ3MgJmFtcDsgVElQQ19OT1RJRllfTElOS19VUCkgewogCQl0aXBjX21vbl9wZWVyX3VwKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTsKLQkJdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYpOwomIzQzOwkJdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYsICZhbXA7ZXJyKTsKIAl9CiAJaWYgKGZsYWdzICZhbXA7IFRJUENfTk9USUZZX0xJTktfRE9XTikgewogCQl0aXBjX21vbl9wZWVyX2Rvd24obmV0LCBub2RlLCBiZWFyZXJfaWQpOwogCQl0aXBjX25hbWV0Ymxfd2l0aGRyYXcobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYpOwogCX0KJiM0MzsKJiM0MzsJLyogTWVtb3J5IGFsbG9jYXRpb24gaGFzIGZhaWxlZC4gQnJpbmcgdGhlIG5vZGUgZG93biB0byBzdGFydCBvdmVyIGJ1bGsKJiM0MzsJICogZGlzdHJpYnV0aW9uIHdoZW4gdGhlIGZpcnN0IGxpbmsgaXMgdXAgYWdhaW4uCiYjNDM7CSAqLwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJdGlwY19ub2RlX2Rvd24obik7CiYjNDM7CWVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUykKJiM0MzsJCXRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV9hc3NpZ25fcGVlcl9uZXQoc3RydWN0IHRpcGNfbm9kZSAqbiwgdTMyIGhhc2hfbWl4ZXMpCkBAIC01NjQsNiAmIzQzOzU5NCw3IEBAIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkciwgdTggKnBlZXJfaWQsCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuLSZndDtsaXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO24tJmd0O3B1YmxfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuLSZndDtjb25uX3Nrcyk7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtuLSZndDtkaXN0X2J1bGssIDApOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5uYW1lZHEpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5pbnB1dHExKTsKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5hcnJ2cSk7CkBAIC04MDMsNyAmIzQzOzgzNCw4IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCXN0cnVjdCB0aXBjX25vZGUgKm4gPSB0aW1lcl9jb250YWluZXJfb2YobiwgdCwgdGltZXIpOwogCXN0cnVjdCB0aXBjX2xpbmtfZW50cnkgKmxlOwogCXN0cnVjdCBza19idWZmX2hlYWQgeG1pdHE7Ci0JaW50IHJlbWFpbnMgPSBuLSZndDtsaW5rX2NudDsKJiM0MzsJaW50IHJlbWFpbnMgPSAwOwomIzQzOwlpbnQgZGlzdF9yYyA9IDA7CiAJaW50IGJlYXJlcl9pZDsKIAlpbnQgcmMgPSAwOwogCkBAIC04MTQsNiAmIzQzOzg0Niw5IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCQlyZXR1cm47CiAJfQogCiYjNDM7CWlmIChhdG9taWNfeGNoZygmYW1wO24tJmd0O2Rpc3RfYnVsaywgMCkpCiYjNDM7CQlkaXN0X3JjID0gdGlwY19uYW1lZF9kaXN0cmlidXRlKG4tJmd0O25ldCwgbi0mZ3Q7YWRkcik7CiYjNDM7CiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPCiAJLyogVGFrZSBhbnkgY3J5cHRvIGtleSByZWxhdGVkIGFjdGlvbnMgZmlyc3QgKi8KIAl0aXBjX2NyeXB0b190aW1lb3V0KG4tJmd0O2NyeXB0b19yeCk7CkBAIC04MjUsNiAmIzQzOzg2MCw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCSAqLwogCXRpcGNfbm9kZV9yZWFkX2xvY2sobik7CiAJbi0mZ3Q7a2VlcGFsaXZlX2ludHYgPSAxMDAwMDsKJiM0MzsJcmVtYWlucyA9IG4tJmd0O2xpbmtfY250OwogCXRpcGNfbm9kZV9yZWFkX3VubG9jayhuKTsKIAlmb3IgKGJlYXJlcl9pZCA9IDA7IHJlbWFpbnMgJmFtcDsmYW1wOyAoYmVhcmVyX2lkICZsdDsgTUFYX0JFQVJFUlMpOyBiZWFyZXJfaWQmIzQzOyYjNDM7KSB7CiAJCXRpcGNfbm9kZV9yZWFkX2xvY2sobik7CkBAIC04MzUsMTEgJiM0Mzs4NzEsMTMgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAJCQl0aXBjX25vZGVfY2FsY3VsYXRlX3RpbWVyKG4sIGxlLSZndDtsaW5rKTsKIAkJCXJjID0gdGlwY19saW5rX3RpbWVvdXQobGUtJmd0O2xpbmssICZhbXA7eG1pdHEpOwogCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtsZS0mZ3Q7bG9jayk7Ci0JCQlyZW1haW5zLS07CiYjNDM7CQkJaWYgKGRpc3RfcmMgJmx0OyAwKQomIzQzOwkJCQlyZW1haW5zLS07CiAJCX0KIAkJdGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pOwogCQl0aXBjX2JlYXJlcl94bWl0KG4tJmd0O25ldCwgYmVhcmVyX2lkLCAmYW1wO3htaXRxLCAmYW1wO2xlLSZndDttYWRkciwgbik7Ci0JCWlmIChyYyAmYW1wOyBUSVBDX0xJTktfRE9XTl9FVlQpCiYjNDM7CQkvKiBGb3JjZSB0aGUgbm9kZSBkb3duIGluIGNhc2UgdGhlIHJlZGlzdHJpYnV0aW9uIGZhaWxlZCAqLwomIzQzOwkJaWYgKChyYyAmYW1wOyBUSVBDX0xJTktfRE9XTl9FVlQpIHx8IGRpc3RfcmMgJmx0OyAwKQogCQkJdGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTsKIAl9CiAJbW9kX3RpbWVyKCZhbXA7bi0mZ3Q7dGltZXIsIGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhuLSZndDtrZWVwYWxpdmVfaW50dikpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5oIGIvbmV0L3RpcGMvbm9kZS5oCmluZGV4IDE1NGE1YmJiMGQyOWQuLjBmNzc3Y2ZlN2MwMWUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25vZGUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9ub2RlLmgKQEAgLTEyOCw0ICYjNDM7MTI4LDUgQEAgaW50IHRpcGNfbmxfbm9kZV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogaW50IHRpcGNfbmxfbm9kZV9mbHVzaF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiAjZW5kaWYKIHZvaWQgdGlwY19ub2RlX3ByZV9jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpleGl0X25ldCk7CiYjNDM7dm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuYwppbmRleCBkNWQ3MGViMjMwYjU2Li42YjgzYmRmYzQzOWMzIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9zb2NrZXQuYwpAQCAtMjkxOSw3ICYjNDM7MjkxOSw3IEBAIHN0YXRpYyBpbnQgdGlwY19za19wdWJsaXNoKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKQogCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJc2thZGRyLnJlZiA9IHRzay0mZ3Q7cG9ydGlkOwogCXNrYWRkci5ub2RlID0gdGlwY19vd25fYWRkcihuZXQpOwotCXAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCAmYW1wO3NrYWRkciwga2V5KTsKJiM0MzsJcCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsICZhbXA7c2thZGRyLCBrZXksIE5VTEwpOwogCWlmICh1bmxpa2VseSghcCkpCiAJCXJldHVybiAtRUlOVkFMOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjczOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRJUEMgTmFtZSBUYWJsZSBEaXN0cmlidXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIFRJUEMgc3Vic3lzdGVtIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIG5hbWUgdGFibGUgcHVibGljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBtZWNoYW5pc21zLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZm9jdXNlZCBvbiB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcyBhbmQgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCByaXNrcy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3QgaXMgYXJvdW5kIGltcHJvdmluZyBlcnJvciBoYW5kbGluZywgcGFydGljdWxhcmx5IHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMgZHVyaW5nIHRoZSBkaXN0cmlidXRpb24gcHJvY2VzcyDigJMgZ29vZCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgcG9pbnQgdG8gYWRkcmVzcywgcmF0aGVyIHRoYW4gc2lsZW50bHkgZmFpbGluZyBvciBjcmFzaGluZy4gVGhleSYjMzk7cmUgZXhwbGljaXRseSBhZGRpbmcgaGFuZGxpbmcgZm9yIGAtRU5PQlVGU2Agd2hpY2ggaXMgdGhlIHJpZ2h0IHdheSB0byBkbyBpdC4KCkZyb20gdGhlIGRlc2NyaXB0aW9uLCB0aGV54oCZcmUgdG91Y2hpbmcgcXVpdGUgYSBmZXcgZnVuY3Rpb25zOiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmxgLCBldGMuIFRoaXMgbWVhbnMgaXQmIzM5O3MgcHJldHR5IGludm9sdmVkLiBBbmQsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWxzbyBpbnRyb2R1Y2luZyBuZXcgZmxhZ3Mgd2l0aGluIGBzdHJ1Y3QgdGlwY19uZXRgIChgbnRfc3RvcGAsIGBudF9zZWxmX25vZGVfZXhpc3RgLCBgbm9kZV9hZGRyX3NldGApIGFuZCBhZGRpbmcgYSBuZXcgYGRpc3RfYnVsa2AgZmllbGQgdG8gYHN0cnVjdCB0aXBjX25vZGVgLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byBub3RlLCBzdGF0ZSB0cmFja2luZyBhbmQgbmV3IGNvbnRyb2wgZmxvdyBjYW4gbGVhZCB0byB1bmludGVuZGVkIHNpZGUgZWZmZWN0cy4KCk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBzYWZldHkuIEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoZSBkZXNjcmlwdGlvbiBzdWdnZXN0cyB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSAqZGlyZWN0bHkqIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB3aGljaCBpcyBhIGJpZyByZWxpZWYuIE5vIGNvbXBsZXggbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIHdoZXJlIHVuaXRpdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZSBjb3JlIGlkZWEgc2VlbXMgdG8gYmUgZ3JhY2VmdWxseSBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBpbiB0aGUgVElQQyBuYW1lIGRpc3RyaWJ1dGlvbiBwcm9jZXNzLiBUaGF0IHNob3VsZCBiZSBhIGdvb2QgdGhpbmcuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYSBzcGVjaWZpYyBjb2RlIHNuaXBwZXQsIHNwZWNpZmljYWxseSBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgOgoKYGBgYwomIzQzO2ludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewouLi4KJiM0MzsJc2sucmVmID0gMDsKJiM0MzsJc2subm9kZSA9IHRuLSZndDtub2RlX2FkZHI7CiYjNDM7CXRpcGNfdWFkZHIoJmFtcDt1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsCiYjNDM7CQkgICBUSVBDX05PREVfU1RBVEUsIHRuLSZndDtub2RlX2FkZHIsIHRuLSZndDtub2RlX2FkZHIpOwouLi4KYGBgCgpSaWdodCwgYHNrYCBoZXJlIGlzIGEgYHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyYCwgYW5kIGl0ICphcHBlYXJzKiB0byBiZSBmdWxseSBpbml0aWFsaXplZDogYHNrLnJlZmAgaXMgc2V0IHRvIGAwYCwgYW5kIGBzay5ub2RlYCBpcyBwb3B1bGF0ZWQgZnJvbSBgdG4tJmd0O25vZGVfYWRkcmAuIFRoYXTigJlzIGdvb2QuIGB1YWAgaXMgYSBgc3RydWN0IHRpcGNfdWFkZHJgLiBOb3csIGB0aXBjX3VhZGRyYCBpcyBiZWluZyBjYWxsZWQsIHdoaWNoIGluaXRpYWxpemVzIGl0LiBJdCYjMzk7cyBhIGZ1bmN0aW9uIG9yIGEgbWFjcm8uIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHRpcGNfdWFkZHJgLCBpbiBgbmV0L3RpcGMvY29yZS5oYCBvciBzb21ld2hlcmUgc2ltaWxhciB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBpdCBpbml0aWFsaXplcyBhbGwgdGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0IHRvIHRoZSBjb3JyZWN0IHZhbHVlcy4gSXQmIzM5O3MgYSBxdWljayBzYW5pdHkgY2hlY2sgYXQgdGhpcyBwb2ludC4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfdWFkZHJcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvYWRkci5oPTUwPXN0cnVjdCB0aXBjX3VhZGRyIHtcbi0tXG5uZXQvdGlwYy9hZGRyLmgtNjMtXG5uZXQvdGlwYy9hZGRyLmg6NjQ6c3RhdGljIGlubGluZSB2b2lkIHRpcGNfdWFkZHIoc3RydWN0IHRpcGNfdWFkZHIgKnVhLCB1MzIgYXR5cGUsIHUzMiBzY29wZSxcbm5ldC90aXBjL2FkZHIuaC02NS1cdFx0XHQgICAgICB1MzIgdHlwZSwgdTMyIGxvd2VyLCB1MzIgdXBwZXIpXG4tLVxubmV0L3RpcGMvbXNnLmM9NzEzPWJvb2wgdGlwY19tc2dfbG9va3VwX2Rlc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKmVycilcbi0tXG5uZXQvdGlwYy9tc2cuYy03MzMtXHRcdHJldHVybiBmYWxzZTtcbm5ldC90aXBjL21zZy5jOjczNDpcdHRpcGNfdWFkZHIoXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgc2NvcGUsXG5uZXQvdGlwYy9tc2cuYy03MzUtXHRcdCAgIG1zZ19uYW1ldHlwZShtc2cpLCBpbnN0LCBpbnN0KTtcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MzMyPXN0YXRpYyB2b2lkIHRpcGNfcHVibF9wdXJnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcCwgdTMyIGFkZHIpXG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTMzNy1cbm5ldC90aXBjL25hbWVfZGlzdHIuYzozMzg6XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIHAtXHUwMDNlc2NvcGUsIHAtXHUwMDNlc3IudHlwZSxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zMzktXHRcdCAgIHAtXHUwMDNlc3IubG93ZXIsIHAtXHUwMDNlc3IudXBwZXIpO1xuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYz0zNzY9c3RhdGljIGJvb2wgdGlwY191cGRhdGVfbmFtZXRibChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkaXN0cl9pdGVtICppLFxuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zOTItXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MzkzOlx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMzk0LVx0XHQgICBudG9obChpLVx1MDAzZXR5cGUpLCBsb3dlciwgdXBwZXIpO1xuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuYz04NDY9aW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODU5LVx0c2subm9kZSA9IHRuLVx1MDAzZW5vZGVfYWRkcjtcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4NjA6XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcbm5ldC90aXBjL25hbWVfdGFibGUuYy04NjEtXHRcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXHUwMDNlbm9kZV9hZGRyLCB0bi1cdTAwM2Vub2RlX2FkZHIpO1xuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuYz05NzI9Ym9vbCB0aXBjX25hbWV0Ymxfc3Vic2NyaWJlKHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViKVxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuYy05NzktXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6OTgwOlx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX05PREVfU0NPUEUsIHR5cGUsXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtOTgxLVx0XHQgICBzdWItXHUwMDNlcy5zZXEubG93ZXIsIHN1Yi1cdTAwM2VzLnNlcS51cHBlcik7XG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTEwMDM9dm9pZCB0aXBjX25hbWV0YmxfdW5zdWJzY3JpYmUoc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uICpzdWIpXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTEwMDgtXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6MTAwOTpcdHRpcGNfdWFkZHIoXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19OT0RFX1NDT1BFLFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTEwMTAtXHRcdCAgIHN1Yi1cdTAwM2VzLnNlcS50eXBlLCBzdWItXHUwMDNlcy5zZXEubG93ZXIsIHN1Yi1cdTAwM2VzLnNlcS51cHBlcik7XG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTEyMDY9c3RhdGljIGludCB0aXBjX25sX3NlcnZpY2VfbGlzdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuYy0xMjI1LVx0XHQgICAgKCFpIFx1MDAyNlx1MDAyNiAqbGFzdF9rZXkgXHUwMDI2XHUwMDI2ICgqbGFzdF9sb3dlciA9PSAqbGFzdF9rZXkpKSkge1xubmV0L3RpcGMvbmFtZV90YWJsZS5jOjEyMjY6XHRcdFx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX05PREVfU0NPUEUsXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtMTIyNy1cdFx0XHRcdCAgICpsYXN0X3R5cGUsICpsYXN0X2xvd2VyLCAqbGFzdF9sb3dlcik7XG4tLVxubmV0L3RpcGMvbmV0LmM9MTI5PXN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4tLVxubmV0L3RpcGMvbmV0LmMtMTM0LVxubmV0L3RpcGMvbmV0LmM6MTM1Olx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG5uZXQvdGlwYy9uZXQuYy0xMzYtXHRcdCAgIFRJUENfTk9ERV9TVEFURSwgYWRkciwgYWRkcik7XG4tLVxubmV0L3RpcGMvbm9kZS5jPTQxNz1zdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4tLVxubmV0L3RpcGMvbm9kZS5jLTQzMi1cbm5ldC90aXBjL25vZGUuYzo0MzM6XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfTk9ERV9TQ09QRSxcbm5ldC90aXBjL25vZGUuYy00MzQtXHRcdCAgIFRJUENfTElOS19TVEFURSwgbi1cdTAwM2VhZGRyLCBuLVx1MDAzZWFkZHIpO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI5MzI9c3RhdGljIGludCB0aXBjX3NrX3dpdGhkcmF3KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI5NDAtXHRcdGlmICghdWEpIHtcbm5ldC90aXBjL3NvY2tldC5jOjI5NDE6XHRcdFx0dGlwY191YWRkcihcdTAwMjZfdWEsIFRJUENfU0VSVklDRV9SQU5HRSwgcC1cdTAwM2VzY29wZSxcbm5ldC90aXBjL3NvY2tldC5jLTI5NDItXHRcdFx0XHQgICBwLVx1MDAzZXNyLnR5cGUsIHAtXHUwMDNlc3IubG93ZXIsIHAtXHUwMDNlc3IudXBwZXIpO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMwNzI9c3RhdGljIGludCB0aXBjX3NrX2pvaW4oc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY19ncm91cF9yZXEgKm1yZXEpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzA5NC1cdG1zZ19zZXRfZGVzdF9kcm9wcGFibGUoaGRyLCB0cnVlKTtcbm5ldC90aXBjL3NvY2tldC5jOjMwOTU6XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIG1yZXEtXHUwMDNlc2NvcGUsXG5uZXQvdGlwYy9zb2NrZXQuYy0zMDk2LVx0XHQgICBtcmVxLVx1MDAzZXR5cGUsIG1yZXEtXHUwMDNlaW5zdGFuY2UsIG1yZXEtXHUwMDNlaW5zdGFuY2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUzNAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHRpcGNfdWFkZHJgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGB0aXBjX3VhZGRyYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGlzIHN0cnVjdHVyZWQgYW5kIGVuc3VyZSBpdCYjMzk7cyBiZWhhdmluZyBhcyBleHBlY3RlZC4gSSYjMzk7bGwgbGlrZWx5IHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIHVzZSBjYXNlcyB3aXRoaW4gdGhlIFRJUEMgZnJhbWV3b3JrIHRvIHNlZSB3aGVyZSBpdCBjb21lcyBpbnRvIHBsYXkuIEtleSBhcmVhcyB3aWxsIGJlIGFkZHJlc3MgbG9va3Vwcywgcm91dGluZyBkZWNpc2lvbnMsIGFuZCB0aGUgb3ZlcmFsbCBtYW5hZ2VtZW50IG9mIHVzZXItc3BhY2UgYWRkcmVzc2VzLiBJJiMzOTtsbCBwcm9iYWJseSBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZCwgZXNwZWNpYWxseSBpZiB0aGVyZSBhcmUgc2hhcmVkIGRhdGEgc3RydWN0dXJlcyBiZWluZyBhY2Nlc3NlZCBjb25jdXJyZW50bHkuIEkmIzM5O20gYWxzbyBnb2luZyB0byBzZWUgaWYgYW55IG9mIHRoZSByZWNlbnQgY29kZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgdGhvc2UgdGhhdCB0b3VjaGVkIHRoZSBuZXR3b3JrIG9yIHNvY2tldCBsYXllciwgbWlnaHQgaGF2ZSBpbnRyb2R1Y2VkIGFueSByZWdyZXNzaW9ucyByZWxhdGVkIHRvIGB0aXBjX3VhZGRyYC4gRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhpcyBhZmZlY3RzIHRoZSBvdmVyYWxsIHNlY3VyaXR5IHBvc3R1cmUgLSBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBhZGRyZXNzIHNwb29maW5nIG9yIG1hbmlwdWxhdGlvbiB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkPyBUaW1lIHRvIGdldCB0aGUgZGVidWdnZXIgZmlyZWQgdXAgYW5kIHRoZSBjb2RlIG9wZW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbmxpbmUgdm9pZCB0aXBjX3VhZGRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2FkZHIuaD01MD1zdHJ1Y3QgdGlwY191YWRkciB7XG4tLVxubmV0L3RpcGMvYWRkci5oLTYzLVxubmV0L3RpcGMvYWRkci5oOjY0OnN0YXRpYyBpbmxpbmUgdm9pZCB0aXBjX3VhZGRyKHN0cnVjdCB0aXBjX3VhZGRyICp1YSwgdTMyIGF0eXBlLCB1MzIgc2NvcGUsXG5uZXQvdGlwYy9hZGRyLmgtNjUtXHRcdFx0ICAgICAgdTMyIHR5cGUsIHUzMiBsb3dlciwgdTMyIHVwcGVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkxNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgZnJvbSBgbmV0L3RpcGMvYWRkci5oYDoKCioqQW5hbHl6aW5nIGBuZXQvdGlwYy9hZGRyLmhgIChMaW5lcyA1MC03NSkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBsaW5lcyA1MC03NSBvZiBgbmV0L3RpcGMvYWRkci5oYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBhZGRyZXNzIHN0cnVjdHVyZSBhbmQgYXNzb2NpYXRlZCBtYWNyb3MgcHJvYmFibHkgbGllIOKAkyBpdOKAmXMgdGhlIGhlYXJ0IG9mIGhvdyBUSVBDIGFkZHJlc3NlcyBhcmUgZGVmaW5lZCwgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgc3BlY2lmaWNzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgYml0ZmllbGQgbWFuaXB1bGF0aW9ucyB0aGF0IGRlZmluZSB0aGUgYWRkcmVzcyBmaWVsZHMgdGhlbXNlbHZlcywgYW5kIGlmIHRoZXJlIGFyZSBjbGV2ZXIgYml0LXR3aWRkbGluZyBtYWNyb3MsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZW0uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBzaXplIG9mIGVhY2ggY29tcG9uZW50OiBub2RlLCBjbHVzdGVyLCBhbmQgc2VydmljZS4gSeKAmW0gaG9waW5nIHRvIHNlZSBjbGVhciBkZWxpbmVhdGlvbnMgYmV0d2VlbiB0aGUgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBhZGRyZXNzIOKAkyBpdCBtYWtlcyBkZWJ1Z2dpbmcgZmFyIGVhc2llci4gSeKAmW0gYWxzbyBsb29raW5nIGZvciBhbnkgaGludCBvZiBob3cgdGhlIGFkZHJlc3MgZmFtaWx5IGlzIGhhbmRsZWQ7IHRoaXMgbWlnaHQgYmUgYSBjZW50cmFsIHBvaW50IG9mIHRoZSBjb2RlLiBBbnkgYml0IGZpZWxkcyBvciBwYWNrZWQgc3RydWN0cyBhcmUgd29ydGggbG9va2luZyBhdCBjbG9zZWx5LCBhcyB0aGV5IGNvdWxkIGJlIHBvaW50cyBvZiBvcHRpbWl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3RpcGMvYWRkci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdHN0cnVjdCB0aXBjX3VhZGRyIHtcbiAgNTE6XHRcdHVuc2lnbmVkIHNob3J0IGZhbWlseTtcbiAgNTI6XHRcdHVuc2lnbmVkIGNoYXIgYWRkcnR5cGU7XG4gIDUzOlx0XHRzaWduZWQgY2hhciBzY29wZTtcbiAgNTQ6XHRcdHVuaW9uIHtcbiAgNTU6XHRcdFx0c3RydWN0IHtcbiAgNTY6XHRcdFx0XHRzdHJ1Y3QgdGlwY19zZXJ2aWNlX2FkZHIgc2E7XG4gIDU3Olx0XHRcdFx0dTMyIGxvb2t1cF9ub2RlO1xuICA1ODpcdFx0XHR9O1xuICA1OTpcdFx0XHRzdHJ1Y3QgdGlwY19zZXJ2aWNlX3JhbmdlIHNyO1xuICA2MDpcdFx0XHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzaztcbiAgNjE6XHRcdH07XG4gIDYyOlx0fTtcbiAgNjM6XHRcbiAgNjQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgdGlwY191YWRkcihzdHJ1Y3QgdGlwY191YWRkciAqdWEsIHUzMiBhdHlwZSwgdTMyIHNjb3BlLFxuICA2NTpcdFx0XHRcdCAgICAgIHUzMiB0eXBlLCB1MzIgbG93ZXIsIHUzMiB1cHBlcilcbiAgNjY6XHR7XG4gIDY3Olx0XHR1YS1cdTAwM2VmYW1pbHkgPSBBRl9USVBDO1xuICA2ODpcdFx0dWEtXHUwMDNlYWRkcnR5cGUgPSBhdHlwZTtcbiAgNjk6XHRcdHVhLVx1MDAzZXNjb3BlID0gc2NvcGU7XG4gIDcwOlx0XHR1YS1cdTAwM2Vzci50eXBlID0gdHlwZTtcbiAgNzE6XHRcdHVhLVx1MDAzZXNyLmxvd2VyID0gbG93ZXI7XG4gIDcyOlx0XHR1YS1cdTAwM2Vzci51cHBlciA9IHVwcGVyO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MjMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdGlwY191YWRkcmAgU3RydWN0dXJlIGFuZCBpdHMgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIGB0aXBjX3VhZGRyYCBpcyB1c2VkLCBzcGVjaWZpY2FsbHkgaG93IGl0IGluaXRpYWxpemVzIHZhcmlvdXMgZmllbGRzIGFuZCBob3cgdGhhdCBkYXRhIGlzIHVzZWQuIEkgc2VlIHRoYXQgYHRpcGNfdWFkZHJgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBgZmFtaWx5YCwgYGFkZHJ0eXBlYCwgYHNjb3BlYCwgYW5kIGNydWNpYWxseSwgdGhlIGBzci50eXBlYCwgYHNyLmxvd2VyYCwgYW5kIGBzci51cHBlcmAgZmllbGRzLCB3aGljaCBwZXJ0YWluIHRvIGEgYHN0cnVjdCB0aXBjX3NlcnZpY2VfcmFuZ2VgLgoKTm93LCBkaWdnaW5nIGludG8gdGhlIGBzdHJ1Y3QgdGlwY191YWRkcmAgZGVmaW5pdGlvbiwgaXQgdXNlcyBhIHVuaW9uIHdpdGggYHRpcGNfc2VydmljZV9yYW5nZSBzcmAsIGFtb25nIG90aGVyIHR5cGVzLiBJdCBsb29rcyBsaWtlIGl0IGNvdWxkIHJlcHJlc2VudCBhIHNlcnZpY2UgYWRkcmVzcywgYSByYW5nZSBvZiBzZXJ2aWNlIGFkZHJlc3Nlcywgb3IgYSBzb2NrZXQgYWRkcmVzcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBsYXlvdXQgaGVyZSBiZWNhdXNlIG9mIHRoZSB1bmlvbi4KCkxldCYjMzk7cyBzZWUuLi4gYHN0cnVjdCB0aXBjX3VhZGRyYCBzdGFydHMgd2l0aCB0aGUgaGVhZGVyIGZpZWxkczogYGZhbWlseWAgKDIgYnl0ZXMpLCBgYWRkcnR5cGVgICgxIGJ5dGUpLCBhbmQgYHNjb3BlYCAoMSBieXRlKS4gIFRoZW4sIHRoZXJlJiMzOTtzIHRoZSB1bmlvbiB3aGljaCBob2xkcyBlaXRoZXIgdGhlIGB0aXBjX3NlcnZpY2VfcmFuZ2Ugc3JgICgxMiBieXRlcyksIGB0aXBjX3NlcnZpY2VfYWRkciBzYWAgYW5kIGBsb29rdXBfbm9kZWAgKGFsc28gMTIgYnl0ZXMpLCBvciBgdGlwY19zb2NrZXRfYWRkciBza2AgKDggYnl0ZXMpLgoKR2l2ZW4gdGhhdCBsYXlvdXQsIGFuZCB0aGUgc2l6ZSBvZiBlYWNoIG1lbWJlciBvZiB0aGUgdW5pb24sIHRoZSB0b3RhbCBzaXplIG9mIGB0aXBjX3VhZGRyYCBpcyAyICYjNDM7IDEgJiM0MzsgMSAmIzQzOyAxMiA9IDE2IGJ5dGVzLiBUaGVyZSYjMzk7cyBubyBwYWRkaW5nIGJldHdlZW4gdGhlIGhlYWRlciBmaWVsZHMgYW5kIHRoZSB1bmlvbi4gVGhhdCYjMzk7cyBnb29kLgoKTm93LCBhIGZ1bmN0aW9uIGNhbGxlZCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgIGFsbG9jYXRlcyBhIGBzdHJ1Y3QgcHVibGljYXRpb24gKnBgIHVzaW5nIGB0aXBjX3B1YmxfY3JlYXRlKCZhbXA7dWEsICZhbXA7c2ssIHRuLSZndDtub2RlX2FkZHIpO2AuICBUaGlzIHN1Z2dlc3RzIHRoYXQgYHRpcGNfdWFkZHJgIGlzIHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIGEgcHVibGljYXRpb24uIEkgbmVlZCB0byBjaGVjayBob3cgYHRpcGNfcHVibF9jcmVhdGVgIGFjdHVhbGx5IHV0aWxpemVzIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgYHRpcGNfdWFkZHJgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGV4YW1pbmUgaG93IHRoZSBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gYHRpcGNfcHVibF9jcmVhdGVgIGFuZCBob3cgdGhlIG1lbWJlcnMgb2YgdGhlIHN0cnVjdCBhcmUgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCBpcyBwdWJsaXNoZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfcHVibF9jcmVhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvbmFtZV90YWJsZS5jPTIxOD1zdGF0aWMgaW50IGhhc2goaW50IHgpXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTIyMy0vKipcbm5ldC90aXBjL25hbWVfdGFibGUuYzoyMjQ6ICogdGlwY19wdWJsX2NyZWF0ZSAtIGNyZWF0ZSBhIHB1YmxpY2F0aW9uIHN0cnVjdHVyZVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTIyNS0gKiBAdWE6IHRoZSBzZXJ2aWNlIHJhbmdlIHRoZSB1c2VyIGlzIGJpbmRpbmcgdG9cbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtMjI4LSAqL1xubmV0L3RpcGMvbmFtZV90YWJsZS5jOjIyOTpzdGF0aWMgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX3B1YmxfY3JlYXRlKHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbm5ldC90aXBjL25hbWVfdGFibGUuYy0yMzAtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTQ4MT1zdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTQ4OC1cbm5ldC90aXBjL25hbWVfdGFibGUuYzo0ODk6XHRwID0gdGlwY19wdWJsX2NyZWF0ZSh1YSwgc2ssIGtleSk7XG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtNDkwLVx0aWYgKCFwKSB7XG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTg0Nj1pbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuYy05MDQtXHRpZiAoIXNyKSB7XG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6OTA1Olx0XHRwID0gdGlwY19wdWJsX2NyZWF0ZShcdTAwMjZ1YSwgXHUwMDI2c2ssIHRuLVx1MDAzZW5vZGVfYWRkcik7XG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtOTA2LVx0XHRpZiAoIXApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODMwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBgdGlwY19wdWJsX2NyZWF0ZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgdGlwY19wdWJsX2NyZWF0ZWAuIEtub3dpbmcgdGhpcyBjb2RlYmFzZSwgYW5kIGNvbnNpZGVyaW5nIHRoZSBuYW1lLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgZm9yIGNyZWF0aW5nIGEgbmV3IFRJUEMgcHVibGljYXRpb24gZW5kcG9pbnQsIGxpa2VseSBmb3IgYSBuYW1lIG9yIHNlcnZpY2UgcmVnaXN0cmF0aW9uLCByaWdodD8gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMg4oCTIHRoZSBwdWJsaWNhdGlvbiB0YWJsZSwgdGhlIHBvdGVudGlhbCBmb3IgaGFzaCBjb2xsaXNpb25zIGlmIHRoZXkmIzM5O3JlIHVzaW5nIGEgaGFzaC1iYXNlZCBsb29rdXAsIGFuZCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBjb25jdXJyZW5jeSBzYWZldHkuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBoYW5kbGVzIGVycm9yIGNhc2VzIHN1Y2ggYXMgaW5zdWZmaWNpZW50IHJlc291cmNlcyAobWVtb3J5KSwgaW52YWxpZCBhcmd1bWVudHMsIG9yIG5hbWUgY29uZmxpY3RzIGFwcHJvcHJpYXRlbHkuIEFuZCBkb2VzIGl0IGhhbmRsZSB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBzYW1lIHNlcnZpY2UgbXVsdGlwbGUgdGltZXM/IElmIHNvLCBpcyB0aGVyZSBhIG1lY2hhbmlzbSB0byBoYW5kbGUgdGhhdD8gSSB3YW50IHRvIHNlZSBob3cgdGhleSYjMzk7cmUgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGUgZW5kcG9pbnQ7IGlzIHRoZXJlIGFzc29jaWF0ZWQgY2xlYW51cCBvbiBkZXN0cnVjdGlvbiBvciB1bi1yZWdpc3RyYXRpb24/IEFyZSB0aGV5IGltcGxlbWVudGluZyBhbnkga2luZCBvZiB0aW1lb3V0IG9yIGxlYXNlIG1lY2hhbmlzbT8gQWxzbywgSSBuZWVkIHRvIHNlZSBob3cgdGhlIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHVibGljYXRpb24gKGxpa2UgYXR0cmlidXRlcywgc2VydmljZSB0eXBlcywgZXRjLikgYXJlIGhhbmRsZWQuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgc3VidGxlIGJ1Z3MgaGlkZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBhZGRyZXNzIGJpbmRpbmcgaXMgaGFuZGxlZC4gRG9lcyBpdCBhdXRvbWF0aWNhbGx5IHBpY2sgYSBwb3J0LCBvciBpcyBpdCB1c2VyLWNvbmZpZ3VyYWJsZT8gQW5kIGlmIGNvbmZpZ3VyYWJsZSwgaG93IGFyZSBjb2xsaXNpb25zIGF2b2lkZWQgd2hlbiB0aGUgdXNlciBjaG9vc2VzIGEgcG9ydD8gQW5kIGFyZSB0aGV5IHByb3Blcmx5IGhhbmRsaW5nIHRoZSBpbnRlcmFjdGlvbiB3aXRoIGFueSB1bmRlcmx5aW5nIG5ldHdvcmtpbmcgbGF5ZXIgLSBlc3BlY2lhbGx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byBwdWJsaXNoaW5nIHRoZSBzZXJ2aWNlL25hbWUgYWNyb3NzIG11bHRpcGxlIG5vZGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL25hbWVfdGFibGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjI5Olx0c3RhdGljIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19wdWJsX2NyZWF0ZShzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gMjMwOlx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4gMjMxOlx0XHRcdFx0XHRcdCAgICB1MzIga2V5KVxuIDIzMjpcdHtcbiAyMzM6XHRcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcCA9IGt6YWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbiAyMzQ6XHRcbiAyMzU6XHRcdGlmICghcClcbiAyMzY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMjM3Olx0XG4gMjM4Olx0XHRwLVx1MDAzZXNyID0gdWEtXHUwMDNlc3I7XG4gMjM5Olx0XHRwLVx1MDAzZXNrID0gKnNrO1xuIDI0MDpcdFx0cC1cdTAwM2VzY29wZSA9IHVhLVx1MDAzZXNjb3BlO1xuIDI0MTpcdFx0cC1cdTAwM2VrZXkgPSBrZXk7XG4gMjQyOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfc29jayk7XG4gMjQzOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfbm9kZSk7XG4gMjQ0Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZWxvY2FsX3B1YmwpO1xuIDI0NTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cC1cdTAwM2VhbGxfcHVibCk7XG4gMjQ2Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZWxpc3QpO1xuIDI0NzpcdFx0cmV0dXJuIHA7XG4gMjQ4Olx0fVxuIDI0OTpcdFxuIDI1MDpcdC8qKlxuIDI1MTpcdCAqIHRpcGNfc2VydmljZV9jcmVhdGUgLSBjcmVhdGUgYSBzZXJ2aWNlIHN0cnVjdHVyZSBmb3IgdGhlIHNwZWNpZmllZCAmIzM5O3R5cGUmIzM5O1xuIDI1MjpcdCAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXG4gMjUzOlx0ICogQHVhOiBhZGRyZXNzIHJlcHJlc2VudGluZyB0aGUgc2VydmljZSB0byBiZSBib3VuZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU5MQoJCQkJCQkJb3V0cHV0OiAyNDUKCQkJCQkJCXRob3VnaHRzOiAyODE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFRJUEMgTmFtZSBEaXN0cmlidXRpb24gUGF0Y2g6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2sqKgoKT2theSwgc28gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoaXMgcGF0Y2gsIGxpbmUgYnkgbGluZSwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHRoZSBwb3RlbnRpYWwgZm9yIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBNeSBjb25jbHVzaW9uOiB0aGlzIHBhdGNoIGlzIHNvbGVseSBhYm91dCAqaGFuZGxpbmcqIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGR1cmluZyB0aGUgVElQQyBuYW1lIGRpc3RyaWJ1dGlvbiBwcm9jZXNzLCAqbm90KiBhYm91dCBpbnRyb2R1Y2luZyB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBhZGRpbmcgYW5kIHByb3BhZ2F0aW5nIGAtRU5PQlVGU2AgKG91dC1vZi1tZW1vcnkpIGVycm9ycyB0aHJvdWdob3V0IHRoZSBuYW1lIGRpc3RyaWJ1dGlvbiBjb2RlLiAgSXQgZW5zdXJlcyB0aGF0IHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMsIHRoZSBmYWlsdXJlIGlzIGNvcnJlY3RseSByZXBvcnRlZCBhbmQgaGFuZGxlZCwgbGVhZGluZyB0byBub2RlL2xpbmsgZG93biBhY3Rpb25zIGZvciByZXRyaWVzLiAgSSYjMzk7dmUgY2hlY2tlZCBldmVyeSBzcG90IHdoZXJlIG5ldyB2YXJpYWJsZXMgb3Igc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZC4gRWFjaCBuZXcgdmFyaWFibGUsIHN1Y2ggYXMgYHNrYCwgYHVhYCwgb3IgYGVycmAgYXJlICphbHdheXMqIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXkmIzM5O3JlIHVzZWQuICBUaGUgYHNrX2J1ZmZfaGVhZGAgaXMgYWx3YXlzIGluaXRpYWxpemVkIHVzaW5nIGBfX3NrYl9xdWV1ZV9oZWFkX2luaXQoKWAuIFRoZSAgYHRpcGNfdWFkZHJgIHN0cnVjdCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgYnkgYSBoZWxwZXIgZnVuY3Rpb24uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQgb3Igd3JpdHRlbi4gIE5vIGRhdGEgaXMgYmVpbmcgcGFzc2VkIHRvIHVzZXIgc3BhY2UuCgpJJiMzOTt2ZSBjYXJlZnVsbHkgZXhhbWluZWQgdGhlIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1lZF9ub2RlX3VwYCBhbmQgc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMuIFRoZSBjb2RlIGFkZHMgY2hlY2tzIGFuZCBlcnJvciByZXR1cm5zLCByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIG9yIGxvZ2ljIHRoYXQgd291bGQgcmVseSBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gIFRoaXMgcGF0Y2ggKmltcHJvdmVzKiB0aGUgcm9idXN0bmVzcyBvZiB0aGUgZXJyb3IgaGFuZGxpbmcsIHJhdGhlciB0aGFuIHdlYWtlbmluZyBpdC4gSW4gb3RoZXIgd29yZHMsIHRoZSBwYXRjaCYjMzk7cyBwdXJwb3NlIGlzIHRvICpwcmV2ZW50KiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBmcm9tIGJlaW5nIHNpbGVudGx5IGlnbm9yZWQgb3IgY2F1c2luZyBwb3RlbnRpYWxseSBpbmNvcnJlY3QgYmVoYXZpb3VyOyBpdCYjMzk7cyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyByaXNrcy4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOIGFuZCBsb2NrZGVwIHdpbGwgYmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGJ1Z3MgdGhhdCBtaWdodCBiZSBpbnRyb2R1Y2VkIGR1cmluZyB0aGlzIHdvcmsuIFNwZWNpZmljYWxseSwgdGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgaXNuJiMzOTt0IHByZXNlbnQsIGFuZCB0aHVzIGEgS01TQU4gc2Vzc2lvbiBpc24mIzM5O3QgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUSVBDIHN1YnN5c3RlbSB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgKHJldHVybmluZyBgLUVOT0JVRlNgKSBkdXJpbmcgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24uIEl0IGFkZHMgZXJyb3IgaGFuZGxpbmcgdG8gZnVuY3Rpb25zIGxpa2UgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGB0aXBjX25hbWVkX25vZGVfdXBgLCBhbmQgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYW5kIGludHJvZHVjZXMgZmxhZ3MgdG8gdHJhY2sgdGhlIHN0YXRlIG9mIHRoZSBuYW1lIHRhYmxlIGFuZCBub2RlIGFkZHJlc3MuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlcyAoZS5nLiwgYHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrYCwgYHN0cnVjdCB0aXBjX3VhZGRyIHVhYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKGUuZy4sIHZpYSBleHBsaWNpdCBhc3NpZ25tZW50IG9yIHRoZSBgdGlwY191YWRkcigpYCBoZWxwZXIpLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgY29udHJvbCBmbG93IGFuZCBlcnJvciBoYW5kbGluZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMsIHdoaWNoIGRvIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc3Vic3lzdGVtIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAocmV0dXJuaW5nIGAtRU5PQlVGU2ApIGR1cmluZyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbi4gSXQgYWRkcyBlcnJvciBoYW5kbGluZyB0byBmdW5jdGlvbnMgbGlrZSBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGFuZCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBhbmQgaW50cm9kdWNlcyBmbGFncyB0byB0cmFjayB0aGUgc3RhdGUgb2YgdGhlIG5hbWUgdGFibGUgYW5kIG5vZGUgYWRkcmVzcy4gQWxsIG5ld2x5IGludHJvZHVjZWQgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2tgLCBgc3RydWN0IHRpcGNfdWFkZHIgdWFgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoZS5nLiwgdmlhIGV4cGxpY2l0IGFzc2lnbm1lbnQgb3IgdGhlIGB0aXBjX3VhZGRyKClgIGhlbHBlcikuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBjb250cm9sIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgd2hpY2ggZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA0OjAwLjc5MDU2ODkwOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1OTAzMzYxOTUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19uYW1lZF9kaXN0cmlidXRlXCIsXG4gICAgXCJ0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YlwiLFxuICAgIFwidGlwY19uYW1ldGJsX3B1Ymxpc2hcIixcbiAgICBcInRpcGNfbmFtZWRfbm9kZV91cFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc3Vic3lzdGVtIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAocmV0dXJuaW5nIGAtRU5PQlVGU2ApIGR1cmluZyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbi4gSXQgYWRkcyBlcnJvciBoYW5kbGluZyB0byBmdW5jdGlvbnMgbGlrZSBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGFuZCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBhbmQgaW50cm9kdWNlcyBmbGFncyB0byB0cmFjayB0aGUgc3RhdGUgb2YgdGhlIG5hbWUgdGFibGUgYW5kIG5vZGUgYWRkcmVzcy4gQWxsIG5ld2x5IGludHJvZHVjZWQgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2tgLCBgc3RydWN0IHRpcGNfdWFkZHIgdWFgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoZS5nLiwgdmlhIGV4cGxpY2l0IGFzc2lnbm1lbnQgb3IgdGhlIGB0aXBjX3VhZGRyKClgIGhlbHBlcikuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBjb250cm9sIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgd2hpY2ggZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgVElQQyBsb2dpYyB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZHVyaW5nIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uLiBJdCBhZGRzIGVycm9yIGNvZGUgcmV0dXJucyB0byBmdW5jdGlvbnMgbGlrZSBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGFuZCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgYW5kIGludHJvZHVjZXMgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCBhbmQgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAgdG8gaGFuZGxlIGJ1bGsgcmVkaXN0cmlidXRpb24gb2YgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDQ6MDAuNzkwNTc0MjI5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDczODU5NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWE3YzNkNGI5YjQwYTkzZDMxMTQ1OWJjYmUyYmQ2NmJkOTIyZDM4NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNzowMzo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmMgYi9uZXQvdGlwYy9jb3JlLmNcXG5pbmRleCAzMTU5NzVjM2JlODE4Li4wZjFkM2RkZWFlMDk1IDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL2NvcmUuY1xcbisrKyBiL25ldC90aXBjL2NvcmUuY1xcbkBAIC02MSw2ICs2MSw5IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCB0aXBjX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0dG4tXFx1MDAzZXRyaWFsX2FkZHIgPSAwO1xcbiBcXHR0bi1cXHUwMDNlYWRkcl90cmlhbF9lbmQgPSAwO1xcbiBcXHR0bi1cXHUwMDNlY2FwYWJpbGl0aWVzID0gVElQQ19OT0RFX0NBUEFCSUxJVElFUztcXG4rXFx0dG4tXFx1MDAzZW50X3N0b3AgPSBmYWxzZTtcXG4rXFx0dG4tXFx1MDAzZW50X3NlbGZfbm9kZV9leGlzdCA9IGZhbHNlO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZ0bi1cXHUwMDNlbm9kZV9hZGRyX3NldCwgMCk7XFxuIFxcdElOSVRfV09SSyhcXHUwMDI2dG4tXFx1MDAzZXdvcmssIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmspO1xcbiBcXHRtZW1zZXQodG4tXFx1MDAzZW5vZGVfaWQsIDAsIHNpemVvZih0bi1cXHUwMDNlbm9kZV9pZCkpO1xcbiBcXHRtZW1zZXQodG4tXFx1MDAzZW5vZGVfaWRfc3RyaW5nLCAwLCBzaXplb2YodG4tXFx1MDAzZW5vZGVfaWRfc3RyaW5nKSk7XFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuaCBiL25ldC90aXBjL2NvcmUuaFxcbmluZGV4IDljZTVmOWZmNmNjMDMuLjk3NWIxZDQ4MTg2ZTYgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvY29yZS5oXFxuKysrIGIvbmV0L3RpcGMvY29yZS5oXFxuQEAgLTE0NSw2ICsxNDUsMTIgQEAgc3RydWN0IHRpcGNfbmV0IHtcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XFxuIFxcdC8qIFRoZSBudW1iZXJzIG9mIHdvcmsgcXVldWVzIGluIHNjaGVkdWxlICovXFxuIFxcdGF0b21pY190IHdxX2NvdW50O1xcbitcXHQvKiBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIG5vZGUncyBhZGRyZXNzIGlzIHNldCAqL1xcbitcXHRhdG9taWNfdCBub2RlX2FkZHJfc2V0O1xcbitcXHQvKiBUaGUgbmFtZSB0YWJsZSBoYXMgc3RvcHBlZCB3b3JraW5nICovXFxuK1xcdGJvb2wgbnRfc3RvcDtcXG4rXFx0LyogTm9kZSdzIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIG5hbWUgdGFibGUgKi9cXG4rXFx0Ym9vbCBudF9zZWxmX25vZGVfZXhpc3Q7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aXBjX25ldCAqdGlwY19uZXQoc3RydWN0IG5ldCAqbmV0KVxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcXG5pbmRleCBiYTRmNDkwNmUxM2I3Li44M2UzZWQ4ZjJjNTEyIDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuY1xcbisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuY1xcbkBAIC05NSw5ICs5NSw3IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnApXFxuIFxcdFxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZwLVxcdTAwM2ViaW5kaW5nX25vZGUsIFxcdTAwMjZudC1cXHUwMDNlbm9kZV9zY29wZSk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuLVxcdHdyaXRlX2xvY2tfYmgoXFx1MDAyNm50LVxcdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xcbiBcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZwLVxcdTAwM2ViaW5kaW5nX25vZGUsIFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZSk7XFxuLVxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XFxuIFxcdHNrYiA9IG5hbWVkX3ByZXBhcmVfYnVmKG5ldCwgUFVCTElDQVRJT04sIElURU1fU0laRSwgMCk7XFxuIFxcdGlmICghc2tiKSB7XFxuIFxcdFxcdHByX3dhcm4oXFxcIlB1YmxpY2F0aW9uIGRpc3RyaWJ1dGlvbiBmYWlsdXJlXFxcXG5cXFwiKTtcXG5AQCAtMTIxLDkgKzExOSw3IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxcbiBcXHRzdHJ1Y3QgZGlzdHJfaXRlbSAqaXRlbTtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFxuLVxcdHdyaXRlX2xvY2tfYmgoXFx1MDAyNm50LVxcdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xcbiBcXHRsaXN0X2RlbChcXHUwMDI2cC1cXHUwMDNlYmluZGluZ19ub2RlKTtcXG4tXFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcXG4gXFx0aWYgKHAtXFx1MDAzZXNjb3BlID09IFRJUENfTk9ERV9TQ09QRSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbkBAIC0xNDYsOSArMTQyLDE0IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxcbiAgKiBAZG5vZGU6IG5vZGUgdG8gYmUgdXBkYXRlZFxcbiAgKiBAcGxzOiBsaW5rZWQgbGlzdCBvZiBwdWJsaWNhdGlvbiBpdGVtcyB0byBiZSBwYWNrZWQgaW50byBidWZmZXIgY2hhaW5cXG4gICogQHNlcW5vOiBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgbWVzc2FnZVxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxcbisgKlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxuLVxcdFxcdFxcdCAgICAgdTMyIGRub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbHMsIHUxNiBzZXFubylcXG4rc3RhdGljIGludCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG4rXFx0XFx0XFx0ICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pXFxuIHtcXG4gXFx0c3RydWN0IHB1YmxpY2F0aW9uICpwdWJsO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG5AQCAtMTY0LDggKzE2NSw5IEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxcbiBcXHRcXHRcXHRza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBtc2dfcmVtLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRkbm9kZSk7XFxuIFxcdFxcdFxcdGlmICghc2tiKSB7XFxuK1xcdFxcdFxcdFxcdF9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpO1xcbiBcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJCdWxrIHB1YmxpY2F0aW9uIGZhaWx1cmVcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRoZHIgPSBidWZfbXNnKHNrYik7XFxuIFxcdFxcdFxcdG1zZ19zZXRfYmNfYWNrX2ludmFsaWQoaGRyLCB0cnVlKTtcXG5AQCAtMTk1LDYgKzE5Nyw5MCBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG4gXFx0aGRyID0gYnVmX21zZyhza2JfcGVla190YWlsKGxpc3QpKTtcXG4gXFx0bXNnX3NldF9sYXN0X2J1bGsoaGRyKTtcXG4gXFx0bXNnX3NldF9uYW1lZF9zZXFubyhoZHIsIHNlcW5vKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBidWlsZCBhIGxpc3Qgb2YgcHVibGljYXRpb25zIG5lZWQgdG8gYmUgZGlzdHJpYnV0ZWRcXG4rICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcXG4rICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXFxuKyAqIEBoZWFkOiBsaXN0IG9mIHB1YmxpY2F0aW9uc1xcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxcbisgKlxcbisgKi9cXG4rc3RhdGljIGludCBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGVhZClcXG4re1xcbitcXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcXG4rXFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuK1xcbitcXHQvKiBOYW1lIHRhYmxlIGhhcyBiZWVuIGRlbGV0ZWQgYWZ0ZXIgbmFtZXNwYWNlIHRlYXJkb3duIG9yXFxuK1xcdCAqIFRJUEMgbW9kdWxlIGV4aXQuXFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkodG4tXFx1MDAzZW50X3N0b3ApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIE5vZGUncyBzZWxmLWFkZHJlc3MgaXMgbm90IHNldCB5ZXQgKi9cXG4rXFx0aWYgKCFhdG9taWNfcmVhZChcXHUwMDI2dG4tXFx1MDAzZW5vZGVfYWRkcl9zZXQpKSB7XFxuK1xcdFxcdC8qIERlZmVyIHRoZSBkaXN0cmlidXRpb24gdG8gbm9kZSdzIHRpbWVyICovXFxuK1xcdFxcdHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKG5ldCwgZG5vZGUpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0LyogUHJldmlvdXMgY2FsbCB0byB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YigpIHdhcyBzdWNjZXNzZnVsLlxcbitcXHQgKiBUaGUgbm9kZSdzIHNlbGYtYWRkcmVzcyBwdWJsaWNhdGlvbiB3YXMgYWRkZWQgdG8gJ250LVxcdTAwM2VjbHVzdGVyX3Njb3BlJy5cXG4rXFx0ICogU28sICdudC1cXHUwMDNlY2x1c3Rlcl9zY29wZScgaXMgbm90IGVtcHR5IG5vdy4gR28gdG8gZGlzdHJpYnV0aW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKHRuLVxcdTAwM2VudF9zZWxmX25vZGVfZXhpc3QpXFxuK1xcdFxcdGdvdG8gZGlzdHJpYnV0ZTtcXG4rXFxuK1xcdGlmICh0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihuZXQpKVxcbitcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuK1xcbitcXHR0bi1cXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gdHJ1ZTtcXG4rXFxuK2Rpc3RyaWJ1dGU6XFxuK1xcdGlmIChuYW1lZF9kaXN0cmlidXRlKG5ldCwgaGVhZCwgZG5vZGUsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNm50LVxcdTAwM2VjbHVzdGVyX3Njb3BlLCBudC1cXHUwMDNlc25kX254dCkgPT0gLUVOT0JVRlMpXFxuK1xcdFxcdHJldHVybiAtRU5PQlVGUztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gZGlzdHJpYnV0ZSBhbGwgcHVibGljYXRpb25zIHRvIHNwZWNpZmllZCBub2RlXFxuKyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuKyAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZVxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxcbisgKlxcbisgKi9cXG4raW50IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSlcXG4re1xcbitcXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcXG4rXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkO1xcbitcXHRpbnQgcmMgPSAwO1xcbitcXG4rXFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZoZWFkKTtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4rXFx0cmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCBcXHUwMDI2aGVhZCk7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4rXFx0aWYgKCFyYyBcXHUwMDI2XFx1MDAyNiAhc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZoZWFkKSkge1xcbitcXHRcXHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgXFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcXG4rXFx0XFx0LyogVGhlIGxpbmsgaXMgY29uZ2VzdGVkIGFmdGVyIHRoZSBsaXN0IGlzIGluc2VydGVkIGludG8gdGhlXFxuK1xcdFxcdCAqIGxpbmsncyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocmMgPT0gLUVMSU5LQ09ORylcXG4rXFx0XFx0XFx0cmMgPSAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yMDIsMjUgKzI4OCwzNiBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG4gICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcXG4gICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXFxuICAqIEBjYXBhYmlsaXRpZXM6IHBlZXIgbm9kZSdzIGNhcGFiaWxpdGllc1xcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxcbisgKlxcbiAgKi9cXG4tdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXFxuK2ludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXFxuIHtcXG4gXFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XFxuIFxcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhlYWQ7XFxuLVxcdHUxNiBzZXFubztcXG4rXFx0aW50IHJjID0gMDtcXG4gXFxuIFxcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2aGVhZCk7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dG4tXFx1MDAzZW5hbWV0YmxfbG9jayk7XFxuIFxcdGlmICghKGNhcGFiaWxpdGllcyBcXHUwMDI2IFRJUENfTkFNRURfQkNBU1QpKVxcbiBcXHRcXHRudC1cXHUwMDNlcmNfZGVzdHMrKztcXG4tXFx0c2Vxbm8gPSBudC1cXHUwMDNlc25kX254dDtcXG4rXFxuK1xcdHJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgXFx1MDAyNmhlYWQpO1xcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dG4tXFx1MDAzZW5hbWV0YmxfbG9jayk7XFxuK1xcdGlmICghcmMgXFx1MDAyNlxcdTAwMjYgIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2aGVhZCkpIHtcXG4rXFx0XFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFxcdTAwMjZoZWFkLCBkbm9kZSwgMCk7XFxuK1xcdFxcdC8qIFRoZSBsaW5rIGlzIGNvbmdlc3RlZCBhZnRlciB0aGUgbGlzdCBpcyBpbnNlcnRlZCBpbnRvIHRoZVxcbitcXHRcXHQgKiBsaW5rJ3Mgc2VuZCBxdWV1ZS4gUmV0dXJuIDAsIGFzIHRoaXMgaXMgbm9ybWFsLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJjID09IC1FTElOS0NPTkcpXFxuK1xcdFxcdFxcdHJjID0gMDtcXG4rXFx0fVxcbiBcXG4tXFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcXG4tXFx0bmFtZWRfZGlzdHJpYnV0ZShuZXQsIFxcdTAwMjZoZWFkLCBkbm9kZSwgXFx1MDAyNm50LVxcdTAwM2VjbHVzdGVyX3Njb3BlLCBzZXFubyk7XFxuLVxcdHRpcGNfbm9kZV94bWl0KG5ldCwgXFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcXG4tXFx0cmVhZF91bmxvY2tfYmgoXFx1MDAyNm50LVxcdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xcbitcXHRyZXR1cm4gcmM7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yOTksNyArMzk2LDcgQEAgc3RhdGljIGJvb2wgdGlwY191cGRhdGVfbmFtZXRibChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkaXN0cl9pdGVtICppLFxcbiBcXHRzay5ub2RlID0gbm9kZTtcXG4gXFxuIFxcdGlmIChkdHlwZSA9PSBQVUJMSUNBVElPTikge1xcbi1cXHRcXHRwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgXFx1MDAyNnVhLCBcXHUwMDI2c2ssIGtleSk7XFxuK1xcdFxcdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCBcXHUwMDI2dWEsIFxcdTAwMjZzaywga2V5LCBOVUxMKTtcXG4gXFx0XFx0aWYgKHApIHtcXG4gXFx0XFx0XFx0dGlwY19ub2RlX3N1YnNjcmliZShuZXQsIFxcdTAwMjZwLVxcdTAwM2ViaW5kaW5nX25vZGUsIG5vZGUpO1xcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtNDE2LDUgKzUxMyw2IEBAIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCBcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGUsIGJpbmRpbmdfbm9kZSlcXG4gXFx0XFx0cC1cXHUwMDNlc2subm9kZSA9IHNlbGY7XFxuIFxcdG50LVxcdTAwM2VyY19kZXN0cyA9IDA7XFxuK1xcdHRuLVxcdTAwM2VudF9zdG9wID0gZmFsc2U7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmggYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmhcXG5pbmRleCBjNjc3ZjZmMDgyZGZiLi4yMDQzMDk2YWU5NjdkIDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuaFxcbisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuaFxcbkBAIC02OSwxMSArNjksMTIgQEAgc3RydWN0IGRpc3RyX2l0ZW0ge1xcbiBcXG4gc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7XFxuIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsKTtcXG4tdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xcbitpbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKTtcXG4gdm9pZCB0aXBjX25hbWVkX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSxcXG4gXFx0XFx0ICAgIHUxNiAqcmN2X254dCwgYm9vbCAqb3Blbik7XFxuIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KTtcXG4gdm9pZCB0aXBjX3B1Ymxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGxpc3RfaGVhZCAqbnN1Yl9saXN0LFxcbiBcXHRcXHQgICAgICB1MzIgYWRkciwgdTE2IGNhcGFiaWxpdGllcyk7XFxuK2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpO1xcbiBcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLmJlZWQ0MGEyMTM2OGEgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvbmFtZV90YWJsZS5jXFxuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jXFxuQEAgLTMyOSw3ICszMjksNyBAQCBzdGF0aWMgc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnRpcGNfc2VydmljZV9jcmVhdGVfcmFuZ2Uoc3RydWN0IHRpcGNfc2VydmljZSAqc2MsXFxuIFxcbiBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIGludCAqZXJyKVxcbiB7XFxuIFxcdHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViLCAqdG1wO1xcbiBcXHRzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3I7XFxuQEAgLTMzOSwxMCArMzM5LDEyIEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdGJvb2wgcmVzID0gZmFsc2U7XFxuIFxcdHUzMiBrZXkgPSBwLVxcdTAwM2VrZXk7XFxuIFxcbi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNjLVxcdTAwM2Vsb2NrKTtcXG4gXFx0c3IgPSB0aXBjX3NlcnZpY2VfY3JlYXRlX3JhbmdlKHNjLCBwKTtcXG4tXFx0aWYgKCFzcilcXG4tXFx0XFx0Z290byAgZXhpdDtcXG4rXFx0aWYgKCFzcikge1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHQqZXJyID0gLUVOT0JVRlM7XFxuK1xcdFxcdGdvdG8gZXhpdDtcXG4rXFx0fVxcbiBcXG4gXFx0Zmlyc3QgPSBsaXN0X2VtcHR5KFxcdTAwMjZzci1cXHUwMDNlYWxsX3B1YmwpO1xcbiBcXG5AQCAtMzUzLDYgKzM1NSw4IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdHByX2RlYnVnKFxcXCJGYWlsZWQgdG8gYmluZCBkdXBsaWNhdGUgJXUsJXUsJXUvJXU6JXUvJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBwLVxcdTAwM2Vzci50eXBlLCBwLVxcdTAwM2Vzci5sb3dlciwgcC1cXHUwMDNlc3IudXBwZXIsXFxuIFxcdFxcdFxcdFxcdCBub2RlLCBwLVxcdTAwM2Vzay5yZWYsIGtleSk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdCplcnIgPSAtRUVYSVNUO1xcbiBcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbkBAIC0zNzEsNyArMzc1LDYgQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0aWYgKCFyZXMpXFxuIFxcdFxcdHByX3dhcm4oXFxcIkZhaWxlZCB0byBiaW5kIHRvICV1LCV1LCV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRwLVxcdTAwM2Vzci50eXBlLCBwLVxcdTAwM2Vzci5sb3dlciwgcC1cXHUwMDNlc3IudXBwZXIpO1xcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2MtXFx1MDAzZWxvY2spO1xcbiBcXHRyZXR1cm4gcmVzO1xcbiB9XFxuIFxcbkBAIC00NzgsMjAgKzQ4MSwzMyBAQCBzdGF0aWMgc3RydWN0IHRpcGNfc2VydmljZSAqdGlwY19zZXJ2aWNlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LFxcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICB1MzIga2V5KVxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHUzMiBrZXksIGludCAqZXJyKVxcbiB7XFxuIFxcdHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjO1xcbiBcXHRzdHJ1Y3QgcHVibGljYXRpb24gKnA7XFxuIFxcbiBcXHRwID0gdGlwY19wdWJsX2NyZWF0ZSh1YSwgc2ssIGtleSk7XFxuLVxcdGlmICghcClcXG4rXFx0aWYgKCFwKSB7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdCplcnIgPSAtRU5PQlVGUztcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4gXFxuIFxcdHNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCB1YSk7XFxuIFxcdGlmICghc2MpXFxuIFxcdFxcdHNjID0gdGlwY19zZXJ2aWNlX2NyZWF0ZShuZXQsIHVhKTtcXG4tXFx0aWYgKHNjIFxcdTAwMjZcXHUwMDI2IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwKSlcXG4tXFx0XFx0cmV0dXJuIHA7XFxuK1xcbitcXHRpZiAoc2MpIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzYy1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdGlmICh0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgZXJyKSkge1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2MtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRcXHRyZXR1cm4gcDtcXG4rXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2MtXFx1MDAzZWxvY2spO1xcbitcXHR9IGVsc2UgaWYgKGVycikge1xcbitcXHRcXHQqZXJyID0gLUVOT0JVRlM7XFxuK1xcdH1cXG4rXFxuIFxcdGtmcmVlKHApO1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbkBAIC03NjAsMjYgKzc3Niw1NSBAQCB2b2lkIHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2dyb3VwICpncnAsXFxuIC8qIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIHNlcnZpY2UgYmluZGluZyB0byBuYW1lIHRhYmxlXFxuICAqL1xcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbi1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KVxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxcbitcXHRcXHRcXHRcXHRcXHQgdTMyIGtleSwgaW50ICplcnIpXFxuIHtcXG4gXFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XFxuK1xcdHUzMiBtYXhfdXNlcl9wdWIgPSBUSVBDX01BWF9QVUJMIC0gMTtcXG4gXFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuIFxcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbitcXHRib29sIHByb3RvY29sX3R5cGUgPSBmYWxzZTtcXG4rXFx0aW50IGVycm9yID0gMDtcXG4gXFx0dTMyIHJjX2Rlc3RzO1xcbiBcXG4rXFx0aWYgKHVhLVxcdTAwM2Vzci50eXBlID09IFRJUENfTk9ERV9TVEFURSB8fCB1YS1cXHUwMDNlc3IudHlwZSA9PSBUSVBDX0xJTktfU1RBVEUgfHxcXG4rXFx0ICAgIHVhLVxcdTAwM2Vzci50eXBlID09IFRJUENfVE9QX1NSVilcXG4rXFx0XFx0cHJvdG9jb2xfdHlwZSA9IHRydWU7XFxuK1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRuLVxcdTAwM2VuYW1ldGJsX2xvY2spO1xcbitcXHRpZiAocHJvdG9jb2xfdHlwZSlcXG4rXFx0XFx0Z290byBpbnNlcnQ7XFxuIFxcbi1cXHRpZiAobnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQgXFx1MDAzZT0gVElQQ19NQVhfUFVCTCkge1xcbi1cXHRcXHRwcl93YXJuKFxcXCJCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcXFxcblxcXCIsIFRJUENfTUFYX1BVQkwpO1xcbitcXHQvKiBSZXNlcnZlIG9uZSBlbnRyeSBmb3Igbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUgYmVjYXVzZSBpdCBoYXMgY2x1c3RlclxcbitcXHQgKiBzY29wZSBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgaW4gYnVsay4gU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VyJ3NcXG4rXFx0ICogcHVibGljYXRpb25zIGlzIChUSVBDX01BWF9QVUJMIC0gMSkuXFxuK1xcdCAqL1xcbitcXHRpZiAobnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQgXFx1MDAzZT0gbWF4X3VzZXJfcHViKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIkJpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcXFxuXFxcIiwgbWF4X3VzZXJfcHViKTtcXG4gXFx0XFx0Z290byBleGl0O1xcbiBcXHR9XFxuIFxcbi1cXHRwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpO1xcbitpbnNlcnQ6XFxuK1xcdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSwgXFx1MDAyNmVycm9yKTtcXG4gXFx0aWYgKHApIHtcXG4tXFx0XFx0bnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQrKztcXG4rXFx0XFx0LyogTm90IGNvdW50IG5vZGUgc3RhdGUsIGxpbmsgc3RhdGUgYW5kIHRvcG9sb2d5IHNlcnZlciB0eXBlc1xcbitcXHRcXHQgKiBzbyB0aGF0IG1heGltdW0gbnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQgZG9lcyBub3QgcHJldmVudFxcbitcXHRcXHQgKiBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIGZyb20gYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZVxcbitcXHRcXHQgKiB0YWJsZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghcHJvdG9jb2xfdHlwZSlcXG4rXFx0XFx0XFx0bnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQrKztcXG4gXFx0XFx0c2tiID0gdGlwY19uYW1lZF9wdWJsaXNoKG5ldCwgcCk7XFxuK1xcdFxcdC8qIExvY2FsLXNjb3BlIHB1YmxpY2F0aW9uIGlzIG5vdCBwdWJsaXNoZWQgKHNrYiBpcyBOVUxMKSwgb25seVxcbitcXHRcXHQgKiBjbHVzdGVyLWNvcGUgb25lIGlzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFza2IgXFx1MDAyNlxcdTAwMjYgcC1cXHUwMDNlc2NvcGUgPT0gVElQQ19DTFVTVEVSX1NDT1BFIFxcdTAwMjZcXHUwMDI2IGVycilcXG4rXFx0XFx0XFx0KmVyciA9IC1FTk9CVUZTO1xcbitcXHR9IGVsc2UgaWYgKChlcnJvciA9PSAtRU5PQlVGUykgXFx1MDAyNlxcdTAwMjYgZXJyKSB7XFxuK1xcdFxcdCplcnIgPSAtRU5PQlVGUztcXG4gXFx0fVxcbitcXG4gXFx0cmNfZGVzdHMgPSBudC1cXHUwMDNlcmNfZGVzdHM7XFxuIGV4aXQ6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG5AQCAtNzg3LDcgKzgzMiwxMDIgQEAgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcXG4gXFx0aWYgKHNrYilcXG4gXFx0XFx0dGlwY19ub2RlX2Jyb2FkY2FzdChuZXQsIHNrYiwgcmNfZGVzdHMpO1xcbiBcXHRyZXR1cm4gcDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViIC0gaW5zZXJ0IHB1YmxpY2F0aW9uIG9mIG5vZGUncyBzZWxmIGFkZHJlc3NcXG4rICogQG5ldDogbmV0d29yayBuYW1lc3BhY2VcXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXFxuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcXG4rICpcXG4rICovXFxuK2ludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpXFxuK3tcXG4rXFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XFxuK1xcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xcbitcXHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzaztcXG4rXFx0c3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyO1xcbitcXHRzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYztcXG4rXFx0Ym9vbCBzY19jcmVhdGVkID0gZmFsc2U7XFxuK1xcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcDtcXG4rXFx0c3RydWN0IHRpcGNfdWFkZHIgdWE7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0c2sucmVmID0gMDtcXG4rXFx0c2subm9kZSA9IHRuLVxcdTAwM2Vub2RlX2FkZHI7XFxuK1xcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcXG4rXFx0XFx0ICAgVElQQ19OT0RFX1NUQVRFLCB0bi1cXHUwMDNlbm9kZV9hZGRyLCB0bi1cXHUwMDNlbm9kZV9hZGRyKTtcXG4rXFx0c2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsIFxcdTAwMjZ1YSk7XFxuK1xcdGlmICghc2MpIHtcXG4rXFx0XFx0c2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgXFx1MDAyNnVhKTtcXG4rXFx0XFx0aWYgKCFzYylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbitcXHRcXHRzY19jcmVhdGVkID0gdHJ1ZTtcXG4rXFx0fVxcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzYy1cXHUwMDNlbG9jayk7XFxuK1xcdC8qIENoZWNrIHdoZXRoZXIgYSByYW5nZSBleGlzdHMgaW4gdGhlIG5hbWUgdGFibGUgd2l0aFxcbitcXHQgKiBsb3dlciA9PSB0bi1cXHUwMDNlbm9kZV9hZGRyLCB1cHBlciA9PSB0bi1cXHUwMDNlbm9kZV9hZGRyLCBhbmQgdHlwZVxcbitcXHQgKiBUSVBDX05PREVfU1RBVEUgKDApLiBJZiAnc3InIGlzIG5vdCBOVUxMLCB0aGlzIHJhbmdlIGV4aXN0c1xcbitcXHQgKiBkdWUgdG8gYSBwcmV2aW91cyBjYWxsIHRvIHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKClcXG4rXFx0ICogb3IgdGlwY19uZXRfZmluYWxpemUoKS5cXG4rXFx0ICpcXG4rXFx0ICogTm90ZSB0aGF0IHVzZXIgYXBwbGljYXRpb25zIGNhbiBvbmx5IGluc2VydCB0eXBlcyBncmVhdGVyIHRoYW5cXG4rXFx0ICogb3IgZXF1YWwgdG8gNjQgKFRJUENfUkVTRVJWRURfVFlQRVMpLCBhcyBlbmZvcmNlZCBieSB0aXBjX2JpbmQoKS5cXG4rXFx0ICogUmVtb3RlIG5vZGVzIGFsc28gb25seSBzZW5kIHByb3RvY29sIHB1YmxpY2F0aW9ucyB3aXRoIHR5cGVcXG4rXFx0ICogVElQQ19OT0RFX1NUQVRFICgwKSwgd2l0aCBib3RoIGxvd2VyIGFuZCB1cHBlciBzZXQgdG8gdGhlIHJlbW90ZVxcbitcXHQgKiBub2RlJ3MgYWRkcmVzcy4gVGhlc2UgcmFuZ2VzIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGlzIG5vZGUnc1xcbitcXHQgKiByYW5nZSBiZWNhdXNlIGEgcmVtb3RlIG5vZGUncyBhZGRyZXNzIG11c3QgZGlmZmVyIGZyb20gdGhpc1xcbitcXHQgKiBub2RlJ3MgYWRkcmVzcyAodG4tXFx1MDAzZW5vZGVfYWRkcikuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZXJlZm9yZSwgdGlwY191cGRhdGVfbmFtZXRibCgpIGNhbm5vdCBidWlsZCBhbmQgaW5zZXJ0IGEgcmVtb3RlXFxuK1xcdCAqIHB1YmxpY2F0aW9uIHdpdGggdGhlIHNhbWUgdHlwZSAoMCkgYW5kIHJhbmdlXFxuK1xcdCAqIChsb3dlciA9PSB0bi1cXHUwMDNlbm9kZV9hZGRyLCB1cHBlciA9PSB0bi1cXHUwMDNlbm9kZV9hZGRyKSBhcyB0aGlzIG5vZGUnc1xcbitcXHQgKiBzZWxmLWFkZHJlc3MgcHVibGljYXRpb24gaW4gdGhlIG5hbWUgdGFibGUuXFxuK1xcdCAqXFxuK1xcdCAqIEJlY2F1c2UgdGhlIGNvbWJpbmF0aW9uIG9mIHR5cGUgMCBhbmRcXG4rXFx0ICogKGxvd2VyID09IHRuLVxcdTAwM2Vub2RlX2FkZHIsIHVwcGVyID09IHRuLVxcdTAwM2Vub2RlX2FkZHIpIGlzIHVuaXF1ZSBpbiB0aGVcXG4rXFx0ICogbmFtZSB0YWJsZSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjaGVjayBzay5ub2RlLCBzay5yZWYsIGtleSwgb3JcXG4rXFx0ICogY2x1c3Rlcl9zY29wZSBtZW1iZXJzaGlwLlxcbitcXHQgKi9cXG4rXFx0c3IgPSB0aXBjX3NlcnZpY2VfZmluZF9yYW5nZShzYywgXFx1MDAyNnVhKTtcXG4rXFx0LyogMS4gdGlwY19uZXRfZmluYWxpemVfd29yaygpIGlzIG5vdCBzY2hlZHVsZWQgYmVjYXVzZSBvZiBuYW1lc3BhY2VcXG4rXFx0ICogICAgdGVhcmRvd24uXFxuK1xcdCAqIDIuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXFx1MDAzZSB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGhhcyBmYWlsZWRcXG4rXFx0ICogICAgdG8gaW5zZXJ0IG5vZGUgc2VsZiBhZGRyZXNzIHB1YmxpY2F0aW9uIGludG8gbnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGVcXG4rXFx0ICogICAgZHVlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuXFxuK1xcdCAqIDMuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXFx1MDAzZSB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGhhcyBub3RcXG4rXFx0ICogICAgZXhlY3V0ZWQgeWV0LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFzcikge1xcbitcXHRcXHRwID0gdGlwY19wdWJsX2NyZWF0ZShcXHUwMDI2dWEsIFxcdTAwMjZzaywgdG4tXFx1MDAzZW5vZGVfYWRkcik7XFxuK1xcdFxcdGlmICghcClcXG4rXFx0XFx0XFx0Z290byBlcnJvcjtcXG4rXFxuK1xcdFxcdGlmICghdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHAsIFxcdTAwMjZlcnIpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoZXJyID09IC1FTk9CVUZTKSkge1xcbitcXHRcXHRcXHRrZnJlZShwKTtcXG4rXFx0XFx0XFx0Z290byBlcnJvcjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cC1cXHUwMDNlYmluZGluZ19ub2RlLCBcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xcbitcXHRcXHRnb3RvIGV4aXQ7XFxuK2Vycm9yOlxcbitcXHRcXHRpZiAoc2NfY3JlYXRlZCkge1xcbitcXHRcXHRcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNnNjLVxcdTAwM2VzZXJ2aWNlX2xpc3QpO1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2MtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRcXHRrZnJlZV9yY3Uoc2MsIHJjdSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNjLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbitcXHR9XFxuK2V4aXQ6XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzYy1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtODEwLDcgKzk1MCwxMCBAQCB2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcXG4gXFxuIFxcdHAgPSB0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XFxuIFxcdGlmIChwKSB7XFxuLVxcdFxcdG50LVxcdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XFxuK1xcdFxcdGlmIChwLVxcdTAwM2Vzci50eXBlICE9IFRJUENfTk9ERV9TVEFURSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcC1cXHUwMDNlc3IudHlwZSAhPSBUSVBDX0xJTktfU1RBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHAtXFx1MDAzZXNyLnR5cGUgIT0gVElQQ19UT1BfU1JWKVxcbitcXHRcXHRcXHRudC1cXHUwMDNlbG9jYWxfcHVibF9jb3VudC0tO1xcbiBcXHRcXHRza2IgPSB0aXBjX25hbWVkX3dpdGhkcmF3KG5ldCwgcCk7XFxuIFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnAtXFx1MDAzZWJpbmRpbmdfc29jayk7XFxuIFxcdFxcdGtmcmVlX3JjdShwLCByY3UpO1xcbkBAIC04OTksNyArMTA0Miw2IEBAIGludCB0aXBjX25hbWV0YmxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bnQtXFx1MDAzZW5vZGVfc2NvcGUpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xcbi1cXHRyd2xvY2tfaW5pdChcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XFxuIFxcdHRuLVxcdTAwM2VuYW1ldGJsID0gbnQ7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTkxMiw2ICsxMDU0LDcgQEAgaW50IHRpcGNfbmFtZXRibF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4gICovXFxuIHN0YXRpYyB2b2lkIHRpcGNfc2VydmljZV9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYylcXG4ge1xcbitcXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcXG4gXFx0c3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyLCAqdG1wcjtcXG4gXFx0c3RydWN0IHB1YmxpY2F0aW9uICpwLCAqdG1wO1xcbiBcXG5AQCAtOTE5LDYgKzEwNjIsMTUgQEAgc3RhdGljIHZvaWQgdGlwY19zZXJ2aWNlX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjKVxcbiBcXHRyYnRyZWVfcG9zdG9yZGVyX2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3IsIHRtcHIsIFxcdTAwMjZzYy1cXHUwMDNlcmFuZ2VzLCB0cmVlX25vZGUpIHtcXG4gXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgXFx1MDAyNnNyLVxcdTAwM2VhbGxfcHVibCwgYWxsX3B1YmwpIHtcXG4gXFx0XFx0XFx0dGlwY19zZXJ2aWNlX3JlbW92ZV9wdWJsKHNyLCBcXHUwMDI2cC1cXHUwMDNlc2ssIHAtXFx1MDAzZWtleSk7XFxuK1xcdFxcdFxcdC8qIHRpcGNfbmFtZXRibF93aXRoZHJhdygpIGRvZXMgbm90IGRlbGV0ZVxcbitcXHRcXHRcXHQgKiAncC1cXHUwMDNlYmluZGluZ19ub2RlJyB3aXRoIHR5cGUgVElQQ19OT0RFX1NUQVRFIGFuZFxcbitcXHRcXHRcXHQgKiByYW5nZSBbdG4tXFx1MDAzZW5vZGVfYWRkciwgdG4tXFx1MDAzZW5vZGVfYWRkcl0gZnJvbVxcbitcXHRcXHRcXHQgKiAndG4tXFx1MDAzZWNsdXN0ZXJfc2NvcGUnLiBTbywgZGVsZXRlIGl0IGhlcmUuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAocC1cXHUwMDNlc3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHAtXFx1MDAzZXNyLmxvd2VyID09IHRuLVxcdTAwM2Vub2RlX2FkZHIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHAtXFx1MDAzZXNyLnVwcGVyID09IHRuLVxcdTAwM2Vub2RlX2FkZHIpXFxuK1xcdFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZwLVxcdTAwM2ViaW5kaW5nX25vZGUpO1xcbiBcXHRcXHRcXHRrZnJlZV9yY3UocCwgcmN1KTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyYl9lcmFzZV9hdWdtZW50ZWQoXFx1MDAyNnNyLVxcdTAwM2V0cmVlX25vZGUsIFxcdTAwMjZzYy1cXHUwMDNlcmFuZ2VzLCBcXHUwMDI2c3JfY2FsbGJhY2tzKTtcXG5AQCAtOTQ5LDYgKzExMDEsOCBAQCB2b2lkIHRpcGNfbmFtZXRibF9zdG9wKHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0XFx0XFx0dGlwY19zZXJ2aWNlX2RlbGV0ZShuZXQsIHNlcnZpY2UpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFx0dG4tXFx1MDAzZW50X3N0b3AgPSB0cnVlO1xcbitcXHR0bi1cXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4gXFxuIFxcdC8qIFRPRE86IGNsZWFyIHRuLVxcdTAwM2VuYW1ldGJsLCBpbXBsZW1lbnQgcHJvcGVyIFJDVSBydWxlcyA/ICovXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuaCBiL25ldC90aXBjL25hbWVfdGFibGUuaFxcbmluZGV4IDdmZjZlZWViYWFlNjQuLjQzOTBlNzlhNDY2MGUgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvbmFtZV90YWJsZS5oXFxuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oXFxuQEAgLTk3LDggKzk3LDcgQEAgc3RydWN0IHB1YmxpY2F0aW9uIHtcXG4gICogQGNsdXN0ZXJfc2NvcGU6IGFsbCBsb2NhbCBwdWJsaWNhdGlvbnMgd2l0aCBjbHVzdGVyIHNjb3BlXFxuICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgdG8gc2VuZCBidWxrIHVwZGF0ZXMgdG8gbmV3IG5vZGVzXFxuICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgZHVyaW5nIHJlLWluaXQgb2YgbmFtZSB0YWJsZVxcbi0gKiBAY2x1c3Rlcl9zY29wZV9sb2NrOiBsb2NrIGZvciBhY2Nlc3NpbmcgQGNsdXN0ZXJfc2NvcGVcXG4tICogQGxvY2FsX3B1YmxfY291bnQ6IG51bWJlciBvZiBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZVxcbisgKiBAbG9jYWxfcHVibF9jb3VudDogdGhlIG51bWJlciBvZiB1c2VyJ3MgcHVibGljYXRpb25zIGlzc3VlZCBieSB0aGlzIG5vZGVcXG4gICogQHJjX2Rlc3RzOiBkZXN0aW5hdGlvbiBub2RlIGNvdW50ZXJcXG4gICogQHNuZF9ueHQ6IG5leHQgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHVzZWRcXG4gICovXFxuQEAgLTEwNyw3ICsxMDYsNiBAQCBzdHJ1Y3QgbmFtZV90YWJsZSB7XFxuIFxcdHN0cnVjdCBobGlzdF9oZWFkIHNlcnZpY2VzW1RJUENfTkFNRVRCTF9TSVpFXTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBub2RlX3Njb3BlO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGNsdXN0ZXJfc2NvcGU7XFxuLVxcdHJ3bG9ja190IGNsdXN0ZXJfc2NvcGVfbG9jaztcXG4gXFx0dTMyIGxvY2FsX3B1YmxfY291bnQ7XFxuIFxcdHUzMiByY19kZXN0cztcXG4gXFx0dTMyIHNuZF9ueHQ7XFxuQEAgLTEyNiwxMyArMTI0LDE1IEBAIGJvb2wgdGlwY19uYW1ldGJsX2xvb2t1cF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcXG4gdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEpO1xcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbi1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcXG4rXFx0XFx0XFx0XFx0XFx0IHUzMiBrZXksIGludCAqZXJyKTtcXG4gdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XFxuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHUzMiBrZXkpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgIHUzMiBrZXksIGludCAqZXJyKTtcXG4raW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldCk7XFxuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uZXQuYyBiL25ldC90aXBjL25ldC5jXFxuaW5kZXggN2U2NWQwYjBjNGE4ZC4uN2EyYzFlNjdhY2EzZCAxMDA2NDRcXG4tLS0gYS9uZXQvdGlwYy9uZXQuY1xcbisrKyBiL25ldC90aXBjL25ldC5jXFxuQEAgLTExMCwxMSArMTEwLDE0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpO1xcbiBcXG4gaW50IHRpcGNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1OCAqbm9kZV9pZCwgdTMyIGFkZHIpXFxuIHtcXG4rXFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuK1xcbiBcXHRpZiAodGlwY19vd25faWQobmV0KSkge1xcbiBcXHRcXHRwcl9pbmZvKFxcXCJDYW5ub3QgY29uZmlndXJlIG5vZGUgaWRlbnRpdHkgdHdpY2VcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4gXFx0cHJfaW5mbyhcXFwiU3RhcnRlZCBpbiBuZXR3b3JrIG1vZGVcXFxcblxcXCIpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZ0bi1cXHUwMDNlbm9kZV9hZGRyX3NldCwgMCk7XFxuIFxcbiBcXHRpZiAobm9kZV9pZClcXG4gXFx0XFx0dGlwY19zZXRfbm9kZV9pZChuZXQsIG5vZGVfaWQpO1xcbkBAIC0xMjUsOCArMTI4LDggQEAgaW50IHRpcGNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1OCAqbm9kZV9pZCwgdTMyIGFkZHIpXFxuIFxcbiBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxcbiB7XFxuLVxcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xcbiBcXHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzayA9IHswLCBhZGRyfTtcXG4rXFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuIFxcdHN0cnVjdCB0aXBjX3VhZGRyIHVhO1xcbiBcXG4gXFx0dGlwY191YWRkcihcXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLFxcbkBAIC0xMzgsNyArMTQxLDExIEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXFxuIFxcdHRpcGNfbmFtZWRfcmVpbml0KG5ldCk7XFxuIFxcdHRpcGNfc2tfcmVpbml0KG5ldCk7XFxuIFxcdHRpcGNfbW9uX3JlaW5pdF9zZWxmKG5ldCk7XFxuLVxcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXFx1MDAyNnVhLCBcXHUwMDI2c2ssIGFkZHIpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZ0bi1cXHUwMDNlbm9kZV9hZGRyX3NldCwgMSk7XFxuK1xcdC8qIFJlZGlzdHJpYnV0ZSBidWxrIG9mIHB1YmxpY2F0aW9ucyB2aWEgbm9kZS11cCBldmVudCBvciBub2RlJ3MgdGltZXJcXG4rXFx0ICogaWYgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBmYWlscy5cXG4rXFx0ICovXFxuK1xcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXFx1MDAyNnVhLCBcXHUwMDI2c2ssIGFkZHIsIE5VTEwpO1xcbiB9XFxuIFxcbiB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmMgYi9uZXQvdGlwYy9ub2RlLmNcXG5pbmRleCA2ODNhMTM2ZTUzZWZjLi5mMWVlZTY3NGE2NzhlIDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL25vZGUuY1xcbisrKyBiL25ldC90aXBjL25vZGUuY1xcbkBAIC0xMTEsNiArMTExLDcgQEAgc3RydWN0IHRpcGNfYmNsaW5rX2VudHJ5IHtcXG4gICogQHBlZXJfbmV0OiBwZWVyJ3MgbmV0IG5hbWVzcGFjZVxcbiAgKiBAcGVlcl9oYXNoX21peDogaGFzaCBmb3IgdGhpcyBwZWVyIChGSVhNRSlcXG4gICogQGNyeXB0b19yeDogUlggY3J5cHRvIGhhbmRsZXJcXG4rICogQGRpc3RfYnVsazogZmxhZyB0byByZWRpc3RyaWJ1dGUgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnNcXG4gICovXFxuIHN0cnVjdCB0aXBjX25vZGUge1xcbiBcXHR1MzIgYWRkcjtcXG5AQCAtMTQ1LDYgKzE0Niw3IEBAIHN0cnVjdCB0aXBjX25vZGUge1xcbiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPXFxuIFxcdHN0cnVjdCB0aXBjX2NyeXB0byAqY3J5cHRvX3J4O1xcbiAjZW5kaWZcXG4rXFx0YXRvbWljX3QgZGlzdF9idWxrO1xcbiB9O1xcbiBcXG4gLyogTm9kZSBGU00gc3RhdGVzIGFuZCBldmVudHM6XFxuQEAgLTM0NSw2ICszNDcsMTcgQEAgc3RhdGljIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXFxuIFxcdHJldHVybiBub2RlO1xcbiB9XFxuIFxcbit2b2lkIHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXFxuK3tcXG4rXFx0c3RydWN0IHRpcGNfbm9kZSAqbm9kZTtcXG4rXFxuK1xcdG5vZGUgPSB0aXBjX25vZGVfZmluZChuZXQsIGFkZHIpO1xcbitcXHRpZiAobm9kZSkge1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZub2RlLVxcdTAwM2VkaXN0X2J1bGssIDEpO1xcbitcXHRcXHR0aXBjX25vZGVfcHV0KG5vZGUpO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qIHRpcGNfbm9kZV9maW5kX2J5X2lkIC0gbG9jYXRlIHNwZWNpZmllZCBub2RlIG9iamVjdCBieSBpdHMgMTI4LWJpdCBpZFxcbiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gYSBkaXNjb3ZlcnkgcmVxdWVzdCBmYWlsZWRcXG4gICogdG8gZmluZCB0aGUgbm9kZSBieSBpdHMgMzItYml0IGlkLCBhbmQgaXMgbm90IHRpbWUgY3JpdGljYWxcXG5AQCAtMzkzLDYgKzQwNiwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrX2Zhc3Qoc3RydWN0IHRpcGNfbm9kZSAqbilcXG4gXFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZuLVxcdTAwM2Vsb2NrKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdGlwY19ub2RlX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbilcXG4re1xcbitcXHRpbnQgYmVhcmVyX2lkO1xcbitcXG4rXFx0Zm9yIChiZWFyZXJfaWQgPSAwOyBiZWFyZXJfaWQgXFx1MDAzYyBNQVhfQkVBUkVSUzsgYmVhcmVyX2lkKyspXFxuK1xcdFxcdHRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcXG4gXFx0X19yZWxlYXNlcyhuLVxcdTAwM2Vsb2NrKVxcbiB7XFxuQEAgLTQwMiw2ICs0MjMsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgKnB1YmxfbGlzdDtcXG4gXFx0c3RydWN0IHRpcGNfdWFkZHIgdWE7XFxuIFxcdHUzMiBiZWFyZXJfaWQsIG5vZGU7XFxuK1xcdGludCByYyA9IDAsIGVyciA9IDA7XFxuIFxcbiBcXHRpZiAobGlrZWx5KCFmbGFncykpIHtcXG4gXFx0XFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZuLVxcdTAwM2Vsb2NrKTtcXG5AQCAtNDI1LDE2ICs0NDcsMjQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxcbiBcXHRcXHR0aXBjX3B1Ymxfbm90aWZ5KG5ldCwgcHVibF9saXN0LCBub2RlLCBuLVxcdTAwM2VjYXBhYmlsaXRpZXMpO1xcbiBcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgVElQQ19OT1RJRllfTk9ERV9VUClcXG4tXFx0XFx0dGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi1cXHUwMDNlY2FwYWJpbGl0aWVzKTtcXG4rXFx0XFx0cmMgPSB0aXBjX25hbWVkX25vZGVfdXAobmV0LCBub2RlLCBuLVxcdTAwM2VjYXBhYmlsaXRpZXMpO1xcbiBcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgVElQQ19OT1RJRllfTElOS19VUCkge1xcbiBcXHRcXHR0aXBjX21vbl9wZWVyX3VwKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTtcXG4tXFx0XFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcXHUwMDI2dWEsIFxcdTAwMjZzaywgc2sucmVmKTtcXG4rXFx0XFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcXHUwMDI2dWEsIFxcdTAwMjZzaywgc2sucmVmLCBcXHUwMDI2ZXJyKTtcXG4gXFx0fVxcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBUSVBDX05PVElGWV9MSU5LX0RPV04pIHtcXG4gXFx0XFx0dGlwY19tb25fcGVlcl9kb3duKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTtcXG4gXFx0XFx0dGlwY19uYW1ldGJsX3dpdGhkcmF3KG5ldCwgXFx1MDAyNnVhLCBcXHUwMDI2c2ssIHNrLnJlZik7XFxuIFxcdH1cXG4rXFxuK1xcdC8qIE1lbW9yeSBhbGxvY2F0aW9uIGhhcyBmYWlsZWQuIEJyaW5nIHRoZSBub2RlIGRvd24gdG8gc3RhcnQgb3ZlciBidWxrXFxuK1xcdCAqIGRpc3RyaWJ1dGlvbiB3aGVuIHRoZSBmaXJzdCBsaW5rIGlzIHVwIGFnYWluLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0dGlwY19ub2RlX2Rvd24obik7XFxuK1xcdGVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUylcXG4rXFx0XFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdGlwY19ub2RlX2Fzc2lnbl9wZWVyX25ldChzdHJ1Y3QgdGlwY19ub2RlICpuLCB1MzIgaGFzaF9taXhlcylcXG5AQCAtNTY0LDYgKzU5NCw3IEBAIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkciwgdTggKnBlZXJfaWQsXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuLVxcdTAwM2VsaXN0KTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm4tXFx1MDAzZXB1YmxfbGlzdCk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuLVxcdTAwM2Vjb25uX3Nrcyk7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNm4tXFx1MDAzZWRpc3RfYnVsaywgMCk7XFxuIFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNm4tXFx1MDAzZWJjX2VudHJ5Lm5hbWVkcSk7XFxuIFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNm4tXFx1MDAzZWJjX2VudHJ5LmlucHV0cTEpO1xcbiBcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNm4tXFx1MDAzZWJjX2VudHJ5LmFycnZxKTtcXG5AQCAtODAzLDcgKzgzNCw4IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiBcXHRzdHJ1Y3QgdGlwY19ub2RlICpuID0gdGltZXJfY29udGFpbmVyX29mKG4sIHQsIHRpbWVyKTtcXG4gXFx0c3RydWN0IHRpcGNfbGlua19lbnRyeSAqbGU7XFxuIFxcdHN0cnVjdCBza19idWZmX2hlYWQgeG1pdHE7XFxuLVxcdGludCByZW1haW5zID0gbi1cXHUwMDNlbGlua19jbnQ7XFxuK1xcdGludCByZW1haW5zID0gMDtcXG4rXFx0aW50IGRpc3RfcmMgPSAwO1xcbiBcXHRpbnQgYmVhcmVyX2lkO1xcbiBcXHRpbnQgcmMgPSAwO1xcbiBcXG5AQCAtODE0LDYgKzg0Niw5IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChhdG9taWNfeGNoZyhcXHUwMDI2bi1cXHUwMDNlZGlzdF9idWxrLCAwKSlcXG4rXFx0XFx0ZGlzdF9yYyA9IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShuLVxcdTAwM2VuZXQsIG4tXFx1MDAzZWFkZHIpO1xcbitcXG4gI2lmZGVmIENPTkZJR19USVBDX0NSWVBUT1xcbiBcXHQvKiBUYWtlIGFueSBjcnlwdG8ga2V5IHJlbGF0ZWQgYWN0aW9ucyBmaXJzdCAqL1xcbiBcXHR0aXBjX2NyeXB0b190aW1lb3V0KG4tXFx1MDAzZWNyeXB0b19yeCk7XFxuQEAgLTgyNSw2ICs4NjAsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4gXFx0ICovXFxuIFxcdHRpcGNfbm9kZV9yZWFkX2xvY2sobik7XFxuIFxcdG4tXFx1MDAzZWtlZXBhbGl2ZV9pbnR2ID0gMTAwMDA7XFxuK1xcdHJlbWFpbnMgPSBuLVxcdTAwM2VsaW5rX2NudDtcXG4gXFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xcbiBcXHRmb3IgKGJlYXJlcl9pZCA9IDA7IHJlbWFpbnMgXFx1MDAyNlxcdTAwMjYgKGJlYXJlcl9pZCBcXHUwMDNjIE1BWF9CRUFSRVJTKTsgYmVhcmVyX2lkKyspIHtcXG4gXFx0XFx0dGlwY19ub2RlX3JlYWRfbG9jayhuKTtcXG5AQCAtODM1LDExICs4NzEsMTMgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuIFxcdFxcdFxcdHRpcGNfbm9kZV9jYWxjdWxhdGVfdGltZXIobiwgbGUtXFx1MDAzZWxpbmspO1xcbiBcXHRcXHRcXHRyYyA9IHRpcGNfbGlua190aW1lb3V0KGxlLVxcdTAwM2VsaW5rLCBcXHUwMDI2eG1pdHEpO1xcbiBcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bGUtXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRcXHRyZW1haW5zLS07XFxuK1xcdFxcdFxcdGlmIChkaXN0X3JjIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmVtYWlucy0tO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHRpcGNfbm9kZV9yZWFkX3VubG9jayhuKTtcXG4gXFx0XFx0dGlwY19iZWFyZXJfeG1pdChuLVxcdTAwM2VuZXQsIGJlYXJlcl9pZCwgXFx1MDAyNnhtaXRxLCBcXHUwMDI2bGUtXFx1MDAzZW1hZGRyLCBuKTtcXG4tXFx0XFx0aWYgKHJjIFxcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKVxcbitcXHRcXHQvKiBGb3JjZSB0aGUgbm9kZSBkb3duIGluIGNhc2UgdGhlIHJlZGlzdHJpYnV0aW9uIGZhaWxlZCAqL1xcbitcXHRcXHRpZiAoKHJjIFxcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKSB8fCBkaXN0X3JjIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcXG4gXFx0fVxcbiBcXHRtb2RfdGltZXIoXFx1MDAyNm4tXFx1MDAzZXRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhuLVxcdTAwM2VrZWVwYWxpdmVfaW50dikpO1xcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmggYi9uZXQvdGlwYy9ub2RlLmhcXG5pbmRleCAxNTRhNWJiYjBkMjlkLi4wZjc3N2NmZTdjMDFlIDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL25vZGUuaFxcbisrKyBiL25ldC90aXBjL25vZGUuaFxcbkBAIC0xMjgsNCArMTI4LDUgQEAgaW50IHRpcGNfbmxfbm9kZV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbiBpbnQgdGlwY19ubF9ub2RlX2ZsdXNoX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4gI2VuZGlmXFxuIHZvaWQgdGlwY19ub2RlX3ByZV9jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpleGl0X25ldCk7XFxuK3ZvaWQgdGlwY19ub2RlX3NldF9kaXN0X2J1bGsoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcik7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jXFxuaW5kZXggZDVkNzBlYjIzMGI1Ni4uNmI4M2JkZmM0MzljMyAxMDA2NDRcXG4tLS0gYS9uZXQvdGlwYy9zb2NrZXQuY1xcbisrKyBiL25ldC90aXBjL3NvY2tldC5jXFxuQEAgLTI5MTksNyArMjkxOSw3IEBAIHN0YXRpYyBpbnQgdGlwY19za19wdWJsaXNoKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKVxcbiBcXHRcXHRyZXR1cm4gLUVBRERSSU5VU0U7XFxuIFxcdHNrYWRkci5yZWYgPSB0c2stXFx1MDAzZXBvcnRpZDtcXG4gXFx0c2thZGRyLm5vZGUgPSB0aXBjX293bl9hZGRyKG5ldCk7XFxuLVxcdHAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCBcXHUwMDI2c2thZGRyLCBrZXkpO1xcbitcXHRwID0gdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCB1YSwgXFx1MDAyNnNrYWRkciwga2V5LCBOVUxMKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFwKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzowNDowMi4yNjUwNTc5NzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3OTA1ODE3NDk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19uYW1lZF9kaXN0cmlidXRlXCIsXG4gICAgXCJ0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YlwiLFxuICAgIFwidGlwY19uYW1ldGJsX3B1Ymxpc2hcIixcbiAgICBcInRpcGNfbmFtZWRfbm9kZV91cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFRJUEMgbG9naWMgdG8gaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGR1cmluZyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbi4gSXQgYWRkcyBlcnJvciBjb2RlIHJldHVybnMgdG8gZnVuY3Rpb25zIGxpa2UgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGFuZCBpbnRyb2R1Y2VzIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAgYW5kIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgIHRvIGhhbmRsZSBidWxrIHJlZGlzdHJpYnV0aW9uIG9mIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVhN2MzZDRiOWI0MGE5M2QzMTE0NTliY2JlMmJkNjZiZDkyMmQzODVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNzowMzo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuYyBiL25ldC90aXBjL2NvcmUuY1xuaW5kZXggMzE1OTc1YzNiZTgxOC4uMGYxZDNkZGVhZTA5NSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2NvcmUuY1xuKysrIGIvbmV0L3RpcGMvY29yZS5jXG5AQCAtNjEsNiArNjEsOSBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgdGlwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHR0bi1cdTAwM2V0cmlhbF9hZGRyID0gMDtcbiBcdHRuLVx1MDAzZWFkZHJfdHJpYWxfZW5kID0gMDtcbiBcdHRuLVx1MDAzZWNhcGFiaWxpdGllcyA9IFRJUENfTk9ERV9DQVBBQklMSVRJRVM7XG4rXHR0bi1cdTAwM2VudF9zdG9wID0gZmFsc2U7XG4rXHR0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTtcbitcdGF0b21pY19zZXQoXHUwMDI2dG4tXHUwMDNlbm9kZV9hZGRyX3NldCwgMCk7XG4gXHRJTklUX1dPUksoXHUwMDI2dG4tXHUwMDNld29yaywgdGlwY19uZXRfZmluYWxpemVfd29yayk7XG4gXHRtZW1zZXQodG4tXHUwMDNlbm9kZV9pZCwgMCwgc2l6ZW9mKHRuLVx1MDAzZW5vZGVfaWQpKTtcbiBcdG1lbXNldCh0bi1cdTAwM2Vub2RlX2lkX3N0cmluZywgMCwgc2l6ZW9mKHRuLVx1MDAzZW5vZGVfaWRfc3RyaW5nKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5oIGIvbmV0L3RpcGMvY29yZS5oXG5pbmRleCA5Y2U1ZjlmZjZjYzAzLi45NzViMWQ0ODE4NmU2IDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvY29yZS5oXG4rKysgYi9uZXQvdGlwYy9jb3JlLmhcbkBAIC0xNDUsNiArMTQ1LDEyIEBAIHN0cnVjdCB0aXBjX25ldCB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbiBcdC8qIFRoZSBudW1iZXJzIG9mIHdvcmsgcXVldWVzIGluIHNjaGVkdWxlICovXG4gXHRhdG9taWNfdCB3cV9jb3VudDtcbitcdC8qIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbm9kZSdzIGFkZHJlc3MgaXMgc2V0ICovXG4rXHRhdG9taWNfdCBub2RlX2FkZHJfc2V0O1xuK1x0LyogVGhlIG5hbWUgdGFibGUgaGFzIHN0b3BwZWQgd29ya2luZyAqL1xuK1x0Ym9vbCBudF9zdG9wO1xuK1x0LyogTm9kZSdzIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIG5hbWUgdGFibGUgKi9cbitcdGJvb2wgbnRfc2VsZl9ub2RlX2V4aXN0O1xuIH07XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlwY19uZXQgKnRpcGNfbmV0KHN0cnVjdCBuZXQgKm5ldClcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcbmluZGV4IGJhNGY0OTA2ZTEzYjcuLjgzZTNlZDhmMmM1MTIgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcbisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuY1xuQEAgLTk1LDkgKzk1LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiBcdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZW5vZGVfc2NvcGUpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbi1cdHdyaXRlX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xuLVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHRza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBJVEVNX1NJWkUsIDApO1xuIFx0aWYgKCFza2IpIHtcbiBcdFx0cHJfd2FybihcIlB1YmxpY2F0aW9uIGRpc3RyaWJ1dGlvbiBmYWlsdXJlXFxuXCIpO1xuQEAgLTEyMSw5ICsxMTksNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiBcdHN0cnVjdCBkaXN0cl9pdGVtICppdGVtO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbi1cdHdyaXRlX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbi1cdHdyaXRlX3VubG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuIFx0aWYgKHAtXHUwMDNlc2NvcGUgPT0gVElQQ19OT0RFX1NDT1BFKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbkBAIC0xNDYsOSArMTQyLDE0IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxuICAqIEBkbm9kZTogbm9kZSB0byBiZSB1cGRhdGVkXG4gICogQHBsczogbGlua2VkIGxpc3Qgb2YgcHVibGljYXRpb24gaXRlbXMgdG8gYmUgcGFja2VkIGludG8gYnVmZmVyIGNoYWluXG4gICogQHNlcW5vOiBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgbWVzc2FnZVxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcbisgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXG4rICpcbiAgKi9cbi1zdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbi1cdFx0XHQgICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pXG4rc3RhdGljIGludCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbitcdFx0XHQgICAgdTMyIGRub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbHMsIHUxNiBzZXFubylcbiB7XG4gXHRzdHJ1Y3QgcHVibGljYXRpb24gKnB1Ymw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbkBAIC0xNjQsOCArMTY1LDkgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4gXHRcdFx0c2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgbXNnX3JlbSxcbiBcdFx0XHRcdFx0XHRkbm9kZSk7XG4gXHRcdFx0aWYgKCFza2IpIHtcbitcdFx0XHRcdF9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpO1xuIFx0XHRcdFx0cHJfd2FybihcIkJ1bGsgcHVibGljYXRpb24gZmFpbHVyZVxcblwiKTtcbi1cdFx0XHRcdHJldHVybjtcbitcdFx0XHRcdHJldHVybiAtRU5PQlVGUztcbiBcdFx0XHR9XG4gXHRcdFx0aGRyID0gYnVmX21zZyhza2IpO1xuIFx0XHRcdG1zZ19zZXRfYmNfYWNrX2ludmFsaWQoaGRyLCB0cnVlKTtcbkBAIC0xOTUsNiArMTk3LDkwIEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuIFx0aGRyID0gYnVmX21zZyhza2JfcGVla190YWlsKGxpc3QpKTtcbiBcdG1zZ19zZXRfbGFzdF9idWxrKGhkcik7XG4gXHRtc2dfc2V0X25hbWVkX3NlcW5vKGhkciwgc2Vxbm8pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIF9fdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gYnVpbGQgYSBsaXN0IG9mIHB1YmxpY2F0aW9ucyBuZWVkIHRvIGJlIGRpc3RyaWJ1dGVkXG4rICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcbisgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGVcbisgKiBAaGVhZDogbGlzdCBvZiBwdWJsaWNhdGlvbnNcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4rICovXG4rc3RhdGljIGludCBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSxcbitcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpXG4re1xuK1x0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbitcbitcdC8qIE5hbWUgdGFibGUgaGFzIGJlZW4gZGVsZXRlZCBhZnRlciBuYW1lc3BhY2UgdGVhcmRvd24gb3JcbitcdCAqIFRJUEMgbW9kdWxlIGV4aXQuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseSh0bi1cdTAwM2VudF9zdG9wKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBOb2RlJ3Mgc2VsZi1hZGRyZXNzIGlzIG5vdCBzZXQgeWV0ICovXG4rXHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQpKSB7XG4rXHRcdC8qIERlZmVyIHRoZSBkaXN0cmlidXRpb24gdG8gbm9kZSdzIHRpbWVyICovXG4rXHRcdHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKG5ldCwgZG5vZGUpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qIFByZXZpb3VzIGNhbGwgdG8gdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoKSB3YXMgc3VjY2Vzc2Z1bC5cbitcdCAqIFRoZSBub2RlJ3Mgc2VsZi1hZGRyZXNzIHB1YmxpY2F0aW9uIHdhcyBhZGRlZCB0byAnbnQtXHUwMDNlY2x1c3Rlcl9zY29wZScuXG4rXHQgKiBTbywgJ250LVx1MDAzZWNsdXN0ZXJfc2NvcGUnIGlzIG5vdCBlbXB0eSBub3cuIEdvIHRvIGRpc3RyaWJ1dGlvbi5cbitcdCAqL1xuK1x0aWYgKHRuLVx1MDAzZW50X3NlbGZfbm9kZV9leGlzdClcbitcdFx0Z290byBkaXN0cmlidXRlO1xuK1xuK1x0aWYgKHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKG5ldCkpXG4rXHRcdHJldHVybiAtRU5PQlVGUztcbitcbitcdHRuLVx1MDAzZW50X3NlbGZfbm9kZV9leGlzdCA9IHRydWU7XG4rXG4rZGlzdHJpYnV0ZTpcbitcdGlmIChuYW1lZF9kaXN0cmlidXRlKG5ldCwgaGVhZCwgZG5vZGUsXG4rXHRcdFx0ICAgICBcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlLCBudC1cdTAwM2VzbmRfbnh0KSA9PSAtRU5PQlVGUylcbitcdFx0cmV0dXJuIC1FTk9CVUZTO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHRpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGRpc3RyaWJ1dGUgYWxsIHB1YmxpY2F0aW9ucyB0byBzcGVjaWZpZWQgbm9kZVxuKyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4rICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbisgKlxuKyAqL1xuK2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpXG4re1xuK1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4rXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhlYWQ7XG4rXHRpbnQgcmMgPSAwO1xuK1xuK1x0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmhlYWQpO1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4rXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFx1MDAyNmhlYWQpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbitcdGlmICghcmMgXHUwMDI2XHUwMDI2ICFza2JfcXVldWVfZW1wdHkoXHUwMDI2aGVhZCkpIHtcbitcdFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbitcdFx0LyogVGhlIGxpbmsgaXMgY29uZ2VzdGVkIGFmdGVyIHRoZSBsaXN0IGlzIGluc2VydGVkIGludG8gdGhlXG4rXHRcdCAqIGxpbmsncyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmMgPT0gLUVMSU5LQ09ORylcbitcdFx0XHRyYyA9IDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmM7XG4gfVxuIFxuIC8qKlxuQEAgLTIwMiwyNSArMjg4LDM2IEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuICAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4gICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXG4gICogQGNhcGFiaWxpdGllczogcGVlciBub2RlJ3MgY2FwYWJpbGl0aWVzXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbisgKlxuICAqL1xuLXZvaWQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxuK2ludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXG4ge1xuIFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4gXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgaGVhZDtcbi1cdHUxNiBzZXFubztcbitcdGludCByYyA9IDA7XG4gXG4gXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aGVhZCk7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiBcdGlmICghKGNhcGFiaWxpdGllcyBcdTAwMjYgVElQQ19OQU1FRF9CQ0FTVCkpXG4gXHRcdG50LVx1MDAzZXJjX2Rlc3RzKys7XG4tXHRzZXFubyA9IG50LVx1MDAzZXNuZF9ueHQ7XG4rXG4rXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFx1MDAyNmhlYWQpO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbitcdGlmICghcmMgXHUwMDI2XHUwMDI2ICFza2JfcXVldWVfZW1wdHkoXHUwMDI2aGVhZCkpIHtcbitcdFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbitcdFx0LyogVGhlIGxpbmsgaXMgY29uZ2VzdGVkIGFmdGVyIHRoZSBsaXN0IGlzIGluc2VydGVkIGludG8gdGhlXG4rXHRcdCAqIGxpbmsncyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmMgPT0gLUVMSU5LQ09ORylcbitcdFx0XHRyYyA9IDA7XG4rXHR9XG4gXG4tXHRyZWFkX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbi1cdG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSwgc2Vxbm8pO1xuLVx0dGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgMCk7XG4tXHRyZWFkX3VubG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuK1x0cmV0dXJuIHJjO1xuIH1cbiBcbiAvKipcbkBAIC0yOTksNyArMzk2LDcgQEAgc3RhdGljIGJvb2wgdGlwY191cGRhdGVfbmFtZXRibChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkaXN0cl9pdGVtICppLFxuIFx0c2subm9kZSA9IG5vZGU7XG4gXG4gXHRpZiAoZHR5cGUgPT0gUFVCTElDQVRJT04pIHtcbi1cdFx0cCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywga2V5KTtcbitcdFx0cCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywga2V5LCBOVUxMKTtcbiBcdFx0aWYgKHApIHtcbiBcdFx0XHR0aXBjX25vZGVfc3Vic2NyaWJlKG5ldCwgXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIG5vZGUpO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuQEAgLTQxNiw1ICs1MTMsNiBAQCB2b2lkIHRpcGNfbmFtZWRfcmVpbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUsIGJpbmRpbmdfbm9kZSlcbiBcdFx0cC1cdTAwM2Vzay5ub2RlID0gc2VsZjtcbiBcdG50LVx1MDAzZXJjX2Rlc3RzID0gMDtcbitcdHRuLVx1MDAzZW50X3N0b3AgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaFxuaW5kZXggYzY3N2Y2ZjA4MmRmYi4uMjA0MzA5NmFlOTY3ZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuaFxuKysrIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oXG5AQCAtNjksMTEgKzY5LDEyIEBAIHN0cnVjdCBkaXN0cl9pdGVtIHtcbiBcbiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsKTtcbiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7XG4tdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xuK2ludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xuIHZvaWQgdGlwY19uYW1lZF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpuYW1lZHEsXG4gXHRcdCAgICB1MTYgKnJjdl9ueHQsIGJvb2wgKm9wZW4pO1xuIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KTtcbiB2b2lkIHRpcGNfcHVibF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpuc3ViX2xpc3QsXG4gXHRcdCAgICAgIHUzMiBhZGRyLCB1MTYgY2FwYWJpbGl0aWVzKTtcbitpbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLmJlZWQ0MGEyMTM2OGEgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbisrKyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuQEAgLTMyOSw3ICszMjksNyBAQCBzdGF0aWMgc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnRpcGNfc2VydmljZV9jcmVhdGVfcmFuZ2Uoc3RydWN0IHRpcGNfc2VydmljZSAqc2MsXG4gXG4gc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfc2VydmljZSAqc2MsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbitcdFx0XHRcdCAgICAgc3RydWN0IHB1YmxpY2F0aW9uICpwLCBpbnQgKmVycilcbiB7XG4gXHRzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1YiwgKnRtcDtcbiBcdHN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzcjtcbkBAIC0zMzksMTAgKzMzOSwxMiBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0Ym9vbCByZXMgPSBmYWxzZTtcbiBcdHUzMiBrZXkgPSBwLVx1MDAzZWtleTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdHNyID0gdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzYywgcCk7XG4tXHRpZiAoIXNyKVxuLVx0XHRnb3RvICBleGl0O1xuK1x0aWYgKCFzcikge1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdCplcnIgPSAtRU5PQlVGUztcbitcdFx0Z290byBleGl0O1xuK1x0fVxuIFxuIFx0Zmlyc3QgPSBsaXN0X2VtcHR5KFx1MDAyNnNyLVx1MDAzZWFsbF9wdWJsKTtcbiBcbkBAIC0zNTMsNiArMzU1LDggQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRwcl9kZWJ1ZyhcIkZhaWxlZCB0byBiaW5kIGR1cGxpY2F0ZSAldSwldSwldS8ldToldS8ldVxcblwiLFxuIFx0XHRcdFx0IHAtXHUwMDNlc3IudHlwZSwgcC1cdTAwM2Vzci5sb3dlciwgcC1cdTAwM2Vzci51cHBlcixcbiBcdFx0XHRcdCBub2RlLCBwLVx1MDAzZXNrLnJlZiwga2V5KTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0KmVyciA9IC1FRVhJU1Q7XG4gXHRcdFx0Z290byBleGl0O1xuIFx0XHR9XG4gXHR9XG5AQCAtMzcxLDcgKzM3NSw2IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoIXJlcylcbiBcdFx0cHJfd2FybihcIkZhaWxlZCB0byBiaW5kIHRvICV1LCV1LCV1XFxuXCIsXG4gXHRcdFx0cC1cdTAwM2Vzci50eXBlLCBwLVx1MDAzZXNyLmxvd2VyLCBwLVx1MDAzZXNyLnVwcGVyKTtcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuIFx0cmV0dXJuIHJlcztcbiB9XG4gXG5AQCAtNDc4LDIwICs0ODEsMzMgQEAgc3RhdGljIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnRpcGNfc2VydmljZV9maW5kKHN0cnVjdCBuZXQgKm5ldCxcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbi1cdFx0XHRcdFx0ICAgICB1MzIga2V5KVxuK1x0XHRcdFx0XHQgICAgIHUzMiBrZXksIGludCAqZXJyKVxuIHtcbiBcdHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwO1xuIFxuIFx0cCA9IHRpcGNfcHVibF9jcmVhdGUodWEsIHNrLCBrZXkpO1xuLVx0aWYgKCFwKVxuK1x0aWYgKCFwKSB7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0KmVyciA9IC1FTk9CVUZTO1xuIFx0XHRyZXR1cm4gTlVMTDtcbitcdH1cbiBcbiBcdHNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCB1YSk7XG4gXHRpZiAoIXNjKVxuIFx0XHRzYyA9IHRpcGNfc2VydmljZV9jcmVhdGUobmV0LCB1YSk7XG4tXHRpZiAoc2MgXHUwMDI2XHUwMDI2IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwKSlcbi1cdFx0cmV0dXJuIHA7XG4rXG4rXHRpZiAoc2MpIHtcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0XHRpZiAodGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHAsIGVycikpIHtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbitcdFx0XHRyZXR1cm4gcDtcbitcdFx0fVxuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbitcdH0gZWxzZSBpZiAoZXJyKSB7XG4rXHRcdCplcnIgPSAtRU5PQlVGUztcbitcdH1cbitcbiBcdGtmcmVlKHApO1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTc2MCwyNiArNzc2LDU1IEBAIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCxcbiAvKiB0aXBjX25hbWV0YmxfcHVibGlzaCAtIGFkZCBzZXJ2aWNlIGJpbmRpbmcgdG8gbmFtZSB0YWJsZVxuICAqL1xuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4rXHRcdFx0XHRcdCB1MzIga2V5LCBpbnQgKmVycilcbiB7XG4gXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbitcdHUzMiBtYXhfdXNlcl9wdWIgPSBUSVBDX01BWF9QVUJMIC0gMTtcbiBcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuK1x0Ym9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7XG4rXHRpbnQgZXJyb3IgPSAwO1xuIFx0dTMyIHJjX2Rlc3RzO1xuIFxuK1x0aWYgKHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFIHx8IHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8XG4rXHQgICAgdWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpXG4rXHRcdHByb3RvY29sX3R5cGUgPSB0cnVlO1xuK1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4rXHRpZiAocHJvdG9jb2xfdHlwZSlcbitcdFx0Z290byBpbnNlcnQ7XG4gXG4tXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IFRJUENfTUFYX1BVQkwpIHtcbi1cdFx0cHJfd2FybihcIkJpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcblwiLCBUSVBDX01BWF9QVUJMKTtcbitcdC8qIFJlc2VydmUgb25lIGVudHJ5IGZvciBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZSBiZWNhdXNlIGl0IGhhcyBjbHVzdGVyXG4rXHQgKiBzY29wZSBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgaW4gYnVsay4gU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VyJ3NcbitcdCAqIHB1YmxpY2F0aW9ucyBpcyAoVElQQ19NQVhfUFVCTCAtIDEpLlxuK1x0ICovXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IG1heF91c2VyX3B1Yikge1xuK1x0XHRwcl93YXJuKFwiQmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxuXCIsIG1heF91c2VyX3B1Yik7XG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcbi1cdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4raW5zZXJ0OlxuK1x0cCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIHVhLCBzaywga2V5LCBcdTAwMjZlcnJvcik7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XG4rXHRcdC8qIE5vdCBjb3VudCBub2RlIHN0YXRlLCBsaW5rIHN0YXRlIGFuZCB0b3BvbG9neSBzZXJ2ZXIgdHlwZXNcbitcdFx0ICogc28gdGhhdCBtYXhpbXVtIG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQgZG9lcyBub3QgcHJldmVudFxuK1x0XHQgKiBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIGZyb20gYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZVxuK1x0XHQgKiB0YWJsZS5cbitcdFx0ICovXG4rXHRcdGlmICghcHJvdG9jb2xfdHlwZSlcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XG4gXHRcdHNrYiA9IHRpcGNfbmFtZWRfcHVibGlzaChuZXQsIHApO1xuK1x0XHQvKiBMb2NhbC1zY29wZSBwdWJsaWNhdGlvbiBpcyBub3QgcHVibGlzaGVkIChza2IgaXMgTlVMTCksIG9ubHlcbitcdFx0ICogY2x1c3Rlci1jb3BlIG9uZSBpcy5cbitcdFx0ICovXG4rXHRcdGlmICghc2tiIFx1MDAyNlx1MDAyNiBwLVx1MDAzZXNjb3BlID09IFRJUENfQ0xVU1RFUl9TQ09QRSBcdTAwMjZcdTAwMjYgZXJyKVxuK1x0XHRcdCplcnIgPSAtRU5PQlVGUztcbitcdH0gZWxzZSBpZiAoKGVycm9yID09IC1FTk9CVUZTKSBcdTAwMjZcdTAwMjYgZXJyKSB7XG4rXHRcdCplcnIgPSAtRU5PQlVGUztcbiBcdH1cbitcbiBcdHJjX2Rlc3RzID0gbnQtXHUwMDNlcmNfZGVzdHM7XG4gZXhpdDpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG5AQCAtNzg3LDcgKzgzMiwxMDIgQEAgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdGlmIChza2IpXG4gXHRcdHRpcGNfbm9kZV9icm9hZGNhc3QobmV0LCBza2IsIHJjX2Rlc3RzKTtcbiBcdHJldHVybiBwO1xuK31cbitcbisvKipcbisgKiB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiAtIGluc2VydCBwdWJsaWNhdGlvbiBvZiBub2RlJ3Mgc2VsZiBhZGRyZXNzXG4rICogQG5ldDogbmV0d29yayBuYW1lc3BhY2VcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4rICovXG4raW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbitcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuK1x0c3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2s7XG4rXHRzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3I7XG4rXHRzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYztcbitcdGJvb2wgc2NfY3JlYXRlZCA9IGZhbHNlO1xuK1x0c3RydWN0IHB1YmxpY2F0aW9uICpwO1xuK1x0c3RydWN0IHRpcGNfdWFkZHIgdWE7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdHNrLnJlZiA9IDA7XG4rXHRzay5ub2RlID0gdG4tXHUwMDNlbm9kZV9hZGRyO1xuK1x0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG4rXHRcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXHUwMDNlbm9kZV9hZGRyLCB0bi1cdTAwM2Vub2RlX2FkZHIpO1xuK1x0c2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsIFx1MDAyNnVhKTtcbitcdGlmICghc2MpIHtcbitcdFx0c2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgXHUwMDI2dWEpO1xuK1x0XHRpZiAoIXNjKVxuK1x0XHRcdHJldHVybiAtRU5PQlVGUztcbitcdFx0c2NfY3JlYXRlZCA9IHRydWU7XG4rXHR9XG4gXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4rXHQvKiBDaGVjayB3aGV0aGVyIGEgcmFuZ2UgZXhpc3RzIGluIHRoZSBuYW1lIHRhYmxlIHdpdGhcbitcdCAqIGxvd2VyID09IHRuLVx1MDAzZW5vZGVfYWRkciwgdXBwZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyLCBhbmQgdHlwZVxuK1x0ICogVElQQ19OT0RFX1NUQVRFICgwKS4gSWYgJ3NyJyBpcyBub3QgTlVMTCwgdGhpcyByYW5nZSBleGlzdHNcbitcdCAqIGR1ZSB0byBhIHByZXZpb3VzIGNhbGwgdG8gdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoKVxuK1x0ICogb3IgdGlwY19uZXRfZmluYWxpemUoKS5cbitcdCAqXG4rXHQgKiBOb3RlIHRoYXQgdXNlciBhcHBsaWNhdGlvbnMgY2FuIG9ubHkgaW5zZXJ0IHR5cGVzIGdyZWF0ZXIgdGhhblxuK1x0ICogb3IgZXF1YWwgdG8gNjQgKFRJUENfUkVTRVJWRURfVFlQRVMpLCBhcyBlbmZvcmNlZCBieSB0aXBjX2JpbmQoKS5cbitcdCAqIFJlbW90ZSBub2RlcyBhbHNvIG9ubHkgc2VuZCBwcm90b2NvbCBwdWJsaWNhdGlvbnMgd2l0aCB0eXBlXG4rXHQgKiBUSVBDX05PREVfU1RBVEUgKDApLCB3aXRoIGJvdGggbG93ZXIgYW5kIHVwcGVyIHNldCB0byB0aGUgcmVtb3RlXG4rXHQgKiBub2RlJ3MgYWRkcmVzcy4gVGhlc2UgcmFuZ2VzIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGlzIG5vZGUnc1xuK1x0ICogcmFuZ2UgYmVjYXVzZSBhIHJlbW90ZSBub2RlJ3MgYWRkcmVzcyBtdXN0IGRpZmZlciBmcm9tIHRoaXNcbitcdCAqIG5vZGUncyBhZGRyZXNzICh0bi1cdTAwM2Vub2RlX2FkZHIpLlxuK1x0ICpcbitcdCAqIFRoZXJlZm9yZSwgdGlwY191cGRhdGVfbmFtZXRibCgpIGNhbm5vdCBidWlsZCBhbmQgaW5zZXJ0IGEgcmVtb3RlXG4rXHQgKiBwdWJsaWNhdGlvbiB3aXRoIHRoZSBzYW1lIHR5cGUgKDApIGFuZCByYW5nZVxuK1x0ICogKGxvd2VyID09IHRuLVx1MDAzZW5vZGVfYWRkciwgdXBwZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyKSBhcyB0aGlzIG5vZGUnc1xuK1x0ICogc2VsZi1hZGRyZXNzIHB1YmxpY2F0aW9uIGluIHRoZSBuYW1lIHRhYmxlLlxuK1x0ICpcbitcdCAqIEJlY2F1c2UgdGhlIGNvbWJpbmF0aW9uIG9mIHR5cGUgMCBhbmRcbitcdCAqIChsb3dlciA9PSB0bi1cdTAwM2Vub2RlX2FkZHIsIHVwcGVyID09IHRuLVx1MDAzZW5vZGVfYWRkcikgaXMgdW5pcXVlIGluIHRoZVxuK1x0ICogbmFtZSB0YWJsZSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjaGVjayBzay5ub2RlLCBzay5yZWYsIGtleSwgb3JcbitcdCAqIGNsdXN0ZXJfc2NvcGUgbWVtYmVyc2hpcC5cbitcdCAqL1xuK1x0c3IgPSB0aXBjX3NlcnZpY2VfZmluZF9yYW5nZShzYywgXHUwMDI2dWEpO1xuK1x0LyogMS4gdGlwY19uZXRfZmluYWxpemVfd29yaygpIGlzIG5vdCBzY2hlZHVsZWQgYmVjYXVzZSBvZiBuYW1lc3BhY2VcbitcdCAqICAgIHRlYXJkb3duLlxuK1x0ICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS1cdTAwM2UgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBoYXMgZmFpbGVkXG4rXHQgKiAgICB0byBpbnNlcnQgbm9kZSBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaW50byBudC1cdTAwM2VjbHVzdGVyX3Njb3BlXG4rXHQgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbitcdCAqIDMuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXHUwMDNlIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdFxuK1x0ICogICAgZXhlY3V0ZWQgeWV0LlxuK1x0ICovXG4rXHRpZiAoIXNyKSB7XG4rXHRcdHAgPSB0aXBjX3B1YmxfY3JlYXRlKFx1MDAyNnVhLCBcdTAwMjZzaywgdG4tXHUwMDNlbm9kZV9hZGRyKTtcbitcdFx0aWYgKCFwKVxuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRcdGlmICghdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHAsIFx1MDAyNmVycikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoZXJyID09IC1FTk9CVUZTKSkge1xuK1x0XHRcdGtmcmVlKHApO1xuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXHRcdH1cbitcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfbm9kZSwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSk7XG4rXHRcdGdvdG8gZXhpdDtcbitlcnJvcjpcbitcdFx0aWYgKHNjX2NyZWF0ZWQpIHtcbitcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2c2MtXHUwMDNlc2VydmljZV9saXN0KTtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbitcdFx0XHRrZnJlZV9yY3Uoc2MsIHJjdSk7XG4rXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuK1x0XHR9XG4rXG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVOT0JVRlM7XG4rXHR9XG4rZXhpdDpcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuQEAgLTgxMCw3ICs5NTAsMTAgQEAgdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXG4gXHRwID0gdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpO1xuIFx0aWYgKHApIHtcbi1cdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudC0tO1xuK1x0XHRpZiAocC1cdTAwM2Vzci50eXBlICE9IFRJUENfTk9ERV9TVEFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX0xJTktfU1RBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19UT1BfU1JWKVxuK1x0XHRcdG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQtLTtcbiBcdFx0c2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlYmluZGluZ19zb2NrKTtcbiBcdFx0a2ZyZWVfcmN1KHAsIHJjdSk7XG5AQCAtODk5LDcgKzEwNDIsNiBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bnQtXHUwMDNlbm9kZV9zY29wZSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlKTtcbi1cdHJ3bG9ja19pbml0KFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHR0bi1cdTAwM2VuYW1ldGJsID0gbnQ7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFx0cmV0dXJuIDA7XG5AQCAtOTEyLDYgKzEwNTQsNyBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuICAqL1xuIHN0YXRpYyB2b2lkIHRpcGNfc2VydmljZV9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYylcbiB7XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzciwgKnRtcHI7XG4gXHRzdHJ1Y3QgcHVibGljYXRpb24gKnAsICp0bXA7XG4gXG5AQCAtOTE5LDYgKzEwNjIsMTUgQEAgc3RhdGljIHZvaWQgdGlwY19zZXJ2aWNlX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjKVxuIFx0cmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFjaF9lbnRyeV9zYWZlKHNyLCB0bXByLCBcdTAwMjZzYy1cdTAwM2VyYW5nZXMsIHRyZWVfbm9kZSkge1xuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdG1wLCBcdTAwMjZzci1cdTAwM2VhbGxfcHVibCwgYWxsX3B1YmwpIHtcbiBcdFx0XHR0aXBjX3NlcnZpY2VfcmVtb3ZlX3B1Ymwoc3IsIFx1MDAyNnAtXHUwMDNlc2ssIHAtXHUwMDNla2V5KTtcbitcdFx0XHQvKiB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoKSBkb2VzIG5vdCBkZWxldGVcbitcdFx0XHQgKiAncC1cdTAwM2ViaW5kaW5nX25vZGUnIHdpdGggdHlwZSBUSVBDX05PREVfU1RBVEUgYW5kXG4rXHRcdFx0ICogcmFuZ2UgW3RuLVx1MDAzZW5vZGVfYWRkciwgdG4tXHUwMDNlbm9kZV9hZGRyXSBmcm9tXG4rXHRcdFx0ICogJ3RuLVx1MDAzZWNsdXN0ZXJfc2NvcGUnLiBTbywgZGVsZXRlIGl0IGhlcmUuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHAtXHUwMDNlc3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHAtXHUwMDNlc3IubG93ZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBwLVx1MDAzZXNyLnVwcGVyID09IHRuLVx1MDAzZW5vZGVfYWRkcilcbitcdFx0XHRcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbiBcdFx0XHRrZnJlZV9yY3UocCwgcmN1KTtcbiBcdFx0fVxuIFx0XHRyYl9lcmFzZV9hdWdtZW50ZWQoXHUwMDI2c3ItXHUwMDNldHJlZV9ub2RlLCBcdTAwMjZzYy1cdTAwM2VyYW5nZXMsIFx1MDAyNnNyX2NhbGxiYWNrcyk7XG5AQCAtOTQ5LDYgKzExMDEsOCBAQCB2b2lkIHRpcGNfbmFtZXRibF9zdG9wKHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0XHR0aXBjX3NlcnZpY2VfZGVsZXRlKG5ldCwgc2VydmljZSk7XG4gXHRcdH1cbiBcdH1cbitcdHRuLVx1MDAzZW50X3N0b3AgPSB0cnVlO1xuK1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFxuIFx0LyogVE9ETzogY2xlYXIgdG4tXHUwMDNlbmFtZXRibCwgaW1wbGVtZW50IHByb3BlciBSQ1UgcnVsZXMgPyAqL1xuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuaCBiL25ldC90aXBjL25hbWVfdGFibGUuaFxuaW5kZXggN2ZmNmVlZWJhYWU2NC4uNDM5MGU3OWE0NjYwZSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuaFxuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oXG5AQCAtOTcsOCArOTcsNyBAQCBzdHJ1Y3QgcHVibGljYXRpb24ge1xuICAqIEBjbHVzdGVyX3Njb3BlOiBhbGwgbG9jYWwgcHVibGljYXRpb25zIHdpdGggY2x1c3RlciBzY29wZVxuICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgdG8gc2VuZCBidWxrIHVwZGF0ZXMgdG8gbmV3IG5vZGVzXG4gICogICAgICAgICAgICAgICAtIHVzZWQgYnkgbmFtZV9kaXN0ciBkdXJpbmcgcmUtaW5pdCBvZiBuYW1lIHRhYmxlXG4tICogQGNsdXN0ZXJfc2NvcGVfbG9jazogbG9jayBmb3IgYWNjZXNzaW5nIEBjbHVzdGVyX3Njb3BlXG4tICogQGxvY2FsX3B1YmxfY291bnQ6IG51bWJlciBvZiBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZVxuKyAqIEBsb2NhbF9wdWJsX2NvdW50OiB0aGUgbnVtYmVyIG9mIHVzZXIncyBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZVxuICAqIEByY19kZXN0czogZGVzdGluYXRpb24gbm9kZSBjb3VudGVyXG4gICogQHNuZF9ueHQ6IG5leHQgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHVzZWRcbiAgKi9cbkBAIC0xMDcsNyArMTA2LDYgQEAgc3RydWN0IG5hbWVfdGFibGUge1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgc2VydmljZXNbVElQQ19OQU1FVEJMX1NJWkVdO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBub2RlX3Njb3BlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBjbHVzdGVyX3Njb3BlO1xuLVx0cndsb2NrX3QgY2x1c3Rlcl9zY29wZV9sb2NrO1xuIFx0dTMyIGxvY2FsX3B1YmxfY291bnQ7XG4gXHR1MzIgcmNfZGVzdHM7XG4gXHR1MzIgc25kX254dDtcbkBAIC0xMjYsMTMgKzEyNCwxNSBAQCBib29sIHRpcGNfbmFtZXRibF9sb29rdXBfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxuIFx0XHRcdCAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7XG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbi1cdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XG4rXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4rXHRcdFx0XHRcdCB1MzIga2V5LCBpbnQgKmVycik7XG4gdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRcdFx0ICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbi1cdFx0XHRcdFx0ICAgICB1MzIga2V5KTtcbitcdFx0XHRcdFx0ICAgICB1MzIga2V5LCBpbnQgKmVycik7XG4raW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldCk7XG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcmVtb3ZlX3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmV0LmMgYi9uZXQvdGlwYy9uZXQuY1xuaW5kZXggN2U2NWQwYjBjNGE4ZC4uN2EyYzFlNjdhY2EzZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25ldC5jXG4rKysgYi9uZXQvdGlwYy9uZXQuY1xuQEAgLTExMCwxMSArMTEwLDE0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpO1xuIFxuIGludCB0aXBjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdTggKm5vZGVfaWQsIHUzMiBhZGRyKVxuIHtcbitcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuK1xuIFx0aWYgKHRpcGNfb3duX2lkKG5ldCkpIHtcbiBcdFx0cHJfaW5mbyhcIkNhbm5vdCBjb25maWd1cmUgbm9kZSBpZGVudGl0eSB0d2ljZVxcblwiKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFx0cHJfaW5mbyhcIlN0YXJ0ZWQgaW4gbmV0d29yayBtb2RlXFxuXCIpO1xuK1x0YXRvbWljX3NldChcdTAwMjZ0bi1cdTAwM2Vub2RlX2FkZHJfc2V0LCAwKTtcbiBcbiBcdGlmIChub2RlX2lkKVxuIFx0XHR0aXBjX3NldF9ub2RlX2lkKG5ldCwgbm9kZV9pZCk7XG5AQCAtMTI1LDggKzEyOCw4IEBAIGludCB0aXBjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdTggKm5vZGVfaWQsIHUzMiBhZGRyKVxuIFxuIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4ge1xuLVx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4gXHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzayA9IHswLCBhZGRyfTtcbitcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHRpcGNfdWFkZHIgdWE7XG4gXG4gXHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcbkBAIC0xMzgsNyArMTQxLDExIEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4gXHR0aXBjX25hbWVkX3JlaW5pdChuZXQpO1xuIFx0dGlwY19za19yZWluaXQobmV0KTtcbiBcdHRpcGNfbW9uX3JlaW5pdF9zZWxmKG5ldCk7XG4tXHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgYWRkcik7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQsIDEpO1xuK1x0LyogUmVkaXN0cmlidXRlIGJ1bGsgb2YgcHVibGljYXRpb25zIHZpYSBub2RlLXVwIGV2ZW50IG9yIG5vZGUncyB0aW1lclxuK1x0ICogaWYgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBmYWlscy5cbitcdCAqL1xuK1x0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIGFkZHIsIE5VTEwpO1xuIH1cbiBcbiB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25vZGUuYyBiL25ldC90aXBjL25vZGUuY1xuaW5kZXggNjgzYTEzNmU1M2VmYy4uZjFlZWU2NzRhNjc4ZSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25vZGUuY1xuKysrIGIvbmV0L3RpcGMvbm9kZS5jXG5AQCAtMTExLDYgKzExMSw3IEBAIHN0cnVjdCB0aXBjX2JjbGlua19lbnRyeSB7XG4gICogQHBlZXJfbmV0OiBwZWVyJ3MgbmV0IG5hbWVzcGFjZVxuICAqIEBwZWVyX2hhc2hfbWl4OiBoYXNoIGZvciB0aGlzIHBlZXIgKEZJWE1FKVxuICAqIEBjcnlwdG9fcng6IFJYIGNyeXB0byBoYW5kbGVyXG4rICogQGRpc3RfYnVsazogZmxhZyB0byByZWRpc3RyaWJ1dGUgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnNcbiAgKi9cbiBzdHJ1Y3QgdGlwY19ub2RlIHtcbiBcdHUzMiBhZGRyO1xuQEAgLTE0NSw2ICsxNDYsNyBAQCBzdHJ1Y3QgdGlwY19ub2RlIHtcbiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPXG4gXHRzdHJ1Y3QgdGlwY19jcnlwdG8gKmNyeXB0b19yeDtcbiAjZW5kaWZcbitcdGF0b21pY190IGRpc3RfYnVsaztcbiB9O1xuIFxuIC8qIE5vZGUgRlNNIHN0YXRlcyBhbmQgZXZlbnRzOlxuQEAgLTM0NSw2ICszNDcsMTcgQEAgc3RhdGljIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4gXHRyZXR1cm4gbm9kZTtcbiB9XG4gXG4rdm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuK3tcbitcdHN0cnVjdCB0aXBjX25vZGUgKm5vZGU7XG4rXG4rXHRub2RlID0gdGlwY19ub2RlX2ZpbmQobmV0LCBhZGRyKTtcbitcdGlmIChub2RlKSB7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2bm9kZS1cdTAwM2VkaXN0X2J1bGssIDEpO1xuK1x0XHR0aXBjX25vZGVfcHV0KG5vZGUpO1xuK1x0fVxuK31cbitcbiAvKiB0aXBjX25vZGVfZmluZF9ieV9pZCAtIGxvY2F0ZSBzcGVjaWZpZWQgbm9kZSBvYmplY3QgYnkgaXRzIDEyOC1iaXQgaWRcbiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gYSBkaXNjb3ZlcnkgcmVxdWVzdCBmYWlsZWRcbiAgKiB0byBmaW5kIHRoZSBub2RlIGJ5IGl0cyAzMi1iaXQgaWQsIGFuZCBpcyBub3QgdGltZSBjcml0aWNhbFxuQEAgLTM5Myw2ICs0MDYsMTQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9ja19mYXN0KHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bi1cdTAwM2Vsb2NrKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGlwY19ub2RlX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbilcbit7XG4rXHRpbnQgYmVhcmVyX2lkO1xuK1xuK1x0Zm9yIChiZWFyZXJfaWQgPSAwOyBiZWFyZXJfaWQgXHUwMDNjIE1BWF9CRUFSRVJTOyBiZWFyZXJfaWQrKylcbitcdFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxuIFx0X19yZWxlYXNlcyhuLVx1MDAzZWxvY2spXG4ge1xuQEAgLTQwMiw2ICs0MjMsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICpwdWJsX2xpc3Q7XG4gXHRzdHJ1Y3QgdGlwY191YWRkciB1YTtcbiBcdHUzMiBiZWFyZXJfaWQsIG5vZGU7XG4rXHRpbnQgcmMgPSAwLCBlcnIgPSAwO1xuIFxuIFx0aWYgKGxpa2VseSghZmxhZ3MpKSB7XG4gXHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZuLVx1MDAzZWxvY2spO1xuQEAgLTQyNSwxNiArNDQ3LDI0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdFx0dGlwY19wdWJsX25vdGlmeShuZXQsIHB1YmxfbGlzdCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9OT0RFX1VQKVxuLVx0XHR0aXBjX25hbWVkX25vZGVfdXAobmV0LCBub2RlLCBuLVx1MDAzZWNhcGFiaWxpdGllcyk7XG4rXHRcdHJjID0gdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9MSU5LX1VQKSB7XG4gXHRcdHRpcGNfbW9uX3BlZXJfdXAobmV0LCBub2RlLCBiZWFyZXJfaWQpO1xuLVx0XHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmKTtcbitcdFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIHNrLnJlZiwgXHUwMDI2ZXJyKTtcbiBcdH1cbiBcdGlmIChmbGFncyBcdTAwMjYgVElQQ19OT1RJRllfTElOS19ET1dOKSB7XG4gXHRcdHRpcGNfbW9uX3BlZXJfZG93bihuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XG4gXHRcdHRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmKTtcbiBcdH1cbitcbitcdC8qIE1lbW9yeSBhbGxvY2F0aW9uIGhhcyBmYWlsZWQuIEJyaW5nIHRoZSBub2RlIGRvd24gdG8gc3RhcnQgb3ZlciBidWxrXG4rXHQgKiBkaXN0cmlidXRpb24gd2hlbiB0aGUgZmlyc3QgbGluayBpcyB1cCBhZ2Fpbi5cbitcdCAqL1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHR0aXBjX25vZGVfZG93bihuKTtcbitcdGVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUylcbitcdFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGlwY19ub2RlX2Fzc2lnbl9wZWVyX25ldChzdHJ1Y3QgdGlwY19ub2RlICpuLCB1MzIgaGFzaF9taXhlcylcbkBAIC01NjQsNiArNTk0LDcgQEAgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyLCB1OCAqcGVlcl9pZCxcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZXB1YmxfbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZWNvbm5fc2tzKTtcbitcdGF0b21pY19zZXQoXHUwMDI2bi1cdTAwM2VkaXN0X2J1bGssIDApO1xuIFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZuLVx1MDAzZWJjX2VudHJ5Lm5hbWVkcSk7XG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm4tXHUwMDNlYmNfZW50cnkuaW5wdXRxMSk7XG4gXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bi1cdTAwM2ViY19lbnRyeS5hcnJ2cSk7XG5AQCAtODAzLDcgKzgzNCw4IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0c3RydWN0IHRpcGNfbm9kZSAqbiA9IHRpbWVyX2NvbnRhaW5lcl9vZihuLCB0LCB0aW1lcik7XG4gXHRzdHJ1Y3QgdGlwY19saW5rX2VudHJ5ICpsZTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgeG1pdHE7XG4tXHRpbnQgcmVtYWlucyA9IG4tXHUwMDNlbGlua19jbnQ7XG4rXHRpbnQgcmVtYWlucyA9IDA7XG4rXHRpbnQgZGlzdF9yYyA9IDA7XG4gXHRpbnQgYmVhcmVyX2lkO1xuIFx0aW50IHJjID0gMDtcbiBcbkBAIC04MTQsNiArODQ2LDkgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbitcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZuLVx1MDAzZWRpc3RfYnVsaywgMCkpXG4rXHRcdGRpc3RfcmMgPSB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUobi1cdTAwM2VuZXQsIG4tXHUwMDNlYWRkcik7XG4rXG4gI2lmZGVmIENPTkZJR19USVBDX0NSWVBUT1xuIFx0LyogVGFrZSBhbnkgY3J5cHRvIGtleSByZWxhdGVkIGFjdGlvbnMgZmlyc3QgKi9cbiBcdHRpcGNfY3J5cHRvX3RpbWVvdXQobi1cdTAwM2VjcnlwdG9fcngpO1xuQEAgLTgyNSw2ICs4NjAsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdCAqL1xuIFx0dGlwY19ub2RlX3JlYWRfbG9jayhuKTtcbiBcdG4tXHUwMDNla2VlcGFsaXZlX2ludHYgPSAxMDAwMDtcbitcdHJlbWFpbnMgPSBuLVx1MDAzZWxpbmtfY250O1xuIFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xuIFx0Zm9yIChiZWFyZXJfaWQgPSAwOyByZW1haW5zIFx1MDAyNlx1MDAyNiAoYmVhcmVyX2lkIFx1MDAzYyBNQVhfQkVBUkVSUyk7IGJlYXJlcl9pZCsrKSB7XG4gXHRcdHRpcGNfbm9kZV9yZWFkX2xvY2sobik7XG5AQCAtODM1LDExICs4NzEsMTMgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdFx0dGlwY19ub2RlX2NhbGN1bGF0ZV90aW1lcihuLCBsZS1cdTAwM2VsaW5rKTtcbiBcdFx0XHRyYyA9IHRpcGNfbGlua190aW1lb3V0KGxlLVx1MDAzZWxpbmssIFx1MDAyNnhtaXRxKTtcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsZS1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRyZW1haW5zLS07XG4rXHRcdFx0aWYgKGRpc3RfcmMgXHUwMDNjIDApXG4rXHRcdFx0XHRyZW1haW5zLS07XG4gXHRcdH1cbiBcdFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xuIFx0XHR0aXBjX2JlYXJlcl94bWl0KG4tXHUwMDNlbmV0LCBiZWFyZXJfaWQsIFx1MDAyNnhtaXRxLCBcdTAwMjZsZS1cdTAwM2VtYWRkciwgbik7XG4tXHRcdGlmIChyYyBcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKVxuK1x0XHQvKiBGb3JjZSB0aGUgbm9kZSBkb3duIGluIGNhc2UgdGhlIHJlZGlzdHJpYnV0aW9uIGZhaWxlZCAqL1xuK1x0XHRpZiAoKHJjIFx1MDAyNiBUSVBDX0xJTktfRE9XTl9FVlQpIHx8IGRpc3RfcmMgXHUwMDNjIDApXG4gXHRcdFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcbiBcdH1cbiBcdG1vZF90aW1lcihcdTAwMjZuLVx1MDAzZXRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhuLVx1MDAzZWtlZXBhbGl2ZV9pbnR2KSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5oIGIvbmV0L3RpcGMvbm9kZS5oXG5pbmRleCAxNTRhNWJiYjBkMjlkLi4wZjc3N2NmZTdjMDFlIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbm9kZS5oXG4rKysgYi9uZXQvdGlwYy9ub2RlLmhcbkBAIC0xMjgsNCArMTI4LDUgQEAgaW50IHRpcGNfbmxfbm9kZV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGludCB0aXBjX25sX25vZGVfZmx1c2hfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuICNlbmRpZlxuIHZvaWQgdGlwY19ub2RlX3ByZV9jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpleGl0X25ldCk7XG4rdm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jXG5pbmRleCBkNWQ3MGViMjMwYjU2Li42YjgzYmRmYzQzOWMzIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvc29ja2V0LmNcbisrKyBiL25ldC90aXBjL3NvY2tldC5jXG5AQCAtMjkxOSw3ICsyOTE5LDcgQEAgc3RhdGljIGludCB0aXBjX3NrX3B1Ymxpc2goc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY191YWRkciAqdWEpXG4gXHRcdHJldHVybiAtRUFERFJJTlVTRTtcbiBcdHNrYWRkci5yZWYgPSB0c2stXHUwMDNlcG9ydGlkO1xuIFx0c2thZGRyLm5vZGUgPSB0aXBjX293bl9hZGRyKG5ldCk7XG4tXHRwID0gdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCB1YSwgXHUwMDI2c2thZGRyLCBrZXkpO1xuK1x0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFx1MDAyNnNrYWRkciwga2V5LCBOVUxMKTtcbiBcdGlmICh1bmxpa2VseSghcCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDQ6MDIuMjY1MDU5MjkyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQxNDAwNjMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUSVBDIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgVElQQyBzdWJzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbC4gU2VlbXMgbGlrZSBhIG5vbi10cml2aWFsIGNoYW5nZSwgdG91Y2hpbmcgYSBnb29kIGNodW5rIG9mIHRoZSBjb3JlIGNvZGU6IGBuZXQvdGlwYy9jb3JlLmNgLCBgLmhgLCBgbmFtZV9kaXN0ci5jYCwgYC5oYCwgYG5hbWVfdGFibGUuY2AsIGAuaGAsIGBuZXQuY2AsIGBub2RlLmNgLCBgLmhgLCBhbmQgYHNvY2tldC5jYC4gQmFzZWQgb24gdGhlIGZpbGUgbW9kaWZpY2F0aW9ucywgdGhpcyBwYXRjaCBmb2N1c2VzIG9uIGltcHJvdmluZyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbiBhbmQgYWRkcmVzc2luZyBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMgdGhhdCBjcm9wIHVwIGR1cmluZyBwdWJsaWNhdGlvbi5cblxuRnJvbSBteSB1bmRlcnN0YW5kaW5nLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBzb21lIG5ldyBmaWVsZHMgdG8gdGhlIGBzdHJ1Y3QgdGlwY19uZXRgIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGBudF9zdG9wYCwgYG50X3NlbGZfbm9kZV9leGlzdGAsIGFuZCBgbm9kZV9hZGRyX3NldGAsIGFuZCBpdCBsb29rcyBsaWtlIGEgY29uY2VydGVkIGVmZm9ydCB0byBpbXByb3ZlIGVycm9yIGhhbmRsaW5nIHRocm91Z2hvdXQgdGhlIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uIGNvZGUuIEkgc2VlIGNoYW5nZXMgd2hlcmUgZnVuY3Rpb25zIHRoYXQgcHJldmlvdXNseSBqdXN0IHNpbGVudGx5IGZhaWxlZCBhcmUgbm93IHJldHVybmluZyBlcnJvciBjb2RlcyDigJMgYC1FTk9CVUZTYCBpbiB0aGUgY2FzZSBvZiBgbmFtZWRfZGlzdHJpYnV0ZWAsIGZvciBpbnN0YW5jZS4gVGhlcmUncyBzb21lIHJlZmFjdG9yaW5nLCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZWAgYW5kIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgIGJlaW5nIGFkZGVkLCBhbmQgY2hhbmdlcyB0byBgdGlwY19uYW1lZF9ub2RlX3VwYCBhbmQgYHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibGAgbm93IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGVycm9ycy4gVGhlcmUgYXJlIGNoYW5nZXMgZm9yIGJ1bGsgcmVkaXN0cmlidXRpb24gaW4gYHRpcGNfbm9kZV90aW1lb3V0YCwgYXMgd2VsbCBhcyBhIG5ldyBmdW5jdGlvbiBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgLlxuXG5UaGlzIGlzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyBUSVBDIG9wZXJhdGVzLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIEkga25vdyBUSVBDIGNhbiBiZSB1c2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gR2l2ZW4gdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFuZCB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwcm9ibGVtcywgSSB0aGluayB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSdsbCBmbGFnIGl0IGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQuIEJhc2VkIG9uIHRoZSBjaGFuZ2VzLCB0aGUgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIGFyZTpcblxuKiAgIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgXG4qICAgYHRpcGNfbmFtZWRfbm9kZV91cGBcbiogICBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgXG4qICAgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYFxuKiAgIGB0aXBjX25vZGVfdGltZW91dGBcbiogICBgdGlwY19za19wdWJsaXNoYFxuXG5UaG9zZSBzZWVtIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnRzIHdoZXJlIHdlIGNvdWxkIHRyaWdnZXIgdGhlc2UgZGlzdHJpYnV0aW9uL2FsbG9jYXRpb24gaXNzdWVzLiBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zOyBvYnZpb3VzbHksIGBDT05GSUdfVElQQ2AgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBjb2RlIHRvIGV2ZW4gYmUgY29tcGlsZWQuIEZpbmFsbHksIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCB2ZXJpZnkgdGhlIGRldGFpbHMgb2YgaG93IHRoZSBwYXRjaCBjaGFuZ2VzIHRob3NlIGZ1bmN0aW9ucywgdG8gaW5mb3JtIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc0MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA0OjExLjY3OTA2ODU5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQxMjk4NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfbmFtZWRfZGlzdHJpYnV0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MTUxPXN0YXRpYyBpbnQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjA0LS8qKlxcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyMDU6ICogX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBidWlsZCBhIGxpc3Qgb2YgcHVibGljYXRpb25zIG5lZWQgdG8gYmUgZGlzdHJpYnV0ZWRcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjA2LSAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjE0LSAqL1xcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyMTU6c3RhdGljIGludCBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSxcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjE2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjU0LS8qKlxcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyNTU6ICogdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gZGlzdHJpYnV0ZSBhbGwgcHVibGljYXRpb25zIHRvIHNwZWNpZmllZCBub2RlXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI1Ni0gKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI2My0gKi9cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MjY0OmludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI2NS17XFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjcxLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2dG4tXFx1MDAzZW5hbWV0YmxfbG9jayk7XFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjI3MjpcXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFxcdTAwMjZoZWFkKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjczLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYz0yOTc9aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcylcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zMDgtXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjMwOTpcXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFxcdTAwMjZoZWFkKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMzEwLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuaD03Nj12b2lkIHRpcGNfcHVibF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpuc3ViX2xpc3QsXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5oLTc3LVxcdFxcdCAgICAgIHUzMiBhZGRyLCB1MTYgY2FwYWJpbGl0aWVzKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmg6Nzg6aW50IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSk7XFxubmV0L3RpcGMvbmFtZV9kaXN0ci5oLTc5LVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTgzMj1zdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC90aXBjL25vZGUuYy04NDktXFx0aWYgKGF0b21pY194Y2hnKFxcdTAwMjZuLVxcdTAwM2VkaXN0X2J1bGssIDApKVxcbm5ldC90aXBjL25vZGUuYzo4NTA6XFx0XFx0ZGlzdF9yYyA9IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShuLVxcdTAwM2VuZXQsIG4tXFx1MDAzZWFkZHIpO1xcbm5ldC90aXBjL25vZGUuYy04NTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA0OjEzLjQyMDM3MTMzOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTMyMzkzODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGludm9sdmVzIGEgZmV3IGtleSBxdWVzdGlvbnMuIEZpcnN0LCB3aGF0J3MgaXRzIGludGVuZGVkIHJvbGUgd2l0aGluIHRoZSBUSVBDIChUcmFuc3BhcmVudCBJbnRlci1Qcm9jZXNzIENvbW11bmljYXRpb24pIGZyYW1ld29yaz8gRnJvbSB0aGUgbmFtZSwgSSdtIGluZmVycmluZyBpdCdzIHJlbGF0ZWQgdG8gaW5zZXJ0aW5nLCBsaWtlbHkgYSBzZWxmLW5vZGUgb3IgaXRzIHB1YmxpYyByZXByZXNlbnRhdGlvbiwgaW50byBhIG5hbWUgdGFibGUuIFRoaXMgc3VnZ2VzdHMgaXTigJlzIGEgZnVuZGFtZW50YWwgb3BlcmF0aW9uIGZvciBwdWJsaXNoaW5nIG5vZGUgaW5mb3JtYXRpb24sIHByb2JhYmx5IGZvciBkaXNjb3ZlcnkgYW5kIGNvbW11bmljYXRpb24uXG5cbk5leHQsIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIHdoZXJlIGl0J3MgY2FsbGVkIGZyb20sIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gSXMgaXQgY2FsbGVkIGR1cmluZyBub2RlIGluaXRpYWxpemF0aW9uLCByZWdpc3RyYXRpb24sIG9yIHBlcmhhcHMgZHluYW1pY2FsbHkgd2hlbiBhIG5vZGUncyBjYXBhYmlsaXRpZXMgY2hhbmdlPyBLbm93aW5nIHRoZSBjYWxsaW5nIHNlcXVlbmNlIGlzIGNyaXRpY2FsIHRvIGdyYXNwaW5nIGl0cyBzaWduaWZpY2FuY2Ugd2l0aGluIHRoZSBvdmVyYWxsIFRJUEMgYXJjaGl0ZWN0dXJlLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIHRvIGNvbmZpcm0gdGhhdCB1bmRlcnN0YW5kaW5nLlxuXG5GdW5jdGlvbiBpbnRlcm5hbHMgYXJlIGFsc28gY3J1Y2lhbCwgb2YgY291cnNlLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDogdGhlIG5hbWUgdGFibGUgaXRzZWxmLCB0aGUgZm9ybWF0IG9mIHRoZSBzZWxmLW5vZGUgcmVwcmVzZW50YXRpb24gYmVpbmcgaW5zZXJ0ZWQsIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdXNlZCB0byBlbnN1cmUgdGhyZWFkIHNhZmV0eS4gQ29uc2lkZXJpbmcgaXQncyBhIFwicHVibGljXCIgaW5zZXJ0aW9uLCBJJ20gZXhwZWN0aW5nIHNvbWUgbGV2ZWwgb2YgdmlzaWJpbGl0eSBjb250cm9sIG9yIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIHRvIGJlIGF0IHBsYXkuIEhvdyBpcyB0aGUgaW5zZXJ0aW9uIHByb2Nlc3MgcHJvdGVjdGVkIGZyb20gcmFjZSBjb25kaXRpb25zIG9yIGNvcnJ1cHRpb24/IFdoYXQgbG9ja2luZyBtZWNoYW5pc21zIGFyZSBlbXBsb3llZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZGVhZGxvY2tzIEkgbmVlZCB0byBrZWVwIGluIG1pbmQ/XG5cbkZ1cnRoZXJtb3JlLCBJJ2xsIGJlIGNvbnNpZGVyaW5nIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgbmFtZSB0YWJsZSBpcyBmdWxsLCBvciBpZiB0aGUgcHJvdmlkZWQgbm9kZSBpbmZvcm1hdGlvbiBpcyBpbnZhbGlkPyBIb3cgYXJlIHRoZXNlIHNjZW5hcmlvcyBoYW5kbGVkLCBhbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtJ3Mgc3RhYmlsaXR5IGFuZCByZWxpYWJpbGl0eT8gQXJlIHRoZXJlIGFueSBlcnJvciBjb2RlcyBvciBsb2dnaW5nIG1lc3NhZ2VzIG9mIGludGVyZXN0P1xuXG5GaW5hbGx5LCBpZiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBpcyBpbiBhIGxhbmd1YWdlIGxpa2UgQywgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBBcmUgdGhlcmUgYW55IG1lbW9yeSBsZWFrcywgYnVmZmVyIG92ZXJmbG93cywgb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHVzZSBvZiBga21hbGxvY2AsIGBrZnJlZWAsIGBtZW1jcHlgLCBhbmQgc2ltaWxhciBmdW5jdGlvbnMuXG5cblVsdGltYXRlbHksIEkgbmVlZCB0byBmb3JtIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uJ3MgcHVycG9zZSwgaW1wbGVtZW50YXRpb24sIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBvdmVyYWxsIFRJUEMgc3lzdGVtLiBPbmx5IHRoZW4gY2FuIEkgZGV0ZXJtaW5lIGlmIGl0IGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIGFuZCBpZGVudGlmeSBhbnkgcG9zc2libGUgYXJlYXMgb2YgY29uY2Vybi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NjAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzowNDoxOC4xMTM2MTM2NDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NjU2Mjc4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MjE1PXN0YXRpYyBpbnQgX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjMzLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyMzQ6XFx0LyogUHJldmlvdXMgY2FsbCB0byB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YigpIHdhcyBzdWNjZXNzZnVsLlxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yMzUtXFx0ICogVGhlIG5vZGUncyBzZWxmLWFkZHJlc3MgcHVibGljYXRpb24gd2FzIGFkZGVkIHRvICdudC1cXHUwMDNlY2x1c3Rlcl9zY29wZScuXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjQwLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyNDE6XFx0aWYgKHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKG5ldCkpXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI0Mi1cXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM9Nzc4PXN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODM3LS8qKlxcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4Mzg6ICogdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIgLSBpbnNlcnQgcHVibGljYXRpb24gb2Ygbm9kZSdzIHNlbGYgYWRkcmVzc1xcbm5ldC90aXBjL25hbWVfdGFibGUuYy04MzktICogQG5ldDogbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuYy04NDUtICovXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jOjg0NjppbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC90aXBjL25hbWVfdGFibGUuYy04NDcte1xcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg3My1cXHQgKiBUSVBDX05PREVfU1RBVEUgKDApLiBJZiAnc3InIGlzIG5vdCBOVUxMLCB0aGlzIHJhbmdlIGV4aXN0c1xcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4NzQ6XFx0ICogZHVlIHRvIGEgcHJldmlvdXMgY2FsbCB0byB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YigpXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg3NS1cXHQgKiBvciB0aXBjX25ldF9maW5hbGl6ZSgpLlxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5oPTEzMT1zdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmgtMTM0LVxcdFxcdFxcdFxcdFxcdCAgICAgdTMyIGtleSwgaW50ICplcnIpO1xcbm5ldC90aXBjL25hbWVfdGFibGUuaDoxMzU6aW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldCk7XFxubmV0L3RpcGMvbmFtZV90YWJsZS5oLTEzNi1zdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA0OjE5LjcwMDE4NDE3NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0MzgwNzY1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIG15IHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyB0aGUgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYHRpcGNfbmFtZXRibF9wdWJsaXNoYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgaXQncyBiZWhhdmluZyBhcyBleHBlY3RlZC4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBpc3N1ZSBoZXJlIHRoYXQgSSBuZWVkIHRvIHBpbnBvaW50LiBVbmRlcnN0YW5kaW5nIHRoZSBleGFjdCBzdGF0ZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg5NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA0OjIyLjEzODI2MjMzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc2MTg3MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfbmFtZXRibF9wdWJsaXNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL25hbWVfdGFibGUuYz03NDg9dm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTc3NS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6Nzc2Oi8qIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIHNlcnZpY2UgYmluZGluZyB0byBuYW1lIHRhYmxlXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTc3Ny0gKi9cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6Nzc4OnN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTc3OS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTg0Nj1pbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg5Ny1cXHQgKiAgICB0ZWFyZG93bi5cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6ODk4OlxcdCAqIDIuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXFx1MDAzZSB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGhhcyBmYWlsZWRcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODk5LVxcdCAqICAgIHRvIGluc2VydCBub2RlIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpbnRvIG50LVxcdTAwM2VjbHVzdGVyX3Njb3BlXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTkwMC1cXHQgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6OTAxOlxcdCAqIDMuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXFx1MDAzZSB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGhhcyBub3RcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtOTAyLVxcdCAqICAgIGV4ZWN1dGVkIHlldC5cXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuaD0xMjQ9dm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxcbm5ldC90aXBjL25hbWVfdGFibGUuaC0xMjUtXFx0XFx0XFx0ICAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhKTtcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmg6MTI2OnN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxubmV0L3RpcGMvbmFtZV90YWJsZS5oLTEyNy1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxcbi0tXFxubmV0L3RpcGMvbmV0LmM9MTI5PXN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXFxuLS1cXG5uZXQvdGlwYy9uZXQuYy0xNDUtXFx0LyogUmVkaXN0cmlidXRlIGJ1bGsgb2YgcHVibGljYXRpb25zIHZpYSBub2RlLXVwIGV2ZW50IG9yIG5vZGUncyB0aW1lclxcbm5ldC90aXBjL25ldC5jOjE0NjpcXHQgKiBpZiB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGZhaWxzLlxcbm5ldC90aXBjL25ldC5jLTE0Ny1cXHQgKi9cXG5uZXQvdGlwYy9uZXQuYzoxNDg6XFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcXHUwMDI2dWEsIFxcdTAwMjZzaywgYWRkciwgTlVMTCk7XFxubmV0L3RpcGMvbmV0LmMtMTQ5LX1cXG4tLVxcbm5ldC90aXBjL25vZGUuYz00MTc9c3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTQ1My1cXHRcXHR0aXBjX21vbl9wZWVyX3VwKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTtcXG5uZXQvdGlwYy9ub2RlLmM6NDU0OlxcdFxcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXFx1MDAyNnVhLCBcXHUwMDI2c2ssIHNrLnJlZiwgXFx1MDAyNmVycik7XFxubmV0L3RpcGMvbm9kZS5jLTQ1NS1cXHR9XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yOTA3PXN0YXRpYyBpbnQgdGlwY19za19wdWJsaXNoKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjkyMS1cXHRza2FkZHIubm9kZSA9IHRpcGNfb3duX2FkZHIobmV0KTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoyOTIyOlxcdHAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCBcXHUwMDI2c2thZGRyLCBrZXksIE5VTEwpO1xcbm5ldC90aXBjL3NvY2tldC5jLTI5MjMtXFx0aWYgKHVubGlrZWx5KCFwKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDQ6MjMuNjE0NDU1ODc4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxNTM1ODI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBgdGlwY19uYW1lZF9ub2RlX3VwYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgdGFzayBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgZXhwZXJpZW5jZSB0ZWxscyBtZSBpdCdzIGFsd2F5cyB3aXNlIHRvIGJlIG1ldGhvZGljYWwsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGxpa2UgYHRpcGNfbmFtZWRfbm9kZV91cGAuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJXaGF0IGNvbnRleHQgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyB1c2VkIGluP1wiIElzIGl0IHBhcnQgb2YgdGhlIGNvcmUgVElQQyBpbXBsZW1lbnRhdGlvbiwgb3IgaXMgaXQgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uIGxheWVyZWQgb24gdG9wPyBLbm93aW5nIHRoYXQgaW5mbHVlbmNlcyBteSBleHBlY3RhdGlvbnMgZm9yIHRoaW5ncyBsaWtlIGVycm9yIGhhbmRsaW5nIGFuZCB0aGUga2luZHMgb2YgZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgaW50ZXJhY3Rpbmcgd2l0aC4gSSdtIGFzc3VtaW5nLCBiYXNlZCBvbiB0aGUgbmFtZSwgdGhhdCBpdCBsaWtlbHkgZGVhbHMgd2l0aCBicmluZ2luZyB1cCBhIG5hbWVkIG5vZGUgd2l0aGluIHRoZSBUSVBDIG5ldHdvcmsuIFRoYXQgaW1wbGllcyBzb21lIGtpbmQgb2YgcmVnaXN0cmF0aW9uIG9yIGFubm91bmNlbWVudCB0byB0aGUgbmV0d29yaywgYW5kIHRoZSBwb3RlbnRpYWwgbmVlZCBmb3Igc29tZSBmb3JtIG9mIHN5bmNocm9uaXphdGlvbiBvciBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBub2RlIHN0YXJ0dXAgb3IgcmVnaXN0cmF0aW9uLiBJIHdpbGwgYmUgbG9va2luZyBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBjaGVja2luZyBmb3IgYWRlcXVhdGUgdGhyZWFkIHNhZmV0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGVycm9ycy4gRG9lcyBpdCByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMsIG9yIGRvZXMgaXQgcmVseSBvbiBleGNlcHRpb25zPyBIb3cgYXJlIHRoZXNlIGVycm9ycyBwcm9wYWdhdGVkIHVwIHRoZSBjYWxsIHN0YWNrPyBUaGlzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgcm9idXN0IHN5c3RlbSBkZXNpZ24uIEFsc28sIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdCB3aXRoPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGltcGFjdCBpdHMgYmVoYXZpb3Igb3Igc3VjY2Vzcz8gSXTigJlzIGFsc28gaW1wZXJhdGl2ZSB0byBrZWVwIGluIG1pbmQsIEkgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLCB0byBzZWUgd2hhdCBpbnB1dCBpdCB0YWtlcyBhbmQgd2hhdCBpdCByZXR1cm5zLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhbGwgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCwgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24uIEZpbmFsbHksIHRoZSBkb2N1bWVudGF0aW9uIChpZiBhbnkpIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgSSB3aWxsIGFsc28gd2FudCB0byB0cmFjZSBpdHMgdXNhZ2UgaW4gdmFyaW91cyBjb2RlIHRvIGRldGVybWluZSBob3cgaXQgaXMgdXRpbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDE1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDQ6MjcuOTI5ODE3MDQ2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYwNjYxMTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfbmFtZWRfbm9kZV91cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MjY0PWludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjg2LS8qKlxcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyODc6ICogdGlwY19uYW1lZF9ub2RlX3VwIC0gdGVsbCBzcGVjaWZpZWQgbm9kZSBhYm91dCBhbGwgcHVibGljYXRpb25zIGJ5IHRoaXMgbm9kZVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yODgtICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yOTYtICovXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjI5NzppbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yOTgte1xcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5oPTcxPXN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmg6NzI6aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7XFxubmV0L3RpcGMvbmFtZV9kaXN0ci5oLTczLXZvaWQgdGlwY19uYW1lZF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpuYW1lZHEsXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9NDE3PXN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcXG4tLVxcbm5ldC90aXBjL25vZGUuYy00NDktXFx0aWYgKGZsYWdzIFxcdTAwMjYgVElQQ19OT1RJRllfTk9ERV9VUClcXG5uZXQvdGlwYy9ub2RlLmM6NDUwOlxcdFxcdHJjID0gdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi1cXHUwMDNlY2FwYWJpbGl0aWVzKTtcXG5uZXQvdGlwYy9ub2RlLmMtNDUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzowNDoyOS4zOTA0ODUzMjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzNzg5NTk4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBDYW5kaWRhdGUgSWRlbnRpZmljYXRpb24gd2l0aGluIFRJUEMgQ29yZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiBUSVBDLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24gYW5kIGRlYWxzIHdpdGggdGhvc2UgcGVza3kgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBmZXcga2V5IGZ1bmN0aW9ucyBhcyByaXBlIGZvciBmdXp6aW5nOiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCwgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYW5kIGB0aXBjX25hbWVkX25vZGVfdXBgLiBUaG9zZSBhcmUgdGhlIGNvcmUgZGlzdHJpYnV0aW9uIGFuZCBwdWJsaXNoaW5nIG1lY2hhbmlzbXMsIHNvIHRoZXkncmUgbmF0dXJhbGx5IGdvaW5nIHRvIGJlIHBvdGVudGlhbCB3ZWFrIHBvaW50cy4gQW5kLCBnaXZlbiB0aGF0IGB0aXBjX3NrX3B1Ymxpc2hgIGNhbGxzIGludG8gYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgdGhhdCBsaWtlbHkgbWFrZXMgaXQgYSBnb29kIGZ1enogdGFyZ2V0IGFzIHdlbGwuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYEtjb25maWdgIGZvciBUSVBDIHN1cHBvcnQgdG8gbWFrZSBzdXJlIGl0J3MgZW5hYmxlZCBhbmQgd2hhdCBvcHRpb25zIGFyZSBjb25maWd1cmVkIHRvIHByb3Blcmx5IGNyYWZ0IGEgZnV6emluZyBjYW1wYWlnbiB0aGF0IGNvdmVycyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODUxLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA0OjM5Ljc2OTQ0ODY1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4ODE3NjMyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVElQQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9LY29uZmlnLTUtXFxubmV0L3RpcGMvS2NvbmZpZzo2Om1lbnVjb25maWcgVElQQ1xcbm5ldC90aXBjL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVGhlIFRJUEMgUHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTIzLVxcbm5ldC90aXBjL0tjb25maWc6MjQ6Y29uZmlnIFRJUENfTUVESUFfSUJcXG5uZXQvdGlwYy9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIkluZmluaUJhbmQgbWVkaWEgdHlwZSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy0yOS1cXHQgIElQLW92ZXItSW5maW5pQmFuZCBkZXZpY2VzLlxcbm5ldC90aXBjL0tjb25maWc6MzA6Y29uZmlnIFRJUENfTUVESUFfVURQXFxubmV0L3RpcGMvS2NvbmZpZy0zMS1cXHRib29sIFxcXCJJUC9VRFAgbWVkaWEgdHlwZSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy0zNy1cXG5uZXQvdGlwYy9LY29uZmlnOjM4OmNvbmZpZyBUSVBDX0NSWVBUT1xcbm5ldC90aXBjL0tjb25maWctMzktXFx0Ym9vbCBcXFwiVElQQyBlbmNyeXB0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTUyLVxcbm5ldC90aXBjL0tjb25maWc6NTM6Y29uZmlnIFRJUENfRElBR1xcbm5ldC90aXBjL0tjb25maWctNTQtXFx0dHJpc3RhdGUgXFxcIlRJUEM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDQ6NDEuMjU3NjMwNTQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzMjE3NDgyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKlRhY2tsaW5nIHRoZSBUSVBDIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIGBUSVBDYC4gUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMuIEJlZm9yZSBJIGV2ZW4gKnRoaW5rKiBhYm91dCBjb25maWd1cmluZyBUSVBDLCBJIG5lZWQgdG8ga25vdyB3aGF0IGl0IHJlbGllcyBvbi4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBpbiBwbGFjZSBiZWZvcmUgSSBldmVuIHN0YXJ0LiBJJ2xsIG5lZWQgdG8gcnVuIGEgcXVpY2sgY2hlY2sgZm9yIGRlcGVuZGVuY2llcywgZW5zdXJpbmcgYWxsIG5lY2Vzc2FyeSBjb21wb25lbnRzIGFyZSBpbnN0YWxsZWQgYW5kIG9wZXJhdGlvbmFsLiBTa2lwcGluZyB0aGlzIHN0ZXAgd291bGQgYmUgYSByb29raWUgbWlzdGFrZTsgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IHJ1biBpbnRvIGFueSB1bm5lY2Vzc2FyeSByb2FkYmxvY2tzIGRvd24gdGhlIGxpbmUuIEl0J3MgdGhlIHN0YW5kYXJkIHByb2NlZHVyZS4gRGVwZW5kZW5jaWVzIGZpcnN0LiBBbHdheXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDQ6NTAuNTc5MzgxODk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVElQQyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgVElQQ1xcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBUSVBDIFByb3RvY29sXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoZSBUcmFuc3BhcmVudCBJbnRlciBQcm9jZXNzIENvbW11bmljYXRpb24gKFRJUEMpIHByb3RvY29sIGlzXFxuICAxMTpcXHRcXHQgIHNwZWNpYWxseSBkZXNpZ25lZCBmb3IgaW50cmEgY2x1c3RlciBjb21tdW5pY2F0aW9uLiBUaGlzIHByb3RvY29sXFxuICAxMjpcXHRcXHQgIG9yaWdpbmF0ZXMgZnJvbSBFcmljc3NvbiB3aGVyZSBpdCBoYXMgYmVlbiB1c2VkIGluIGNhcnJpZXIgZ3JhZGVcXG4gIDEzOlxcdFxcdCAgY2x1c3RlciBhcHBsaWNhdGlvbnMgZm9yIG1hbnkgeWVhcnMuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVElQQywgc2VlIGh0dHA6Ly90aXBjLnNvdXJjZWZvcmdlLm5ldC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBUaGlzIHByb3RvY29sIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgKCA9IGNvZGUgd2hpY2hcXG4gIDE4OlxcdFxcdCAgY2FuIGJlIGluc2VydGVkIGluIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdVxcbiAgMTk6XFx0XFx0ICB3YW50KS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aXBjLiBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0XFxuICAyMDpcXHRcXHQgIGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMucnN0XFx1MDAzZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDQ6NTAuNTc5NDQ3NjM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMDY3NTM3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVElQQyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBjb25maWd1cmluZyBUSVBDLCBhbmQgaXQncyBjbGVhciB0aGF0IGl0IGhhcyBhIGRlcGVuZGVuY3kgb24gSU5FVC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIEknbGwgbWFrZSBzdXJlIHRvIGluY2x1ZGUgYFRJUENgIHdpdGhpbiBgRW5hYmxlQ29uZmlnc2AgdG8gYWNjb3VudCBmb3IgdGhhdC5cblxuTm93LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBzcGVjaWZpYyBzeW1ib2xzIHdpdGhpbiB0aGUgVElQQyBzeXN0ZW0uIEkndmUgZ290IG15IGZvY3VzIG5hcnJvd2VkIGRvd24gdG8gdGhlc2U6IGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgLCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgYW5kIGB0aXBjX3NrX3B1Ymxpc2hgLiBUaGVzZSBhcmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IFRJUEMgaGFuZGxlcyBuYW1lIGRpc3RyaWJ1dGlvbiBhbmQgc29ja2V0IHB1Ymxpc2hpbmcg4oCTIGNvcmUgZnVuY3Rpb25hbGl0aWVzLlxuXG5CZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IGlmIGB0aXBjX3NrX3B1Ymxpc2hgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgaXRzIHNjb3BlIGlzIGRldGVybWluZWQuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk1OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA0OjU1Ljc4NjIwMzc4M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3OTc5NDUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NrX3B1Ymxpc2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvc29ja2V0LmM9MTUwPXN0YXRpYyB2b2lkIHRpcGNfc2tfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxubmV0L3RpcGMvc29ja2V0LmM6MTUxOnN0YXRpYyBpbnQgdGlwY19za19wdWJsaXNoKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTItc3RhdGljIGludCB0aXBjX3NrX3dpdGhkcmF3KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKTtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTY3Nj1zdGF0aWMgaW50IF9fdGlwY19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2thZGRyLCBpbnQgYWxlbilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTcwMS1cXHRcXHRyZXR1cm4gdGlwY19za193aXRoZHJhdyh0c2ssIHVhKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzo3MDI6XFx0cmV0dXJuIHRpcGNfc2tfcHVibGlzaCh0c2ssIHVhKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy03MDMtfVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9Mjg3MD1zdGF0aWMgdm9pZCB0aXBjX3NrX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTA2LVxcbm5ldC90aXBjL3NvY2tldC5jOjI5MDc6c3RhdGljIGludCB0aXBjX3NrX3B1Ymxpc2goc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY191YWRkciAqdWEpXFxubmV0L3RpcGMvc29ja2V0LmMtMjkwOC17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMDcyPXN0YXRpYyBpbnQgdGlwY19za19qb2luKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfZ3JvdXBfcmVxICptcmVxKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzA5Ny1cXHR0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAobmV0LCBncnAsIFxcdTAwMjZ1YSk7XFxubmV0L3RpcGMvc29ja2V0LmM6MzA5ODpcXHRyYyA9IHRpcGNfc2tfcHVibGlzaCh0c2ssIFxcdTAwMjZ1YSk7XFxubmV0L3RpcGMvc29ja2V0LmMtMzA5OS1cXHRpZiAocmMpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDQ6NTcuMjY2MDAzNjU3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTE2MTY5NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgaW50ZXJuYWxzIGFuZCBuZXR3b3JraW5nOlxuXG4qKkZvY3VzaW5nIG9uIHRoZSBSaWdodCBTeW1ib2wgZm9yIHRoZSBKb2IqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGlkZW50aWZ5IHRoZSBlbnRyeSBwb2ludCBmb3Igc29tZSBUSVBDIChUcmFuc3BhcmVudCBJbnRlci1Qcm9jZXNzIENvbW11bmljYXRpb24pIGZ1bmN0aW9uYWxpdHkuIEkgc2VlIGB0aXBjX3NrX3B1Ymxpc2hgIGFuZCByZWFsaXplIGltbWVkaWF0ZWx5IHRoYXQgaXQncyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBtZWFucyBpdCdzIGxpbWl0ZWQgaW4gc2NvcGUsIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIG1vZHVsZSBvciBmaWxlLiBUaGVyZWZvcmUsIGl0J3Mgbm90IGEgdXNlZnVsIHN5bWJvbCB0byB6ZXJvIGluIG9uIGlmIEknbSB0cnlpbmcgdG8gZmluZCB0aGUgcHJpbWFyeSBpbnRlcmZhY2UuIGBfX3RpcGNfYmluZGAgaXMgYWxzbyBzdGF0aWMsIHNvIEkgY2FuIHRvc3MgdGhhdCBvbmUgYXNpZGUgdG9vLiBOb3csICpgdGlwY19iaW5kYCouLi4gYWgsICp0aGF0J3MqIHRoZSBsaWtlbHkgY2FuZGlkYXRlISBJdCdzIHRoZSBub24tc3RhdGljIG9uZSwgdGhlIHB1YmxpYy1mYWNpbmcgZW50cnkgcG9pbnQgSSdtIGxvb2tpbmcgZm9yLiBUaGF0J3MgcHJvYmFibHkgdGhlIGZ1bmN0aW9uIHRoYXQncyBleHBvc2VkIGFuZCBjYWxsYWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggaXMgd2hlcmUgSSdkIGZvY3VzIG15IGF0dGVudGlvbi4gSXQncyB0aGUga2V5IHN5bWJvbCBJJ2xsIHdhbnQgdG8gdHJhY2Ugb3IgYW5hbHl6ZSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc1MiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA1OjAwLjk1NzYyMzU5NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1Njg5MTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX2JpbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvbmFtZV90YWJsZS5jPTg0Nj1pbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg3Ny1cXHQgKiBOb3RlIHRoYXQgdXNlciBhcHBsaWNhdGlvbnMgY2FuIG9ubHkgaW5zZXJ0IHR5cGVzIGdyZWF0ZXIgdGhhblxcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4Nzg6XFx0ICogb3IgZXF1YWwgdG8gNjQgKFRJUENfUkVTRVJWRURfVFlQRVMpLCBhcyBlbmZvcmNlZCBieSB0aXBjX2JpbmQoKS5cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODc5LVxcdCAqIFJlbW90ZSBub2RlcyBhbHNvIG9ubHkgc2VuZCBwcm90b2NvbCBwdWJsaWNhdGlvbnMgd2l0aCB0eXBlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz02MjY9c3RhdGljIGludCB0aXBjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTY2MS0vKipcXG5uZXQvdGlwYy9zb2NrZXQuYzo2NjI6ICogX190aXBjX2JpbmQgLSBhc3NvY2lhdGUgb3IgZGlzYXNzb2NpYXRlIFRJUEMgbmFtZShzKSB3aXRoIGEgc29ja2V0XFxubmV0L3RpcGMvc29ja2V0LmMtNjYzLSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy02NzUtICovXFxubmV0L3RpcGMvc29ja2V0LmM6Njc2OnN0YXRpYyBpbnQgX190aXBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpza2FkZHIsIGludCBhbGVuKVxcbm5ldC90aXBjL3NvY2tldC5jLTY3Ny17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz03MDU9aW50IHRpcGNfc2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNrYWRkciwgaW50IGFsZW4pXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy03MDktXFx0bG9ja19zb2NrKHNvY2stXFx1MDAzZXNrKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzo3MTA6XFx0cmVzID0gX190aXBjX2JpbmQoc29jaywgc2thZGRyLCBhbGVuKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy03MTEtXFx0cmVsZWFzZV9zb2NrKHNvY2stXFx1MDAzZXNrKTtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTcxNC1cXG5uZXQvdGlwYy9zb2NrZXQuYzo3MTU6c3RhdGljIGludCB0aXBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNrYWRkciwgaW50IGFsZW4pXFxubmV0L3RpcGMvc29ja2V0LmMtNzE2LXtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTMzNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTMzNjItXFx0LnJlbGVhc2VcXHQ9IHRpcGNfcmVsZWFzZSxcXG5uZXQvdGlwYy9zb2NrZXQuYzozMzYzOlxcdC5iaW5kXFx0XFx0PSB0aXBjX2JpbmQsXFxubmV0L3RpcGMvc29ja2V0LmMtMzM2NC1cXHQuY29ubmVjdFxcdD0gdGlwY19jb25uZWN0LFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MzM3OT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzID0ge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzM4Mi1cXHQucmVsZWFzZVxcdD0gdGlwY19yZWxlYXNlLFxcbm5ldC90aXBjL3NvY2tldC5jOjMzODM6XFx0LmJpbmRcXHRcXHQ9IHRpcGNfYmluZCxcXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzg0LVxcdC5jb25uZWN0XFx0PSB0aXBjX2Nvbm5lY3QsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzk5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDAyLVxcdC5yZWxlYXNlXFx0PSB0aXBjX3JlbGVhc2UsXFxubmV0L3RpcGMvc29ja2V0LmM6MzQwMzpcXHQuYmluZFxcdFxcdD0gdGlwY19iaW5kLFxcbm5ldC90aXBjL3NvY2tldC5jLTM0MDQtXFx0LmNvbm5lY3RcXHQ9IHRpcGNfY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDU6MDIuNDE0NTIwMTI3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzM2NDM5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgVElQQyBCaW5kaW5nIGFuZCBEaXN0cmlidXRpb24gRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgVElQQyBmdW5jdGlvbnMuIEkgbm90aWNlZCBgdGlwY19iaW5kYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGEgYml0IHVudXN1YWwgZm9yIGFuIG9wZXJhdGlvbiBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgZGVzaWduIGRlY2lzaW9uIGZvciBsYXRlciBhbmFseXNpcy4gTmV4dCwgSSBzaG91bGQgaW52ZXN0aWdhdGUgYHRpcGNfc2tfYmluZGAsIHdoaWNoIEkgKmJlbGlldmUqIGlzIG5vbi1zdGF0aWMuIExldCdzIGNvbmZpcm0gdGhhdC4gRmluYWxseSwgSSdsbCBuZWVkIHRvIGV4YW1pbmUgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAgdG8gc2VlIHdoYXQgaXMgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODcwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDU6MDYuMTg4MTY2NDk1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc1ODI2MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfbmFtZWRfZGlzdHJpYnV0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MTUxPXN0YXRpYyBpbnQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjA0LS8qKlxcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyMDU6ICogX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBidWlsZCBhIGxpc3Qgb2YgcHVibGljYXRpb25zIG5lZWQgdG8gYmUgZGlzdHJpYnV0ZWRcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjA2LSAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjE0LSAqL1xcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyMTU6c3RhdGljIGludCBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSxcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjE2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjU0LS8qKlxcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyNTU6ICogdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gZGlzdHJpYnV0ZSBhbGwgcHVibGljYXRpb25zIHRvIHNwZWNpZmllZCBub2RlXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI1Ni0gKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI2My0gKi9cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MjY0OmludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTI2NS17XFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjcxLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2dG4tXFx1MDAzZW5hbWV0YmxfbG9jayk7XFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjI3MjpcXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFxcdTAwMjZoZWFkKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjczLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYz0yOTc9aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcylcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zMDgtXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjMwOTpcXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFxcdTAwMjZoZWFkKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMzEwLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuaD03Nj12b2lkIHRpcGNfcHVibF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpuc3ViX2xpc3QsXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5oLTc3LVxcdFxcdCAgICAgIHUzMiBhZGRyLCB1MTYgY2FwYWJpbGl0aWVzKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmg6Nzg6aW50IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSk7XFxubmV0L3RpcGMvbmFtZV9kaXN0ci5oLTc5LVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTgzMj1zdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC90aXBjL25vZGUuYy04NDktXFx0aWYgKGF0b21pY194Y2hnKFxcdTAwMjZuLVxcdTAwM2VkaXN0X2J1bGssIDApKVxcbm5ldC90aXBjL25vZGUuYzo4NTA6XFx0XFx0ZGlzdF9yYyA9IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShuLVxcdTAwM2VuZXQsIG4tXFx1MDAzZWFkZHIpO1xcbm5ldC90aXBjL25vZGUuYy04NTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA1OjA3LjY2Mzk5NjY4OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzU4NzE2NjE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUSVBDIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucywgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgLCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBhbmQgYHRpcGNfbmFtZWRfbm9kZV91cGAgYXJlICpub3QqIHN0YXRpYy4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIHBvdGVudGlhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24gYW5kIGVudHJ5IHBvaW50cyBmb3IgdmFyaW91cyBvcGVyYXRpb25zIHdpdGhpbiB0aGUgVElQQyBzeXN0ZW0uIFRoZXNlIGFyZSBkZWZpbml0ZWx5IHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5TbyBteSBpbml0aWFsIHRob3VnaHQgaXMsIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgLCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBhbmQgYHRpcGNfbmFtZWRfbm9kZV91cGAuXG5cblRoZSBcIkVuYWJsZUNvbmZpZ3M6IFRJUENcIiBpcyBhIGdpdmVuLCBzbyBJJ20gYWxyZWFkeSBsb29raW5nIGF0IFRJUEMtcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBUaGUgZGVzY3JpcHRpb24gY29uZmlybXMgd2hhdCBJIHN1c3BlY3RlZC4gVGhlIHBhdGNoJ3MgY29yZSBtb2RpZmljYXRpb24gY2VudGVycyBhcm91bmQgaGFuZGxpbmcgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZHVyaW5nIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uIHdpdGhpbiB0aGUgVElQQyBzeXN0ZW0uIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBhZGRlZCBlcnJvciBjb2RlIHJldHVybnMgdG8gY3J1Y2lhbCBmdW5jdGlvbnMgbGlrZSBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGFuZCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgd2hpY2ggc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgcHJldmlvdXMgY29kZSBwYXRoIGRpZCBub3QgcmVsaWFibHkgaGFuZGxlIGZhaWx1cmVzLiBOZXcgZnVuY3Rpb25zLCBuYW1lbHkgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCBhbmQgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIHRvIGRlYWwgd2l0aCBidWxrIHJlZGlzdHJpYnV0aW9uIG9mIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zLlxuXG5Db25zaWRlcmluZyB0aGlzIGlzIGEgbW9kaWZpY2F0aW9uIHRvIGZ1bmRhbWVudGFsIGtlcm5lbCBsb2dpYyB3aXRoaW4gVElQQyB0aGF04oCZcyBhbHNvIHJlYWNoYWJsZSwgaXQncyBhYnNvbHV0ZWx5IHJpcGUgZm9yIGZ1enppbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIGltcHJvdmUgcm9idXN0bmVzcyBhbmQgcmVzaWxpZW5jZSBpbiB0aGUgZmFjZSBvZiBtZW1vcnkgcHJlc3N1cmUsIGFuZCB0aGF0J3MgZXhhY3RseSB0aGUga2luZCBvZiBzY2VuYXJpbyBmdXp6aW5nIGlzIGRlc2lnbmVkIHRvIHVuY292ZXIuIEknbGwgbmVlZCB0byBkZXZlbG9wIGZ1enppbmcgc3RyYXRlZ2llcyB0aGF0IHNwZWNpZmljYWxseSB0YXJnZXQgdGhlc2UgbmV3IGVycm9yIHBhdGhzIGFuZCBhbGxvY2F0aW9uIHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MTIsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA1OjIxLjI1MTE2NTIxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMDY0OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19uYW1lZF9kaXN0cmlidXRlXCIsXG4gICAgXCJ0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YlwiLFxuICAgIFwidGlwY19uYW1ldGJsX3B1Ymxpc2hcIixcbiAgICBcInRpcGNfbmFtZWRfbm9kZV91cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFRJUEMgbG9naWMgdG8gaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGR1cmluZyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbi4gSXQgYWRkcyBlcnJvciBjb2RlIHJldHVybnMgdG8gZnVuY3Rpb25zIGxpa2UgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGFuZCBpbnRyb2R1Y2VzIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAgYW5kIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgIHRvIGhhbmRsZSBidWxrIHJlZGlzdHJpYnV0aW9uIG9mIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfbmFtZWRfZGlzdHJpYnV0ZVwiLFxuICAgIFwidGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJcIixcbiAgICBcInRpcGNfbmFtZXRibF9wdWJsaXNoXCIsXG4gICAgXCJ0aXBjX25hbWVkX25vZGVfdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBUSVBDIGxvZ2ljIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBkdXJpbmcgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24uIEl0IGFkZHMgZXJyb3IgY29kZSByZXR1cm5zIHRvIGZ1bmN0aW9ucyBsaWtlIGB0aXBjX25hbWV0YmxfcHVibGlzaGAgYW5kIGB0aXBjX25hbWVkX25vZGVfdXBgLCBhbmQgaW50cm9kdWNlcyBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgIGFuZCBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCB0byBoYW5kbGUgYnVsayByZWRpc3RyaWJ1dGlvbiBvZiBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzowNToyMS4zMjMyMzcyNDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODUwMDkzODkzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA1OjIxLjMyMzcxMjU2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1Nzg1MDA0NTg4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUSVBDIHN1YnN5c3RlbSB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgKHJldHVybmluZyBgLUVOT0JVRlNgKSBkdXJpbmcgbmFtZSB0YWJsZSBkaXN0cmlidXRpb24uIEl0IGFkZHMgZXJyb3IgaGFuZGxpbmcgdG8gZnVuY3Rpb25zIGxpa2UgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGB0aXBjX25hbWVkX25vZGVfdXBgLCBhbmQgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYW5kIGludHJvZHVjZXMgZmxhZ3MgdG8gdHJhY2sgdGhlIHN0YXRlIG9mIHRoZSBuYW1lIHRhYmxlIGFuZCBub2RlIGFkZHJlc3MuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIHZhcmlhYmxlcyBhbmQgc3RydWN0dXJlcyAoZS5nLiwgYHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrYCwgYHN0cnVjdCB0aXBjX3VhZGRyIHVhYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKGUuZy4sIHZpYSBleHBsaWNpdCBhc3NpZ25tZW50IG9yIHRoZSBgdGlwY191YWRkcigpYCBoZWxwZXIpLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgY29udHJvbCBmbG93IGFuZCBlcnJvciBoYW5kbGluZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMsIHdoaWNoIGRvIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVhN2MzZDRiOWI0MGE5M2QzMTE0NTliY2JlMmJkNjZiZDkyMmQzODVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNzowMzo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuYyBiL25ldC90aXBjL2NvcmUuY1xuaW5kZXggMzE1OTc1YzNiZTgxOC4uMGYxZDNkZGVhZTA5NSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2NvcmUuY1xuKysrIGIvbmV0L3RpcGMvY29yZS5jXG5AQCAtNjEsNiArNjEsOSBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgdGlwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHR0bi1cdTAwM2V0cmlhbF9hZGRyID0gMDtcbiBcdHRuLVx1MDAzZWFkZHJfdHJpYWxfZW5kID0gMDtcbiBcdHRuLVx1MDAzZWNhcGFiaWxpdGllcyA9IFRJUENfTk9ERV9DQVBBQklMSVRJRVM7XG4rXHR0bi1cdTAwM2VudF9zdG9wID0gZmFsc2U7XG4rXHR0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTtcbitcdGF0b21pY19zZXQoXHUwMDI2dG4tXHUwMDNlbm9kZV9hZGRyX3NldCwgMCk7XG4gXHRJTklUX1dPUksoXHUwMDI2dG4tXHUwMDNld29yaywgdGlwY19uZXRfZmluYWxpemVfd29yayk7XG4gXHRtZW1zZXQodG4tXHUwMDNlbm9kZV9pZCwgMCwgc2l6ZW9mKHRuLVx1MDAzZW5vZGVfaWQpKTtcbiBcdG1lbXNldCh0bi1cdTAwM2Vub2RlX2lkX3N0cmluZywgMCwgc2l6ZW9mKHRuLVx1MDAzZW5vZGVfaWRfc3RyaW5nKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5oIGIvbmV0L3RpcGMvY29yZS5oXG5pbmRleCA5Y2U1ZjlmZjZjYzAzLi45NzViMWQ0ODE4NmU2IDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvY29yZS5oXG4rKysgYi9uZXQvdGlwYy9jb3JlLmhcbkBAIC0xNDUsNiArMTQ1LDEyIEBAIHN0cnVjdCB0aXBjX25ldCB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbiBcdC8qIFRoZSBudW1iZXJzIG9mIHdvcmsgcXVldWVzIGluIHNjaGVkdWxlICovXG4gXHRhdG9taWNfdCB3cV9jb3VudDtcbitcdC8qIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbm9kZSdzIGFkZHJlc3MgaXMgc2V0ICovXG4rXHRhdG9taWNfdCBub2RlX2FkZHJfc2V0O1xuK1x0LyogVGhlIG5hbWUgdGFibGUgaGFzIHN0b3BwZWQgd29ya2luZyAqL1xuK1x0Ym9vbCBudF9zdG9wO1xuK1x0LyogTm9kZSdzIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIG5hbWUgdGFibGUgKi9cbitcdGJvb2wgbnRfc2VsZl9ub2RlX2V4aXN0O1xuIH07XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlwY19uZXQgKnRpcGNfbmV0KHN0cnVjdCBuZXQgKm5ldClcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcbmluZGV4IGJhNGY0OTA2ZTEzYjcuLjgzZTNlZDhmMmM1MTIgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcbisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuY1xuQEAgLTk1LDkgKzk1LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiBcdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZW5vZGVfc2NvcGUpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbi1cdHdyaXRlX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xuLVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHRza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBJVEVNX1NJWkUsIDApO1xuIFx0aWYgKCFza2IpIHtcbiBcdFx0cHJfd2FybihcIlB1YmxpY2F0aW9uIGRpc3RyaWJ1dGlvbiBmYWlsdXJlXFxuXCIpO1xuQEAgLTEyMSw5ICsxMTksNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiBcdHN0cnVjdCBkaXN0cl9pdGVtICppdGVtO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbi1cdHdyaXRlX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbi1cdHdyaXRlX3VubG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuIFx0aWYgKHAtXHUwMDNlc2NvcGUgPT0gVElQQ19OT0RFX1NDT1BFKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbkBAIC0xNDYsOSArMTQyLDE0IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxuICAqIEBkbm9kZTogbm9kZSB0byBiZSB1cGRhdGVkXG4gICogQHBsczogbGlua2VkIGxpc3Qgb2YgcHVibGljYXRpb24gaXRlbXMgdG8gYmUgcGFja2VkIGludG8gYnVmZmVyIGNoYWluXG4gICogQHNlcW5vOiBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgbWVzc2FnZVxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcbisgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXG4rICpcbiAgKi9cbi1zdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbi1cdFx0XHQgICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pXG4rc3RhdGljIGludCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbitcdFx0XHQgICAgdTMyIGRub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbHMsIHUxNiBzZXFubylcbiB7XG4gXHRzdHJ1Y3QgcHVibGljYXRpb24gKnB1Ymw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbkBAIC0xNjQsOCArMTY1LDkgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4gXHRcdFx0c2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgbXNnX3JlbSxcbiBcdFx0XHRcdFx0XHRkbm9kZSk7XG4gXHRcdFx0aWYgKCFza2IpIHtcbitcdFx0XHRcdF9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpO1xuIFx0XHRcdFx0cHJfd2FybihcIkJ1bGsgcHVibGljYXRpb24gZmFpbHVyZVxcblwiKTtcbi1cdFx0XHRcdHJldHVybjtcbitcdFx0XHRcdHJldHVybiAtRU5PQlVGUztcbiBcdFx0XHR9XG4gXHRcdFx0aGRyID0gYnVmX21zZyhza2IpO1xuIFx0XHRcdG1zZ19zZXRfYmNfYWNrX2ludmFsaWQoaGRyLCB0cnVlKTtcbkBAIC0xOTUsNiArMTk3LDkwIEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuIFx0aGRyID0gYnVmX21zZyhza2JfcGVla190YWlsKGxpc3QpKTtcbiBcdG1zZ19zZXRfbGFzdF9idWxrKGhkcik7XG4gXHRtc2dfc2V0X25hbWVkX3NlcW5vKGhkciwgc2Vxbm8pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIF9fdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gYnVpbGQgYSBsaXN0IG9mIHB1YmxpY2F0aW9ucyBuZWVkIHRvIGJlIGRpc3RyaWJ1dGVkXG4rICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcbisgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGVcbisgKiBAaGVhZDogbGlzdCBvZiBwdWJsaWNhdGlvbnNcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4rICovXG4rc3RhdGljIGludCBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSxcbitcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpXG4re1xuK1x0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbitcbitcdC8qIE5hbWUgdGFibGUgaGFzIGJlZW4gZGVsZXRlZCBhZnRlciBuYW1lc3BhY2UgdGVhcmRvd24gb3JcbitcdCAqIFRJUEMgbW9kdWxlIGV4aXQuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseSh0bi1cdTAwM2VudF9zdG9wKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBOb2RlJ3Mgc2VsZi1hZGRyZXNzIGlzIG5vdCBzZXQgeWV0ICovXG4rXHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQpKSB7XG4rXHRcdC8qIERlZmVyIHRoZSBkaXN0cmlidXRpb24gdG8gbm9kZSdzIHRpbWVyICovXG4rXHRcdHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKG5ldCwgZG5vZGUpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qIFByZXZpb3VzIGNhbGwgdG8gdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoKSB3YXMgc3VjY2Vzc2Z1bC5cbitcdCAqIFRoZSBub2RlJ3Mgc2VsZi1hZGRyZXNzIHB1YmxpY2F0aW9uIHdhcyBhZGRlZCB0byAnbnQtXHUwMDNlY2x1c3Rlcl9zY29wZScuXG4rXHQgKiBTbywgJ250LVx1MDAzZWNsdXN0ZXJfc2NvcGUnIGlzIG5vdCBlbXB0eSBub3cuIEdvIHRvIGRpc3RyaWJ1dGlvbi5cbitcdCAqL1xuK1x0aWYgKHRuLVx1MDAzZW50X3NlbGZfbm9kZV9leGlzdClcbitcdFx0Z290byBkaXN0cmlidXRlO1xuK1xuK1x0aWYgKHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKG5ldCkpXG4rXHRcdHJldHVybiAtRU5PQlVGUztcbitcbitcdHRuLVx1MDAzZW50X3NlbGZfbm9kZV9leGlzdCA9IHRydWU7XG4rXG4rZGlzdHJpYnV0ZTpcbitcdGlmIChuYW1lZF9kaXN0cmlidXRlKG5ldCwgaGVhZCwgZG5vZGUsXG4rXHRcdFx0ICAgICBcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlLCBudC1cdTAwM2VzbmRfbnh0KSA9PSAtRU5PQlVGUylcbitcdFx0cmV0dXJuIC1FTk9CVUZTO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHRpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGRpc3RyaWJ1dGUgYWxsIHB1YmxpY2F0aW9ucyB0byBzcGVjaWZpZWQgbm9kZVxuKyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4rICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbisgKlxuKyAqL1xuK2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpXG4re1xuK1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4rXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhlYWQ7XG4rXHRpbnQgcmMgPSAwO1xuK1xuK1x0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmhlYWQpO1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4rXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFx1MDAyNmhlYWQpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbitcdGlmICghcmMgXHUwMDI2XHUwMDI2ICFza2JfcXVldWVfZW1wdHkoXHUwMDI2aGVhZCkpIHtcbitcdFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbitcdFx0LyogVGhlIGxpbmsgaXMgY29uZ2VzdGVkIGFmdGVyIHRoZSBsaXN0IGlzIGluc2VydGVkIGludG8gdGhlXG4rXHRcdCAqIGxpbmsncyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmMgPT0gLUVMSU5LQ09ORylcbitcdFx0XHRyYyA9IDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmM7XG4gfVxuIFxuIC8qKlxuQEAgLTIwMiwyNSArMjg4LDM2IEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuICAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4gICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXG4gICogQGNhcGFiaWxpdGllczogcGVlciBub2RlJ3MgY2FwYWJpbGl0aWVzXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbisgKlxuICAqL1xuLXZvaWQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxuK2ludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXG4ge1xuIFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4gXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgaGVhZDtcbi1cdHUxNiBzZXFubztcbitcdGludCByYyA9IDA7XG4gXG4gXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aGVhZCk7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiBcdGlmICghKGNhcGFiaWxpdGllcyBcdTAwMjYgVElQQ19OQU1FRF9CQ0FTVCkpXG4gXHRcdG50LVx1MDAzZXJjX2Rlc3RzKys7XG4tXHRzZXFubyA9IG50LVx1MDAzZXNuZF9ueHQ7XG4rXG4rXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFx1MDAyNmhlYWQpO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbitcdGlmICghcmMgXHUwMDI2XHUwMDI2ICFza2JfcXVldWVfZW1wdHkoXHUwMDI2aGVhZCkpIHtcbitcdFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbitcdFx0LyogVGhlIGxpbmsgaXMgY29uZ2VzdGVkIGFmdGVyIHRoZSBsaXN0IGlzIGluc2VydGVkIGludG8gdGhlXG4rXHRcdCAqIGxpbmsncyBzZW5kIHF1ZXVlLiBSZXR1cm4gMCwgYXMgdGhpcyBpcyBub3JtYWwuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmMgPT0gLUVMSU5LQ09ORylcbitcdFx0XHRyYyA9IDA7XG4rXHR9XG4gXG4tXHRyZWFkX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbi1cdG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSwgc2Vxbm8pO1xuLVx0dGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgMCk7XG4tXHRyZWFkX3VubG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuK1x0cmV0dXJuIHJjO1xuIH1cbiBcbiAvKipcbkBAIC0yOTksNyArMzk2LDcgQEAgc3RhdGljIGJvb2wgdGlwY191cGRhdGVfbmFtZXRibChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkaXN0cl9pdGVtICppLFxuIFx0c2subm9kZSA9IG5vZGU7XG4gXG4gXHRpZiAoZHR5cGUgPT0gUFVCTElDQVRJT04pIHtcbi1cdFx0cCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywga2V5KTtcbitcdFx0cCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywga2V5LCBOVUxMKTtcbiBcdFx0aWYgKHApIHtcbiBcdFx0XHR0aXBjX25vZGVfc3Vic2NyaWJlKG5ldCwgXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIG5vZGUpO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuQEAgLTQxNiw1ICs1MTMsNiBAQCB2b2lkIHRpcGNfbmFtZWRfcmVpbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUsIGJpbmRpbmdfbm9kZSlcbiBcdFx0cC1cdTAwM2Vzay5ub2RlID0gc2VsZjtcbiBcdG50LVx1MDAzZXJjX2Rlc3RzID0gMDtcbitcdHRuLVx1MDAzZW50X3N0b3AgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaFxuaW5kZXggYzY3N2Y2ZjA4MmRmYi4uMjA0MzA5NmFlOTY3ZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuaFxuKysrIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oXG5AQCAtNjksMTEgKzY5LDEyIEBAIHN0cnVjdCBkaXN0cl9pdGVtIHtcbiBcbiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsKTtcbiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7XG4tdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xuK2ludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xuIHZvaWQgdGlwY19uYW1lZF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpuYW1lZHEsXG4gXHRcdCAgICB1MTYgKnJjdl9ueHQsIGJvb2wgKm9wZW4pO1xuIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KTtcbiB2b2lkIHRpcGNfcHVibF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpuc3ViX2xpc3QsXG4gXHRcdCAgICAgIHUzMiBhZGRyLCB1MTYgY2FwYWJpbGl0aWVzKTtcbitpbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLmJlZWQ0MGEyMTM2OGEgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbisrKyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuQEAgLTMyOSw3ICszMjksNyBAQCBzdGF0aWMgc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnRpcGNfc2VydmljZV9jcmVhdGVfcmFuZ2Uoc3RydWN0IHRpcGNfc2VydmljZSAqc2MsXG4gXG4gc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfc2VydmljZSAqc2MsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbitcdFx0XHRcdCAgICAgc3RydWN0IHB1YmxpY2F0aW9uICpwLCBpbnQgKmVycilcbiB7XG4gXHRzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1YiwgKnRtcDtcbiBcdHN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzcjtcbkBAIC0zMzksMTAgKzMzOSwxMiBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0Ym9vbCByZXMgPSBmYWxzZTtcbiBcdHUzMiBrZXkgPSBwLVx1MDAzZWtleTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdHNyID0gdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzYywgcCk7XG4tXHRpZiAoIXNyKVxuLVx0XHRnb3RvICBleGl0O1xuK1x0aWYgKCFzcikge1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdCplcnIgPSAtRU5PQlVGUztcbitcdFx0Z290byBleGl0O1xuK1x0fVxuIFxuIFx0Zmlyc3QgPSBsaXN0X2VtcHR5KFx1MDAyNnNyLVx1MDAzZWFsbF9wdWJsKTtcbiBcbkBAIC0zNTMsNiArMzU1LDggQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRwcl9kZWJ1ZyhcIkZhaWxlZCB0byBiaW5kIGR1cGxpY2F0ZSAldSwldSwldS8ldToldS8ldVxcblwiLFxuIFx0XHRcdFx0IHAtXHUwMDNlc3IudHlwZSwgcC1cdTAwM2Vzci5sb3dlciwgcC1cdTAwM2Vzci51cHBlcixcbiBcdFx0XHRcdCBub2RlLCBwLVx1MDAzZXNrLnJlZiwga2V5KTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0KmVyciA9IC1FRVhJU1Q7XG4gXHRcdFx0Z290byBleGl0O1xuIFx0XHR9XG4gXHR9XG5AQCAtMzcxLDcgKzM3NSw2IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoIXJlcylcbiBcdFx0cHJfd2FybihcIkZhaWxlZCB0byBiaW5kIHRvICV1LCV1LCV1XFxuXCIsXG4gXHRcdFx0cC1cdTAwM2Vzci50eXBlLCBwLVx1MDAzZXNyLmxvd2VyLCBwLVx1MDAzZXNyLnVwcGVyKTtcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuIFx0cmV0dXJuIHJlcztcbiB9XG4gXG5AQCAtNDc4LDIwICs0ODEsMzMgQEAgc3RhdGljIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnRpcGNfc2VydmljZV9maW5kKHN0cnVjdCBuZXQgKm5ldCxcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbi1cdFx0XHRcdFx0ICAgICB1MzIga2V5KVxuK1x0XHRcdFx0XHQgICAgIHUzMiBrZXksIGludCAqZXJyKVxuIHtcbiBcdHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwO1xuIFxuIFx0cCA9IHRpcGNfcHVibF9jcmVhdGUodWEsIHNrLCBrZXkpO1xuLVx0aWYgKCFwKVxuK1x0aWYgKCFwKSB7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0KmVyciA9IC1FTk9CVUZTO1xuIFx0XHRyZXR1cm4gTlVMTDtcbitcdH1cbiBcbiBcdHNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCB1YSk7XG4gXHRpZiAoIXNjKVxuIFx0XHRzYyA9IHRpcGNfc2VydmljZV9jcmVhdGUobmV0LCB1YSk7XG4tXHRpZiAoc2MgXHUwMDI2XHUwMDI2IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwKSlcbi1cdFx0cmV0dXJuIHA7XG4rXG4rXHRpZiAoc2MpIHtcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0XHRpZiAodGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHAsIGVycikpIHtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbitcdFx0XHRyZXR1cm4gcDtcbitcdFx0fVxuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbitcdH0gZWxzZSBpZiAoZXJyKSB7XG4rXHRcdCplcnIgPSAtRU5PQlVGUztcbitcdH1cbitcbiBcdGtmcmVlKHApO1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTc2MCwyNiArNzc2LDU1IEBAIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCxcbiAvKiB0aXBjX25hbWV0YmxfcHVibGlzaCAtIGFkZCBzZXJ2aWNlIGJpbmRpbmcgdG8gbmFtZSB0YWJsZVxuICAqL1xuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4rXHRcdFx0XHRcdCB1MzIga2V5LCBpbnQgKmVycilcbiB7XG4gXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbitcdHUzMiBtYXhfdXNlcl9wdWIgPSBUSVBDX01BWF9QVUJMIC0gMTtcbiBcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuK1x0Ym9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7XG4rXHRpbnQgZXJyb3IgPSAwO1xuIFx0dTMyIHJjX2Rlc3RzO1xuIFxuK1x0aWYgKHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFIHx8IHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8XG4rXHQgICAgdWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpXG4rXHRcdHByb3RvY29sX3R5cGUgPSB0cnVlO1xuK1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4rXHRpZiAocHJvdG9jb2xfdHlwZSlcbitcdFx0Z290byBpbnNlcnQ7XG4gXG4tXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IFRJUENfTUFYX1BVQkwpIHtcbi1cdFx0cHJfd2FybihcIkJpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcblwiLCBUSVBDX01BWF9QVUJMKTtcbitcdC8qIFJlc2VydmUgb25lIGVudHJ5IGZvciBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZSBiZWNhdXNlIGl0IGhhcyBjbHVzdGVyXG4rXHQgKiBzY29wZSBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgaW4gYnVsay4gU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VyJ3NcbitcdCAqIHB1YmxpY2F0aW9ucyBpcyAoVElQQ19NQVhfUFVCTCAtIDEpLlxuK1x0ICovXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IG1heF91c2VyX3B1Yikge1xuK1x0XHRwcl93YXJuKFwiQmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxuXCIsIG1heF91c2VyX3B1Yik7XG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcbi1cdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4raW5zZXJ0OlxuK1x0cCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIHVhLCBzaywga2V5LCBcdTAwMjZlcnJvcik7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XG4rXHRcdC8qIE5vdCBjb3VudCBub2RlIHN0YXRlLCBsaW5rIHN0YXRlIGFuZCB0b3BvbG9neSBzZXJ2ZXIgdHlwZXNcbitcdFx0ICogc28gdGhhdCBtYXhpbXVtIG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQgZG9lcyBub3QgcHJldmVudFxuK1x0XHQgKiBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIGZyb20gYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZVxuK1x0XHQgKiB0YWJsZS5cbitcdFx0ICovXG4rXHRcdGlmICghcHJvdG9jb2xfdHlwZSlcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XG4gXHRcdHNrYiA9IHRpcGNfbmFtZWRfcHVibGlzaChuZXQsIHApO1xuK1x0XHQvKiBMb2NhbC1zY29wZSBwdWJsaWNhdGlvbiBpcyBub3QgcHVibGlzaGVkIChza2IgaXMgTlVMTCksIG9ubHlcbitcdFx0ICogY2x1c3Rlci1jb3BlIG9uZSBpcy5cbitcdFx0ICovXG4rXHRcdGlmICghc2tiIFx1MDAyNlx1MDAyNiBwLVx1MDAzZXNjb3BlID09IFRJUENfQ0xVU1RFUl9TQ09QRSBcdTAwMjZcdTAwMjYgZXJyKVxuK1x0XHRcdCplcnIgPSAtRU5PQlVGUztcbitcdH0gZWxzZSBpZiAoKGVycm9yID09IC1FTk9CVUZTKSBcdTAwMjZcdTAwMjYgZXJyKSB7XG4rXHRcdCplcnIgPSAtRU5PQlVGUztcbiBcdH1cbitcbiBcdHJjX2Rlc3RzID0gbnQtXHUwMDNlcmNfZGVzdHM7XG4gZXhpdDpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG5AQCAtNzg3LDcgKzgzMiwxMDIgQEAgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdGlmIChza2IpXG4gXHRcdHRpcGNfbm9kZV9icm9hZGNhc3QobmV0LCBza2IsIHJjX2Rlc3RzKTtcbiBcdHJldHVybiBwO1xuK31cbitcbisvKipcbisgKiB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiAtIGluc2VydCBwdWJsaWNhdGlvbiBvZiBub2RlJ3Mgc2VsZiBhZGRyZXNzXG4rICogQG5ldDogbmV0d29yayBuYW1lc3BhY2VcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4rICovXG4raW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbitcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuK1x0c3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2s7XG4rXHRzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3I7XG4rXHRzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYztcbitcdGJvb2wgc2NfY3JlYXRlZCA9IGZhbHNlO1xuK1x0c3RydWN0IHB1YmxpY2F0aW9uICpwO1xuK1x0c3RydWN0IHRpcGNfdWFkZHIgdWE7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdHNrLnJlZiA9IDA7XG4rXHRzay5ub2RlID0gdG4tXHUwMDNlbm9kZV9hZGRyO1xuK1x0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG4rXHRcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXHUwMDNlbm9kZV9hZGRyLCB0bi1cdTAwM2Vub2RlX2FkZHIpO1xuK1x0c2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsIFx1MDAyNnVhKTtcbitcdGlmICghc2MpIHtcbitcdFx0c2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgXHUwMDI2dWEpO1xuK1x0XHRpZiAoIXNjKVxuK1x0XHRcdHJldHVybiAtRU5PQlVGUztcbitcdFx0c2NfY3JlYXRlZCA9IHRydWU7XG4rXHR9XG4gXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4rXHQvKiBDaGVjayB3aGV0aGVyIGEgcmFuZ2UgZXhpc3RzIGluIHRoZSBuYW1lIHRhYmxlIHdpdGhcbitcdCAqIGxvd2VyID09IHRuLVx1MDAzZW5vZGVfYWRkciwgdXBwZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyLCBhbmQgdHlwZVxuK1x0ICogVElQQ19OT0RFX1NUQVRFICgwKS4gSWYgJ3NyJyBpcyBub3QgTlVMTCwgdGhpcyByYW5nZSBleGlzdHNcbitcdCAqIGR1ZSB0byBhIHByZXZpb3VzIGNhbGwgdG8gdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoKVxuK1x0ICogb3IgdGlwY19uZXRfZmluYWxpemUoKS5cbitcdCAqXG4rXHQgKiBOb3RlIHRoYXQgdXNlciBhcHBsaWNhdGlvbnMgY2FuIG9ubHkgaW5zZXJ0IHR5cGVzIGdyZWF0ZXIgdGhhblxuK1x0ICogb3IgZXF1YWwgdG8gNjQgKFRJUENfUkVTRVJWRURfVFlQRVMpLCBhcyBlbmZvcmNlZCBieSB0aXBjX2JpbmQoKS5cbitcdCAqIFJlbW90ZSBub2RlcyBhbHNvIG9ubHkgc2VuZCBwcm90b2NvbCBwdWJsaWNhdGlvbnMgd2l0aCB0eXBlXG4rXHQgKiBUSVBDX05PREVfU1RBVEUgKDApLCB3aXRoIGJvdGggbG93ZXIgYW5kIHVwcGVyIHNldCB0byB0aGUgcmVtb3RlXG4rXHQgKiBub2RlJ3MgYWRkcmVzcy4gVGhlc2UgcmFuZ2VzIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGlzIG5vZGUnc1xuK1x0ICogcmFuZ2UgYmVjYXVzZSBhIHJlbW90ZSBub2RlJ3MgYWRkcmVzcyBtdXN0IGRpZmZlciBmcm9tIHRoaXNcbitcdCAqIG5vZGUncyBhZGRyZXNzICh0bi1cdTAwM2Vub2RlX2FkZHIpLlxuK1x0ICpcbitcdCAqIFRoZXJlZm9yZSwgdGlwY191cGRhdGVfbmFtZXRibCgpIGNhbm5vdCBidWlsZCBhbmQgaW5zZXJ0IGEgcmVtb3RlXG4rXHQgKiBwdWJsaWNhdGlvbiB3aXRoIHRoZSBzYW1lIHR5cGUgKDApIGFuZCByYW5nZVxuK1x0ICogKGxvd2VyID09IHRuLVx1MDAzZW5vZGVfYWRkciwgdXBwZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyKSBhcyB0aGlzIG5vZGUnc1xuK1x0ICogc2VsZi1hZGRyZXNzIHB1YmxpY2F0aW9uIGluIHRoZSBuYW1lIHRhYmxlLlxuK1x0ICpcbitcdCAqIEJlY2F1c2UgdGhlIGNvbWJpbmF0aW9uIG9mIHR5cGUgMCBhbmRcbitcdCAqIChsb3dlciA9PSB0bi1cdTAwM2Vub2RlX2FkZHIsIHVwcGVyID09IHRuLVx1MDAzZW5vZGVfYWRkcikgaXMgdW5pcXVlIGluIHRoZVxuK1x0ICogbmFtZSB0YWJsZSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjaGVjayBzay5ub2RlLCBzay5yZWYsIGtleSwgb3JcbitcdCAqIGNsdXN0ZXJfc2NvcGUgbWVtYmVyc2hpcC5cbitcdCAqL1xuK1x0c3IgPSB0aXBjX3NlcnZpY2VfZmluZF9yYW5nZShzYywgXHUwMDI2dWEpO1xuK1x0LyogMS4gdGlwY19uZXRfZmluYWxpemVfd29yaygpIGlzIG5vdCBzY2hlZHVsZWQgYmVjYXVzZSBvZiBuYW1lc3BhY2VcbitcdCAqICAgIHRlYXJkb3duLlxuK1x0ICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS1cdTAwM2UgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBoYXMgZmFpbGVkXG4rXHQgKiAgICB0byBpbnNlcnQgbm9kZSBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaW50byBudC1cdTAwM2VjbHVzdGVyX3Njb3BlXG4rXHQgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbitcdCAqIDMuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXHUwMDNlIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdFxuK1x0ICogICAgZXhlY3V0ZWQgeWV0LlxuK1x0ICovXG4rXHRpZiAoIXNyKSB7XG4rXHRcdHAgPSB0aXBjX3B1YmxfY3JlYXRlKFx1MDAyNnVhLCBcdTAwMjZzaywgdG4tXHUwMDNlbm9kZV9hZGRyKTtcbitcdFx0aWYgKCFwKVxuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRcdGlmICghdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHAsIFx1MDAyNmVycikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoZXJyID09IC1FTk9CVUZTKSkge1xuK1x0XHRcdGtmcmVlKHApO1xuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXHRcdH1cbitcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfbm9kZSwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSk7XG4rXHRcdGdvdG8gZXhpdDtcbitlcnJvcjpcbitcdFx0aWYgKHNjX2NyZWF0ZWQpIHtcbitcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2c2MtXHUwMDNlc2VydmljZV9saXN0KTtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbitcdFx0XHRrZnJlZV9yY3Uoc2MsIHJjdSk7XG4rXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuK1x0XHR9XG4rXG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVOT0JVRlM7XG4rXHR9XG4rZXhpdDpcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuQEAgLTgxMCw3ICs5NTAsMTAgQEAgdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXG4gXHRwID0gdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpO1xuIFx0aWYgKHApIHtcbi1cdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudC0tO1xuK1x0XHRpZiAocC1cdTAwM2Vzci50eXBlICE9IFRJUENfTk9ERV9TVEFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX0xJTktfU1RBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19UT1BfU1JWKVxuK1x0XHRcdG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQtLTtcbiBcdFx0c2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlYmluZGluZ19zb2NrKTtcbiBcdFx0a2ZyZWVfcmN1KHAsIHJjdSk7XG5AQCAtODk5LDcgKzEwNDIsNiBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bnQtXHUwMDNlbm9kZV9zY29wZSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlKTtcbi1cdHJ3bG9ja19pbml0KFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHR0bi1cdTAwM2VuYW1ldGJsID0gbnQ7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFx0cmV0dXJuIDA7XG5AQCAtOTEyLDYgKzEwNTQsNyBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuICAqL1xuIHN0YXRpYyB2b2lkIHRpcGNfc2VydmljZV9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYylcbiB7XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzciwgKnRtcHI7XG4gXHRzdHJ1Y3QgcHVibGljYXRpb24gKnAsICp0bXA7XG4gXG5AQCAtOTE5LDYgKzEwNjIsMTUgQEAgc3RhdGljIHZvaWQgdGlwY19zZXJ2aWNlX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjKVxuIFx0cmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFjaF9lbnRyeV9zYWZlKHNyLCB0bXByLCBcdTAwMjZzYy1cdTAwM2VyYW5nZXMsIHRyZWVfbm9kZSkge1xuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdG1wLCBcdTAwMjZzci1cdTAwM2VhbGxfcHVibCwgYWxsX3B1YmwpIHtcbiBcdFx0XHR0aXBjX3NlcnZpY2VfcmVtb3ZlX3B1Ymwoc3IsIFx1MDAyNnAtXHUwMDNlc2ssIHAtXHUwMDNla2V5KTtcbitcdFx0XHQvKiB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoKSBkb2VzIG5vdCBkZWxldGVcbitcdFx0XHQgKiAncC1cdTAwM2ViaW5kaW5nX25vZGUnIHdpdGggdHlwZSBUSVBDX05PREVfU1RBVEUgYW5kXG4rXHRcdFx0ICogcmFuZ2UgW3RuLVx1MDAzZW5vZGVfYWRkciwgdG4tXHUwMDNlbm9kZV9hZGRyXSBmcm9tXG4rXHRcdFx0ICogJ3RuLVx1MDAzZWNsdXN0ZXJfc2NvcGUnLiBTbywgZGVsZXRlIGl0IGhlcmUuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHAtXHUwMDNlc3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHAtXHUwMDNlc3IubG93ZXIgPT0gdG4tXHUwMDNlbm9kZV9hZGRyIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBwLVx1MDAzZXNyLnVwcGVyID09IHRuLVx1MDAzZW5vZGVfYWRkcilcbitcdFx0XHRcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbiBcdFx0XHRrZnJlZV9yY3UocCwgcmN1KTtcbiBcdFx0fVxuIFx0XHRyYl9lcmFzZV9hdWdtZW50ZWQoXHUwMDI2c3ItXHUwMDNldHJlZV9ub2RlLCBcdTAwMjZzYy1cdTAwM2VyYW5nZXMsIFx1MDAyNnNyX2NhbGxiYWNrcyk7XG5AQCAtOTQ5LDYgKzExMDEsOCBAQCB2b2lkIHRpcGNfbmFtZXRibF9zdG9wKHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0XHR0aXBjX3NlcnZpY2VfZGVsZXRlKG5ldCwgc2VydmljZSk7XG4gXHRcdH1cbiBcdH1cbitcdHRuLVx1MDAzZW50X3N0b3AgPSB0cnVlO1xuK1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFxuIFx0LyogVE9ETzogY2xlYXIgdG4tXHUwMDNlbmFtZXRibCwgaW1wbGVtZW50IHByb3BlciBSQ1UgcnVsZXMgPyAqL1xuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuaCBiL25ldC90aXBjL25hbWVfdGFibGUuaFxuaW5kZXggN2ZmNmVlZWJhYWU2NC4uNDM5MGU3OWE0NjYwZSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuaFxuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oXG5AQCAtOTcsOCArOTcsNyBAQCBzdHJ1Y3QgcHVibGljYXRpb24ge1xuICAqIEBjbHVzdGVyX3Njb3BlOiBhbGwgbG9jYWwgcHVibGljYXRpb25zIHdpdGggY2x1c3RlciBzY29wZVxuICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgdG8gc2VuZCBidWxrIHVwZGF0ZXMgdG8gbmV3IG5vZGVzXG4gICogICAgICAgICAgICAgICAtIHVzZWQgYnkgbmFtZV9kaXN0ciBkdXJpbmcgcmUtaW5pdCBvZiBuYW1lIHRhYmxlXG4tICogQGNsdXN0ZXJfc2NvcGVfbG9jazogbG9jayBmb3IgYWNjZXNzaW5nIEBjbHVzdGVyX3Njb3BlXG4tICogQGxvY2FsX3B1YmxfY291bnQ6IG51bWJlciBvZiBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZVxuKyAqIEBsb2NhbF9wdWJsX2NvdW50OiB0aGUgbnVtYmVyIG9mIHVzZXIncyBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZVxuICAqIEByY19kZXN0czogZGVzdGluYXRpb24gbm9kZSBjb3VudGVyXG4gICogQHNuZF9ueHQ6IG5leHQgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHVzZWRcbiAgKi9cbkBAIC0xMDcsNyArMTA2LDYgQEAgc3RydWN0IG5hbWVfdGFibGUge1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgc2VydmljZXNbVElQQ19OQU1FVEJMX1NJWkVdO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBub2RlX3Njb3BlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBjbHVzdGVyX3Njb3BlO1xuLVx0cndsb2NrX3QgY2x1c3Rlcl9zY29wZV9sb2NrO1xuIFx0dTMyIGxvY2FsX3B1YmxfY291bnQ7XG4gXHR1MzIgcmNfZGVzdHM7XG4gXHR1MzIgc25kX254dDtcbkBAIC0xMjYsMTMgKzEyNCwxNSBAQCBib29sIHRpcGNfbmFtZXRibF9sb29rdXBfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxuIFx0XHRcdCAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7XG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbi1cdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XG4rXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4rXHRcdFx0XHRcdCB1MzIga2V5LCBpbnQgKmVycik7XG4gdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRcdFx0ICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbi1cdFx0XHRcdFx0ICAgICB1MzIga2V5KTtcbitcdFx0XHRcdFx0ICAgICB1MzIga2V5LCBpbnQgKmVycik7XG4raW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldCk7XG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcmVtb3ZlX3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmV0LmMgYi9uZXQvdGlwYy9uZXQuY1xuaW5kZXggN2U2NWQwYjBjNGE4ZC4uN2EyYzFlNjdhY2EzZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25ldC5jXG4rKysgYi9uZXQvdGlwYy9uZXQuY1xuQEAgLTExMCwxMSArMTEwLDE0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpO1xuIFxuIGludCB0aXBjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdTggKm5vZGVfaWQsIHUzMiBhZGRyKVxuIHtcbitcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuK1xuIFx0aWYgKHRpcGNfb3duX2lkKG5ldCkpIHtcbiBcdFx0cHJfaW5mbyhcIkNhbm5vdCBjb25maWd1cmUgbm9kZSBpZGVudGl0eSB0d2ljZVxcblwiKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFx0cHJfaW5mbyhcIlN0YXJ0ZWQgaW4gbmV0d29yayBtb2RlXFxuXCIpO1xuK1x0YXRvbWljX3NldChcdTAwMjZ0bi1cdTAwM2Vub2RlX2FkZHJfc2V0LCAwKTtcbiBcbiBcdGlmIChub2RlX2lkKVxuIFx0XHR0aXBjX3NldF9ub2RlX2lkKG5ldCwgbm9kZV9pZCk7XG5AQCAtMTI1LDggKzEyOCw4IEBAIGludCB0aXBjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdTggKm5vZGVfaWQsIHUzMiBhZGRyKVxuIFxuIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4ge1xuLVx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4gXHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzayA9IHswLCBhZGRyfTtcbitcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHRpcGNfdWFkZHIgdWE7XG4gXG4gXHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcbkBAIC0xMzgsNyArMTQxLDExIEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4gXHR0aXBjX25hbWVkX3JlaW5pdChuZXQpO1xuIFx0dGlwY19za19yZWluaXQobmV0KTtcbiBcdHRpcGNfbW9uX3JlaW5pdF9zZWxmKG5ldCk7XG4tXHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgYWRkcik7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQsIDEpO1xuK1x0LyogUmVkaXN0cmlidXRlIGJ1bGsgb2YgcHVibGljYXRpb25zIHZpYSBub2RlLXVwIGV2ZW50IG9yIG5vZGUncyB0aW1lclxuK1x0ICogaWYgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBmYWlscy5cbitcdCAqL1xuK1x0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIGFkZHIsIE5VTEwpO1xuIH1cbiBcbiB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25vZGUuYyBiL25ldC90aXBjL25vZGUuY1xuaW5kZXggNjgzYTEzNmU1M2VmYy4uZjFlZWU2NzRhNjc4ZSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25vZGUuY1xuKysrIGIvbmV0L3RpcGMvbm9kZS5jXG5AQCAtMTExLDYgKzExMSw3IEBAIHN0cnVjdCB0aXBjX2JjbGlua19lbnRyeSB7XG4gICogQHBlZXJfbmV0OiBwZWVyJ3MgbmV0IG5hbWVzcGFjZVxuICAqIEBwZWVyX2hhc2hfbWl4OiBoYXNoIGZvciB0aGlzIHBlZXIgKEZJWE1FKVxuICAqIEBjcnlwdG9fcng6IFJYIGNyeXB0byBoYW5kbGVyXG4rICogQGRpc3RfYnVsazogZmxhZyB0byByZWRpc3RyaWJ1dGUgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnNcbiAgKi9cbiBzdHJ1Y3QgdGlwY19ub2RlIHtcbiBcdHUzMiBhZGRyO1xuQEAgLTE0NSw2ICsxNDYsNyBAQCBzdHJ1Y3QgdGlwY19ub2RlIHtcbiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPXG4gXHRzdHJ1Y3QgdGlwY19jcnlwdG8gKmNyeXB0b19yeDtcbiAjZW5kaWZcbitcdGF0b21pY190IGRpc3RfYnVsaztcbiB9O1xuIFxuIC8qIE5vZGUgRlNNIHN0YXRlcyBhbmQgZXZlbnRzOlxuQEAgLTM0NSw2ICszNDcsMTcgQEAgc3RhdGljIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4gXHRyZXR1cm4gbm9kZTtcbiB9XG4gXG4rdm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuK3tcbitcdHN0cnVjdCB0aXBjX25vZGUgKm5vZGU7XG4rXG4rXHRub2RlID0gdGlwY19ub2RlX2ZpbmQobmV0LCBhZGRyKTtcbitcdGlmIChub2RlKSB7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2bm9kZS1cdTAwM2VkaXN0X2J1bGssIDEpO1xuK1x0XHR0aXBjX25vZGVfcHV0KG5vZGUpO1xuK1x0fVxuK31cbitcbiAvKiB0aXBjX25vZGVfZmluZF9ieV9pZCAtIGxvY2F0ZSBzcGVjaWZpZWQgbm9kZSBvYmplY3QgYnkgaXRzIDEyOC1iaXQgaWRcbiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gYSBkaXNjb3ZlcnkgcmVxdWVzdCBmYWlsZWRcbiAgKiB0byBmaW5kIHRoZSBub2RlIGJ5IGl0cyAzMi1iaXQgaWQsIGFuZCBpcyBub3QgdGltZSBjcml0aWNhbFxuQEAgLTM5Myw2ICs0MDYsMTQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9ja19mYXN0KHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bi1cdTAwM2Vsb2NrKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGlwY19ub2RlX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbilcbit7XG4rXHRpbnQgYmVhcmVyX2lkO1xuK1xuK1x0Zm9yIChiZWFyZXJfaWQgPSAwOyBiZWFyZXJfaWQgXHUwMDNjIE1BWF9CRUFSRVJTOyBiZWFyZXJfaWQrKylcbitcdFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxuIFx0X19yZWxlYXNlcyhuLVx1MDAzZWxvY2spXG4ge1xuQEAgLTQwMiw2ICs0MjMsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICpwdWJsX2xpc3Q7XG4gXHRzdHJ1Y3QgdGlwY191YWRkciB1YTtcbiBcdHUzMiBiZWFyZXJfaWQsIG5vZGU7XG4rXHRpbnQgcmMgPSAwLCBlcnIgPSAwO1xuIFxuIFx0aWYgKGxpa2VseSghZmxhZ3MpKSB7XG4gXHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZuLVx1MDAzZWxvY2spO1xuQEAgLTQyNSwxNiArNDQ3LDI0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdFx0dGlwY19wdWJsX25vdGlmeShuZXQsIHB1YmxfbGlzdCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9OT0RFX1VQKVxuLVx0XHR0aXBjX25hbWVkX25vZGVfdXAobmV0LCBub2RlLCBuLVx1MDAzZWNhcGFiaWxpdGllcyk7XG4rXHRcdHJjID0gdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9MSU5LX1VQKSB7XG4gXHRcdHRpcGNfbW9uX3BlZXJfdXAobmV0LCBub2RlLCBiZWFyZXJfaWQpO1xuLVx0XHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmKTtcbitcdFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIHNrLnJlZiwgXHUwMDI2ZXJyKTtcbiBcdH1cbiBcdGlmIChmbGFncyBcdTAwMjYgVElQQ19OT1RJRllfTElOS19ET1dOKSB7XG4gXHRcdHRpcGNfbW9uX3BlZXJfZG93bihuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XG4gXHRcdHRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmKTtcbiBcdH1cbitcbitcdC8qIE1lbW9yeSBhbGxvY2F0aW9uIGhhcyBmYWlsZWQuIEJyaW5nIHRoZSBub2RlIGRvd24gdG8gc3RhcnQgb3ZlciBidWxrXG4rXHQgKiBkaXN0cmlidXRpb24gd2hlbiB0aGUgZmlyc3QgbGluayBpcyB1cCBhZ2Fpbi5cbitcdCAqL1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHR0aXBjX25vZGVfZG93bihuKTtcbitcdGVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUylcbitcdFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGlwY19ub2RlX2Fzc2lnbl9wZWVyX25ldChzdHJ1Y3QgdGlwY19ub2RlICpuLCB1MzIgaGFzaF9taXhlcylcbkBAIC01NjQsNiArNTk0LDcgQEAgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyLCB1OCAqcGVlcl9pZCxcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZXB1YmxfbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZWNvbm5fc2tzKTtcbitcdGF0b21pY19zZXQoXHUwMDI2bi1cdTAwM2VkaXN0X2J1bGssIDApO1xuIFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZuLVx1MDAzZWJjX2VudHJ5Lm5hbWVkcSk7XG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm4tXHUwMDNlYmNfZW50cnkuaW5wdXRxMSk7XG4gXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bi1cdTAwM2ViY19lbnRyeS5hcnJ2cSk7XG5AQCAtODAzLDcgKzgzNCw4IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0c3RydWN0IHRpcGNfbm9kZSAqbiA9IHRpbWVyX2NvbnRhaW5lcl9vZihuLCB0LCB0aW1lcik7XG4gXHRzdHJ1Y3QgdGlwY19saW5rX2VudHJ5ICpsZTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgeG1pdHE7XG4tXHRpbnQgcmVtYWlucyA9IG4tXHUwMDNlbGlua19jbnQ7XG4rXHRpbnQgcmVtYWlucyA9IDA7XG4rXHRpbnQgZGlzdF9yYyA9IDA7XG4gXHRpbnQgYmVhcmVyX2lkO1xuIFx0aW50IHJjID0gMDtcbiBcbkBAIC04MTQsNiArODQ2LDkgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbitcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZuLVx1MDAzZWRpc3RfYnVsaywgMCkpXG4rXHRcdGRpc3RfcmMgPSB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUobi1cdTAwM2VuZXQsIG4tXHUwMDNlYWRkcik7XG4rXG4gI2lmZGVmIENPTkZJR19USVBDX0NSWVBUT1xuIFx0LyogVGFrZSBhbnkgY3J5cHRvIGtleSByZWxhdGVkIGFjdGlvbnMgZmlyc3QgKi9cbiBcdHRpcGNfY3J5cHRvX3RpbWVvdXQobi1cdTAwM2VjcnlwdG9fcngpO1xuQEAgLTgyNSw2ICs4NjAsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdCAqL1xuIFx0dGlwY19ub2RlX3JlYWRfbG9jayhuKTtcbiBcdG4tXHUwMDNla2VlcGFsaXZlX2ludHYgPSAxMDAwMDtcbitcdHJlbWFpbnMgPSBuLVx1MDAzZWxpbmtfY250O1xuIFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xuIFx0Zm9yIChiZWFyZXJfaWQgPSAwOyByZW1haW5zIFx1MDAyNlx1MDAyNiAoYmVhcmVyX2lkIFx1MDAzYyBNQVhfQkVBUkVSUyk7IGJlYXJlcl9pZCsrKSB7XG4gXHRcdHRpcGNfbm9kZV9yZWFkX2xvY2sobik7XG5AQCAtODM1LDExICs4NzEsMTMgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdFx0dGlwY19ub2RlX2NhbGN1bGF0ZV90aW1lcihuLCBsZS1cdTAwM2VsaW5rKTtcbiBcdFx0XHRyYyA9IHRpcGNfbGlua190aW1lb3V0KGxlLVx1MDAzZWxpbmssIFx1MDAyNnhtaXRxKTtcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsZS1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRyZW1haW5zLS07XG4rXHRcdFx0aWYgKGRpc3RfcmMgXHUwMDNjIDApXG4rXHRcdFx0XHRyZW1haW5zLS07XG4gXHRcdH1cbiBcdFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xuIFx0XHR0aXBjX2JlYXJlcl94bWl0KG4tXHUwMDNlbmV0LCBiZWFyZXJfaWQsIFx1MDAyNnhtaXRxLCBcdTAwMjZsZS1cdTAwM2VtYWRkciwgbik7XG4tXHRcdGlmIChyYyBcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKVxuK1x0XHQvKiBGb3JjZSB0aGUgbm9kZSBkb3duIGluIGNhc2UgdGhlIHJlZGlzdHJpYnV0aW9uIGZhaWxlZCAqL1xuK1x0XHRpZiAoKHJjIFx1MDAyNiBUSVBDX0xJTktfRE9XTl9FVlQpIHx8IGRpc3RfcmMgXHUwMDNjIDApXG4gXHRcdFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcbiBcdH1cbiBcdG1vZF90aW1lcihcdTAwMjZuLVx1MDAzZXRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhuLVx1MDAzZWtlZXBhbGl2ZV9pbnR2KSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5oIGIvbmV0L3RpcGMvbm9kZS5oXG5pbmRleCAxNTRhNWJiYjBkMjlkLi4wZjc3N2NmZTdjMDFlIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbm9kZS5oXG4rKysgYi9uZXQvdGlwYy9ub2RlLmhcbkBAIC0xMjgsNCArMTI4LDUgQEAgaW50IHRpcGNfbmxfbm9kZV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGludCB0aXBjX25sX25vZGVfZmx1c2hfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuICNlbmRpZlxuIHZvaWQgdGlwY19ub2RlX3ByZV9jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpleGl0X25ldCk7XG4rdm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jXG5pbmRleCBkNWQ3MGViMjMwYjU2Li42YjgzYmRmYzQzOWMzIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvc29ja2V0LmNcbisrKyBiL25ldC90aXBjL3NvY2tldC5jXG5AQCAtMjkxOSw3ICsyOTE5LDcgQEAgc3RhdGljIGludCB0aXBjX3NrX3B1Ymxpc2goc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY191YWRkciAqdWEpXG4gXHRcdHJldHVybiAtRUFERFJJTlVTRTtcbiBcdHNrYWRkci5yZWYgPSB0c2stXHUwMDNlcG9ydGlkO1xuIFx0c2thZGRyLm5vZGUgPSB0aXBjX293bl9hZGRyKG5ldCk7XG4tXHRwID0gdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCB1YSwgXHUwMDI2c2thZGRyLCBrZXkpO1xuK1x0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFx1MDAyNnNrYWRkciwga2V5LCBOVUxMKTtcbiBcdGlmICh1bmxpa2VseSghcCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDU6MjEuMzIzNzEzNTIzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1MzMzNDI2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUSVBDIE5hbWUgVGFibGUgRGlzdHJpYnV0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIFRJUEMgc3Vic3lzdGVtIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIG5hbWUgdGFibGUgcHVibGljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBtZWNoYW5pc21zLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZm9jdXNlZCBvbiB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcyBhbmQgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCByaXNrcy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3QgaXMgYXJvdW5kIGltcHJvdmluZyBlcnJvciBoYW5kbGluZywgcGFydGljdWxhcmx5IHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMgZHVyaW5nIHRoZSBkaXN0cmlidXRpb24gcHJvY2VzcyDigJMgZ29vZCwgdGhhdCdzIGRlZmluaXRlbHkgYSBwb2ludCB0byBhZGRyZXNzLCByYXRoZXIgdGhhbiBzaWxlbnRseSBmYWlsaW5nIG9yIGNyYXNoaW5nLiBUaGV5J3JlIGV4cGxpY2l0bHkgYWRkaW5nIGhhbmRsaW5nIGZvciBgLUVOT0JVRlNgIHdoaWNoIGlzIHRoZSByaWdodCB3YXkgdG8gZG8gaXQuXG5cbkZyb20gdGhlIGRlc2NyaXB0aW9uLCB0aGV54oCZcmUgdG91Y2hpbmcgcXVpdGUgYSBmZXcgZnVuY3Rpb25zOiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmxgLCBldGMuIFRoaXMgbWVhbnMgaXQncyBwcmV0dHkgaW52b2x2ZWQuIEFuZCwgaXQgbG9va3MgbGlrZSB0aGV5J3JlIGFsc28gaW50cm9kdWNpbmcgbmV3IGZsYWdzIHdpdGhpbiBgc3RydWN0IHRpcGNfbmV0YCAoYG50X3N0b3BgLCBgbnRfc2VsZl9ub2RlX2V4aXN0YCwgYG5vZGVfYWRkcl9zZXRgKSBhbmQgYWRkaW5nIGEgbmV3IGBkaXN0X2J1bGtgIGZpZWxkIHRvIGBzdHJ1Y3QgdGlwY19ub2RlYC4gVGhhdCdzIGltcG9ydGFudCB0byBub3RlLCBzdGF0ZSB0cmFja2luZyBhbmQgbmV3IGNvbnRyb2wgZmxvdyBjYW4gbGVhZCB0byB1bmludGVuZGVkIHNpZGUgZWZmZWN0cy5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgbWVtb3J5IHNhZmV0eS4gQXJlIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhlIGRlc2NyaXB0aW9uIHN1Z2dlc3RzIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgY29udHJvbCBmbG93IGFuZCBlcnJvciBoYW5kbGluZy4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlICpkaXJlY3RseSogYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIHdoaWNoIGlzIGEgYmlnIHJlbGllZi4gTm8gY29tcGxleCBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgd2hlcmUgdW5pdGl0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNvcmUgaWRlYSBzZWVtcyB0byBiZSBncmFjZWZ1bGx5IGhhbmRsaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGluIHRoZSBUSVBDIG5hbWUgZGlzdHJpYnV0aW9uIHByb2Nlc3MuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCB0aGluZy5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gYSBzcGVjaWZpYyBjb2RlIHNuaXBwZXQsIHNwZWNpZmljYWxseSBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgOlxuXG5gYGBjXG4raW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldClcbit7XG4uLi5cbitcdHNrLnJlZiA9IDA7XG4rXHRzay5ub2RlID0gdG4tXHUwMDNlbm9kZV9hZGRyO1xuK1x0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG4rXHRcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXHUwMDNlbm9kZV9hZGRyLCB0bi1cdTAwM2Vub2RlX2FkZHIpO1xuLi4uXG5gYGBcblxuUmlnaHQsIGBza2AgaGVyZSBpcyBhIGBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkcmAsIGFuZCBpdCAqYXBwZWFycyogdG8gYmUgZnVsbHkgaW5pdGlhbGl6ZWQ6IGBzay5yZWZgIGlzIHNldCB0byBgMGAsIGFuZCBgc2subm9kZWAgaXMgcG9wdWxhdGVkIGZyb20gYHRuLVx1MDAzZW5vZGVfYWRkcmAuIFRoYXTigJlzIGdvb2QuIGB1YWAgaXMgYSBgc3RydWN0IHRpcGNfdWFkZHJgLiBOb3csIGB0aXBjX3VhZGRyYCBpcyBiZWluZyBjYWxsZWQsIHdoaWNoIGluaXRpYWxpemVzIGl0LiBJdCdzIGEgZnVuY3Rpb24gb3IgYSBtYWNyby4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdGlwY191YWRkcmAsIGluIGBuZXQvdGlwYy9jb3JlLmhgIG9yIHNvbWV3aGVyZSBzaW1pbGFyIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGF0IGl0IGluaXRpYWxpemVzIGFsbCB0aGUgZmllbGRzIG9mIHRoZSBzdHJ1Y3QgdG8gdGhlIGNvcnJlY3QgdmFsdWVzLiBJdCdzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGF0IHRoaXMgcG9pbnQuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjczOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA1OjMwLjg1NzA1ODZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjM3MTQ3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY191YWRkclxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2FkZHIuaD01MD1zdHJ1Y3QgdGlwY191YWRkciB7XFxuLS1cXG5uZXQvdGlwYy9hZGRyLmgtNjMtXFxubmV0L3RpcGMvYWRkci5oOjY0OnN0YXRpYyBpbmxpbmUgdm9pZCB0aXBjX3VhZGRyKHN0cnVjdCB0aXBjX3VhZGRyICp1YSwgdTMyIGF0eXBlLCB1MzIgc2NvcGUsXFxubmV0L3RpcGMvYWRkci5oLTY1LVxcdFxcdFxcdCAgICAgIHUzMiB0eXBlLCB1MzIgbG93ZXIsIHUzMiB1cHBlcilcXG4tLVxcbm5ldC90aXBjL21zZy5jPTcxMz1ib29sIHRpcGNfbXNnX2xvb2t1cF9kZXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICplcnIpXFxuLS1cXG5uZXQvdGlwYy9tc2cuYy03MzMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm5ldC90aXBjL21zZy5jOjczNDpcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBzY29wZSxcXG5uZXQvdGlwYy9tc2cuYy03MzUtXFx0XFx0ICAgbXNnX25hbWV0eXBlKG1zZyksIGluc3QsIGluc3QpO1xcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jPTMzMj1zdGF0aWMgdm9pZCB0aXBjX3B1YmxfcHVyZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIHUzMiBhZGRyKVxcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTMzNy1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MzM4OlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIHAtXFx1MDAzZXNjb3BlLCBwLVxcdTAwM2Vzci50eXBlLFxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zMzktXFx0XFx0ICAgcC1cXHUwMDNlc3IubG93ZXIsIHAtXFx1MDAzZXNyLnVwcGVyKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYz0zNzY9c3RhdGljIGJvb2wgdGlwY191cGRhdGVfbmFtZXRibChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkaXN0cl9pdGVtICppLFxcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTM5Mi1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MzkzOlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMzk0LVxcdFxcdCAgIG50b2hsKGktXFx1MDAzZXR5cGUpLCBsb3dlciwgdXBwZXIpO1xcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTg0Nj1pbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg1OS1cXHRzay5ub2RlID0gdG4tXFx1MDAzZW5vZGVfYWRkcjtcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6ODYwOlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODYxLVxcdFxcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXFx1MDAzZW5vZGVfYWRkciwgdG4tXFx1MDAzZW5vZGVfYWRkcik7XFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM9OTcyPWJvb2wgdGlwY19uYW1ldGJsX3N1YnNjcmliZShzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1YilcXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuYy05NzktXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jOjk4MDpcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX05PREVfU0NPUEUsIHR5cGUsXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTk4MS1cXHRcXHQgICBzdWItXFx1MDAzZXMuc2VxLmxvd2VyLCBzdWItXFx1MDAzZXMuc2VxLnVwcGVyKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuYz0xMDAzPXZvaWQgdGlwY19uYW1ldGJsX3Vuc3Vic2NyaWJlKHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViKVxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTEwMDgtXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jOjEwMDk6XFx0dGlwY191YWRkcihcXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19OT0RFX1NDT1BFLFxcbm5ldC90aXBjL25hbWVfdGFibGUuYy0xMDEwLVxcdFxcdCAgIHN1Yi1cXHUwMDNlcy5zZXEudHlwZSwgc3ViLVxcdTAwM2VzLnNlcS5sb3dlciwgc3ViLVxcdTAwM2VzLnNlcS51cHBlcik7XFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM9MTIwNj1zdGF0aWMgaW50IHRpcGNfbmxfc2VydmljZV9saXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2csXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtMTIyNS1cXHRcXHQgICAgKCFpIFxcdTAwMjZcXHUwMDI2ICpsYXN0X2tleSBcXHUwMDI2XFx1MDAyNiAoKmxhc3RfbG93ZXIgPT0gKmxhc3Rfa2V5KSkpIHtcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6MTIyNjpcXHRcXHRcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX05PREVfU0NPUEUsXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTEyMjctXFx0XFx0XFx0XFx0ICAgKmxhc3RfdHlwZSwgKmxhc3RfbG93ZXIsICpsYXN0X2xvd2VyKTtcXG4tLVxcbm5ldC90aXBjL25ldC5jPTEyOT1zdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxcbi0tXFxubmV0L3RpcGMvbmV0LmMtMTM0LVxcbm5ldC90aXBjL25ldC5jOjEzNTpcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXFxubmV0L3RpcGMvbmV0LmMtMTM2LVxcdFxcdCAgIFRJUENfTk9ERV9TVEFURSwgYWRkciwgYWRkcik7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9NDE3PXN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcXG4tLVxcbm5ldC90aXBjL25vZGUuYy00MzItXFxubmV0L3RpcGMvbm9kZS5jOjQzMzpcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX05PREVfU0NPUEUsXFxubmV0L3RpcGMvbm9kZS5jLTQzNC1cXHRcXHQgICBUSVBDX0xJTktfU1RBVEUsIG4tXFx1MDAzZWFkZHIsIG4tXFx1MDAzZWFkZHIpO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjkzMj1zdGF0aWMgaW50IHRpcGNfc2tfd2l0aGRyYXcoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY191YWRkciAqdWEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTQwLVxcdFxcdGlmICghdWEpIHtcXG5uZXQvdGlwYy9zb2NrZXQuYzoyOTQxOlxcdFxcdFxcdHRpcGNfdWFkZHIoXFx1MDAyNl91YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBwLVxcdTAwM2VzY29wZSxcXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTQyLVxcdFxcdFxcdFxcdCAgIHAtXFx1MDAzZXNyLnR5cGUsIHAtXFx1MDAzZXNyLmxvd2VyLCBwLVxcdTAwM2Vzci51cHBlcik7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMDcyPXN0YXRpYyBpbnQgdGlwY19za19qb2luKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfZ3JvdXBfcmVxICptcmVxKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzA5NC1cXHRtc2dfc2V0X2Rlc3RfZHJvcHBhYmxlKGhkciwgdHJ1ZSk7XFxubmV0L3RpcGMvc29ja2V0LmM6MzA5NTpcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBtcmVxLVxcdTAwM2VzY29wZSxcXG5uZXQvdGlwYy9zb2NrZXQuYy0zMDk2LVxcdFxcdCAgIG1yZXEtXFx1MDAzZXR5cGUsIG1yZXEtXFx1MDAzZWluc3RhbmNlLCBtcmVxLVxcdTAwM2VpbnN0YW5jZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjA1OjMyLjk4MDc3ODQwOFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTkxMDY2OTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgdGlwY191YWRkcmAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgdGlwY191YWRkcmAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBpcyBzdHJ1Y3R1cmVkIGFuZCBlbnN1cmUgaXQncyBiZWhhdmluZyBhcyBleHBlY3RlZC4gSSdsbCBsaWtlbHkgc3RhcnQgYnkgdHJhY2luZyBpdHMgdXNlIGNhc2VzIHdpdGhpbiB0aGUgVElQQyBmcmFtZXdvcmsgdG8gc2VlIHdoZXJlIGl0IGNvbWVzIGludG8gcGxheS4gS2V5IGFyZWFzIHdpbGwgYmUgYWRkcmVzcyBsb29rdXBzLCByb3V0aW5nIGRlY2lzaW9ucywgYW5kIHRoZSBvdmVyYWxsIG1hbmFnZW1lbnQgb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIEknbGwgcHJvYmFibHkgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQsIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWNjZXNzZWQgY29uY3VycmVudGx5LiBJJ20gYWxzbyBnb2luZyB0byBzZWUgaWYgYW55IG9mIHRoZSByZWNlbnQgY29kZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgdGhvc2UgdGhhdCB0b3VjaGVkIHRoZSBuZXR3b3JrIG9yIHNvY2tldCBsYXllciwgbWlnaHQgaGF2ZSBpbnRyb2R1Y2VkIGFueSByZWdyZXNzaW9ucyByZWxhdGVkIHRvIGB0aXBjX3VhZGRyYC4gRmluYWxseSwgSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGFmZmVjdHMgdGhlIG92ZXJhbGwgc2VjdXJpdHkgcG9zdHVyZSAtIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGFkZHJlc3Mgc3Bvb2Zpbmcgb3IgbWFuaXB1bGF0aW9uIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQ/IFRpbWUgdG8gZ2V0IHRoZSBkZWJ1Z2dlciBmaXJlZCB1cCBhbmQgdGhlIGNvZGUgb3BlbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MzQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzowNjoyNC44OTE0NTI3MzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjYwMTgyMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSB2b2lkIHRpcGNfdWFkZHJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYWRkci5oPTUwPXN0cnVjdCB0aXBjX3VhZGRyIHtcXG4tLVxcbm5ldC90aXBjL2FkZHIuaC02My1cXG5uZXQvdGlwYy9hZGRyLmg6NjQ6c3RhdGljIGlubGluZSB2b2lkIHRpcGNfdWFkZHIoc3RydWN0IHRpcGNfdWFkZHIgKnVhLCB1MzIgYXR5cGUsIHUzMiBzY29wZSxcXG5uZXQvdGlwYy9hZGRyLmgtNjUtXFx0XFx0XFx0ICAgICAgdTMyIHR5cGUsIHUzMiBsb3dlciwgdTMyIHVwcGVyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzowNjoyNi40NTc0NzY2MTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxNjUzMDIxMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBmcm9tIGBuZXQvdGlwYy9hZGRyLmhgOlxuXG4qKkFuYWx5emluZyBgbmV0L3RpcGMvYWRkci5oYCAoTGluZXMgNTAtNzUpKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGxpbmVzIDUwLTc1IG9mIGBuZXQvdGlwYy9hZGRyLmhgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGFkZHJlc3Mgc3RydWN0dXJlIGFuZCBhc3NvY2lhdGVkIG1hY3JvcyBwcm9iYWJseSBsaWUg4oCTIGl04oCZcyB0aGUgaGVhcnQgb2YgaG93IFRJUEMgYWRkcmVzc2VzIGFyZSBkZWZpbmVkLCBhbmQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBzcGVjaWZpY3MuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgYW55IGJpdGZpZWxkIG1hbmlwdWxhdGlvbnMgdGhhdCBkZWZpbmUgdGhlIGFkZHJlc3MgZmllbGRzIHRoZW1zZWx2ZXMsIGFuZCBpZiB0aGVyZSBhcmUgY2xldmVyIGJpdC10d2lkZGxpbmcgbWFjcm9zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBzaXplIG9mIGVhY2ggY29tcG9uZW50OiBub2RlLCBjbHVzdGVyLCBhbmQgc2VydmljZS4gSeKAmW0gaG9waW5nIHRvIHNlZSBjbGVhciBkZWxpbmVhdGlvbnMgYmV0d2VlbiB0aGUgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBhZGRyZXNzIOKAkyBpdCBtYWtlcyBkZWJ1Z2dpbmcgZmFyIGVhc2llci4gSeKAmW0gYWxzbyBsb29raW5nIGZvciBhbnkgaGludCBvZiBob3cgdGhlIGFkZHJlc3MgZmFtaWx5IGlzIGhhbmRsZWQ7IHRoaXMgbWlnaHQgYmUgYSBjZW50cmFsIHBvaW50IG9mIHRoZSBjb2RlLiBBbnkgYml0IGZpZWxkcyBvciBwYWNrZWQgc3RydWN0cyBhcmUgd29ydGggbG9va2luZyBhdCBjbG9zZWx5LCBhcyB0aGV5IGNvdWxkIGJlIHBvaW50cyBvZiBvcHRpbWl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTE1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MDg6MDguMTEwNTAxOTg4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2FkZHIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRzdHJ1Y3QgdGlwY191YWRkciB7XFxuICA1MTpcXHRcXHR1bnNpZ25lZCBzaG9ydCBmYW1pbHk7XFxuICA1MjpcXHRcXHR1bnNpZ25lZCBjaGFyIGFkZHJ0eXBlO1xcbiAgNTM6XFx0XFx0c2lnbmVkIGNoYXIgc2NvcGU7XFxuICA1NDpcXHRcXHR1bmlvbiB7XFxuICA1NTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAgNTY6XFx0XFx0XFx0XFx0c3RydWN0IHRpcGNfc2VydmljZV9hZGRyIHNhO1xcbiAgNTc6XFx0XFx0XFx0XFx0dTMyIGxvb2t1cF9ub2RlO1xcbiAgNTg6XFx0XFx0XFx0fTtcXG4gIDU5OlxcdFxcdFxcdHN0cnVjdCB0aXBjX3NlcnZpY2VfcmFuZ2Ugc3I7XFxuICA2MDpcXHRcXHRcXHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzaztcXG4gIDYxOlxcdFxcdH07XFxuICA2MjpcXHR9O1xcbiAgNjM6XFx0XFxuICA2NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdGlwY191YWRkcihzdHJ1Y3QgdGlwY191YWRkciAqdWEsIHUzMiBhdHlwZSwgdTMyIHNjb3BlLFxcbiAgNjU6XFx0XFx0XFx0XFx0ICAgICAgdTMyIHR5cGUsIHUzMiBsb3dlciwgdTMyIHVwcGVyKVxcbiAgNjY6XFx0e1xcbiAgNjc6XFx0XFx0dWEtXFx1MDAzZWZhbWlseSA9IEFGX1RJUEM7XFxuICA2ODpcXHRcXHR1YS1cXHUwMDNlYWRkcnR5cGUgPSBhdHlwZTtcXG4gIDY5OlxcdFxcdHVhLVxcdTAwM2VzY29wZSA9IHNjb3BlO1xcbiAgNzA6XFx0XFx0dWEtXFx1MDAzZXNyLnR5cGUgPSB0eXBlO1xcbiAgNzE6XFx0XFx0dWEtXFx1MDAzZXNyLmxvd2VyID0gbG93ZXI7XFxuICA3MjpcXHRcXHR1YS1cXHUwMDNlc3IudXBwZXIgPSB1cHBlcjtcXG4gIDczOlxcdH1cXG4gIDc0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzowODowOC4xMTA1OTc3MDhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg2OTI0NzE3Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHRpcGNfdWFkZHJgIFN0cnVjdHVyZSBhbmQgaXRzIFVzYWdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgYHRpcGNfdWFkZHJgIGlzIHVzZWQsIHNwZWNpZmljYWxseSBob3cgaXQgaW5pdGlhbGl6ZXMgdmFyaW91cyBmaWVsZHMgYW5kIGhvdyB0aGF0IGRhdGEgaXMgdXNlZC4gSSBzZWUgdGhhdCBgdGlwY191YWRkcmAgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIGBmYW1pbHlgLCBgYWRkcnR5cGVgLCBgc2NvcGVgLCBhbmQgY3J1Y2lhbGx5LCB0aGUgYHNyLnR5cGVgLCBgc3IubG93ZXJgLCBhbmQgYHNyLnVwcGVyYCBmaWVsZHMsIHdoaWNoIHBlcnRhaW4gdG8gYSBgc3RydWN0IHRpcGNfc2VydmljZV9yYW5nZWAuXG5cbk5vdywgZGlnZ2luZyBpbnRvIHRoZSBgc3RydWN0IHRpcGNfdWFkZHJgIGRlZmluaXRpb24sIGl0IHVzZXMgYSB1bmlvbiB3aXRoIGB0aXBjX3NlcnZpY2VfcmFuZ2Ugc3JgLCBhbW9uZyBvdGhlciB0eXBlcy4gSXQgbG9va3MgbGlrZSBpdCBjb3VsZCByZXByZXNlbnQgYSBzZXJ2aWNlIGFkZHJlc3MsIGEgcmFuZ2Ugb2Ygc2VydmljZSBhZGRyZXNzZXMsIG9yIGEgc29ja2V0IGFkZHJlc3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgbGF5b3V0IGhlcmUgYmVjYXVzZSBvZiB0aGUgdW5pb24uXG5cbkxldCdzIHNlZS4uLiBgc3RydWN0IHRpcGNfdWFkZHJgIHN0YXJ0cyB3aXRoIHRoZSBoZWFkZXIgZmllbGRzOiBgZmFtaWx5YCAoMiBieXRlcyksIGBhZGRydHlwZWAgKDEgYnl0ZSksIGFuZCBgc2NvcGVgICgxIGJ5dGUpLiAgVGhlbiwgdGhlcmUncyB0aGUgdW5pb24gd2hpY2ggaG9sZHMgZWl0aGVyIHRoZSBgdGlwY19zZXJ2aWNlX3JhbmdlIHNyYCAoMTIgYnl0ZXMpLCBgdGlwY19zZXJ2aWNlX2FkZHIgc2FgIGFuZCBgbG9va3VwX25vZGVgIChhbHNvIDEyIGJ5dGVzKSwgb3IgYHRpcGNfc29ja2V0X2FkZHIgc2tgICg4IGJ5dGVzKS5cblxuR2l2ZW4gdGhhdCBsYXlvdXQsIGFuZCB0aGUgc2l6ZSBvZiBlYWNoIG1lbWJlciBvZiB0aGUgdW5pb24sIHRoZSB0b3RhbCBzaXplIG9mIGB0aXBjX3VhZGRyYCBpcyAyICsgMSArIDEgKyAxMiA9IDE2IGJ5dGVzLiBUaGVyZSdzIG5vIHBhZGRpbmcgYmV0d2VlbiB0aGUgaGVhZGVyIGZpZWxkcyBhbmQgdGhlIHVuaW9uLiBUaGF0J3MgZ29vZC5cblxuTm93LCBhIGZ1bmN0aW9uIGNhbGxlZCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgIGFsbG9jYXRlcyBhIGBzdHJ1Y3QgcHVibGljYXRpb24gKnBgIHVzaW5nIGB0aXBjX3B1YmxfY3JlYXRlKFx1MDAyNnVhLCBcdTAwMjZzaywgdG4tXHUwMDNlbm9kZV9hZGRyKTtgLiAgVGhpcyBzdWdnZXN0cyB0aGF0IGB0aXBjX3VhZGRyYCBpcyB1c2VkIGluIHRoZSBjcmVhdGlvbiBvZiBhIHB1YmxpY2F0aW9uLiBJIG5lZWQgdG8gY2hlY2sgaG93IGB0aXBjX3B1YmxfY3JlYXRlYCBhY3R1YWxseSB1dGlsaXplcyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIGB0aXBjX3VhZGRyYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBleGFtaW5lIGhvdyB0aGUgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIGB0aXBjX3B1YmxfY3JlYXRlYCBhbmQgaG93IHRoZSBtZW1iZXJzIG9mIHRoZSBzdHJ1Y3QgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgcHVibGlzaGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUyMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjExOjE1LjAzNTMxNzQwNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2OTg3MzMxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3B1YmxfY3JlYXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL25hbWVfdGFibGUuYz0yMTg9c3RhdGljIGludCBoYXNoKGludCB4KVxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTIyMy0vKipcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6MjI0OiAqIHRpcGNfcHVibF9jcmVhdGUgLSBjcmVhdGUgYSBwdWJsaWNhdGlvbiBzdHJ1Y3R1cmVcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtMjI1LSAqIEB1YTogdGhlIHNlcnZpY2UgcmFuZ2UgdGhlIHVzZXIgaXMgYmluZGluZyB0b1xcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTIyOC0gKi9cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6MjI5OnN0YXRpYyBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfcHVibF9jcmVhdGUoc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbm5ldC90aXBjL25hbWVfdGFibGUuYy0yMzAtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuYz00ODE9c3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTQ4OC1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6NDg5OlxcdHAgPSB0aXBjX3B1YmxfY3JlYXRlKHVhLCBzaywga2V5KTtcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtNDkwLVxcdGlmICghcCkge1xcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTg0Nj1pbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTkwNC1cXHRpZiAoIXNyKSB7XFxubmV0L3RpcGMvbmFtZV90YWJsZS5jOjkwNTpcXHRcXHRwID0gdGlwY19wdWJsX2NyZWF0ZShcXHUwMDI2dWEsIFxcdTAwMjZzaywgdG4tXFx1MDAzZW5vZGVfYWRkcik7XFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTkwNi1cXHRcXHRpZiAoIXApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjExOjE3LjEwNTE5ODk0N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTI4MTkwODY1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gYHRpcGNfcHVibF9jcmVhdGVgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGB0aXBjX3B1YmxfY3JlYXRlYC4gS25vd2luZyB0aGlzIGNvZGViYXNlLCBhbmQgY29uc2lkZXJpbmcgdGhlIG5hbWUsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGZvciBjcmVhdGluZyBhIG5ldyBUSVBDIHB1YmxpY2F0aW9uIGVuZHBvaW50LCBsaWtlbHkgZm9yIGEgbmFtZSBvciBzZXJ2aWNlIHJlZ2lzdHJhdGlvbiwgcmlnaHQ/IEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMg4oCTIHRoZSBwdWJsaWNhdGlvbiB0YWJsZSwgdGhlIHBvdGVudGlhbCBmb3IgaGFzaCBjb2xsaXNpb25zIGlmIHRoZXkncmUgdXNpbmcgYSBoYXNoLWJhc2VkIGxvb2t1cCwgYW5kIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGNvbmN1cnJlbmN5IHNhZmV0eS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgaGFuZGxlcyBlcnJvciBjYXNlcyBzdWNoIGFzIGluc3VmZmljaWVudCByZXNvdXJjZXMgKG1lbW9yeSksIGludmFsaWQgYXJndW1lbnRzLCBvciBuYW1lIGNvbmZsaWN0cyBhcHByb3ByaWF0ZWx5LiBBbmQgZG9lcyBpdCBoYW5kbGUgdGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgc2FtZSBzZXJ2aWNlIG11bHRpcGxlIHRpbWVzPyBJZiBzbywgaXMgdGhlcmUgYSBtZWNoYW5pc20gdG8gaGFuZGxlIHRoYXQ/IEkgd2FudCB0byBzZWUgaG93IHRoZXkncmUgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGUgZW5kcG9pbnQ7IGlzIHRoZXJlIGFzc29jaWF0ZWQgY2xlYW51cCBvbiBkZXN0cnVjdGlvbiBvciB1bi1yZWdpc3RyYXRpb24/IEFyZSB0aGV5IGltcGxlbWVudGluZyBhbnkga2luZCBvZiB0aW1lb3V0IG9yIGxlYXNlIG1lY2hhbmlzbT8gQWxzbywgSSBuZWVkIHRvIHNlZSBob3cgdGhlIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHVibGljYXRpb24gKGxpa2UgYXR0cmlidXRlcywgc2VydmljZSB0eXBlcywgZXRjLikgYXJlIGhhbmRsZWQuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBzdWJ0bGUgYnVncyBoaWRlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgYWRkcmVzcyBiaW5kaW5nIGlzIGhhbmRsZWQuIERvZXMgaXQgYXV0b21hdGljYWxseSBwaWNrIGEgcG9ydCwgb3IgaXMgaXQgdXNlci1jb25maWd1cmFibGU/IEFuZCBpZiBjb25maWd1cmFibGUsIGhvdyBhcmUgY29sbGlzaW9ucyBhdm9pZGVkIHdoZW4gdGhlIHVzZXIgY2hvb3NlcyBhIHBvcnQ/IEFuZCBhcmUgdGhleSBwcm9wZXJseSBoYW5kbGluZyB0aGUgaW50ZXJhY3Rpb24gd2l0aCBhbnkgdW5kZXJseWluZyBuZXR3b3JraW5nIGxheWVyIC0gZXNwZWNpYWxseSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgdG8gcHVibGlzaGluZyB0aGUgc2VydmljZS9uYW1lIGFjcm9zcyBtdWx0aXBsZSBub2Rlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MzAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxMzo0OS45MjQyODg0ODdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3RpcGMvbmFtZV90YWJsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyOSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyOTpcXHRzdGF0aWMgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX3B1YmxfY3JlYXRlKHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcXG4gMjMwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXFxuIDIzMTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgdTMyIGtleSlcXG4gMjMyOlxcdHtcXG4gMjMzOlxcdFxcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcCA9IGt6YWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG4gMjM0OlxcdFxcbiAyMzU6XFx0XFx0aWYgKCFwKVxcbiAyMzY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDIzNzpcXHRcXG4gMjM4OlxcdFxcdHAtXFx1MDAzZXNyID0gdWEtXFx1MDAzZXNyO1xcbiAyMzk6XFx0XFx0cC1cXHUwMDNlc2sgPSAqc2s7XFxuIDI0MDpcXHRcXHRwLVxcdTAwM2VzY29wZSA9IHVhLVxcdTAwM2VzY29wZTtcXG4gMjQxOlxcdFxcdHAtXFx1MDAzZWtleSA9IGtleTtcXG4gMjQyOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwLVxcdTAwM2ViaW5kaW5nX3NvY2spO1xcbiAyNDM6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnAtXFx1MDAzZWJpbmRpbmdfbm9kZSk7XFxuIDI0NDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cC1cXHUwMDNlbG9jYWxfcHVibCk7XFxuIDI0NTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cC1cXHUwMDNlYWxsX3B1YmwpO1xcbiAyNDY6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnAtXFx1MDAzZWxpc3QpO1xcbiAyNDc6XFx0XFx0cmV0dXJuIHA7XFxuIDI0ODpcXHR9XFxuIDI0OTpcXHRcXG4gMjUwOlxcdC8qKlxcbiAyNTE6XFx0ICogdGlwY19zZXJ2aWNlX2NyZWF0ZSAtIGNyZWF0ZSBhIHNlcnZpY2Ugc3RydWN0dXJlIGZvciB0aGUgc3BlY2lmaWVkICd0eXBlJ1xcbiAyNTI6XFx0ICogQG5ldDogbmV0d29yayBuYW1lc3BhY2VcXG4gMjUzOlxcdCAqIEB1YTogYWRkcmVzcyByZXByZXNlbnRpbmcgdGhlIHNlcnZpY2UgdG8gYmUgYm91bmRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MTM6NDkuOTI0MzgzNzk3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5ODk5NzYyMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFRJUEMgTmFtZSBEaXN0cmlidXRpb24gUGF0Y2g6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2sqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvbmUgdGhyb3VnaCB0aGlzIHBhdGNoLCBsaW5lIGJ5IGxpbmUsIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiB0aGUgcG90ZW50aWFsIGZvciBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gTXkgY29uY2x1c2lvbjogdGhpcyBwYXRjaCBpcyBzb2xlbHkgYWJvdXQgKmhhbmRsaW5nKiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBkdXJpbmcgdGhlIFRJUEMgbmFtZSBkaXN0cmlidXRpb24gcHJvY2VzcywgKm5vdCogYWJvdXQgaW50cm9kdWNpbmcgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBhZGRpbmcgYW5kIHByb3BhZ2F0aW5nIGAtRU5PQlVGU2AgKG91dC1vZi1tZW1vcnkpIGVycm9ycyB0aHJvdWdob3V0IHRoZSBuYW1lIGRpc3RyaWJ1dGlvbiBjb2RlLiAgSXQgZW5zdXJlcyB0aGF0IHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMsIHRoZSBmYWlsdXJlIGlzIGNvcnJlY3RseSByZXBvcnRlZCBhbmQgaGFuZGxlZCwgbGVhZGluZyB0byBub2RlL2xpbmsgZG93biBhY3Rpb25zIGZvciByZXRyaWVzLiAgSSd2ZSBjaGVja2VkIGV2ZXJ5IHNwb3Qgd2hlcmUgbmV3IHZhcmlhYmxlcyBvciBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkLiBFYWNoIG5ldyB2YXJpYWJsZSwgc3VjaCBhcyBgc2tgLCBgdWFgLCBvciBgZXJyYCBhcmUgKmFsd2F5cyogZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdGhleSdyZSB1c2VkLiAgVGhlIGBza19idWZmX2hlYWRgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB1c2luZyBgX19za2JfcXVldWVfaGVhZF9pbml0KClgLiBUaGUgIGB0aXBjX3VhZGRyYCBzdHJ1Y3QgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJ5IGEgaGVscGVyIGZ1bmN0aW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyByZWFkIG9yIHdyaXR0ZW4uICBObyBkYXRhIGlzIGJlaW5nIHBhc3NlZCB0byB1c2VyIHNwYWNlLlxuXG5JJ3ZlIGNhcmVmdWxseSBleGFtaW5lZCB0aGUgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGB0aXBjX25hbWVkX25vZGVfdXBgIGFuZCBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucy4gVGhlIGNvZGUgYWRkcyBjaGVja3MgYW5kIGVycm9yIHJldHVybnMsIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgb3IgbG9naWMgdGhhdCB3b3VsZCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiAgVGhpcyBwYXRjaCAqaW1wcm92ZXMqIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBlcnJvciBoYW5kbGluZywgcmF0aGVyIHRoYW4gd2Vha2VuaW5nIGl0LiBJbiBvdGhlciB3b3JkcywgdGhlIHBhdGNoJ3MgcHVycG9zZSBpcyB0byAqcHJldmVudCogbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZnJvbSBiZWluZyBzaWxlbnRseSBpZ25vcmVkIG9yIGNhdXNpbmcgcG90ZW50aWFsbHkgaW5jb3JyZWN0IGJlaGF2aW91cjsgaXQncyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyByaXNrcy5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzLCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4gYW5kIGxvY2tkZXAgd2lsbCBiZSBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgYnVncyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQgZHVyaW5nIHRoaXMgd29yay4gU3BlY2lmaWNhbGx5LCB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBpc24ndCBwcmVzZW50LCBhbmQgdGh1cyBhIEtNU0FOIHNlc3Npb24gaXNuJ3QgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTkxLCJPdXRwdXRUb2tlbnMiOjI0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxNDo1OS44MjQxNDg5N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc3Vic3lzdGVtIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAocmV0dXJuaW5nIGAtRU5PQlVGU2ApIGR1cmluZyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbi4gSXQgYWRkcyBlcnJvciBoYW5kbGluZyB0byBmdW5jdGlvbnMgbGlrZSBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGFuZCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBhbmQgaW50cm9kdWNlcyBmbGFncyB0byB0cmFjayB0aGUgc3RhdGUgb2YgdGhlIG5hbWUgdGFibGUgYW5kIG5vZGUgYWRkcmVzcy4gQWxsIG5ld2x5IGludHJvZHVjZWQgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2tgLCBgc3RydWN0IHRpcGNfdWFkZHIgdWFgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoZS5nLiwgdmlhIGV4cGxpY2l0IGFzc2lnbm1lbnQgb3IgdGhlIGB0aXBjX3VhZGRyKClgIGhlbHBlcikuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBjb250cm9sIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgd2hpY2ggZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc3Vic3lzdGVtIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAocmV0dXJuaW5nIGAtRU5PQlVGU2ApIGR1cmluZyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbi4gSXQgYWRkcyBlcnJvciBoYW5kbGluZyB0byBmdW5jdGlvbnMgbGlrZSBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGFuZCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBhbmQgaW50cm9kdWNlcyBmbGFncyB0byB0cmFjayB0aGUgc3RhdGUgb2YgdGhlIG5hbWUgdGFibGUgYW5kIG5vZGUgYWRkcmVzcy4gQWxsIG5ld2x5IGludHJvZHVjZWQgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIChlLmcuLCBgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2tgLCBgc3RydWN0IHRpcGNfdWFkZHIgdWFgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoZS5nLiwgdmlhIGV4cGxpY2l0IGFzc2lnbm1lbnQgb3IgdGhlIGB0aXBjX3VhZGRyKClgIGhlbHBlcikuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBjb250cm9sIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgd2hpY2ggZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowvhvv9[1] Phase: Succeeded StartedAt: 2026-08-17 07:15:11 +0000 UTC FinishedAt: 2026-08-17 07:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 07:15:11 +0000 UTC FinishedAt: 2026-08-17 07:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2] Phase: Succeeded StartedAt: 2026-08-17 07:15:11 +0000 UTC FinishedAt: 2026-08-17 10:59:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 07:15:11 +0000 UTC FinishedAt: 2026-08-17 10:59:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 07:15:11 +0000 UTC FinishedAt: 2026-08-17 07:15:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 07:15:11 +0000 UTC FinishedAt: 2026-08-17 07:15:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvhvv9/series-workflowvhvv9-convert-artifact-2247936048/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 07:15:21 +0000 UTC FinishedAt: 2026-08-17 07:35:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 07:15:21 +0000 UTC FinishedAt: 2026-08-17 07:35:35 +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:*3db131c7-bdf1-43c0-a9b5-76714ae7dbd0,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-workflowvhvv9/series-workflowvhvv9-convert-artifact-2247936048/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": "89e3aee2-9ab3-47d3-9889-d7f9c0e69671", "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-workflowvhvv9/series-workflowvhvv9-build-action-377271606/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 07:15:21 +0000 UTC FinishedAt: 2026-08-17 07:35:25 +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:*3db131c7-bdf1-43c0-a9b5-76714ae7dbd0,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-workflowvhvv9/series-workflowvhvv9-convert-artifact-2247936048/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": "89e3aee2-9ab3-47d3-9889-d7f9c0e69671", "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-workflowvhvv9/series-workflowvhvv9-build-action-377271606/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 07:35:35 +0000 UTC FinishedAt: 2026-08-17 07:35:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 07:35:35 +0000 UTC FinishedAt: 2026-08-17 07:35:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 07:35:35 +0000 UTC FinishedAt: 2026-08-17 07:35:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 07:35:35 +0000 UTC FinishedAt: 2026-08-17 07:35:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvhvv9/series-workflowvhvv9-convert-artifact-1905700631/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 07:35:45 +0000 UTC FinishedAt: 2026-08-17 07:37:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 07:35:45 +0000 UTC FinishedAt: 2026-08-17 07:37:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*89e3aee2-9ab3-47d3-9889-d7f9c0e69671,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-workflowvhvv9/series-workflowvhvv9-build-action-377271606/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-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 07:37:46 +0000 UTC FinishedAt: 2026-08-17 07:37:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 07:37:46 +0000 UTC FinishedAt: 2026-08-17 07:37:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 07:37:46 +0000 UTC FinishedAt: 2026-08-17 07:54:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 07:37:46 +0000 UTC FinishedAt: 2026-08-17 07:54:13 +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:*3db131c7-bdf1-43c0-a9b5-76714ae7dbd0,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-workflowvhvv9/series-workflowvhvv9-convert-artifact-1905700631/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": "4788bd4a-34da-4e0e-beb6-d0e1c397f586", "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-workflowvhvv9/series-workflowvhvv9-build-action-3246515547/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 07:37:46 +0000 UTC FinishedAt: 2026-08-17 07:54:03 +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:*3db131c7-bdf1-43c0-a9b5-76714ae7dbd0,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-workflowvhvv9/series-workflowvhvv9-convert-artifact-1905700631/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": "4788bd4a-34da-4e0e-beb6-d0e1c397f586", "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-workflowvhvv9/series-workflowvhvv9-build-action-3246515547/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 07:54:13 +0000 UTC FinishedAt: 2026-08-17 07:54:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 07:54:13 +0000 UTC FinishedAt: 2026-08-17 07:54:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 07:54:13 +0000 UTC FinishedAt: 2026-08-17 07:56:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 07:54:13 +0000 UTC FinishedAt: 2026-08-17 07:56:10 +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:*4788bd4a-34da-4e0e-beb6-d0e1c397f586,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-workflowvhvv9/series-workflowvhvv9-build-action-3246515547/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-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 07:56:20 +0000 UTC FinishedAt: 2026-08-17 10:59:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 07:56:20 +0000 UTC FinishedAt: 2026-08-17 10:59:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"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:*89e3aee2-9ab3-47d3-9889-d7f9c0e69671,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4788bd4a-34da-4e0e-beb6-d0e1c397f586,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-workflowvhvv9/series-workflowvhvv9-build-action-377271606/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-workflowvhvv9/series-workflowvhvv9-build-action-3246515547/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 07:56:20 +0000 UTC FinishedAt: 2026-08-17 07:56:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 07:56:20 +0000 UTC FinishedAt: 2026-08-17 07:56:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"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-workflowvhvv9/series-workflowvhvv9-convert-artifact-525450192/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 07:56:20 +0000 UTC FinishedAt: 2026-08-17 07:56:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 07:56:20 +0000 UTC FinishedAt: 2026-08-17 07:56:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 07:56:20 +0000 UTC FinishedAt: 2026-08-17 07:56:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 07:56:30 +0000 UTC FinishedAt: 2026-08-17 10:59:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvhvv9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_named_distribute","tipc_nametb_insert_self_node_pub","tipc_nametbl_publish","tipc_named_node_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"7a6c5ec0-753e-40d9-b029-ca585176f4f3","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 07:56:30 +0000 UTC FinishedAt: 2026-08-17 10:58:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*89e3aee2-9ab3-47d3-9889-d7f9c0e69671,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4788bd4a-34da-4e0e-beb6-d0e1c397f586,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-workflowvhvv9/series-workflowvhvv9-build-action-377271606/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-workflowvhvv9/series-workflowvhvv9-build-action-3246515547/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-workflowvhvv9/series-workflowvhvv9-convert-artifact-525450192/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,}