Name: series-workflow4db4m Phase: Running StartedAt: 2026-07-02 17:33:04 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4db4m[0] Phase: Succeeded StartedAt: 2026-07-02 17:33:04 +0000 UTC FinishedAt: 2026-07-02 17:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4db4m[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 17:33:04 +0000 UTC FinishedAt: 2026-07-02 17:58:55 +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": "d8e8b85a85fe21954d303db68034aac4639df88d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS", "AF_RXRPC", "RXKAD", "RXGK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d8e8b85a85fe21954d303db68034aac4639df88d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS", "AF_RXRPC", "RXKAD", "RXGK" ], "series_id": "4f7f8daa-a063-4165-89b2-c548f146aa15" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "afs_create_server_appdata", "afs_create_yfs_cm_token", "rxgk_respond_to_challenge", "rxrpc_sendmsg_cmsg", "put_user_key_payload" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtSWEtBRCYjMzQ7LAogICAgJiMzNDtSWEdLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YSYjMzQ7LAogICAgJiMzNDthZnNfY3JlYXRlX3lmc19jbV90b2tlbiYjMzQ7LAogICAgJiMzNDtyeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlJiMzNDssCiAgICAmIzM0O3J4cnBjX3NlbmRtc2dfY21zZyYjMzQ7LAogICAgJiMzNDtwdXRfdXNlcl9rZXlfcGF5bG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZTIGFuZCBSeFJQQyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBSeEdLIGFwcGxpY2F0aW9uIGRhdGEgaW50ZXJuYWxseSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHVzZXJzcGFjZSBPT0IgbWVzc2FnZXMuIEl0IGludHJvZHVjZXMgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIHRvIGdlbmVyYXRlIHRoZSBhcHAgZGF0YSBhbmQgcGFzc2VzIGl0IHRvIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNmIxZTJkOWUxMjM5OTRhYjJkN2FhODg4NGUzNmZlOGYzNDMwYzU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxNzo1Mzo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9hZnMvY21fc2VjdXJpdHkuYyBiL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXG5pbmRleCAxMDMxNjhjNzBkZDRkZi4uZGIyYTNiMzBmMDIwOTQgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvY21fc2VjdXJpdHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2NtX3NlY3VyaXR5LmNcbkBAIC02LDcgJiM0Mzs2LDkgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2V5LXR5cGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2NyeXB0by9rcmI1LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNja2V5cy91c2VyLXR5cGUuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDthZnNfY20uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2Fmc19mcy5oXCYjMzQ7XG5AQCAtMTksOTcgJiM0MzsyMSw2NiBAQFxuICNkZWZpbmUgeGRyX2xlbl9vYmplY3QoeCkgKDQgJiM0Mzsgcm91bmRfdXAoKHgpLCBzaXplb2YoX19iZTMyKSkpXG4gXG4gI2lmZGVmIENPTkZJR19SWEdLXG4tc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcik7XG4mIzQzO3N0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGtyYjVfZW5jdHlwZSk7XG4gI2VuZGlmXG4gXG4gLypcbi0gKiBSZXNwb25kIHRvIGFuIFJ4R0sgY2hhbGxlbmdlLCBhZGRpbmcgYXBwZGF0YS5cbiYjNDM7ICogQ3JlYXRlIHRoZSBhcHBsaWNhdGlvbiBkYXRhIHRvIGdvIGluIGEgUkVTUE9OU0UgcGFja2V0IGEgc2VydmVyJiMzOTtzIENIQUxMRU5HRVxuJiM0MzsgKiBmcm9tIHRoZSBwYXJhbWV0ZXJzIGNvbnRhaW5lZCBpbiBhIGtleS4gIFRoZSBrZXkgc3BlY2lmaWVzIHRoZSBzZWN1cml0eVxuJiM0MzsgKiBpbmRleCBhbmQgb3RoZXIgYXBwcm9wcmlhdGUgcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBlbmNvZGluZyB0eXBlIGZvciBSeEdLLlxuICAqL1xuLXN0YXRpYyBpbnQgYWZzX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4mIzQzO2ludCBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBrZXkgKmtleSlcbiB7XG4tI2lmZGVmIENPTkZJR19SWEdLXG4tXHRzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9O1xuLVx0c3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcjtcbi0jZW5kaWZcbi1cdHN0cnVjdCByeHJwY19wZWVyICpwZWVyO1xuLVx0dW5zaWduZWQgbG9uZyBwZWVyX2RhdGE7XG4tXHR1MTYgc2VydmljZV9pZDtcbiYjNDM7XHR1MzIga3JiNV9lbmN0eXBlO1xuJiM0MztcdGludCByZXQ7XG4gXHR1OCBzZWN1cml0eV9pbmRleDtcbiBcbi1cdHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UoY2hhbGxlbmdlLCBcdTAwMjZwZWVyLCBcdTAwMjZwZWVyX2RhdGEsXG4tXHRcdFx0XHQgICAgIFx1MDAyNnNlcnZpY2VfaWQsIFx1MDAyNnNlY3VyaXR5X2luZGV4KTtcbi1cbi1cdF9lbnRlcihcJiMzNDsldSwldVwmIzM0Oywgc2VydmljZV9pZCwgc2VjdXJpdHlfaW5kZXgpO1xuLVxuLVx0c3dpdGNoIChzZXJ2aWNlX2lkKSB7XG4tXHRcdC8qIFdlIGRvbiYjMzk7dCBzZW5kIENNX1NFUlZJQ0UgUlBDcywgc28gZG9uJiMzOTt0IGV4cGVjdCBhIGNoYWxsZW5nZVxuLVx0XHQgKiB0aGVyZWZyb20uXG4tXHRcdCAqL1xuLVx0Y2FzZSBGU19TRVJWSUNFOlxuLVx0Y2FzZSBWTF9TRVJWSUNFOlxuLVx0Y2FzZSBZRlNfRlNfU0VSVklDRTpcbi1cdGNhc2UgWUZTX1ZMX1NFUlZJQ0U6XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0cHJfd2FybihcJiMzNDtDYW4mIzM5O3QgcmVzcG9uZCB0byB1bmtub3duIGNoYWxsZW5nZSAldToldVwmIzM0Oyxcbi1cdFx0XHRzZXJ2aWNlX2lkLCBzZWN1cml0eV9pbmRleCk7XG4tXHRcdHJldHVybiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFJYX1VTRVJfQUJPUlQsIC1FUFJPVE8sXG4tXHRcdFx0XHRcdFx0ICAgICBhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzKTtcbi1cdH1cbiYjNDM7XHRpZiAoIWtleSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBSZWFkIEFQUERBVEEgZmxhZyBiZWZvcmUgY21fcnhna19hcHBkYXRhICovXG4mIzQzO1x0aWYgKHRlc3RfYml0X2FjcXVpcmUoQUZTX1NFUlZFUl9GTF9BUFBEQVRBLCBcdTAwMjZzZXJ2ZXItXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoa2V5LCBcdTAwMjZzZWN1cml0eV9pbmRleCwgXHUwMDI2a3JiNV9lbmN0eXBlKTtcbiYjNDM7XG4mIzQzO1x0X2VudGVyKFwmIzM0OyV1LCV1XCYjMzQ7LCBzZWN1cml0eV9pbmRleCwga3JiNV9lbmN0eXBlKTtcbiBcbi1cdHN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHtcbiYjNDM7XHRyZXQgPSAwO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2c2VydmVyLVx1MDAzZWNtX3Rva2VuX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBSZWFkIEFQUERBVEEgZmxhZyBiZWZvcmUgY21fcnhna19hcHBkYXRhICovXG4mIzQzO1x0aWYgKCF0ZXN0X2JpdF9hY3F1aXJlKEFGU19TRVJWRVJfRkxfQVBQREFUQSwgXHUwMDI2c2VydmVyLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xuJiM0MztcdFx0Y2FzZSAwOlxuJiM0MztcdFx0XHRicmVhaztcbiAjaWZkZWYgQ09ORklHX1JYS0FEXG4tXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOlxuLVx0XHRyZXR1cm4gcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSk7XG4mIzQzO1x0XHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOlxuJiM0MztcdFx0XHRzZXRfYml0KEFGU19TRVJWRVJfRkxfQVBQREFUQSwgXHUwMDI2c2VydmVyLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19SWEdLXG4tXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYR0s6XG4tXHRcdHJldHVybiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UsIFx1MDAyNmFwcGRhdGEpO1xuLVxuLVx0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbi1cdFx0c3dpdGNoIChzZXJ2aWNlX2lkKSB7XG4tXHRcdGNhc2UgRlNfU0VSVklDRTpcbi1cdFx0Y2FzZSBZRlNfRlNfU0VSVklDRTpcbi1cdFx0XHRzZXJ2ZXIgPSAoc3RydWN0IGFmc19zZXJ2ZXIgKilwZWVyX2RhdGE7XG4tXHRcdFx0aWYgKCFzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpIHtcbi1cdFx0XHRcdG11dGV4X2xvY2soXHUwMDI2c2VydmVyLVx1MDAzZWNtX3Rva2VuX2xvY2spO1xuLVx0XHRcdFx0aWYgKCFzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpXG4tXHRcdFx0XHRcdGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKGNoYWxsZW5nZSwgc2VydmVyKTtcbi1cdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZzZXJ2ZXItXHUwMDNlY21fdG9rZW5fbG9jayk7XG4tXHRcdFx0fVxuLVx0XHRcdGlmIChzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpXG4tXHRcdFx0XHRhcHBkYXRhID0gc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YTtcbiYjNDM7XHRcdGNhc2UgUlhSUENfU0VDVVJJVFlfUlhHSzpcbiYjNDM7XHRcdFx0c2V0X2JpdChBRlNfU0VSVkVSX0ZMX0FQUERBVEEsIFx1MDAyNnNlcnZlci1cdTAwM2VmbGFncyk7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0cmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgXHUwMDI2YXBwZGF0YSk7XG4tI2VuZGlmXG4gXG4tXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UoY2hhbGxlbmdlLCBSWF9VU0VSX0FCT1JULCAtRVBST1RPLFxuLVx0XHRcdFx0XHRcdCAgICAgYWZzX2Fib3J0X3Vuc3VwcG9ydGVkX3NlY19jbGFzcyk7XG4tXHR9XG4tfVxuJiM0MztcdFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbiYjNDM7XHRcdFx0cmV0ID0gYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc2VydmVyLCBrcmI1X2VuY3R5cGUpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRzZXRfYml0KEFGU19TRVJWRVJfRkxfQVBQREFUQSwgXHUwMDI2c2VydmVyLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuIFxuLS8qXG4tICogUHJvY2VzcyB0aGUgT09CIG1lc3NhZ2UgcXVldWUsIHByb2Nlc3NpbmcgY2hhbGxlbmdlIHBhY2tldHMuXG4tICovXG4tdm9pZCBhZnNfcHJvY2Vzc19vb2JfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLXtcbi1cdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFmc19uZXQsIHJ4X29vYl93b3JrKTtcbi1cdHN0cnVjdCBza19idWZmICpvb2I7XG4tXHRlbnVtIHJ4cnBjX29vYl90eXBlIHR5cGU7XG4tXG4tXHR3aGlsZSAoUkVBRF9PTkNFKG5ldC1cdTAwM2VsaXZlKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICAob29iID0gcnhycGNfa2VybmVsX2RlcXVldWVfb29iKG5ldC1cdTAwM2Vzb2NrZXQsIFx1MDAyNnR5cGUpKSkge1xuLVx0XHRzd2l0Y2ggKHR5cGUpIHtcbi1cdFx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxuLVx0XHRcdGFmc19yZXNwb25kX3RvX2NoYWxsZW5nZShvb2IpO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0V0FSTl9PTl9PTkNFKDEpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdHJ4cnBjX2tlcm5lbF9mcmVlX29vYihvb2IpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2c2VydmVyLVx1MDAzZWNtX3Rva2VuX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfUlhHS1xuQEAgLTE3NywzNyAmIzQzOzE0OCwzNCBAQCBpbnQgYWZzX2NyZWF0ZV90b2tlbl9rZXkoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29ja2V0KVxuIC8qXG4gICogQ3JlYXRlIGFuIFlGUyBSeEdLIEdTUyB0b2tlbiB0byB1c2UgYXMgYSB0aWNrZXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlc2VydmVyLlxuICAqL1xuLXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIpXG4mIzQzO3N0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGVuY3R5cGUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY29ubl9rcmI1LCAqdG9rZW5fa3JiNTtcbiBcdGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqdG9rZW5fa2V5O1xuIFx0c3RydWN0IGNyeXB0b19hZWFkICphZWFkO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IHNnO1xuIFx0c3RydWN0IGFmc19uZXQgKm5ldCA9IHNlcnZlci1cdTAwM2VjZWxsLVx1MDAzZW5ldDtcbi1cdGNvbnN0IHN0cnVjdCBrZXkgKmtleSA9IG5ldC1cdTAwM2Vmc19jbV90b2tlbl9rZXk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGtleSAqY21fa2V5ID0gbmV0LVx1MDAzZWZzX2NtX3Rva2VuX2tleTtcbiYjNDM7XHRzdHJ1Y3Qga2V5ICphcHBkYXRhX2tleSA9IE5VTEw7XG4gXHRzaXplX3Qga2V5c2l6ZSwgdXVpZHNpemUsIGF1dGhzaXplLCB0b2tzaXplLCBlbmNzaXplLCBjb250c2l6ZSwgYWRhdGFzaXplLCBvZmZzZXQ7XG4gXHRfX2JlMzIgY2Fwc1sxXSA9IHtcbiBcdFx0WzBdID0gaHRvbmwoQUZTX0NBUF9FUlJPUl9UUkFOU0xBVElPTiksXG4gXHR9O1xuIFx0X19iZTMyICp4ZHI7XG4gXHR2b2lkICphcHBkYXRhLCAqSzAsICplbmNiYXNlO1xuLVx0dTMyIGVuY3R5cGU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKCFrZXkpXG4mIzQzO1x0aWYgKCFjbV9rZXkpXG4gXHRcdHJldHVybiAtRU5PS0VZO1xuIFxuIFx0LyogQXNzdW1lIHRoYXQgdGhlIGZpbGVzZXJ2ZXIgaXMgaGFwcHkgdG8gdXNlIHRoZSBzYW1lIGVuY29kaW5nIHR5cGUgYXNcbiBcdCAqIHdlIHdlcmUgdG9sZCB0byB1c2UgYnkgdGhlIHRva2VuIG9idGFpbmVkIGJ5IHRoZSB1c2VyLlxuIFx0ICovXG4tXHRlbmN0eXBlID0gcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSk7XG4tXG4gXHRjb25uX2tyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZW5jdHlwZSk7XG4gXHRpZiAoIWNvbm5fa3JiNSlcbiBcdFx0cmV0dXJuIC1FTk9QS0c7XG4tXHR0b2tlbl9rcmI1ID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbi1cdHRva2VuX2tleSA9IChjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKilcdTAwMjZrZXktXHUwMDNlcGF5bG9hZC5kYXRhWzJdO1xuJiM0MztcdHRva2VuX2tyYjUgPSBjbV9rZXktXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xuJiM0MztcdHRva2VuX2tleSA9IChjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKilcdTAwMjZjbV9rZXktXHUwMDNlcGF5bG9hZC5kYXRhWzJdO1xuIFxuIFx0Lyogc3RydWN0IHJ4Z2tfa2V5IHtcbiBcdCAqXHRhZnNfdWludDMyXHRlbmN0eXBlO1xuQEAgLTMyNyw5ICYjNDM7Mjk1LDIyIEBAIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X2FlYWQ7XG4gXG4tXHRzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmxlbiAgPSBhZGF0YXNpemU7XG4tXHRzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEgPSBhcHBkYXRhO1xuLVx0YXBwZGF0YSA9IE5VTEw7XG4mIzQzO1x0YXBwZGF0YV9rZXkgPSBrZXlfYWxsb2MoXHUwMDI2a2V5X3R5cGVfdXNlciwgXCYjMzQ7cnhycGM6IGFmcyByeGdrIGFwcGRhdGFcJiMzNDssXG4mIzQzO1x0XHRcdFx0R0xPQkFMX1JPT1RfVUlELCBHTE9CQUxfUk9PVF9HSUQsIGN1cnJlbnRfY3JlZCgpLFxuJiM0MztcdFx0XHRcdEtFWV9QT1NfVklFVyB8IEtFWV9QT1NfU0VBUkNIIHwgS0VZX1VTUl9WSUVXLFxuJiM0MztcdFx0XHRcdEtFWV9BTExPQ19OT1RfSU5fUVVPVEEsIE5VTEwpO1xuJiM0MztcdGlmIChJU19FUlIoYXBwZGF0YV9rZXkpKSB7XG4mIzQzO1x0XHRyZXQgPSBQVFJfRVJSKGFwcGRhdGFfa2V5KTtcbiYjNDM7XHRcdGdvdG8gb3V0X2FlYWQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBrZXlfaW5zdGFudGlhdGVfYW5kX2xpbmsoYXBwZGF0YV9rZXksIGFwcGRhdGEsIGFkYXRhc2l6ZSwgTlVMTCwgTlVMTCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0a2V5X3B1dChhcHBkYXRhX2tleSk7XG4mIzQzO1x0XHRnb3RvIG91dF9hZWFkO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YSA9IGFwcGRhdGFfa2V5O1xuIFxuIG91dF9hZWFkOlxuIFx0Y3J5cHRvX2ZyZWVfYWVhZChhZWFkKTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvY21zZXJ2aWNlLmMgYi9mcy9hZnMvY21zZXJ2aWNlLmNcbmluZGV4IDU1NDBhZTFjYWQ1OTlhLi5kNTc5YTY2NWUzZGEwOSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9jbXNlcnZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Ntc2VydmljZS5jXG5AQCAtMzY0LDcgJiM0MzszNjQsOCBAQCBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlMyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4gXHRpZiAoIWFmc19jaGVja19jYWxsX3N0YXRlKGNhbGwsIEFGU19DQUxMX1NWX1JFUExZSU5HKSlcbiBcdFx0cmV0dXJuIGFmc19pb19lcnJvcihjYWxsLCBhZnNfaW9fZXJyb3JfY21fcmVwbHkpO1xuIFxuLVx0aWYgKG1lbWNtcChjYWxsLVx1MDAzZXJlcXVlc3QsIFx1MDAyNmNhbGwtXHUwMDNlc2VydmVyLVx1MDAzZV91dWlkLCBzaXplb2YoY2FsbC1cdTAwM2VzZXJ2ZXItXHUwMDNlX3V1aWQpKSAhPSAwKSB7XG4mIzQzO1x0aWYgKGNhbGwtXHUwMDNlc2VydmVyIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBtZW1jbXAoY2FsbC1cdTAwM2VyZXF1ZXN0LCBcdTAwMjZjYWxsLVx1MDAzZXNlcnZlci1cdTAwM2VfdXVpZCwgc2l6ZW9mKGNhbGwtXHUwMDNlc2VydmVyLVx1MDAzZV91dWlkKSkgIT0gMCkge1xuIFx0XHRwcl9ub3RpY2UoXCYjMzQ7Q2FsbGJhY2sgVVVJRCBkb2VzIG5vdCBtYXRjaCBmaWxlc2VydmVyIFVVSURcXG5cJiMzNDspO1xuIFx0XHR0cmFjZV9hZnNfY21fbm9fc2VydmVyX3UoY2FsbCwgY2FsbC1cdTAwM2VyZXF1ZXN0KTtcbiBcdFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZzX3Byb2JlLmMgYi9mcy9hZnMvZnNfcHJvYmUuY1xuaW5kZXggYTkxYWQxOTM4ZDA3ODguLmUyNmY3ZjFlMzBhMjNhIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ZzX3Byb2JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9mc19wcm9iZS5jXG5AQCAtMjQxLDkgJiM0MzsyNDEsMTQgQEAgaW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4gXHRzdHJ1Y3QgYWZzX2VuZHBvaW50X3N0YXRlICplc3RhdGUsICpvbGQ7XG4gXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0ID0gTlVMTCwgKmFsaXN0O1xuIFx0dW5zaWduZWQgbG9uZyB1bnByb2JlZDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0X2VudGVyKFwmIzM0OyVwVVwmIzM0OywgXHUwMDI2c2VydmVyLVx1MDAzZXV1aWQpO1xuIFxuJiM0MztcdHJldCA9IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc2VydmVyLCBrZXkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdGVzdGF0ZSA9IGt6YWxsb2Nfb2JqKCplc3RhdGUpO1xuIFx0aWYgKCFlc3RhdGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDBiNzJhODU2NjI5OTkyLi4zZTYxYzU0M2E1MGM0OCAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvaW50ZXJuYWwuaFxuQEAgLTI4Myw3ICYjNDM7MjgzLDYgQEAgc3RydWN0IGFmc19uZXQge1xuIFx0c3RydWN0IHNvY2tldFx0XHQqc29ja2V0O1xuIFx0c3RydWN0IGFmc19jYWxsXHRcdCpzcGFyZV9pbmNvbWluZ19jYWxsO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0XHRjaGFyZ2VfcHJlYWxsb2NhdGlvbl93b3JrO1xuLVx0c3RydWN0IHdvcmtfc3RydWN0XHRyeF9vb2Jfd29yaztcbiBcdHN0cnVjdCBtdXRleFx0XHRzb2NrZXRfbXV0ZXg7XG4gXHRhdG9taWNfdFx0XHRucl9vdXRzdGFuZGluZ19jYWxscztcbiBcdGF0b21pY190XHRcdG5yX3N1cGVyYmxvY2tzO1xuQEAgLTU0Nyw3ICYjNDM7NTQ2LDcgQEAgc3RydWN0IGFmc19zZXJ2ZXIge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0XHRkZXN0cm95ZXI7XHQvKiBXb3JrIGl0ZW0gdG8gdHJ5IGFuZCBkZXN0cm95IGEgc2VydmVyICovXG4gXHRzdHJ1Y3QgdGltZXJfbGlzdFx0dGltZXI7XHRcdC8qIE1hbmFnZW1lbnQgdGltZXIgKi9cbiBcdHN0cnVjdCBtdXRleFx0XHRjbV90b2tlbl9sb2NrO1x0LyogTG9jayBnb3Zlcm5pbmcgY3JlYXRpb24gb2YgYXBwZGF0YSAqL1xuLVx0c3RydWN0IGtyYjVfYnVmZmVyXHRjbV9yeGdrX2FwcGRhdGE7IC8qIEFwcGRhdGEgdG8gYmUgaW5jbHVkZWQgaW4gUkVTUE9OU0UgcGFja2V0ICovXG4mIzQzO1x0c3RydWN0IGtleVx0XHQqY21fcnhna19hcHBkYXRhOyAvKiBBcHBkYXRhIHRvIGJlIGluY2x1ZGVkIGluIFJFU1BPTlNFIHBhY2tldCAqL1xuIFx0dGltZTY0X3RcdFx0dW51c2VfdGltZTtcdC8qIFRpbWUgYXQgd2hpY2ggbGFzdCB1bnVzZWQgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX1JFU1BPTkRJTkcgMFx0XHQvKiBUaGUgc2VydmVyIGlzIHJlc3BvbmRpbmcgKi9cbkBAIC01NTksNiAmIzQzOzU1OCw3IEBAIHN0cnVjdCBhZnNfc2VydmVyIHtcbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfTk9UX0ZPVU5EXHQ2XHRcdC8qIFZMIHNlcnZlciBzYXlzIG5vIHN1Y2ggc2VydmVyICovXG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX1ZMX0ZBSUxcdDdcdFx0LyogRmFpbGVkIHRvIGFjY2VzcyBWTCBzZXJ2ZXIgKi9cbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfTUFZX0hBVkVfQ0IgOFx0XHQvKiBNYXkgaGF2ZSBjYWxsYmFja3Mgb24gdGhpcyBmaWxlc2VydmVyICovXG4mIzQzOyNkZWZpbmUgQUZTX1NFUlZFUl9GTF9BUFBEQVRBXHQ5XHRcdC8qIFNldCBpZiBhcHBkYXRhIGNyZWF0ZWQgKi9cbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfSVNfWUZTXHQxNlx0XHQvKiBTZXJ2ZXIgaXMgWUZTIG5vdCBBRlMgKi9cbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfTk9fSUJVTEtcdDE3XHRcdC8qIEZpbGVzZXJ2ZXIgZG9lc24mIzM5O3Qgc3VwcG9ydCBGUy5JbmxpbmVCdWxrU3RhdHVzICovXG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX05PX1JNMlx0MThcdFx0LyogRmlsZXNlcnZlciBkb2VzbiYjMzk7dCBzdXBwb3J0IFlGUy5SZW1vdmVGaWxlMiAqL1xuQEAgLTEwOTAsNyAmIzQzOzEwOTAsNyBAQCBleHRlcm4gYm9vbCBhZnNfY21faW5jb21pbmdfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKik7XG4gLypcbiAgKiBjbV9zZWN1cml0eS5jXG4gICovXG4tdm9pZCBhZnNfcHJvY2Vzc19vb2JfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiYjNDM7aW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KTtcbiAjaWZkZWYgQ09ORklHX1JYR0tcbiBpbnQgYWZzX2NyZWF0ZV90b2tlbl9rZXkoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29ja2V0KTtcbiAjZWxzZVxuQEAgLTE0MTcsMjEgJiM0MzsxNDE3LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19zZWVfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGVudW0gYWZzX2NhbGxfdHJhY2Ugd2h5KVxuIFx0XHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXG4tXHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuLXtcbi1cdHN0cnVjdCBhZnNfYWRkcl9saXN0ICphbGlzdCA9IG9wLVx1MDAzZWVzdGF0ZS1cdTAwM2VhZGRyZXNzZXM7XG4tXG4tXHRvcC1cdTAwM2VjYWxsXHQ9IGNhbGw7XG4tXHRvcC1cdTAwM2V0eXBlXHQ9IGNhbGwtXHUwMDNldHlwZTtcbi1cdGNhbGwtXHUwMDNlb3BcdD0gb3A7XG4tXHRjYWxsLVx1MDAzZWtleVx0PSBvcC1cdTAwM2VrZXk7XG4tXHRjYWxsLVx1MDAzZWludHJcdD0gIShvcC1cdTAwM2VmbGFncyBcdTAwMjYgQUZTX09QRVJBVElPTl9VTklOVFIpO1xuLVx0Y2FsbC1cdTAwM2VwZWVyXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cdTAwM2VhZGRyc1tvcC1cdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcbi1cdGNhbGwtXHUwMDNlc2VydmljZV9pZCA9IG9wLVx1MDAzZXNlcnZlci1cdTAwM2VzZXJ2aWNlX2lkO1xuLVx0YWZzX21ha2VfY2FsbChjYWxsLCBnZnApO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2V4dHJhY3RfYmVnaW4oc3RydWN0IGFmc19jYWxsICpjYWxsLCB2b2lkICpidWYsIHNpemVfdCBzaXplKVxuIHtcbiBcdGNhbGwtXHUwMDNlaW92X2xlbiA9IHNpemU7XG5AQCAtMTc2Myw2ICYjNDM7MTc0OCwyMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqQUZTX1ZOT0RFX1RPX0koc3RydWN0IGFmc192bm9kZSAqdm5vZGUpXG4gXHRyZXR1cm4gXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYWZzX21ha2Vfb3BfY2FsbChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsIHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcbiYjNDM7XHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtXHUwMDNlZXN0YXRlLVx1MDAzZWFkZHJlc3NlcztcbiYjNDM7XG4mIzQzO1x0b3AtXHUwMDNlY2FsbFx0PSBjYWxsO1xuJiM0MztcdG9wLVx1MDAzZXR5cGVcdD0gY2FsbC1cdTAwM2V0eXBlO1xuJiM0MztcdGNhbGwtXHUwMDNlb3BcdD0gb3A7XG4mIzQzO1x0Y2FsbC1cdTAwM2VzZXJ2ZXJcdD0gYWZzX3VzZV9zZXJ2ZXIob3AtXHUwMDNlc2VydmVyLCBmYWxzZSwgYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCk7XG4mIzQzO1x0Y2FsbC1cdTAwM2VrZXlcdD0gb3AtXHUwMDNla2V5O1xuJiM0MztcdGNhbGwtXHUwMDNlaW50clx0PSAhKG9wLVx1MDAzZWZsYWdzIFx1MDAyNiBBRlNfT1BFUkFUSU9OX1VOSU5UUik7XG4mIzQzO1x0Y2FsbC1cdTAwM2VwZWVyXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cdTAwM2VhZGRyc1tvcC1cdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcbiYjNDM7XHRjYWxsLVx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cdTAwM2VzZXJ2ZXItXHUwMDNlc2VydmljZV9pZDtcbiYjNDM7XHRhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBOb3RlIHRoYXQgYSBkZW50cnkgZ290IGNoYW5nZWQuICBXZSBuZWVkIHRvIHNldCBkX2ZzZGF0YSB0byB0aGUgZGF0YSB2ZXJzaW9uXG4gICogbnVtYmVyIGRlcml2ZWQgZnJvbSB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uICBJdCBkb2VzbiYjMzk7dCBtYXR0ZXIgaWZcbmRpZmYgLS1naXQgYS9mcy9hZnMvbWFpbi5jIGIvZnMvYWZzL21haW4uY1xuaW5kZXggN2E4ODNjNTk5NzZmZjIuLjYzNTNmZWFhNWZiNGI1IDEwMDY0NFxuLS0tIGEvZnMvYWZzL21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL21haW4uY1xuQEAgLTczLDcgJiM0Mzs3Myw2IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBhZnNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0X25zKVxuIFx0Z2VuZXJhdGVfcmFuZG9tX3V1aWQoKHVuc2lnbmVkIGNoYXIgKilcdTAwMjZuZXQtXHUwMDNldXVpZCk7XG4gXG4gXHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZWNoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcmssIGFmc19jaGFyZ2VfcHJlYWxsb2NhdGlvbik7XG4tXHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZXJ4X29vYl93b3JrLCBhZnNfcHJvY2Vzc19vb2JfcXVldWUpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZuZXQtXHUwMDNlc29ja2V0X211dGV4KTtcbiBcbiBcdG5ldC1cdTAwM2VjZWxscyA9IFJCX1JPT1Q7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3J4cnBjLmMgYi9mcy9hZnMvcnhycGMuY1xuaW5kZXggZDgyOTE2NjU3YTNkZGYuLmFlNDhjMTViM2RiOTQzIDEwMDY0NFxuLS0tIGEvZnMvYWZzL3J4cnBjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9yeHJwYy5jXG5AQCAtMjUsMTQgJiM0MzsyNSwxMiBAQCBzdGF0aWMgdm9pZCBhZnNfcHJvY2Vzc19hc3luY19jYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcbiBzdGF0aWMgdm9pZCBhZnNfcnhfbmV3X2NhbGwoc3RydWN0IHNvY2sgKiwgc3RydWN0IHJ4cnBjX2NhbGwgKiwgdW5zaWduZWQgbG9uZyk7XG4gc3RhdGljIHZvaWQgYWZzX3J4X2Rpc2NhcmRfbmV3X2NhbGwoc3RydWN0IHJ4cnBjX2NhbGwgKiwgdW5zaWduZWQgbG9uZyk7XG4gc3RhdGljIHZvaWQgYWZzX3J4X2F0dGFjaChzdHJ1Y3QgcnhycGNfY2FsbCAqcnhjYWxsLCB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCk7XG4tc3RhdGljIHZvaWQgYWZzX3J4X25vdGlmeV9vb2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb29iKTtcbiBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NtX29wX2lkKHN0cnVjdCBhZnNfY2FsbCAqKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ4cnBjX2tlcm5lbF9vcHMgYWZzX3J4cnBjX2NhbGxiYWNrX29wcyA9IHtcbiBcdC5ub3RpZnlfbmV3X2NhbGxcdD0gYWZzX3J4X25ld19jYWxsLFxuIFx0LmRpc2NhcmRfbmV3X2NhbGxcdD0gYWZzX3J4X2Rpc2NhcmRfbmV3X2NhbGwsXG4gXHQudXNlcl9hdHRhY2hfY2FsbFx0PSBhZnNfcnhfYXR0YWNoLFxuLVx0Lm5vdGlmeV9vb2JcdFx0PSBhZnNfcnhfbm90aWZ5X29vYixcbiB9O1xuIFxuIC8qIGFzeW5jaHJvbm91cyBpbmNvbWluZyBjYWxsIGluaXRpYWwgcHJvY2Vzc2luZyAqL1xuQEAgLTc0LDEwICYjNDM7NzIsNiBAQCBpbnQgYWZzX29wZW5fc29ja2V0KHN0cnVjdCBhZnNfbmV0ICpuZXQpXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycm9yXzI7XG4gXG4tXHRyZXQgPSByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2Uoc29ja2V0LVx1MDAzZXNrLCB0cnVlKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZXJyb3JfMjtcbi1cbiBcdHJldCA9IGFmc19jcmVhdGVfdG9rZW5fa2V5KG5ldCwgc29ja2V0KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHByX2VycihcJiMzNDtDb3VsZG4mIzM5O3QgY3JlYXRlIFJ4R0sgQ00ga2V5OiAlZFxcblwmIzM0OywgcmV0KTtcbkBAIC0xMjgsNyAmIzQzOzEyMiw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFx0X2VudGVyKFwmIzM0O1wmIzM0Oyk7XG4gXG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5ldC1cdTAwM2VjaGFyZ2VfcHJlYWxsb2NhdGlvbl93b3JrKTtcbi1cdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bmV0LVx1MDAzZXJ4X29vYl93b3JrKTtcbiBcdC8qIEZ1dHVyZSB3b3JrIGl0ZW1zIHNob3VsZCBub3cgc2VlIC1cdTAwM2VsaXZlIGlzIGZhbHNlLiAqL1xuIFxuIFx0a2VybmVsX2xpc3RlbihuZXQtXHUwMDNlc29ja2V0LCAwKTtcbkBAIC0xNDksNyAmIzQzOzE0Miw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFxuIFx0a2VybmVsX3NvY2tfc2h1dGRvd24obmV0LVx1MDAzZXNvY2tldCwgU0hVVF9SRFdSKTtcbiBcdGZsdXNoX3dvcmtxdWV1ZShhZnNfYXN5bmNfY2FsbHMpO1xuLVx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZuZXQtXHUwMDNlcnhfb29iX3dvcmspO1xuIFx0bmV0LVx1MDAzZXNvY2tldC1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgPSBOVUxMO1xuIFx0c29ja19yZWxlYXNlKG5ldC1cdTAwM2Vzb2NrZXQpO1xuIFx0a2V5X3B1dChuZXQtXHUwMDNlZnNfY21fdG9rZW5fa2V5KTtcbkBAIC0zNDcsNyAmIzQzOzMzOSwxMCBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRzdHJ1Y3QgcnhycGNfY2FsbCAqcnhjYWxsO1xuIFx0c3RydWN0IG1zZ2hkciBtc2c7XG4gXHRzdHJ1Y3Qga3ZlYyBpb3ZbMV07XG4mIzQzO1x0dW5zaWduZWQgaW50IGRlYnVnX2lkID0gY2FsbC1cdTAwM2VkZWJ1Z19pZDtcbiYjNDM7XHRzdHJ1Y3Qga2V5ICphcHBfZGF0YSA9IE5VTEw7XG4gXHRzaXplX3QgbGVuO1xuJiM0MztcdGJvb2wgd3JpdGVfaXRlciA9IGNhbGwtXHUwMDNld3JpdGVfaXRlcjtcbiBcdHM2NCB0eF90b3RhbF9sZW47XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTM3OCw4ICYjNDM7MzczLDI1IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdFx0Y2FsbC1cdTAwM2Vkcm9wX3JlZiA9IHRydWU7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKGNhbGwtXHUwMDNla2V5IFx1MDAyNlx1MDAyNiBjYWxsLVx1MDAzZXNlcnZlcikge1xuJiM0MztcdFx0dTMyIGtyYjVfZW5jdHlwZSA9IDA7XG4mIzQzO1x0XHR1OCBzZWN1cml0eV9pbmRleCA9IDA7XG4mIzQzO1xuJiM0MztcdFx0cnhycGNfa2VybmVsX3F1ZXJ5X2tleShjYWxsLVx1MDAzZWtleSwgXHUwMDI2c2VjdXJpdHlfaW5kZXgsIFx1MDAyNmtyYjVfZW5jdHlwZSk7XG4mIzQzO1x0XHRzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7XG4mIzQzOyNpZmRlZiBDT05GSUdfUlhHS1xuJiM0MztcdFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbiYjNDM7XHRcdFx0YXBwX2RhdGEgPSBjYWxsLVx1MDAzZXNlcnZlci1cdTAwM2VjbV9yeGdrX2FwcGRhdGE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBjcmVhdGUgYSBjYWxsICovXG4tXHRyeGNhbGwgPSByeHJwY19rZXJuZWxfYmVnaW5fY2FsbChjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcGVlciwgY2FsbC1cdTAwM2VrZXksXG4mIzQzO1x0cnhjYWxsID0gcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXBlZXIsXG4mIzQzO1x0XHRcdFx0XHQgY2FsbC1cdTAwM2VrZXksIGFwcF9kYXRhLFxuIFx0XHRcdFx0XHQgKHVuc2lnbmVkIGxvbmcpY2FsbCxcbiBcdFx0XHRcdFx0IHR4X3RvdGFsX2xlbixcbiBcdFx0XHRcdFx0IGNhbGwtXHUwMDNlbWF4X2xpZmVzcGFuLFxuQEAgLTQxMCw3ICYjNDM7NDIyLDcgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuIFx0aW92X2l0ZXJfa3ZlYyhcdTAwMjZtc2cubXNnX2l0ZXIsIElURVJfU09VUkNFLCBpb3YsIDEsIGNhbGwtXHUwMDNlcmVxdWVzdF9zaXplKTtcbiBcdG1zZy5tc2dfY29udHJvbFx0XHQ9IE5VTEw7XG4gXHRtc2cubXNnX2NvbnRyb2xsZW5cdD0gMDtcbi1cdG1zZy5tc2dfZmxhZ3NcdFx0PSBNU0dfV0FJVEFMTCB8IChjYWxsLVx1MDAzZXdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApO1xuJiM0MztcdG1zZy5tc2dfZmxhZ3NcdFx0PSBNU0dfV0FJVEFMTCB8ICh3cml0ZV9pdGVyID8gTVNHX01PUkUgOiAwKTtcbiBcbiBcdHJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LCByeGNhbGwsXG4gXHRcdFx0XHQgICAgIFx1MDAyNm1zZywgY2FsbC1cdTAwM2VyZXF1ZXN0X3NpemUsXG5AQCAtNDE4LDcgJiM0Mzs0MzAsOSBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycm9yX2RvX2Fib3J0O1xuIFxuLVx0aWYgKGNhbGwtXHUwMDNld3JpdGVfaXRlcikge1xuJiM0MztcdC8qIFdlIGxvc3Qgb3VyIHJlZiBvbiBjYWxsIGlmIE1TR19NT1JFIHdhcyBzZXQuICovXG4mIzQzO1xuJiM0MztcdGlmICh3cml0ZV9pdGVyKSB7XG4gXHRcdG1zZy5tc2dfaXRlciA9ICpjYWxsLVx1MDAzZXdyaXRlX2l0ZXI7XG4gXHRcdG1zZy5tc2dfZmxhZ3MgXHUwMDI2PSB+TVNHX01PUkU7XG4gXHRcdHRyYWNlX2Fmc19zZW5kX2RhdGEoY2FsbCwgXHUwMDI2bXNnKTtcbkBAIC00MjcsOSAmIzQzOzQ0MSw5IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdFx0XHRcdFx0ICAgICBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLFxuIFx0XHRcdFx0XHQgICAgIGlvdl9pdGVyX2NvdW50KFx1MDAyNm1zZy5tc2dfaXRlciksXG4gXHRcdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7XG4tXHRcdCpjYWxsLVx1MDAzZXdyaXRlX2l0ZXIgPSBtc2cubXNnX2l0ZXI7XG4mIzQzO1x0XHQvKiBXZSBsb3N0IG91ciByZWYgb24gY2FsbC4gKi9cbiBcbi1cdFx0dHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCBcdTAwMjZtc2csIHJldCk7XG4mIzQzO1x0XHR0cmFjZV9hZnNfc2VudF9kYXRhKGRlYnVnX2lkLCBcdTAwMjZtc2csIHJldCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0Z290byBlcnJvcl9kb19hYm9ydDtcbiBcdH1cbkBAIC05ODMsMTQgJiM0Mzs5OTcsMyBAQCBub2lubGluZSBpbnQgYWZzX3Byb3RvY29sX2Vycm9yKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcbiBcdFx0Y2FsbC1cdTAwM2V1bm1hcnNoYWxsaW5nX2Vycm9yID0gdHJ1ZTtcbiBcdHJldHVybiAtRUJBRE1TRztcbiB9XG4tXG4tLypcbi0gKiBXYWtlIHVwIE9PQiBub3RpZmljYXRpb24gcHJvY2Vzc2luZy5cbi0gKi9cbi1zdGF0aWMgdm9pZCBhZnNfcnhfbm90aWZ5X29vYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvb2IpXG4te1xuLVx0c3RydWN0IGFmc19uZXQgKm5ldCA9IHNrLVx1MDAzZXNrX3VzZXJfZGF0YTtcbi1cbi1cdGlmIChSRUFEX09OQ0UobmV0LVx1MDAzZWxpdmUpKVxuLVx0XHRxdWV1ZV93b3JrKGFmc193cSwgXHUwMDI2bmV0LVx1MDAzZXJ4X29vYl93b3JrKTtcbi19XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3NlcnZlci5jIGIvZnMvYWZzL3NlcnZlci5jXG5pbmRleCAwZmUxNjJlYTJhMzZkYi4uNzZhOWYyNWNlNDkwNTggMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc2VydmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9zZXJ2ZXIuY1xuQEAgLTM5OCw3ICYjNDM7Mzk4LDcgQEAgc3RhdGljIHZvaWQgYWZzX3NlcnZlcl9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4gXHRhZnNfcHV0X2VuZHBvaW50X3N0YXRlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItXHUwMDNlZW5kcG9pbnRfc3RhdGUpLFxuIFx0XHRcdCAgICAgICBhZnNfZXN0YXRlX3RyYWNlX3B1dF9zZXJ2ZXIpO1xuIFx0YWZzX3B1dF9jZWxsKHNlcnZlci1cdTAwM2VjZWxsLCBhZnNfY2VsbF90cmFjZV9wdXRfc2VydmVyKTtcbi1cdGtmcmVlKHNlcnZlci1cdTAwM2VjbV9yeGdrX2FwcGRhdGEuZGF0YSk7XG4mIzQzO1x0a2V5X3B1dChzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhKTtcbiBcdGtmcmVlKHNlcnZlcik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaCBiL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaFxuaW5kZXggMzg2YzMxNDMyNzg5OTUuLjcwMDJhOTkzYTQ3MjI4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2tleXMvdXNlci10eXBlLmhcbkBAIC0yNiw2ICYjNDM7MjYsNyBAQFxuICAqL1xuIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIHtcbiBcdHN0cnVjdCByY3VfaGVhZFx0cmN1O1x0XHQvKiBSQ1UgZGVzdHJ1Y3RvciAqL1xuJiM0MztcdHJlZmNvdW50X3RcdHJlZjtcbiBcdHVuc2lnbmVkIHNob3J0XHRkYXRhbGVuO1x0LyogbGVuZ3RoIG9mIHRoaXMgZGF0YSAqL1xuIFx0Y2hhclx0XHRkYXRhW10gX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpOyAvKiBhY3R1YWwgZGF0YSAqL1xuIH07XG5AQCAtMzcsNiAmIzQzOzM4LDcgQEAgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZDtcbiBcbiBleHRlcm4gaW50IHVzZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XG4gZXh0ZXJuIHZvaWQgdXNlcl9mcmVlX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xuJiM0Mzt2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKTtcbiBleHRlcm4gaW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XG4gZXh0ZXJuIHZvaWQgdXNlcl9yZXZva2Uoc3RydWN0IGtleSAqa2V5KTtcbiBleHRlcm4gdm9pZCB1c2VyX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl9yeHJwYy5oIGIvaW5jbHVkZS9uZXQvYWZfcnhycGMuaFxuaW5kZXggMGZiNGM0MWM5YmJmNTUuLjU2NTFhMTBiYTI2ZTYxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfcnhycGMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYWZfcnhycGMuaFxuQEAgLTU1LDYgJiM0Mzs1NSw3IEBAIHZvaWQgcnhycGNfa2VybmVsX3NldF9ub3RpZmljYXRpb25zKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCByeHJwY19wZWVyICpwZWVyLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qga2V5ICprZXksXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3Qga2V5ICphcHBfZGF0YSxcbiBcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyB1c2VyX2NhbGxfSUQsXG4gXHRcdFx0XHRcdCAgIHM2NCB0eF90b3RhbF9sZW4sXG4gXHRcdFx0XHRcdCAgIHUzMiBoYXJkX3RpbWVvdXQsXG5AQCAtOTEsMjQgJiM0Mzs5Miw3IEBAIGJvb2wgcnhycGNfa2VybmVsX2NoZWNrX2xpZmUoY29uc3Qgc3RydWN0IHNvY2tldCAqLCBjb25zdCBzdHJ1Y3QgcnhycGNfY2FsbCAqKTtcbiBcbiBpbnQgcnhycGNfc29ja19zZXRfbWluX3NlY3VyaXR5X2xldmVsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IHZhbCk7XG4gaW50IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc3RydWN0IHNvY2sgKiwgc3RydWN0IGtleSAqKTtcbi1pbnQgcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzZXQpO1xuLVxuLWVudW0gcnhycGNfb29iX3R5cGUgcnhycGNfa2VybmVsX3F1ZXJ5X29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iLFxuLVx0XHRcdFx0XHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxuLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhKTtcbi1zdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfa2VybmVsX2RlcXVldWVfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tXHRcdFx0XHRcdCBlbnVtIHJ4cnBjX29vYl90eXBlICpfdHlwZSk7XG4tdm9pZCByeHJwY19rZXJuZWxfZnJlZV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYik7XG4tdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXG4tXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsXG4tXHRcdFx0XHQgIHUxNiAqX3NlcnZpY2VfaWQsIHU4ICpfc2VjdXJpdHlfaW5kZXgpO1xuLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSxcbi1cdFx0XHRcdCAgaW50IGVycm9yLCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpO1xuLWludCByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSk7XG4tdTMyIHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKTtcbi1pbnQgcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhKTtcbiYjNDM7dm9pZCByeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgdTggKl9zZWN1cml0eV9pbmRleCwgdTMyICpfa3JiNV9lbmN0eXBlKTtcbiB1OCByeHJwY19rZXJuZWxfcXVlcnlfY2FsbF9zZWN1cml0eShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHRcdCAgICB1MTYgKl9zZXJ2aWNlX2lkLCB1MzIgKl9lbmN0eXBlKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXG5pbmRleCAxYjNjNDhiNTU5MWRmZC4uM2Q5NjA4MmU2ZWFjNzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcbkBAIC0xNDgsNiAmIzQzOzE0OCw3IEBAIGVudW0geWZzX2NtX29wZXJhdGlvbiB7XG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VudXNlX3NsaXN0X2lzb3J0LFx0XCYjMzQ7VU5VIGlzb3J0XCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91cGRhdGUsXHRcdFwmIzM0O1VQREFURSAgIFwmIzM0OykgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2J5X3V1aWQsXHRcJiMzNDtVU0UgdXVpZCBcJiMzNDspIFxcXG4mIzQzO1x0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCxcdFx0XCYjMzQ7VVNFIGNhbGwgXCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY21fY2FsbCxcdFwmIzM0O1VTRSBjbS1jbFwmIzM0OykgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dldF9jYXBzLFx0XCYjMzQ7VVNFIGdjYXBzXCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYixcdFwmIzM0O1VTRSBndnVwY1wmIzM0OykgXFxcbkBAIC05MzcsOSAmIzQzOzkzOCw5IEBAIFRSQUNFX0VWRU5UKGFmc19zZW5kX2RhdGEsXG4gXHQgICAgKTtcbiBcbiBUUkFDRV9FVkVOVChhZnNfc2VudF9kYXRhLFxuLVx0ICAgIFRQX1BST1RPKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgcmV0KSxcbiYjNDM7XHQgICAgVFBfUFJPVE8odW5zaWduZWQgaW50IGNhbGxfZGVidWdfaWQsIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHJldCksXG4gXG4tXHQgICAgVFBfQVJHUyhjYWxsLCBtc2csIHJldCksXG4mIzQzO1x0ICAgIFRQX0FSR1MoY2FsbF9kZWJ1Z19pZCwgbXNnLCByZXQpLFxuIFxuIFx0ICAgIFRQX1NUUlVDVF9fZW50cnkoXG4gXHRcdCAgICBfX2ZpZWxkKHVuc2lnbmVkIGludCxcdFx0Y2FsbClcbkBAIC05NDksNyAmIzQzOzk1MCw3IEBAIFRSQUNFX0VWRU5UKGFmc19zZW50X2RhdGEsXG4gXHRcdFx0ICAgICApLFxuIFxuIFx0ICAgIFRQX2Zhc3RfYXNzaWduKFxuLVx0XHQgICAgX19lbnRyeS1cdTAwM2VjYWxsID0gY2FsbC1cdTAwM2VkZWJ1Z19pZDtcbiYjNDM7XHRcdCAgICBfX2VudHJ5LVx1MDAzZWNhbGwgPSBjYWxsX2RlYnVnX2lkO1xuIFx0XHQgICAgX19lbnRyeS1cdTAwM2VyZXQgPSByZXQ7XG4gXHRcdCAgICBfX2VudHJ5LVx1MDAzZW9mZnNldCA9IG1zZy1cdTAwM2Vtc2dfaXRlci54YXJyYXlfc3RhcnQgJiM0MzsgbXNnLVx1MDAzZW1zZ19pdGVyLmlvdl9vZmZzZXQ7XG4gXHRcdCAgICBfX2VudHJ5LVx1MDAzZWNvdW50ID0gaW92X2l0ZXJfY291bnQoXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuaW5kZXggNzA0YTEwZGU2NjcwMDQuLjhmYzQxOTJlMDM5MmJmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuQEAgLTI2Miw3ICYjNDM7MjYyLDYgQEBcbiBcdEVNKHJ4cnBjX2Nvbm5fZnJlZSxcdFx0XHRcJiMzNDtGUkVFICAgICAgICBcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jb25uX2dldF9hY3RpdmF0ZV9jYWxsLFx0XCYjMzQ7R0VUIGFjdC1jYWxsXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY29ubl9nZXRfY2FsbF9pbnB1dCxcdFx0XCYjMzQ7R0VUIGlucC1jYWxsXCYjMzQ7KSBcXFxuLVx0RU0ocnhycGNfY29ubl9nZXRfY2hhbGxlbmdlX2lucHV0LFx0XCYjMzQ7R0VUIGlucC1jaGFsXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY29ubl9nZXRfY29ubl9pbnB1dCxcdFx0XCYjMzQ7R0VUIGlucC1jb25uXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY29ubl9nZXRfaWRsZSxcdFx0XHRcJiMzNDtHRVQgaWRsZSAgICBcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jb25uX2dldF9wb2tlX2Fib3J0LFx0XHRcJiMzNDtHRVQgcGstYWJvcnRcJiMzNDspIFxcXG5AQCAtMjc0LDcgJiM0MzsyNzMsNiBAQFxuIFx0RU0ocnhycGNfY29ubl9uZXdfc2VydmljZSxcdFx0XCYjMzQ7TkVXIHNlcnZpY2UgXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY29ubl9wdXRfY2FsbCxcdFx0XHRcJiMzNDtQVVQgY2FsbCAgICBcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jb25uX3B1dF9jYWxsX2lucHV0LFx0XHRcJiMzNDtQVVQgaW5wLWNhbGxcJiMzNDspIFxcXG4tXHRFTShyeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQsXHRcJiMzNDtQVVQgaW5wLWNoYWxcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jb25uX3B1dF9jb25uX2lucHV0LFx0XHRcJiMzNDtQVVQgaW5wLWNvbm5cJiMzNDspIFxcXG4gXHRFTShyeHJwY19jb25uX3B1dF9kaXNjYXJkX2lkbGUsXHRcdFwmIzM0O1BVVCBkaXNjLWlkbFwmIzM0OykgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fcHV0X2xvY2FsX2RlYWQsXHRcdFwmIzM0O1BVVCBsb2MtZGVhZFwmIzM0OykgXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oXG5pbmRleCBkOTczNWFiZDRjNzkxMC4uN2Q2YTUwMTUxOTMxMTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmhcbkBAIC01OCwxMSAmIzQzOzU4LDcgQEAgZW51bSByeHJwY19jbXNnX3R5cGUge1xuIFx0UlhSUENfVFhfTEVOR1RIXHRcdD0gMTIsXHQvKiAtcy06IFRvdGFsIGxlbmd0aCBvZiBUeCBkYXRhICovXG4gXHRSWFJQQ19TRVRfQ0FMTF9USU1FT1VUXHQ9IDEzLFx0LyogLXMtOiBTZXQgb25lIG9yIG1vcmUgY2FsbCB0aW1lb3V0cyAqL1xuIFx0UlhSUENfQ0hBUkdFX0FDQ0VQVFx0PSAxNCxcdC8qIFNzLTogQ2hhcmdlIHRoZSBhY2NlcHQgcG9vbCB3aXRoIGEgdXNlciBjYWxsIElEICovXG4tXHRSWFJQQ19PT0JfSURcdFx0PSAxNSxcdC8qIC1zcjogT09CIG1lc3NhZ2UgSUQgKi9cbi1cdFJYUlBDX0NIQUxMRU5HRURcdD0gMTYsXHQvKiBDLXI6IEluZm8gb24gYSByZWNlaXZlZCBDSEFMTEVOR0UgKi9cbi1cdFJYUlBDX1JFU1BPTkRcdFx0PSAxNyxcdC8qIENzLTogUmVzcG9uZCB0byBhIGNoYWxsZW5nZSAqL1xuLVx0UlhSUENfUkVTUE9OREVEXHRcdD0gMTgsXHQvKiBTLXI6IERhdGEgcmVjZWl2ZWQgaW4gUkVTUE9OU0UgKi9cbi1cdFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBXHQ9IDE5LFx0LyogQ3MtOiBSRVNQT05TRTogUnhHSyBhcHAgZGF0YSB0byBpbmNsdWRlICovXG4mIzQzO1x0UlhSUENfUkVTUE9OU0VfQVBQREFUQVx0PSAyMCxcdC8qIENzLTogVXNlciBrZXkgaG9sZGluZyBhcHAgZGF0YSBmb3IgUkVTUE9OU0UgKi9cbiBcdFJYUlBDX19TVVBQT1JURURcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcbmluZGV4IGMzYzhjMzI0MGVmOTQ2Li5hYTNjMDU4ZjQwOTU1OSAxMDA2NDRcbi0tLSBhL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xuQEAgLTIwOCw2ICYjNDM7MjA4LDcgQEAgZG5zX3Jlc29sdmVyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXG4gXHRcdGtsZWF2ZShcJiMzNDsgPSAtRU5PTUVNXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNnVwYXlsb2FkLVx1MDAzZXJlZiwgMSk7XG4gXG4gXHR1cGF5bG9hZC1cdTAwM2VkYXRhbGVuID0gcmVzdWx0X2xlbjtcbiBcdG1lbWNweSh1cGF5bG9hZC1cdTAwM2VkYXRhLCBkYXRhLCByZXN1bHRfbGVuKTtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvTWFrZWZpbGUgYi9uZXQvcnhycGMvTWFrZWZpbGVcbmluZGV4IGY5OTRmOWYzMGEyOWQ0Li5mN2E1ZTBhNTkyZWUxMyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL01ha2VmaWxlXG5AQCAtMjQsNyAmIzQzOzI0LDYgQEAgcnhycGMteSA6PSBcXFxuIFx0bG9jYWxfb2JqZWN0Lm8gXFxcbiBcdG1pc2MubyBcXFxuIFx0bmV0X25zLm8gXFxcbi1cdG9vYi5vIFxcXG4gXHRvdXRwdXQubyBcXFxuIFx0cGVlcl9ldmVudC5vIFxcXG4gXHRwZWVyX29iamVjdC5vIFxcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FmX3J4cnBjLmMgYi9uZXQvcnhycGMvYWZfcnhycGMuY1xuaW5kZXggOWFiMGYyMmM4ODFlYzUuLjlkNWNlMWM3YWQwZDIyIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2FmX3J4cnBjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9hZl9yeHJwYy5jXG5AQCAtMzE4LDYgJiM0MzszMTgsNyBAQCBFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9wdXRfcGVlcik7XG4gICogQHNvY2s6IFRoZSBzb2NrZXQgb24gd2hpY2ggdG8gbWFrZSB0aGUgY2FsbFxuICAqIEBwZWVyOiBUaGUgcGVlciB0byBjb250YWN0XG4gICogQGtleTogVGhlIHNlY3VyaXR5IGNvbnRleHQgdG8gdXNlIChkZWZhdWx0cyB0byBzb2NrZXQgc2V0dGluZylcbiYjNDM7ICogQGFwcF9kYXRhOiBUaGUgc2VjdXJpdHkgcmVzcG9uc2UgYXBwbGljYXRpb24gZGF0YSAob3IgTlVMTClcbiAgKiBAdXNlcl9jYWxsX0lEOiBUaGUgSUQgdG8gdXNlXG4gICogQHR4X3RvdGFsX2xlbjogVG90YWwgbGVuZ3RoIG9mIGRhdGEgdG8gdHJhbnNtaXQgZHVyaW5nIHRoZSBjYWxsIChvciAtMSlcbiAgKiBAaGFyZF90aW1lb3V0OiBUaGUgbWF4aW11bSBsaWZlc3BhbiBvZiB0aGUgY2FsbCBpbiBzZWNcbkBAIC0zNDAsNiAmIzQzOzM0MSw3IEBAIEVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3B1dF9wZWVyKTtcbiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBrZXkgKmtleSxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBrZXkgKmFwcF9kYXRhLFxuIFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCxcbiBcdFx0XHRcdFx0ICAgczY0IHR4X3RvdGFsX2xlbixcbiBcdFx0XHRcdFx0ICAgdTMyIGhhcmRfdGltZW91dCxcbkBAIC0zNjgsNiAmIzQzOzM3MCw3IEBAIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0XHRrZXkgPSBOVUxMOyAvKiBhIG5vLXNlY3VyaXR5IGtleSAqL1xuIFxuIFx0bWVtc2V0KFx1MDAyNnAsIDAsIHNpemVvZihwKSk7XG4mIzQzO1x0cC5hcHBfZGF0YVx0XHQ9IGFwcF9kYXRhO1xuIFx0cC51c2VyX2NhbGxfSURcdFx0PSB1c2VyX2NhbGxfSUQ7XG4gXHRwLnR4X3RvdGFsX2xlblx0XHQ9IHR4X3RvdGFsX2xlbjtcbiBcdHAuaW50ZXJydXB0aWJpbGl0eVx0PSBpbnRlcnJ1cHRpYmlsaXR5O1xuQEAgLTU5NSwxMCAmIzQzOzU5OCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuKVxuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGNhc2UgUlhSUENfU0VSVkVSX0JPVU5EOlxuIFx0Y2FzZSBSWFJQQ19TRVJWRVJfTElTVEVOSU5HOlxuLVx0XHRpZiAobS1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19PT0IpXG4tXHRcdFx0cmV0ID0gcnhycGNfc2VuZG1zZ19vb2IocngsIG0sIGxlbik7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSByeHJwY19kb19zZW5kbXNnKHJ4LCBtLCBsZW4pO1xuJiM0MztcdFx0cmV0ID0gcnhycGNfZG9fc2VuZG1zZyhyeCwgbSwgbGVuKTtcbiBcdFx0LyogVGhlIHNvY2tldCBoYXMgYmVlbiB1bmxvY2tlZCAqL1xuIFx0XHRnb3RvIG91dDtcbiBcdGRlZmF1bHQ6XG5AQCAtNjMzLDcgJiM0Mzs2MzMsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiB7XG4gXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbi1cdHVuc2lnbmVkIGludCBtaW5fc2VjX2xldmVsLCB2YWw7XG4mIzQzO1x0dW5zaWduZWQgaW50IG1pbl9zZWNfbGV2ZWw7XG4gXHR1MTYgc2VydmljZV91cGdyYWRlWzJdO1xuIFx0aW50IHJldDtcbiBcbkBAIC03MTAsMjMgJiM0Mzs3MTAsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcbiBcdFx0Y2FzZSBSWFJQQ19NQU5BR0VfUkVTUE9OU0U6XG4gXHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRpZiAob3B0bGVuICE9IHNpemVvZih1bnNpZ25lZCBpbnQpKVxuLVx0XHRcdFx0Z290byBlcnJvcjtcbi1cdFx0XHRyZXQgPSAtRUlTQ09OTjtcbi1cdFx0XHRpZiAocngtXHUwMDNlc2suc2tfc3RhdGUgIT0gUlhSUENfVU5CT1VORClcbi1cdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0cmV0ID0gY29weV9zYWZlX2Zyb21fc29ja3B0cihcdTAwMjZ2YWwsIHNpemVvZih2YWwpLFxuLVx0XHRcdFx0XHRcdCAgICAgb3B0dmFsLCBvcHRsZW4pO1xuLVx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRnb3RvIGVycm9yO1xuLVx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0aWYgKHZhbCBcdTAwM2UgMSlcbi1cdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0aWYgKHZhbClcbi1cdFx0XHRcdHNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRjbGVhcl9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRnb3RvIHN1Y2Nlc3M7XG4mIzQzO1x0XHRcdGdvdG8gZXJyb3I7XG4gXG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0YnJlYWs7XG5AQCAtODM1LDggJiM0Mzs4MTksNiBAQCBzdGF0aWMgaW50IHJ4cnBjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdHJ4LVx1MDAzZWNhbGxzID0gUkJfUk9PVDtcbiBcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnJ4LVx1MDAzZWluY29taW5nX2xvY2spO1xuLVx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpO1xuLVx0cngtXHUwMDNlcGVuZGluZ19vb2JxID0gUkJfUk9PVDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnJ4LVx1MDAzZXNvY2tfY2FsbHMpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cngtXHUwMDNldG9fYmVfYWNjZXB0ZWQpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKTtcbkBAIC04ODQsMjMgJiM0Mzs4NjYsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBmbGFncylcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qXG4tICogUHVyZ2UgdGhlIG91dC1vZi1iYW5kIHF1ZXVlLlxuLSAqL1xuLXN0YXRpYyB2b2lkIHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzdHJ1Y3Qgc29jayAqc2spXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc2spO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi1cbi1cdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkpXG4tXHRcdHJ4cnBjX2tlcm5lbF9mcmVlX29vYihza2IpO1xuLVx0d2hpbGUgKCFSQl9FTVBUWV9ST09UKFx1MDAyNnJ4LVx1MDAzZXBlbmRpbmdfb29icSkpIHtcbi1cdFx0c2tiID0gcmJfZW50cnkocngtXHUwMDNlcGVuZGluZ19vb2JxLnJiX25vZGUsIHN0cnVjdCBza19idWZmLCByYm5vZGUpO1xuLVx0XHRyYl9lcmFzZShcdTAwMjZza2ItXHUwMDNlcmJub2RlLCBcdTAwMjZyeC1cdTAwM2VwZW5kaW5nX29vYnEpO1xuLVx0XHRyeHJwY19rZXJuZWxfZnJlZV9vb2Ioc2tiKTtcbi1cdH1cbi19XG4tXG4gLypcbiAgKiBSeFJQQyBzb2NrZXQgZGVzdHJ1Y3RvclxuICAqL1xuQEAgLTkwOCw3ICYjNDM7ODczLDYgQEAgc3RhdGljIHZvaWQgcnhycGNfc29ja19kZXN0cnVjdG9yKHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRfZW50ZXIoXCYjMzQ7JXBcJiMzNDssIHNrKTtcbiBcbi1cdHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzayk7XG4gXHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbiBcbiBcdFdBUk5fT04ocmVmY291bnRfcmVhZChcdTAwMjZzay1cdTAwM2Vza193bWVtX2FsbG9jKSk7XG5AQCAtOTYxLDcgJiM0Mzs5MjUsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlbGVhc2Vfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4gXHRyeHJwY19kaXNjYXJkX3ByZWFsbG9jKHJ4KTtcbiBcdHJ4cnBjX3JlbGVhc2VfY2FsbHNfb25fc29ja2V0KHJ4KTtcbiBcdGZsdXNoX3dvcmtxdWV1ZShyeHJwY193b3JrcXVldWUpO1xuLVx0cnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTtcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuIFxuIFx0cnhycGNfdW51c2VfbG9jYWwocngtXHUwMDNlbG9jYWwsIHJ4cnBjX2xvY2FsX3VudXNlX3JlbGVhc2Vfc29jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmggYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxuaW5kZXggY2U5NDZiMGEwM2UyYjMuLjEwMWFjNzU0NDc1ODRkIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG5AQCAtMTcxLDkgJiM0MzsxNzEsNiBAQCBzdHJ1Y3QgcnhycGNfc29jayB7XG4gXHRjb25zdCBzdHJ1Y3QgcnhycGNfa2VybmVsX29wcyAqYXBwX29wcztcdC8qIFRhYmxlIG9mIGtlcm5lbCBhcHAgbm90aWZpY2F0aW9uIGZ1bmNzICovXG4gXHRzdHJ1Y3QgcnhycGNfbG9jYWxcdCpsb2NhbDtcdFx0LyogbG9jYWwgZW5kcG9pbnQgKi9cbiBcdHN0cnVjdCByeHJwY19iYWNrbG9nXHQqYmFja2xvZztcdC8qIFByZWFsbG9jYXRpb24gZm9yIHNlcnZpY2VzICovXG4tXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXHRyZWN2bXNnX29vYnE7XHQvKiBPT0IgbWVzc2FnZXMgZm9yIHJlY3Ztc2cgdG8gcGljayB1cCAqL1xuLVx0c3RydWN0IHJiX3Jvb3RcdFx0cGVuZGluZ19vb2JxO1x0LyogT09CIG1lc3NhZ2VzIGF3YWl0aW5nIHVzZXJzcGFjZSB0byByZXNwb25kIHRvICovXG4tXHR1NjRcdFx0XHRvb2JfaWRfY291bnRlcjtcdC8qIE9PQiBtZXNzYWdlIElEIGNvdW50ZXIgKi9cbiBcdHNwaW5sb2NrX3RcdFx0aW5jb21pbmdfbG9jaztcdC8qIEluY29taW5nIGNhbGwgdnMgc2VydmljZSBzaHV0ZG93biBsb2NrICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRzb2NrX2NhbGxzO1x0LyogTGlzdCBvZiBjYWxscyBvd25lZCBieSB0aGlzIHNvY2tldCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0dG9fYmVfYWNjZXB0ZWQ7XHQvKiBjYWxscyBhd2FpdGluZyBhY2NlcHRhbmNlICovXG5AQCAtMTg0LDcgJiM0MzsxODEsNiBAQCBzdHJ1Y3QgcnhycGNfc29jayB7XG4gXHRzdHJ1Y3QgcmJfcm9vdFx0XHRjYWxscztcdFx0LyogVXNlciBJRCAtXHUwMDNlIGNhbGwgbWFwcGluZyAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRmbGFncztcbiAjZGVmaW5lIFJYUlBDX1NPQ0tfQ09OTkVDVEVEXHRcdDBcdC8qIGNvbm5lY3Rfc3J4IGlzIHNldCAqL1xuLSNkZWZpbmUgUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0VcdDFcdC8qIFVzZXIgd2FudHMgdG8gbWFuYWdlIFJFU1BPTlNFIHBhY2tldHMgKi9cbiBcdHJ3bG9ja190XHRcdGNhbGxfbG9jaztcdC8qIGxvY2sgZm9yIGNhbGxzICovXG4gXHR1MzJcdFx0XHRtaW5fc2VjX2xldmVsO1x0LyogbWluaW11bSBzZWN1cml0eSBsZXZlbCAqL1xuICNkZWZpbmUgUlhSUENfU0VDVVJJVFlfTUFYXHRSWFJQQ19TRUNVUklUWV9FTkNSWVBUXG5AQCAtMjQxLDcgJiM0MzsyMzcsNiBAQCBzdHJ1Y3QgcnhycGNfc2tiX3ByaXYge1xuIFx0XHRcdHU4XHRcdHJlYXNvbjtcdFx0LyogUmVhc29uIGZvciBhY2sgKi9cbiBcdFx0fSBhY2s7XG4gXHRcdHN0cnVjdCB7XG4tXHRcdFx0c3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm47XHQvKiBDb25uZWN0aW9uIHJlZmVycmVkIHRvICovXG4gXHRcdFx0dW5pb24ge1xuIFx0XHRcdFx0dTMyIHJ4a2FkX25vbmNlO1xuIFx0XHRcdH07XG5AQCAtMzEwLDEzICYjNDM7MzA1LDYgQEAgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHtcbiBcdGJvb2wgKCp2YWxpZGF0ZV9jaGFsbGVuZ2UpKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4tXHQvKiBGaWxsIG91dCB0aGUgY21zZyBmb3IgcmVjdm1zZygpIHRvIHBhc3Mgb24gYSBjaGFsbGVuZ2UgdG8gdXNlcnNwYWNlLlxuLVx0ICogVGhlIHNlY3VyaXR5IGNsYXNzIGdldHMgdG8gYWRkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG4tXHQgKi9cbi1cdGludCAoKmNoYWxsZW5nZV90b19yZWN2bXNnKShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBtc2doZHIgKm1zZyk7XG4tXG4gXHQvKiBQYXJzZSBzZW5kbXNnKCkgY29udHJvbCBtZXNzYWdlIGFuZCByZXNwb25kIHRvIGNoYWxsZW5nZS4gKi9cbiBcdGludCAoKnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UpKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbXNnaGRyICptc2cpO1xuQEAgLTUxNiw2ICYjNDM7NTA0LDcgQEAgc3RydWN0IHJ4cnBjX2J1bmRsZSB7XG4gXHRzdHJ1Y3QgcnhycGNfbG9jYWxcdCpsb2NhbDtcdFx0LyogUmVwcmVzZW50YXRpb24gb2YgbG9jYWwgZW5kcG9pbnQgKi9cbiBcdHN0cnVjdCByeHJwY19wZWVyXHQqcGVlcjtcdFx0LyogUmVtb3RlIGVuZHBvaW50ICovXG4gXHRzdHJ1Y3Qga2V5XHRcdCprZXk7XHRcdC8qIFNlY3VyaXR5IGRldGFpbHMgKi9cbiYjNDM7XHRzdHJ1Y3Qga2V5XHRcdCphcHBfZGF0YTtcdC8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRwcm9jX2xpbms7XHQvKiBMaW5rIGluIG5ldC1cdTAwM2VidW5kbGVfcHJvY19saXN0ICovXG4gXHRjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5O1x0LyogYXBwbGllZCBzZWN1cml0eSBtb2R1bGUgKi9cbiBcdHJlZmNvdW50X3RcdFx0cmVmO1xuQEAgLTcxOSw2ICYjNDM7NzA4LDcgQEAgc3RydWN0IHJ4cnBjX2NhbGwge1xuIFx0c3RydWN0IHJ4cnBjX3NvY2sgX19yY3VcdCpzb2NrZXQ7XHQvKiBzb2NrZXQgcmVzcG9uc2libGUgKi9cbiBcdHN0cnVjdCByeHJwY19uZXRcdCpyeG5ldDtcdFx0LyogTmV0d29yayBuYW1lc3BhY2UgdG8gd2hpY2ggY2FsbCBiZWxvbmdzICovXG4gXHRzdHJ1Y3Qga2V5XHRcdCprZXk7XHRcdC8qIFNlY3VyaXR5IGRldGFpbHMgKi9cbiYjNDM7XHRzdHJ1Y3Qga2V5XHRcdCphcHBfZGF0YTtcdC8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovXG4gXHRjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5O1x0LyogYXBwbGllZCBzZWN1cml0eSBtb2R1bGUgKi9cbiBcdHN0cnVjdCBtdXRleFx0XHR1c2VyX211dGV4O1x0LyogVXNlciBhY2Nlc3MgbXV0ZXggKi9cbiBcdHN0cnVjdCBzb2NrYWRkcl9yeHJwY1x0ZGVzdF9zcng7XHQvKiBEZXN0aW5hdGlvbiBhZGRyZXNzICovXG5AQCAtOTEzLDYgJiM0Mzs5MDMsNyBAQCBlbnVtIHJ4cnBjX2NvbW1hbmQge1xuIH07XG4gXG4gc3RydWN0IHJ4cnBjX2NhbGxfcGFyYW1zIHtcbiYjNDM7XHRzdHJ1Y3Qga2V5XHRcdCphcHBfZGF0YTtcdC8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovXG4gXHRzNjRcdFx0XHR0eF90b3RhbF9sZW47XHQvKiBUb3RhbCBUeCBkYXRhIGxlbmd0aCAoaWYgc2VuZCBkYXRhKSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHR1c2VyX2NhbGxfSUQ7XHQvKiBVc2VyJiMzOTtzIGNhbGwgSUQgKi9cbiBcdHN0cnVjdCB7XG5AQCAtMTM3NSwxMyAmIzQzOzEzNjYsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCByeHJwY19uZXQgKnJ4cnBjX25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRyZXR1cm4gbmV0X2dlbmVyaWMobmV0LCByeHJwY19uZXRfaWQpO1xuIH1cbiBcbi0vKlxuLSAqIG9vYi5jXG4tICovXG4tYm9vbCByeHJwY19ub3RpZnlfc29ja2V0X29vYihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tdm9pZCByeHJwY19hZGRfcGVuZGluZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi1pbnQgcnhycGNfc2VuZG1zZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pO1xuLVxuIC8qXG4gICogb3V0cHV0LmNcbiAgKi9cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY2FsbF9vYmplY3QuYyBiL25ldC9yeHJwYy9jYWxsX29iamVjdC5jXG5pbmRleCA4MTdlZDlhY2I5MWU2MS4uMmRmM2QwMTkwYTg5MTggMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY2FsbF9vYmplY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmNcbkBAIC0xOTgsNyAmIzQzOzE5OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfYWxsb2NfY2xpZW50X2NhbGwoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0a3RpbWVfdCBub3c7XG4gXHRpbnQgcmV0O1xuIFxuLVx0X2VudGVyKFwmIzM0O1wmIzM0Oyk7XG4mIzQzO1x0X2VudGVyKFwmIzM0OyVwXCYjMzQ7LCBwLVx1MDAzZWFwcF9kYXRhKTtcbiBcbiBcdGNhbGwgPSByeHJwY19hbGxvY19jYWxsKHJ4LCBnZnAsIGRlYnVnX2lkKTtcbiBcdGlmICghY2FsbClcbkBAIC0yMTEsNiAmIzQzOzIxMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfYWxsb2NfY2xpZW50X2NhbGwoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0Y2FsbC1cdTAwM2VpbnRlcnJ1cHRpYmlsaXR5XHQ9IHAtXHUwMDNlaW50ZXJydXB0aWJpbGl0eTtcbiBcdGNhbGwtXHUwMDNldHhfdG90YWxfbGVuXHQ9IHAtXHUwMDNldHhfdG90YWxfbGVuO1xuIFx0Y2FsbC1cdTAwM2VrZXlcdFx0PSBrZXlfZ2V0KGNwLVx1MDAzZWtleSk7XG4mIzQzO1x0Y2FsbC1cdTAwM2VhcHBfZGF0YVx0XHQ9IGtleV9nZXQocC1cdTAwM2VhcHBfZGF0YSk7XG4gXHRjYWxsLVx1MDAzZXBlZXJcdFx0PSByeHJwY19nZXRfcGVlcihjcC1cdTAwM2VwZWVyLCByeHJwY19wZWVyX2dldF9jYWxsKTtcbiBcdGNhbGwtXHUwMDNlbG9jYWxcdFx0PSByeHJwY19nZXRfbG9jYWwoY3AtXHUwMDNlbG9jYWwsIHJ4cnBjX2xvY2FsX2dldF9jYWxsKTtcbiBcdGNhbGwtXHUwMDNlc2VjdXJpdHlfbGV2ZWxcdD0gY3AtXHUwMDNlc2VjdXJpdHlfbGV2ZWw7XG5AQCAtNjk3LDYgJiM0Mzs2OTgsNyBAQCBzdGF0aWMgdm9pZCByeHJwY19kZXN0cm95X2NhbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cnhycGNfcHV0X3BlZXIoY2FsbC1cdTAwM2VwZWVyLCByeHJwY19wZWVyX3B1dF9jYWxsKTtcbiBcdHJ4cnBjX3B1dF9sb2NhbChjYWxsLVx1MDAzZWxvY2FsLCByeHJwY19sb2NhbF9wdXRfY2FsbCk7XG4gXHRrZXlfcHV0KGNhbGwtXHUwMDNla2V5KTtcbiYjNDM7XHRrZXlfcHV0KGNhbGwtXHUwMDNlYXBwX2RhdGEpO1xuIFx0Y2FsbF9yY3UoXHUwMDI2Y2FsbC1cdTAwM2VyY3UsIHJ4cnBjX3JjdV9mcmVlX2NhbGwpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY29ubl9jbGllbnQuYyBiL25ldC9yeHJwYy9jb25uX2NsaWVudC5jXG5pbmRleCA0ODUxOWYwZGUxODUzOS4uNWNiZmE3YjIyM2UwMTEgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY29ubl9jbGllbnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2Nvbm5fY2xpZW50LmNcbkBAIC04MSw2ICYjNDM7ODEsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2J1bmRsZSAqcnhycGNfYWxsb2NfYnVuZGxlKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRidW5kbGUtXHUwMDNlbG9jYWxcdFx0PSBjYWxsLVx1MDAzZWxvY2FsO1xuIFx0XHRidW5kbGUtXHUwMDNlcGVlclx0XHQ9IHJ4cnBjX2dldF9wZWVyKGNhbGwtXHUwMDNlcGVlciwgcnhycGNfcGVlcl9nZXRfYnVuZGxlKTtcbiBcdFx0YnVuZGxlLVx1MDAzZWtleVx0XHQ9IGtleV9nZXQoY2FsbC1cdTAwM2VrZXkpO1xuJiM0MztcdFx0YnVuZGxlLVx1MDAzZWFwcF9kYXRhXHQ9IGtleV9nZXQoY2FsbC1cdTAwM2VhcHBfZGF0YSk7XG4gXHRcdGJ1bmRsZS1cdTAwM2VzZWN1cml0eVx0PSBjYWxsLVx1MDAzZXNlY3VyaXR5O1xuIFx0XHRidW5kbGUtXHUwMDNlZXhjbHVzaXZlXHQ9IHRlc3RfYml0KFJYUlBDX0NBTExfRVhDTFVTSVZFLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKTtcbiBcdFx0YnVuZGxlLVx1MDAzZXVwZ3JhZGVcdFx0PSB0ZXN0X2JpdChSWFJQQ19DQUxMX1VQR1JBREUsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpO1xuQEAgLTExOCw2ICYjNDM7MTE5LDcgQEAgc3RhdGljIHZvaWQgcnhycGNfZnJlZV9idW5kbGUoc3RydWN0IHJ4cnBjX2J1bmRsZSAqYnVuZGxlKVxuIFx0d3JpdGVfdW5sb2NrKFx1MDAyNmJ1bmRsZS1cdTAwM2Vsb2NhbC1cdTAwM2VyeG5ldC1cdTAwM2Vjb25uX2xvY2spO1xuIFx0cnhycGNfcHV0X3BlZXIoYnVuZGxlLVx1MDAzZXBlZXIsIHJ4cnBjX3BlZXJfcHV0X2J1bmRsZSk7XG4gXHRrZXlfcHV0KGJ1bmRsZS1cdTAwM2VrZXkpO1xuJiM0MztcdGtleV9wdXQoYnVuZGxlLVx1MDAzZWFwcF9kYXRhKTtcbiBcdGtmcmVlKGJ1bmRsZSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX2V2ZW50LmMgYi9uZXQvcnhycGMvY29ubl9ldmVudC5jXG5pbmRleCA2MTFjNzkwYmM2ZDBjZS4uOTE0NmI5ZDRjMmFjNTAgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY29ubl9ldmVudC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY29ubl9ldmVudC5jXG5AQCAtMjc5LDEwICYjNDM7Mjc5LDcgQEAgc3RhdGljIGludCByeHJwY19wcm9jZXNzX2V2ZW50KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFxuIFx0c3dpdGNoIChzcC1cdTAwM2VoZHIudHlwZSkge1xuIFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9DSEFMTEVOR0U6XG4tXHRcdHJldCA9IGNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlcmVzcG9uZF90b19jaGFsbGVuZ2UoY29ubiwgc2tiKTtcbi1cdFx0c3AtXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XG4tXHRcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VyZXNwb25kX3RvX2NoYWxsZW5nZShjb25uLCBza2IpO1xuIFxuIFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9SRVNQT05TRTpcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjb25uLVx1MDAzZXN0YXRlX2xvY2spO1xuQEAgLTQyNSw2NiAmIzQzOzQyMiw2IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRyeHJwY19xdWV1ZV9jb25uKGNvbm4sIHJ4cnBjX2Nvbm5fcXVldWVfcnhfd29yayk7XG4gfVxuIFxuLS8qXG4tICogUG9zdCBhIENIQUxMRU5HRSBwYWNrZXQgdG8gdGhlIHNvY2tldCBvZiBvbmUgb2YgYSBjb25uZWN0aW9uJiMzOTtzIGNhbGxzIHNvIHRoYXRcbi0gKiBpdCBjYW4gZ2V0IGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgcGFja2V0LCBwb3NzaWJseSBxdWVyeWluZ1xuLSAqIHVzZXJzcGFjZS5cbi0gKi9cbi1zdGF0aWMgYm9vbCByeHJwY19wb3N0X2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTtcbi1cdHN0cnVjdCByeHJwY19jYWxsICpjYWxsID0gTlVMTDtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbi1cdGJvb2wgcmVzcG9uZCA9IGZhbHNlLCBxdWV1ZWQgPSBmYWxzZTtcbi1cbi1cdHNwLVx1MDAzZWNoYWxsLmNvbm4gPVxuLVx0XHRyeHJwY19nZXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX2dldF9jaGFsbGVuZ2VfaW5wdXQpO1xuLVxuLVx0aWYgKCFjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZWNoYWxsZW5nZV90b19yZWN2bXNnKSB7XG4tXHRcdHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjb25uLVx1MDAzZWNoYW5uZWxzKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKGNvbm4tXHUwMDNlY2hhbm5lbHNbaV0uY2FsbCkge1xuLVx0XHRcdGNhbGwgPSBjb25uLVx1MDAzZWNoYW5uZWxzW2ldLmNhbGw7XG4tXHRcdFx0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cdTAwM2Vzb2NrZXQpO1xuLVx0XHRcdGlmICghcngpIHtcbi1cdFx0XHRcdGNhbGwgPSBOVUxMO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdHJlc3BvbmQgPSB0cnVlO1xuLVx0XHRcdGlmICh0ZXN0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXHUwMDI2cngtXHUwMDNlZmxhZ3MpKVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0Y2FsbCA9IE5VTEw7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdGlmICghcmVzcG9uZCkge1xuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTtcbi1cdFx0c3AtXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbi1cbi1cdGlmIChjYWxsKVxuLVx0XHRxdWV1ZWQgPSByeHJwY19ub3RpZnlfc29ja2V0X29vYihjYWxsLCBza2IpO1xuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRpZiAoY2FsbCBcdTAwMjZcdTAwMjYgIXF1ZXVlZCkge1xuLVx0XHRyeHJwY19wdXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQpO1xuLVx0XHRzcC1cdTAwM2VjaGFsbC5jb25uID0gTlVMTDtcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0fVxuLVxuLVx0aWYgKCFjYWxsKVxuLVx0XHRyeHJwY19wb3N0X3BhY2tldF90b19jb25uKGNvbm4sIHNrYik7XG4tXHRyZXR1cm4gdHJ1ZTtcbi19XG4tXG4gLypcbiAgKiBJbnB1dCBhIGNvbm5lY3Rpb24tbGV2ZWwgcGFja2V0LlxuICAqL1xuQEAgLTUxMyw3ICYjNDM7NDUwLDggQEAgYm9vbCByeHJwY19pbnB1dF9jb25uX3BhY2tldChzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0fVxuIFx0XHRpZiAoIWNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNldmFsaWRhdGVfY2hhbGxlbmdlKGNvbm4sIHNrYikpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHRyZXR1cm4gcnhycGNfcG9zdF9jaGFsbGVuZ2UoY29ubiwgc2tiKTtcbiYjNDM7XHRcdHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTtcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9SRVNQT05TRTpcbiBcdFx0aWYgKHJ4cnBjX2lzX2Nvbm5fYWJvcnRlZChjb25uKSkge1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9rZXkuYyBiL25ldC9yeHJwYy9rZXkuY1xuaW5kZXggYTBhYTc4ZDg5Mjg5N2YuLjJkZGRiZTNjYWQ1Y2ZjIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2tleS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMva2V5LmNcbkBAIC04OTMsMyAmIzQzOzg5MywzOSBAQCBzdGF0aWMgbG9uZyByeHJwY19yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSxcbiBcdF9sZWF2ZShcJiMzNDsgPSAlenVcJiMzNDssIHNpemUpO1xuIFx0cmV0dXJuIHNpemU7XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkgLSBRdWVyeSBwYXJhbWV0ZXJzIGZyb20gYW4gcnhycGMga2V5XG4mIzQzOyAqIEBrZXk6IFRoZSBrZXkgdG8gcXVlcnlcbiYjNDM7ICogQF9zZWN1cml0eV9pbmRleDogV2hlcmUgdG8gcmV0dXJuIHRoZSBzZWN1cml0eSBpbmRleFxuJiM0MzsgKiBAX2tyYjVfZW5jdHlwZTogV2hlcmUgdG8gcmV0dXJuIHRoZSBrcmI1IGVuY3J5cHRpb24gdHlwZSBpZiBhcHBsaWNhYmxlXG4mIzQzOyAqXG4mIzQzOyAqIFF1ZXJ5IGFuIHJ4cnBjIGF1dGhlbnRpY2F0aW9uIGtleSwgZXh0cmFjdGluZyB0aGUgc2VjdXJpdHkgaW5kZXggZnJvbSB0aGVcbiYjNDM7ICogZmlyc3QgdG9rZW4gdGhlcmVpbi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2tleShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHU4ICpfc2VjdXJpdHlfaW5kZXgsIHUzMiAqX2tyYjVfZW5jdHlwZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCByeHJwY19rZXlfdG9rZW4gKnRva2VuO1xuJiM0MztcbiYjNDM7XHR0b2tlbiA9IGtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF07XG4mIzQzO1x0aWYgKCF0b2tlbikge1xuJiM0MztcdFx0Kl9zZWN1cml0eV9pbmRleCA9IDA7XG4mIzQzO1x0XHQqX2tyYjVfZW5jdHlwZSA9IDA7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqX3NlY3VyaXR5X2luZGV4ID0gdG9rZW4tXHUwMDNlc2VjdXJpdHlfaW5kZXg7XG4mIzQzO1x0c3dpdGNoICh0b2tlbi1cdTAwM2VzZWN1cml0eV9pbmRleCkge1xuJiM0MztcdGNhc2UgUlhSUENfU0VDVVJJVFlfUlhLQUQ6XG4mIzQzO1x0XHQqX2tyYjVfZW5jdHlwZSA9IDA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxuJiM0MztcdFx0Kl9rcmI1X2VuY3R5cGUgPSB0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZWVuY3R5cGU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0V0FSTl9PTl9PTkNFKDEpO1xuJiM0MztcdFx0Kl9rcmI1X2VuY3R5cGUgPSAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3F1ZXJ5X2tleSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL29vYi5jIGIvbmV0L3J4cnBjL29vYi5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGM4MGVlMjQ4N2QwOTQxLi4wMDAwMDAwMDAwMDAwMFxuLS0tIGEvbmV0L3J4cnBjL29vYi5jXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSwzODcgJiM0MzswLDAgQEBcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuLS8qIE91dCBvZiBiYW5kIG1lc3NhZ2UgaGFuZGxpbmcgKGUuZy4gY2hhbGxlbmdlLXJlc3BvbnNlKVxuLSAqXG4tICogQ29weXJpZ2h0IChDKSAyMDI1IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pXG4tICovXG4tXG4tI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcJiMzNDs6IFwmIzM0OyBmbXRcbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY25ldC9hZl9yeHJwYy5oXHUwMDNlXG4tI2luY2x1ZGUgXCYjMzQ7YXItaW50ZXJuYWwuaFwmIzM0O1xuLVxuLWVudW0gcnhycGNfb29iX2NvbW1hbmQge1xuLVx0UlhSUENfT09CX0NNRF9VTlNFVCxcbi1cdFJYUlBDX09PQl9DTURfUkVTUE9ORCxcbi19IF9fbW9kZShieXRlKTtcbi1cbi1zdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyB7XG4tXHR1NjRcdFx0XHRvb2JfaWQ7XHRcdC8qIElEIG51bWJlciBvZiBtZXNzYWdlIGlmIHJlcGx5ICovXG4tXHRzMzJcdFx0XHRhYm9ydF9jb2RlO1xuLVx0ZW51bSByeHJwY19vb2JfY29tbWFuZFx0Y29tbWFuZDtcbi1cdGJvb2xcdFx0XHRoYXZlX29vYl9pZDoxO1xuLX07XG4tXG4tLypcbi0gKiBQb3N0IGFuIG91dC1vZi1iYW5kIG1lc3NhZ2UgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlXG4tICogYXNzb2NpYXRlZCB3aXRoIGEgcmVmZXJlbmNlIGNhbGwuXG4tICovXG4tYm9vbCByeHJwY19ub3RpZnlfc29ja2V0X29vYihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKHNrYik7XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcng7XG4tXHRzdHJ1Y3Qgc29jayAqc2s7XG4tXHRib29sIHF1ZXVlZCA9IGZhbHNlO1xuLVxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVxuLVx0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cdTAwM2Vzb2NrZXQpO1xuLVx0aWYgKHJ4KSB7XG4tXHRcdHNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4tXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbi1cbi1cdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlIFx1MDAzYyBSWFJQQ19DTE9TRSkge1xuLVx0XHRcdHNrYi1cdTAwM2Vza2JfbXN0YW1wX25zID0gcngtXHUwMDNlb29iX2lkX2NvdW50ZXImIzQzOyYjNDM7O1xuLVx0XHRcdHJ4cnBjX2dldF9za2Ioc2tiLCByeHJwY19za2JfZ2V0X3Bvc3Rfb29iKTtcbi1cdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEsIHNrYik7XG4tXHRcdFx0cXVldWVkID0gdHJ1ZTtcbi1cbi1cdFx0XHR0cmFjZV9yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwtXHUwMDNlZGVidWdfaWQsIHNwLVx1MDAzZWhkci5zZXJpYWwpO1xuLVx0XHRcdGlmIChyeC1cdTAwM2VhcHBfb3BzKVxuLVx0XHRcdFx0cngtXHUwMDNlYXBwX29wcy1cdTAwM2Vub3RpZnlfb29iKHNrLCBza2IpO1xuLVx0XHR9XG4tXG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuLVx0XHRpZiAocXVldWVkIFx1MDAyNlx1MDAyNiAhcngtXHUwMDNlYXBwX29wcyBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcbi1cdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbi1cdH1cbi1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0cmV0dXJuIHF1ZXVlZDtcbi19XG4tXG4tLypcbi0gKiBMb2NhdGUgdGhlIE9PQiBtZXNzYWdlIHRvIHJlc3BvbmQgdG8gYnkgaXRzIElELlxuLSAqL1xuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfZmluZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHU2NCBvb2JfaWQpXG4te1xuLVx0c3RydWN0IHJiX25vZGUgKnA7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLVxuLVx0cCA9IHJ4LVx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlO1xuLVx0d2hpbGUgKHApIHtcbi1cdFx0c2tiID0gcmJfZW50cnkocCwgc3RydWN0IHNrX2J1ZmYsIHJibm9kZSk7XG4tXG4tXHRcdGlmIChvb2JfaWQgXHUwMDNjIHNrYi1cdTAwM2Vza2JfbXN0YW1wX25zKVxuLVx0XHRcdHAgPSBwLVx1MDAzZXJiX2xlZnQ7XG4tXHRcdGVsc2UgaWYgKG9vYl9pZCBcdTAwM2Ugc2tiLVx1MDAzZXNrYl9tc3RhbXBfbnMpXG4tXHRcdFx0cCA9IHAtXHUwMDNlcmJfcmlnaHQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXR1cm4gc2tiO1xuLVx0fVxuLVxuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLVxuLS8qXG4tICogQWRkIGFuIE9PQiBtZXNzYWdlIGludG8gdGhlIHBlbmRpbmctcmVzcG9uc2Ugc2V0LiAgV2UgYWx3YXlzIGFzc2lnbiB0aGUgbmV4dFxuLSAqIHZhbHVlIGZyb20gYSA2NC1iaXQgY291bnRlciB0byB0aGUgb29iX2lkLCBzbyBqdXN0IGFzc3VtZSB3ZSYjMzk7cmUgYWx3YXlzIGdvaW5nXG4tICogdG8gYmUgb24gdGhlIHJpZ2h0LWhhbmQgZWRnZSBvZiB0aGUgdHJlZSBhbmQgdGhhdCB0aGUgY291bnRlciB3b24mIzM5O3Qgd3JhcC5cbi0gKiBUaGUgdHJlZSBpcyBhbHNvIGdpdmVuIGEgcmVmIHRvIHRoZSBtZXNzYWdlLlxuLSAqL1xuLXZvaWQgcnhycGNfYWRkX3BlbmRpbmdfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi17XG4tXHRzdHJ1Y3QgcmJfbm9kZSAqKnBwID0gXHUwMDI2cngtXHUwMDNlcGVuZGluZ19vb2JxLnJiX25vZGUsICpwID0gTlVMTDtcbi1cbi1cdHdoaWxlICgqcHApIHtcbi1cdFx0cCA9ICpwcDtcbi1cdFx0cHAgPSBcdTAwMjYoKnBwKS1cdTAwM2VyYl9yaWdodDtcbi1cdH1cbi1cbi1cdHJiX2xpbmtfbm9kZShcdTAwMjZza2ItXHUwMDNlcmJub2RlLCBwLCBwcCk7XG4tXHRyYl9pbnNlcnRfY29sb3IoXHUwMDI2c2tiLVx1MDAzZXJibm9kZSwgXHUwMDI2cngtXHUwMDNlcGVuZGluZ19vb2JxKTtcbi19XG4tXG4tLypcbi0gKiBFeHRyYWN0IGNvbnRyb2wgbWVzc2FnZXMgZnJvbSB0aGUgc2VuZG1zZygpIGNvbnRyb2wgYnVmZmVyLlxuLSAqL1xuLXN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19vb2JfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19vb2JfcGFyYW1zICpwKVxuLXtcbi1cdHN0cnVjdCBjbXNnaGRyICpjbXNnO1xuLVx0aW50IGxlbjtcbi1cbi1cdGlmIChtc2ctXHUwMDNlbXNnX2NvbnRyb2xsZW4gPT0gMClcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRmb3JfZWFjaF9jbXNnaGRyKGNtc2csIG1zZykge1xuLVx0XHRpZiAoIUNNU0dfT0sobXNnLCBjbXNnKSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdFx0bGVuID0gY21zZy1cdTAwM2VjbXNnX2xlbiAtIHNpemVvZihzdHJ1Y3QgY21zZ2hkcik7XG4tXHRcdF9kZWJ1ZyhcJiMzNDtDTVNHICVkLCAlZCwgJWRcJiMzNDssXG4tXHRcdCAgICAgICBjbXNnLVx1MDAzZWNtc2dfbGV2ZWwsIGNtc2ctXHUwMDNlY21zZ190eXBlLCBsZW4pO1xuLVxuLVx0XHRpZiAoY21zZy1cdTAwM2VjbXNnX2xldmVsICE9IFNPTF9SWFJQQylcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0c3dpdGNoIChjbXNnLVx1MDAzZWNtc2dfdHlwZSkge1xuLVx0XHRjYXNlIFJYUlBDX09PQl9JRDpcbi1cdFx0XHRpZiAobGVuICE9IHNpemVvZihwLVx1MDAzZW9vYl9pZCkgfHwgcC1cdTAwM2VoYXZlX29vYl9pZClcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdG1lbWNweShcdTAwMjZwLVx1MDAzZW9vYl9pZCwgQ01TR19EQVRBKGNtc2cpLCBzaXplb2YocC1cdTAwM2Vvb2JfaWQpKTtcbi1cdFx0XHRwLVx1MDAzZWhhdmVfb29iX2lkID0gdHJ1ZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBSWFJQQ19SRVNQT05EOlxuLVx0XHRcdGlmIChwLVx1MDAzZWNvbW1hbmQgIT0gUlhSUENfT09CX0NNRF9VTlNFVClcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdHAtXHUwMDNlY29tbWFuZCA9IFJYUlBDX09PQl9DTURfUkVTUE9ORDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBSWFJQQ19BQk9SVDpcbi1cdFx0XHRpZiAobGVuICE9IHNpemVvZihwLVx1MDAzZWFib3J0X2NvZGUpIHx8IHAtXHUwMDNlYWJvcnRfY29kZSlcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdG1lbWNweShcdTAwMjZwLVx1MDAzZWFib3J0X2NvZGUsIENNU0dfREFUQShjbXNnKSwgc2l6ZW9mKHAtXHUwMDNlYWJvcnRfY29kZSkpO1xuLVx0XHRcdGlmIChwLVx1MDAzZWFib3J0X2NvZGUgPT0gMClcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBOlxuLVx0XHRcdGlmIChwLVx1MDAzZWNvbW1hbmQgIT0gUlhSUENfT09CX0NNRF9SRVNQT05EKVxuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHN3aXRjaCAocC1cdTAwM2Vjb21tYW5kKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DTURfUkVTUE9ORDpcbi1cdFx0aWYgKCFwLVx1MDAzZWhhdmVfb29iX2lkKVxuLVx0XHRcdHJldHVybiAtRUJBRFNMVDtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi0vKlxuLSAqIEFsbG93IHVzZXJzcGFjZSB0byByZXNwb25kIHRvIGFuIE9PQiB1c2luZyBzZW5kbXNnKCkuXG4tICovXG4tc3RhdGljIGludCByeHJwY19yZXNwb25kX3RvX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4tXHRcdFx0XHRzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyAqcCxcbi1cdFx0XHRcdHN0cnVjdCBtc2doZHIgKm1zZylcbi17XG4tXHRzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubjtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3A7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLVx0aW50IHJldDtcbi1cbi1cdHNrYiA9IHJ4cnBjX2ZpbmRfcGVuZGluZ19vb2IocngsIHAtXHUwMDNlb29iX2lkKTtcbi1cdGlmIChza2IpXG4tXHRcdHJiX2VyYXNlKFx1MDAyNnNrYi1cdTAwM2VyYm5vZGUsIFx1MDAyNnJ4LVx1MDAzZXBlbmRpbmdfb29icSk7XG4tXHRyZWxlYXNlX3NvY2soXHUwMDI2cngtXHUwMDNlc2spO1xuLVx0aWYgKCFza2IpXG4tXHRcdHJldHVybiAtRUJBRFNMVDtcbi1cbi1cdHNwID0gcnhycGNfc2tiKHNrYik7XG4tXG4tXHRzd2l0Y2ggKHAtXHUwMDNlY29tbWFuZCkge1xuLVx0Y2FzZSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQ6XG4tXHRcdHJldCA9IC1FUFJPVE87XG4tXHRcdGlmIChza2ItXHUwMDNlbWFyayAhPSBSWFJQQ19PT0JfQ0hBTExFTkdFKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRjb25uID0gc3AtXHUwMDNlY2hhbGwuY29ubjtcbi1cdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4tXHRcdGlmICghY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VzZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAocC1cdTAwM2VhYm9ydF9jb2RlKSB7XG4tXHRcdFx0cnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBwLVx1MDAzZWFib3J0X2NvZGUsIC1FQ09OTkFCT1JURUQsXG4tXHRcdFx0XHRcdCByeHJwY19hYm9ydF9yZXNwb25zZV9zZW5kbXNnKTtcbi1cdFx0XHRyZXQgPSAwO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHJldCA9IGNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZShza2IsIG1zZyk7XG4tXHRcdH1cbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdHN3aXRjaCAoc2tiLVx1MDAzZW1hcmspIHtcbi1cdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcbi1cdFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtXHUwMDNlY2hhbGwuY29ubiwgcnhycGNfY29ubl9wdXRfb29iKTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXHRyeHJwY19mcmVlX3NrYihza2IsIHJ4cnBjX3NrYl9wdXRfb29iKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLS8qXG4tICogU2VuZCBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlIG9yIHJlc3BvbmQgdG8gYSByZWNlaXZlZCBvdXQtb2YtYmFuZCBtZXNzYWdlLlxuLSAqIC0gY2FsbGVyIGdpdmVzIHVzIHRoZSBzb2NrZXQgbG9ja1xuLSAqIC0gdGhlIHNvY2tldCBtYXkgYmUgZWl0aGVyIGEgY2xpZW50IHNvY2tldCBvciBhIHNlcnZlciBzb2NrZXRcbi0gKi9cbi1pbnQgcnhycGNfc2VuZG1zZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4te1xuLVx0c3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgcCA9IHt9O1xuLVx0aW50IHJldDtcbi1cbi1cdF9lbnRlcihcJiMzNDtcJiMzNDspO1xuLVxuLVx0cmV0ID0gcnhycGNfc2VuZG1zZ19vb2JfY21zZyhtc2csIFx1MDAyNnApO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJvcl9yZWxlYXNlX3NvY2s7XG4tXG4tXHRpZiAocC5oYXZlX29vYl9pZClcbi1cdFx0cmV0dXJuIHJ4cnBjX3Jlc3BvbmRfdG9fb29iKHJ4LCBcdTAwMjZwLCBtc2cpO1xuLVxuLVx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbi1cbi1cdHN3aXRjaCAocC5jb21tYW5kKSB7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbi1cdHJldHVybiByZXQ7XG4tXG4tZXJyb3JfcmVsZWFzZV9zb2NrOlxuLVx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLS8qKlxuLSAqIHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2IgLSBRdWVyeSB0aGUgcGFyYW1ldGVycyBvZiBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlXG4tICogQG9vYjogVGhlIG1lc3NhZ2UgdG8gcXVlcnlcbi0gKiBAX3BlZXI6IFdoZXJlIHRvIHJldHVybiB0aGUgcGVlciByZWNvcmRcbi0gKiBAX3BlZXJfYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgYXR0YWNoZWQgdG8gYSBwZWVyIHJlY29yZFxuLSAqXG4tICogRXh0cmFjdCB1c2VmdWwgcGFyYW1ldGVycyBmcm9tIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2UuICBUaGUgc291cmNlIHBlZXJcbi0gKiBwYXJhbWV0ZXJzIGFyZSByZXR1cm5lZCB0aHJvdWdoIHRoZSBhcmd1bWVudCBsaXN0IGFuZCB0aGUgbWVzc2FnZSB0eXBlIGlzXG4tICogcmV0dXJuZWQuXG4tICpcbi0gKiBSZXR1cm46XG4tICogKiAlUlhSUENfT09CX0NIQUxMRU5HRSAtIENoYWxsZW5nZSB3YW50aW5nIGEgcmVzcG9uc2UuXG4tICovXG4tZW51bSByeHJwY19vb2JfdHlwZSByeHJwY19rZXJuZWxfcXVlcnlfb29iKHN0cnVjdCBza19idWZmICpvb2IsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXG4tXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihvb2IpO1xuLVx0ZW51bSByeHJwY19vb2JfdHlwZSB0eXBlID0gb29iLVx1MDAzZW1hcms7XG4tXG4tXHRzd2l0Y2ggKHR5cGUpIHtcbi1cdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcbi1cdFx0Kl9wZWVyXHRcdD0gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VwZWVyO1xuLVx0XHQqX3BlZXJfYXBwZGF0YVx0PSBzcC1cdTAwM2VjaGFsbC5jb25uLVx1MDAzZXBlZXItXHUwMDNlYXBwX2RhdGE7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0V0FSTl9PTl9PTkNFKDEpO1xuLVx0XHQqX3BlZXJcdFx0PSBOVUxMO1xuLVx0XHQqX3BlZXJfYXBwZGF0YVx0PSAwO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdHJldHVybiB0eXBlO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2IpO1xuLVxuLS8qKlxuLSAqIHJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYiAtIERlcXVldWUgYW5kIHJldHVybiB0aGUgZnJvbnQgT09CIG1lc3NhZ2Vcbi0gKiBAc29jazogVGhlIHNvY2tldCB0byBxdWVyeVxuLSAqIEBfdHlwZTogV2hlcmUgdG8gcmV0dXJuIHRoZSBtZXNzYWdlIHR5cGVcbi0gKlxuLSAqIERlcXVldWUgdGhlIGZyb250IE9PQiBtZXNzYWdlLCBpZiB0aGVyZSBpcyBvbmUsIGFuZCByZXR1cm4gaXQgYW5kXG4tICogaXRzIHR5cGUuXG4tICpcbi0gKiBSZXR1cm46IFRoZSBza19idWZmIHJlcHJlc2VudGluZyB0aGUgT09CIG1lc3NhZ2Ugb3IgJU5VTEwgaWYgdGhlIHF1ZXVlIHdhc1xuLSAqIGVtcHR5LlxuLSAqL1xuLXN0cnVjdCBza19idWZmICpyeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2Ioc3RydWN0IHNvY2tldCAqc29jayxcbi1cdFx0XHRcdFx0IGVudW0gcnhycGNfb29iX3R5cGUgKl90eXBlKVxuLXtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stXHUwMDNlc2spO1xuLVx0c3RydWN0IHNrX2J1ZmYgKm9vYjtcbi1cbi1cdG9vYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSk7XG4tXHRpZiAob29iKVxuLVx0XHQqX3R5cGUgPSBvb2ItXHUwMDNlbWFyaztcbi1cdHJldHVybiBvb2I7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX2RlcXVldWVfb29iKTtcbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfZnJlZV9vb2IgLSBGcmVlIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2Vcbi0gKiBAb29iOiBUaGUgT09CIG1lc3NhZ2UgdG8gZnJlZVxuLSAqXG4tICogRnJlZSBhbiBPT0IgbWVzc2FnZSBhbG9uZyB3aXRoIGFueSByZXNvdXJjZXMgaXQgaG9sZHMuXG4tICovXG4tdm9pZCByeHJwY19rZXJuZWxfZnJlZV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYilcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKG9vYik7XG4tXG4tXHRzd2l0Y2ggKG9vYi1cdTAwM2VtYXJrKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XG4tXHRcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKHNwLVx1MDAzZWNoYWxsLmNvbm4sIHJ4cnBjX2Nvbm5fcHV0X29vYik7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0cnhycGNfZnJlZV9za2Iob29iLCByeHJwY19za2JfcHV0X3B1cmdlX29vYik7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX2ZyZWVfb29iKTtcbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlIC0gUXVlcnkgdGhlIHBhcmFtZXRlcnMgb2YgYSBjaGFsbGVuZ2Vcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHF1ZXJ5XG4tICogQF9wZWVyOiBXaGVyZSB0byByZXR1cm4gdGhlIHBlZXIgcmVjb3JkXG4tICogQF9wZWVyX2FwcGRhdGE6IFRoZSBhcHBsaWNhdGlvbiBkYXRhIGF0dGFjaGVkIHRvIGEgcGVlciByZWNvcmRcbi0gKiBAX3NlcnZpY2VfaWQ6IFdoZXJlIHRvIHJldHVybiB0aGUgY29ubmVjdGlvbiBzZXJ2aWNlIElEXG4tICogQF9zZWN1cml0eV9pbmRleDogV2hlcmUgdG8gcmV0dXJuIHRoZSBjb25uZWN0aW9uIHNlY3VyaXR5IGluZGV4XG4tICpcbi0gKiBFeHRyYWN0IHVzZWZ1bCBwYXJhbWV0ZXJzIGZyb20gYSBDSEFMTEVOR0UgbWVzc2FnZS5cbi0gKi9cbi12b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgc3RydWN0IHJ4cnBjX3BlZXIgKipfcGVlcixcbi1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyAqX3BlZXJfYXBwZGF0YSxcbi1cdFx0XHRcdCAgdTE2ICpfc2VydmljZV9pZCwgdTggKl9zZWN1cml0eV9pbmRleClcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XG4tXG4tXHQqX3BlZXJcdFx0PSBzcC1cdTAwM2VjaGFsbC5jb25uLVx1MDAzZXBlZXI7XG4tXHQqX3BlZXJfYXBwZGF0YVx0PSBzcC1cdTAwM2VjaGFsbC5jb25uLVx1MDAzZXBlZXItXHUwMDNlYXBwX2RhdGE7XG4tXHQqX3NlcnZpY2VfaWRcdD0gc3AtXHUwMDNlaGRyLnNlcnZpY2VJZDtcbi1cdCpfc2VjdXJpdHlfaW5kZXggPSBzcC1cdTAwM2VoZHIuc2VjdXJpdHlJbmRleDtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKTtcbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZSAtIEFsbG93IGEga2VybmVsIHNlcnZpY2UgdG8gcmVqZWN0IGEgY2hhbGxlbmdlXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byBiZSByZWplY3RlZFxuLSAqIEBhYm9ydF9jb2RlOiBUaGUgYWJvcnQgY29kZSB0byBzdGljayBpbnRvIHRoZSBBQk9SVCBwYWNrZXRcbi0gKiBAZXJyb3I6IExvY2FsIGVycm9yIHZhbHVlXG4tICogQHdoeTogSW5kaWNhdGlvbiBhcyB0byB3aHkuXG4tICpcbi0gKiBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHJlamVjdCBhIGNoYWxsZW5nZSBieSBhYm9ydGluZyB0aGUgY29ubmVjdGlvbiBpZlxuLSAqIGl0JiMzOTtzIHN0aWxsIGluIGFuIGFib3J0YWJsZSBzdGF0ZS4gIFRoZSBlcnJvciBpcyByZXR1cm5lZCBzbyB0aGlzIGZ1bmN0aW9uXG4tICogY2FuIGJlIHVzZWQgd2l0aCBhIHJldHVybiBzdGF0ZW1lbnQuXG4tICpcbi0gKiBSZXR1cm46IFRoZSAlZXJyb3IgcGFyYW1ldGVyLlxuLSAqL1xuLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSxcbi1cdFx0XHRcdCAgaW50IGVycm9yLCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0X2VudGVyKFwmIzM0O3sleH0sJWQsJWQsJXVcJiMzNDssIHNwLVx1MDAzZWhkci5zZXJpYWwsIGFib3J0X2NvZGUsIGVycm9yLCB3aHkpO1xuLVxuLVx0cnhycGNfYWJvcnRfY29ubihzcC1cdTAwM2VjaGFsbC5jb25uLCBOVUxMLCBhYm9ydF9jb2RlLCBlcnJvciwgd2h5KTtcbi1cdHJldHVybiBlcnJvcjtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3JlY3Ztc2cuYyBiL25ldC9yeHJwYy9yZWN2bXNnLmNcbmluZGV4IGVmY2JhNGIyZTc0ZjBjLi4yODU5YTgwZTE4NzY2MyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yZWN2bXNnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9yZWN2bXNnLmNcbkBAIC0yMTUsNjEgJiM0MzsyMTUsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfdXNlcl9pZChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IG1zZ2hkciAqbXNnLFxuIFx0fVxuIH1cbiBcbi0vKlxuLSAqIERlYWwgd2l0aCBhIENIQUxMRU5HRSBwYWNrZXQuXG4tICovXG4tc3RhdGljIGludCByeHJwY19yZWN2bXNnX2NoYWxsZW5nZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVx0c3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4gPSBzcC1cdTAwM2VjaGFsbC5jb25uO1xuLVxuLVx0cmV0dXJuIGNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlY2hhbGxlbmdlX3RvX3JlY3Ztc2coY29ubiwgY2hhbGxlbmdlLCBtc2cpO1xuLX1cbi1cbi0vKlxuLSAqIFByb2Nlc3MgT09CIHBhY2tldHMuICBDYWxsZWQgd2l0aCB0aGUgc29ja2V0IGxvY2tlZC5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi1cdFx0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncylcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXHRib29sIG5lZWRfcmVzcG9uc2UgPSBmYWxzZTtcbi1cdGludCByZXQ7XG4tXG4tXHRza2IgPSBza2JfcGVlayhcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpO1xuLVx0aWYgKCFza2IpXG4tXHRcdHJldHVybiAtRUFHQUlOO1xuLVx0cnhycGNfc2VlX3NrYihza2IsIHJ4cnBjX3NrYl9zZWVfcmVjdm1zZyk7XG4tXG4tXHRyZXQgPSBwdXRfY21zZyhtc2csIFNPTF9SWFJQQywgUlhSUENfT09CX0lELCBzaXplb2YodTY0KSxcbi1cdFx0ICAgICAgIFx1MDAyNnNrYi1cdTAwM2Vza2JfbXN0YW1wX25zKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHRzd2l0Y2ggKChlbnVtIHJ4cnBjX29vYl90eXBlKXNrYi1cdTAwM2VtYXJrKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XG4tXHRcdG5lZWRfcmVzcG9uc2UgPSB0cnVlO1xuLVx0XHRyZXQgPSByeHJwY19yZWN2bXNnX2NoYWxsZW5nZShzb2NrLCBtc2csIHNrYiwgZmxhZ3MpO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdFdBUk5fT05DRSgxLCBcJiMzNDtyZWN2bXNnKCkgY2FuJiMzOTt0IHByb2Nlc3MgdW5rbm93biBPT0IgdHlwZSAldVxcblwmIzM0Oyxcbi1cdFx0XHQgIHNrYi1cdTAwM2VtYXJrKTtcbi1cdFx0cmV0ID0gLUVJTztcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHRpZiAoIShmbGFncyBcdTAwMjYgTVNHX1BFRUspKSB7XG4tXHRcdHNrYl91bmxpbmsoc2tiLCBcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpO1xuLVx0XHRpZiAobmVlZF9yZXNwb25zZSlcbi1cdFx0XHRyeHJwY19hZGRfcGVuZGluZ19vb2IocngsIHNrYik7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyeHJwY19mcmVlX3NrYihza2IsIHJ4cnBjX3NrYl9wdXRfb29iKTtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuIC8qXG4gICogRGVsaXZlciBtZXNzYWdlcyB0byBhIGNhbGwuICBUaGlzIGtlZXBzIHByb2Nlc3NpbmcgcGFja2V0cyB1bnRpbCB0aGUgYnVmZmVyXG4gICogaXMgZmlsbGVkIGFuZCB3ZSBmaW5kIGVpdGhlciBtb3JlIERBVEEgKHJldHVybnMgMCkgb3IgdGhlIGVuZCBvZiB0aGUgREFUQVxuQEAgLTI4MSw3ICYjNDM7MjI2LDYgQEAgc3RhdGljIGludCByeHJwY19yZWN2bXNnX2RhdGEoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG4gXHRcdFx0ICAgICAgc2l6ZV90IGxlbiwgaW50IGZsYWdzLCBzaXplX3QgKl9vZmZzZXQpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcDtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stXHUwMDNlc2spO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHJ4cnBjX3NlcV90IHNlcSA9IDA7XG4gXHRzaXplX3QgcmVtYWluO1xuQEAgLTM3NiwxMyAmIzQzOzMyMCw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFxuIFx0XHRpZiAoIShmbGFncyBcdTAwMjYgTVNHX1BFRUspKVxuIFx0XHRcdHJ4cnBjX3JvdGF0ZV9yeF93aW5kb3coY2FsbCk7XG4tXG4tXHRcdGlmICghcngtXHUwMDNlYXBwX29wcyBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuLVx0XHRcdHRyYWNlX3J4cnBjX3JlY3ZkYXRhKGNhbGwsIHJ4cnBjX3JlY3Ztc2dfb29icSwgc2VxLFxuLVx0XHRcdFx0XHQgICAgIHJ4X3BrdF9vZmZzZXQsIHJ4X3BrdF9sZW4sIHJldCk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiBcdH1cbiBcbiBvdXQ6XG5AQCAtNDE5LDcgJiM0MzszNTYsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXG4gXHR0cmFjZV9yeHJwY19yZWN2bXNnKDAsIHJ4cnBjX3JlY3Ztc2dfZW50ZXIsIDApO1xuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoTVNHX09PQiB8IE1TR19UUlVOQykpXG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBNU0dfVFJVTkMpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhcdTAwMjZyeC1cdTAwM2VzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG5AQCAtNDMwLDE0ICYjNDM7MzY3LDEyIEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdC8qIFJldHVybiBpbW1lZGlhdGVseSBpZiBhIGNsaWVudCBzb2NrZXQgaGFzIG5vIG91dHN0YW5kaW5nIGNhbGxzICovXG4gXHRpZiAoUkJfRU1QVFlfUk9PVChcdTAwMjZyeC1cdTAwM2VjYWxscykgXHUwMDI2XHUwMDI2XG4gXHQgICAgbGlzdF9lbXB0eShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHJ4LVx1MDAzZXNrLnNrX3N0YXRlICE9IFJYUlBDX1NFUlZFUl9MSVNURU5JTkcpIHtcbiBcdFx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpKSB7XG4mIzQzO1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKSkge1xuIFx0XHRyZXQgPSAtRVdPVUxEQkxPQ0s7XG4gXHRcdGlmICh0aW1lbyA9PSAwKSB7XG4gXHRcdFx0Y2FsbCA9IE5VTEw7XG5AQCAtNDUzLDggJiM0MzszODgsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byB3YWl0X2Vycm9yO1xuIFxuLVx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpIHtcbiYjNDM7XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSkpIHtcbiBcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gXHRcdFx0XHRnb3RvIHdhaXRfaW50ZXJydXB0ZWQ7XG4gXHRcdFx0dHJhY2VfcnhycGNfcmVjdm1zZygwLCByeHJwY19yZWN2bXNnX3dhaXQsIDApO1xuQEAgLTQ2NCwxNSAmIzQzOzM5OCw2IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0Z290byB0cnlfYWdhaW47XG4gXHR9XG4gXG4tXHQvKiBEZWFsIHdpdGggT09CIG1lc3NhZ2VzIGJlZm9yZSB3ZSBjb25zaWRlciBnZXR0aW5nIG5vcm1hbCBkYXRhLiAqL1xuLVx0aWYgKCFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuLVx0XHRyZXQgPSByeHJwY19yZWN2bXNnX29vYihzb2NrLCBtc2csIGZsYWdzKTtcbi1cdFx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbi1cdFx0aWYgKHJldCA9PSAtRUFHQUlOKVxuLVx0XHRcdGdvdG8gdHJ5X2FnYWluO1xuLVx0XHRnb3RvIGVycm9yX3RyYWNlO1xuLVx0fVxuLVxuIFx0LyogRmluZCB0aGUgbmV4dCBjYWxsIGFuZCBkZXF1ZXVlIGl0IGlmIHdlJiMzOTtyZSBub3QganVzdCBwZWVraW5nLiAgSWYgd2VcbiBcdCAqIGRvIGRlcXVldWUgaXQsIHRoYXQgY29tZXMgd2l0aCBhIHJlZiB0aGF0IHdlIHdpbGwgbmVlZCB0byByZWxlYXNlLlxuIFx0ICogV2UgYWxzbyB3YW50IHRvIHdlZWQgb3V0IGNhbGxzIHRoYXQgZ290IHJlcXVldWVkIHdoaWxzdCB3ZSB3ZXJlXG5AQCAtNDgzLDggJiM0Mzs0MDgsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRjYWxsID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgcnhycGNfY2FsbCwgcmVjdm1zZ19saW5rKTtcbiBcbiBcdGlmICghcnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2JfcXVldWVfZW1wdHkoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX3F1ZXVlKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2JfcXVldWVfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuJiM0MztcdCAgICBza2JfcXVldWVfZW1wdHkoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX3F1ZXVlKSkge1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rKTtcbiBcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4gXHRcdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmNcbmluZGV4IDc3YTY3YWNlMWQyNDgxLi45YWI3NjZkNWYwYjZjOCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yeGdrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9yeGdrLmNcbkBAIC0xMSw2ICYjNDM7MTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2V5LXR5cGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NrZXlzL3VzZXItdHlwZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7YXItaW50ZXJuYWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3J4Z2tfY29tbW9uLmhcJiMzNDtcbiBcbkBAIC03MzQsMzcgJiM0Mzs3MzUsNiBAQCBzdGF0aWMgYm9vbCByeGdrX3ZhbGlkYXRlX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi0vKipcbi0gKiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UgLSBRdWVyeSBSeEdLLXNwZWNpZmljIGNoYWxsZW5nZSBwYXJhbWV0ZXJzXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSBwYWNrZXQgdG8gcXVlcnlcbi0gKlxuLSAqIFJldHVybjogVGhlIEtlcmJlcm9zIDUgZW5jb2RpbmcgdHlwZSBmb3IgdGhlIGNoYWxsZW5nZWQgY29ubmVjdGlvbi5cbi0gKi9cbi11MzIgcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0cmV0dXJuIHNwLVx1MDAzZWNoYWxsLmNvbm4tXHUwMDNlcnhnay5lbmN0eXBlO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSk7XG4tXG4tLypcbi0gKiBGaWxsIG91dCB0aGUgY29udHJvbCBtZXNzYWdlIHRvIHBhc3MgdG8gdXNlcnNwYWNlIHRvIGluZm9ybSBhYm91dCB0aGVcbi0gKiBjaGFsbGVuZ2UuXG4tICovXG4tc3RhdGljIGludCByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpXG4te1xuLVx0c3RydWN0IHJ4Z2tfY2hhbGxlbmdlIGNoYWxsO1xuLVxuLVx0Y2hhbGwuYmFzZS5zZXJ2aWNlX2lkXHRcdD0gY29ubi1cdTAwM2VzZXJ2aWNlX2lkO1xuLVx0Y2hhbGwuYmFzZS5zZWN1cml0eV9pbmRleFx0PSBjb25uLVx1MDAzZXNlY3VyaXR5X2l4O1xuLVx0Y2hhbGwuZW5jdHlwZVx0XHRcdD0gY29ubi1cdTAwM2VyeGdrLmVuY3R5cGU7XG4tXG4tXHRyZXR1cm4gcHV0X2Ntc2cobXNnLCBTT0xfUlhSUEMsIFJYUlBDX0NIQUxMRU5HRUQsIHNpemVvZihjaGFsbCksIFx1MDAyNmNoYWxsKTtcbi19XG4tXG4gLypcbiAgKiBJbnNlcnQgdGhlIHJlcXVpc2l0ZSBhbW91bnQgb2YgWERSIHBhZGRpbmcgZm9yIHRoZSBsZW5ndGggZ2l2ZW4uXG4gICovXG5AQCAtODM3LDcgJiM0Mzs4MDcsNyBAQCBzdGF0aWMgbm9pbmxpbmUgc3NpemVfdCByeGdrX2luc2VydF9yZXNwb25zZV9oZWFkZXIoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvblxuICAqL1xuIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhLFxuJiM0MztcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICphcHBkYXRhLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3BvbnNlLFxuIFx0XHRcdFx0XHQgICAgc2l6ZV90IG9mZnNldClcbiB7XG5AQCAtODU5LDIwICYjNDM7ODI5LDIwIEBAIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVQUk9UTztcbiBcbi1cdGEuYXBwZGF0YV9sZW4gPSBodG9ubChhcHBkYXRhLVx1MDAzZWxlbik7XG4mIzQzO1x0YS5hcHBkYXRhX2xlbiA9IGh0b25sKGFwcGRhdGEtXHUwMDNlZGF0YWxlbik7XG4gXG4gXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBcdTAwMjZhLCBzaXplb2YoYSkpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdG9mZnNldCAmIzQzOz0gc2l6ZW9mKGEpO1xuIFxuLVx0aWYgKGFwcGRhdGEtXHUwMDNlbGVuKSB7XG4tXHRcdHJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIGFwcGRhdGEtXHUwMDNlZGF0YSwgYXBwZGF0YS1cdTAwM2VsZW4pO1xuJiM0MztcdGlmIChhcHBkYXRhLVx1MDAzZWRhdGFsZW4pIHtcbiYjNDM7XHRcdHJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIGFwcGRhdGEtXHUwMDNlZGF0YSwgYXBwZGF0YS1cdTAwM2VkYXRhbGVuKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRvZmZzZXQgJiM0Mzs9IGFwcGRhdGEtXHUwMDNlbGVuO1xuJiM0MztcdFx0b2Zmc2V0ICYjNDM7PSBhcHBkYXRhLVx1MDAzZWRhdGFsZW47XG4gXG4tXHRcdHJldCA9IHJ4Z2tfcGFkX291dChyZXNwb25zZSwgYXBwZGF0YS1cdTAwM2VsZW4sIG9mZnNldCk7XG4mIzQzO1x0XHRyZXQgPSByeGdrX3BhZF9vdXQocmVzcG9uc2UsIGFwcGRhdGEtXHUwMDNlZGF0YWxlbiwgb2Zmc2V0KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRvZmZzZXQgJiM0Mzs9IHJldDtcbkBAIC04OTAsNyAmIzQzOzg2MCw3IEBAIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBcdTAwMjZiLCBzaXplb2YoYikpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbi1cdHJldHVybiBzaXplb2YoYSkgJiM0MzsgeGRyX3JvdW5kX3VwKGFwcGRhdGEtXHUwMDNlbGVuKSAmIzQzOyBzaXplb2YoYik7XG4mIzQzO1x0cmV0dXJuIHNpemVvZihhKSAmIzQzOyB4ZHJfcm91bmRfdXAoYXBwZGF0YS1cdTAwM2VkYXRhbGVuKSAmIzQzOyBzaXplb2YoYik7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfZW5jcnlwdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuQEAgLTkyMyw3ICYjNDM7ODkzLDcgQEAgc3RhdGljIHNzaXplX3Qgcnhna19lbmNyeXB0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gICovXG4gc3RhdGljIGludCByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKmFwcGRhdGEpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AsICpyc3A7XG4gXHRzdHJ1Y3Qgcnhna19jb250ZXh0ICpnaztcbkBAIC05MzYsNyAmIzQzOzkwNiw3IEBAIHN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRpZiAoSVNfRVJSKGdrKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZ2spO1xuIFxuLVx0YXV0aF9sZW4gPSAyMCAmIzQzOyAoNCAmIzQzOyBhcHBkYXRhLVx1MDAzZWxlbikgJiM0MzsgMTIgJiM0MzsgKDEgJiM0MzsgNCkgKiA0O1xuJiM0MztcdGF1dGhfbGVuID0gMjAgJiM0MzsgKDQgJiM0MzsgYXBwZGF0YS1cdTAwM2VkYXRhbGVuKSAmIzQzOyAxMiAmIzQzOyAoMSAmIzQzOyA0KSAqIDQ7XG4gXHRhdXRoeF9sZW4gPSBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIoZ2stXHUwMDNla3JiNSwgS1JCNV9FTkNSWVBUX01PREUsXG4gXHRcdFx0XHRcdFx0YXV0aF9sZW4sIFx1MDAyNmF1dGhfb2Zmc2V0KTtcbiBcdGxlbiA9IHNpemVvZihzdHJ1Y3QgcnhycGNfd2lyZV9oZWFkZXIpICYjNDM7XG5AQCAtMTAxMSw2NiAmIzQzOzk4MSwzNiBAQCBzdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuICAqIFJlc3BvbmQgdG8gYSBjaGFsbGVuZ2UgcGFja2V0LlxuICAqL1xuIHN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhKVxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcbiB7XG4tXHRfZW50ZXIoXCYjMzQ7eyVkLCV4fVwmIzM0OywgY29ubi1cdTAwM2VkZWJ1Z19pZCwga2V5X3NlcmlhbChjb25uLVx1MDAzZWtleSkpO1xuJiM0MztcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIGR1bW15ID0ge30sICphcHBkYXRhID0gXHUwMDI2ZHVtbXk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0X2VudGVyKFwmIzM0O3slZCwldSwleCwleH1cJiMzNDssXG4mIzQzO1x0ICAgICAgIGNvbm4tXHUwMDNlZGVidWdfaWQsIGNvbm4tXHUwMDNlc2VydmljZV9pZCxcbiYjNDM7XHQgICAgICAga2V5X3NlcmlhbChjb25uLVx1MDAzZWtleSksIGtleV9zZXJpYWwoY29ubi1cdTAwM2VidW5kbGUtXHUwMDNlYXBwX2RhdGEpKTtcbiBcbiBcdGlmIChrZXlfdmFsaWRhdGUoY29ubi1cdTAwM2VrZXkpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBSWEdLX0VYUElSRUQsIC1FUFJPVE8sXG4gXHRcdFx0XHRcdHJ4Z2tfYWJvcnRfY2hhbGxfa2V5X2V4cGlyZWQpO1xuIFxuLVx0cmV0dXJuIHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKGNvbm4sIGNoYWxsZW5nZSwgYXBwZGF0YSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZV9ub19hcHBkYXRhKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLVx0XHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4te1xuLVx0c3RydWN0IGtyYjVfYnVmZmVyIGFwcGRhdGEgPSB7fTtcbi1cbi1cdHJldHVybiByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNvbm4sIGNoYWxsZW5nZSwgXHUwMDI2YXBwZGF0YSk7XG4tfVxuLVxuLS8qKlxuLSAqIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlIC0gUmVzcG9uZCB0byBhIGNoYWxsZW5nZSB3aXRoIGFwcGRhdGFcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHJlc3BvbmQgdG9cbi0gKiBAYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgUkVTUE9OU0UgYXV0aGVudGljYXRvclxuLSAqXG4tICogQWxsb3cgYSBrZXJuZWwgYXBwbGljYXRpb24gdG8gcmVzcG9uZCB0byBhIENIQUxMRU5HRSB3aXRoIGFwcGxpY2F0aW9uIGRhdGFcbi0gKiB0byBiZSBpbmNsdWRlZCBpbiB0aGUgUnhHSyBSRVNQT05TRSBBdXRoZW50aWNhdG9yLlxuLSAqXG4tICogUmV0dXJuOiAlMCBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuLSAqL1xuLWludCByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTtcbi1cbi1cdHJldHVybiByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNzcC1cdTAwM2VjaGFsbC5jb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKTtcbi1cbi0vKlxuLSAqIFBhcnNlIHNlbmRtc2coKSBjb250cm9sIG1lc3NhZ2UgYW5kIHJlc3BvbmQgdG8gY2hhbGxlbmdlLiAgV2UgbmVlZCB0byBzZWUgaWZcbi0gKiB0aGVyZSYjMzk7cyBhbiBhcHBkYXRhIHRvIGZpc2ggb3V0LlxuLSAqL1xuLXN0YXRpYyBpbnQgcnhna19zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHRcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnKVxuLXtcbi1cdHN0cnVjdCBrcmI1X2J1ZmZlciBhcHBkYXRhID0ge307XG4tXHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcbi1cbi1cdGZvcl9lYWNoX2Ntc2doZHIoY21zZywgbXNnKSB7XG4tXHRcdGlmIChjbXNnLVx1MDAzZWNtc2dfbGV2ZWwgIT0gU09MX1JYUlBDIHx8XG4tXHRcdCAgICBjbXNnLVx1MDAzZWNtc2dfdHlwZSAhPSBSWFJQQ19SRVNQX1JYR0tfQVBQREFUQSlcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKGFwcGRhdGEuZGF0YSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0YXBwZGF0YS5kYXRhID0gQ01TR19EQVRBKGNtc2cpO1xuLVx0XHRhcHBkYXRhLmxlbiA9IGNtc2ctXHUwMDNlY21zZ19sZW4gLSBzaXplb2Yoc3RydWN0IGNtc2doZHIpO1xuJiM0MztcdGlmIChjb25uLVx1MDAzZWJ1bmRsZS1cdTAwM2VhcHBfZGF0YSkge1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0YXBwZGF0YSA9IChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKVxuJiM0MztcdFx0XHR1c2VyX2tleV9wYXlsb2FkX3JjdShjb25uLVx1MDAzZWJ1bmRsZS1cdTAwM2VhcHBfZGF0YSk7XG4mIzQzO1x0XHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZhcHBkYXRhLVx1MDAzZXJlZikpXG4mIzQzO1x0XHRcdGFwcGRhdGEgPSBOVUxMO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRpZiAoIWFwcGRhdGEpXG4mIzQzO1x0XHRcdHJldHVybiByeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIFJYR0tfRVhQSVJFRCwgLUVLRVlSRVZPS0VELFxuJiM0MztcdFx0XHRcdFx0XHRyeGdrX2Fib3J0X2NoYWxsX2tleV9leHBpcmVkKTtcbiBcdH1cbiBcbi1cdHJldHVybiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UsIFx1MDAyNmFwcGRhdGEpO1xuJiM0MztcdHJldCA9IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKGNvbm4sIGNoYWxsZW5nZSwgYXBwZGF0YSk7XG4mIzQzO1xuJiM0MztcdGlmIChhcHBkYXRhICE9IFx1MDAyNmR1bW15KVxuJiM0MztcdFx0cHV0X3VzZXJfa2V5X3BheWxvYWQoYXBwZGF0YSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLypcbkBAIC0xMzQ2LDkgJiM0MzsxMjg2LDcgQEAgY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHJ4Z2tfeWZzID0ge1xuIFx0LmZyZWVfY2FsbF9jcnlwdG9cdFx0PSByeGdrX2ZyZWVfY2FsbF9jcnlwdG8sXG4gXHQuaXNzdWVfY2hhbGxlbmdlXHRcdD0gcnhna19pc3N1ZV9jaGFsbGVuZ2UsXG4gXHQudmFsaWRhdGVfY2hhbGxlbmdlXHRcdD0gcnhna192YWxpZGF0ZV9jaGFsbGVuZ2UsXG4tXHQuY2hhbGxlbmdlX3RvX3JlY3Ztc2dcdFx0PSByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnLFxuLVx0LnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2VcdD0gcnhna19zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxuLVx0LnJlc3BvbmRfdG9fY2hhbGxlbmdlXHRcdD0gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZV9ub19hcHBkYXRhLFxuJiM0MztcdC5yZXNwb25kX3RvX2NoYWxsZW5nZVx0XHQ9IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UsXG4gXHQudmVyaWZ5X3Jlc3BvbnNlXHRcdD0gcnhna192ZXJpZnlfcmVzcG9uc2UsXG4gXHQuY2xlYXJcdFx0XHRcdD0gcnhna19jbGVhcixcbiBcdC5kZWZhdWx0X2RlY29kZV90aWNrZXRcdFx0PSByeGdrX3lmc19kZWNvZGVfdGlja2V0LFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeGthZC5jIGIvbmV0L3J4cnBjL3J4a2FkLmNcbmluZGV4IGNhOWYwZTgyY2I5YWM3Li5lNTViZmNhMTBlMWE5NCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yeGthZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcnhrYWQuY1xuQEAgLTc0OCwzMiAmIzQzOzc0OCw2IEBAIHN0YXRpYyBpbnQgcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIFJ4S0FEIGRvZXMgYXV0b21hdGljIHJlc3BvbnNlIG9ubHkgYXMgdGhlcmUmIzM5O3Mgbm90aGluZyB0byBtYW5hZ2UgdGhhdCBpc24mIzM5O3Rcbi0gKiBhbHJlYWR5IGluIHRoZSBrZXkuXG4tICovXG4tc3RhdGljIGludCByeGthZF9zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBtc2doZHIgKm1zZylcbi17XG4tXHRyZXR1cm4gLUVJTlZBTDtcbi19XG4tXG4tLyoqXG4tICogcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlIC0gUmVzcG9uZCB0byBhIGNoYWxsZW5nZSB3aXRoIGFwcGRhdGFcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHJlc3BvbmQgdG9cbi0gKlxuLSAqIEFsbG93IGEga2VybmVsIGFwcGxpY2F0aW9uIHRvIHJlc3BvbmQgdG8gYSBDSEFMTEVOR0UuXG4tICpcbi0gKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4tICovXG4taW50IHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqY3NwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XG4tXG4tXHRyZXR1cm4gcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2UoY3NwLVx1MDAzZWNoYWxsLmNvbm4sIGNoYWxsZW5nZSk7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKTtcbi1cbiAvKiBEZWNyeXB0IGRhdGEgaW4tcGxhY2UgdXNpbmcgREVTLVBDQkMuICBAbGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4LiAqL1xuIFZJU0lCTEVfSUZfS1VOSVQgdm9pZCBkZXNfcGNiY19kZWNyeXB0X2lucGxhY2UoY29uc3Qgc3RydWN0IGRlc19jdHggKmtleSxcbiBcdFx0XHRcdFx0ICAgICAgIF9fbGU2NCBpdiwgdTggKmRhdGEsIHNpemVfdCBsZW4pXG5AQCAtMTEzNCw3ICYjNDM7MTEwOCw2IEBAIGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGthZCA9IHtcbiBcdC5mcmVlX2NhbGxfY3J5cHRvXHRcdD0gcnhrYWRfZnJlZV9jYWxsX2NyeXB0byxcbiBcdC5pc3N1ZV9jaGFsbGVuZ2VcdFx0PSByeGthZF9pc3N1ZV9jaGFsbGVuZ2UsXG4gXHQudmFsaWRhdGVfY2hhbGxlbmdlXHRcdD0gcnhrYWRfdmFsaWRhdGVfY2hhbGxlbmdlLFxuLVx0LnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2VcdD0gcnhrYWRfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSxcbiBcdC5yZXNwb25kX3RvX2NoYWxsZW5nZVx0XHQ9IHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxuIFx0LnZlcmlmeV9yZXNwb25zZVx0XHQ9IHJ4a2FkX3ZlcmlmeV9yZXNwb25zZSxcbiBcdC5jbGVhclx0XHRcdFx0PSByeGthZF9jbGVhcixcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvc2VuZG1zZy5jIGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xuaW5kZXggZWQyYzlhNTEwMDVhZGUuLjIyNWVlYzQxMGJlZGM4IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL3NlbmRtc2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xuQEAgLTQ1Myw5ICYjNDM7NDUzLDYgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFxuIHN1Y2Nlc3M6XG4gXHRyZXQgPSBjb3BpZWQ7XG4tXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBjYWxsLVx1MDAzZWVycm9yIFx1MDAzYyAwKVxuLVx0XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuIG91dDpcbiBcdGNhbGwtXHUwMDNldHhfcGVuZGluZyA9IHR4YjtcbiBcdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbkBAIC00NjcsOCAmIzQzOzQ2NCwxNCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRyZXR1cm4gY2FsbC1cdTAwM2VlcnJvcjtcbiBcbiBtYXliZV9lcnJvcjpcbi1cdGlmIChjb3BpZWQpXG4mIzQzO1x0aWYgKGNvcGllZCkge1xuJiM0MztcdFx0aWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgY2FsbC1cdTAwM2VlcnJvciBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiBcdFx0Z290byBzdWNjZXNzO1xuJiM0MztcdH1cbiBcdGdvdG8gb3V0O1xuIFxuIGVmYXVsdDpcbkBAIC01MDMsNiAmIzQzOzUwNiw4IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBzdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyAqcClcbiB7XG4gXHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcbiYjNDM7XHRrZXlfc2VyaWFsX3Qga2V5X2lkO1xuJiM0MztcdGtleV9yZWZfdCBrZXk7XG4gXHRib29sIGdvdF91c2VyX0lEID0gZmFsc2U7XG4gXHRpbnQgbGVuO1xuIFxuQEAgLTU4Nyw2ICYjNDM7NTkyLDE4IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zICpwKVxuIFx0XHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXHRcdFx0YnJlYWs7XG4gXG4mIzQzO1x0XHRjYXNlIFJYUlBDX1JFU1BPTlNFX0FQUERBVEE6XG4mIzQzO1x0XHRcdGlmIChsZW4gIT0gc2l6ZW9mKGtleV9zZXJpYWxfdCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdGlmIChwLVx1MDAzZWNhbGwuYXBwX2RhdGEpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdGtleV9pZCA9ICooa2V5X3NlcmlhbF90ICopQ01TR19EQVRBKGNtc2cpO1xuJiM0MztcdFx0XHRrZXkgPSBsb29rdXBfdXNlcl9rZXkoa2V5X2lkLCAwLCBLRVlfTkVFRF9TRUFSQ0gpO1xuJiM0MztcdFx0XHRpZiAoSVNfRVJSKGtleSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIFBUUl9FUlIoa2V5KTtcbiYjNDM7XHRcdFx0cC1cdTAwM2VjYWxsLmFwcF9kYXRhID0ga2V5X3JlZl90b19wdHIoa2V5KTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG5AQCAtNzg2LDYgJiM0Mzs4MDMsNyBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcbiBlcnJvcl9yZWxlYXNlX3NvY2s6XG4gXHRyZWxlYXNlX3NvY2soXHUwMDI2cngtXHUwMDNlc2spO1xuJiM0MztcdGtleV9wdXQocC5jYWxsLmFwcF9kYXRhKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmMgYi9uZXQvcnhycGMvc2VydmVyX2tleS5jXG5pbmRleCAzZWZlMTA0YjE5MzBjYi4uZmM2ZjQ3OGUxNzYyYTcgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvc2VydmVyX2tleS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvc2VydmVyX2tleS5jXG5AQCAtMTczLDQzICYjNDM7MTczLDMgQEAgaW50IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qga2V5ICprZXlyaW5nKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTChyeHJwY19zb2NrX3NldF9zZWN1cml0eV9rZXlyaW5nKTtcbi1cbi0vKipcbi0gKiByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2UgLSBTZXQgdGhlIG1hbmFnZS1yZXNwb25zZSBmbGFnIGZvciBhIGtlcm5lbCBzZXJ2aWNlXG4tICogQHNrOiBUaGUgc29ja2V0IHRvIHNldCB0aGUga2V5cmluZyBvblxuLSAqIEBzZXQ6IFRydWUgdG8gc2V0LCBmYWxzZSB0byBjbGVhciB0aGUgZmxhZ1xuLSAqXG4tICogU2V0IHRoZSBmbGFnIG9uIGFuIHJ4cnBjIHNvY2tldCB0byBzYXkgdGhhdCB0aGUgY2FsbGVyIHdhbnRzIHRvIG1hbmFnZSB0aGVcbi0gKiBSRVNQT05TRSBwYWNrZXQgYW5kIHRoZSB1c2VyLWRlZmluZWQgZGF0YSBpdCBtYXkgY29udGFpbi4gIFNldHRpbmcgdGhpc1xuLSAqIG1lYW5zIHRoYXQgcmVjdm1zZygpIHdpbGwgcmV0dXJuIG1lc3NhZ2VzIHdpdGggUlhSUENfQ0hBTExFTkdFRCBpbiB0aGVcbi0gKiBjb250cm9sIG1lc3NhZ2UgYnVmZmVyIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNoYWxsZW5nZS5cbi0gKlxuLSAqIFRoZSB1c2VyIHNob3VsZCByZXNwb25kIHRvIHRoZSBjaGFsbGVuZ2UgYnkgcGFzc2luZyBSWFJQQ19SRVNQT05EIG9yXG4tICogUlhSUENfUkVTUE9ORF9BQk9SVCBjb250cm9sIG1lc3NhZ2VzIHdpdGggc2VuZG1zZygpIHRvIHRoZSBzYW1lIGNhbGwuXG4tICogU3VwcGxlbWVudGFyeSBjb250cm9sIG1lc3NhZ2VzLCBzdWNoIGFzIFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBLCBtYXkgYmVcbi0gKiBpbmNsdWRlZCB0byBpbmRpY2F0ZSB0aGUgcGFydHMgdGhlIHVzZXIgd2FudHMgdG8gc3VwcGx5LlxuLSAqXG4tICogVGhlIHNlcnZlciB3aWxsIGJlIHBhc3NlZCB0aGUgcmVzcG9uc2UgZGF0YSB3aXRoIGEgUlhSUENfUkVTUE9OREVEIGNvbnRyb2xcbi0gKiBtZXNzYWdlIHdoZW4gaXQgZ2V0cyB0aGUgZmlyc3QgZGF0YSBmcm9tIGVhY2ggY2FsbC5cbi0gKlxuLSAqIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgaG9ub3VyZWQgYnkgc2VjdXJpdHkgY2xhc3NlcyB0aGF0IG5lZWQgYXV4aWxpYXJ5IGRhdGFcbi0gKiAoZS5nLiBSeEdLKS4gIFRob3NlIHRoYXQgZG9uJiMzOTt0IG9mZmVyIHRoZSBmYWNpbGl0eSAoZS5nLiBSeEtBRCkgcmVzcG9uZFxuLSAqIHdpdGhvdXQgY29uc3VsdGluZyB1c2Vyc3BhY2UuXG4tICpcbi0gKiBSZXR1cm46IFRoZSBwcmV2aW91cyBzZXR0aW5nLlxuLSAqL1xuLWludCByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2Uoc3RydWN0IHNvY2sgKnNrLCBib29sIHNldClcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzayk7XG4tXHRpbnQgcmV0O1xuLVxuLVx0bG9ja19zb2NrKHNrKTtcbi1cdHJldCA9ICEhdGVzdF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdGlmIChzZXQpXG4tXHRcdHNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdGVsc2Vcbi1cdFx0Y2xlYXJfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcdTAwMjZyeC1cdTAwM2VmbGFncyk7XG4tXHRyZWxlYXNlX3NvY2soc2spO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2UpO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG5pbmRleCA2Zjg4YjUwN2Y5Mjc5MS4uOTBjMWJkNWQ3ZGZlY2YgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG5AQCAtNjcsNiAmIzQzOzY3LDcgQEAgaW50IHVzZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbiBcdHVwYXlsb2FkID0ga21hbGxvY19mbGV4KCp1cGF5bG9hZCwgZGF0YSwgZGF0YWxlbik7XG4gXHRpZiAoIXVwYXlsb2FkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRyZWZjb3VudF9zZXQoXHUwMDI2dXBheWxvYWQtXHUwMDNlcmVmLCAxKTtcbiBcbiBcdC8qIGF0dGFjaCB0aGUgZGF0YSAqL1xuIFx0cHJlcC1cdTAwM2VxdW90YWxlbiA9IGRhdGFsZW47XG5AQCAtODgsMTIgJiM0Mzs4OSwyMiBAQCBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2ZyZWVfcHJlcGFyc2UpO1xuIFxuIHN0YXRpYyB2b2lkIHVzZXJfZnJlZV9wYXlsb2FkX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4ge1xuLVx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQ7XG4mIzQzO1x0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkLCByY3UpO1xuIFxuLVx0cGF5bG9hZCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCwgcmN1KTtcbiBcdGtmcmVlX3NlbnNpdGl2ZShwYXlsb2FkKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEZyZWUgYSB1c2VyIGRlZmluZWQga2V5IHBheWxvYWQuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHBheWxvYWQgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZwYXlsb2FkLVx1MDAzZXJlZikpXG4mIzQzO1x0XHRjYWxsX3JjdShcdTAwMjZwYXlsb2FkLVx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwdXRfdXNlcl9rZXlfcGF5bG9hZCk7XG4mIzQzO1xuIC8qXG4gICogdXBkYXRlIGEgdXNlciBkZWZpbmVkIGtleVxuICAqIC0gdGhlIGtleSYjMzk7cyBzZW1hcGhvcmUgaXMgd3JpdGUtbG9ja2VkXG5AQCAtMTE1LDggJiM0MzsxMjYsNyBAQCBpbnQgdXNlcl91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIFx0cmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgcHJlcC1cdTAwM2VwYXlsb2FkLmRhdGFbMF0pO1xuIFx0cHJlcC1cdTAwM2VwYXlsb2FkLmRhdGFbMF0gPSBOVUxMO1xuIFxuLVx0aWYgKHphcClcbi1cdFx0Y2FsbF9yY3UoXHUwMDI2emFwLVx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcbiYjNDM7XHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh6YXApO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodXNlcl91cGRhdGUpO1xuQEAgLTEzNCw3ICYjNDM7MTQ0LDcgQEAgdm9pZCB1c2VyX3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpXG4gXG4gXHRpZiAodXBheWxvYWQpIHtcbiBcdFx0cmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgTlVMTCk7XG4tXHRcdGNhbGxfcmN1KFx1MDAyNnVwYXlsb2FkLVx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcbiYjNDM7XHRcdHB1dF91c2VyX2tleV9wYXlsb2FkKHVwYXlsb2FkKTtcbiBcdH1cbiB9XG4gXG5AQCAtMTQ3LDkgJiM0MzsxNTcsOCBAQCB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXG4ge1xuIFx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbiBcbi1cdGtmcmVlX3NlbnNpdGl2ZSh1cGF5bG9hZCk7XG4mIzQzO1x0cHV0X3VzZXJfa2V5X3BheWxvYWQodXBheWxvYWQpO1xuIH1cbi1cbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2Rlc3Ryb3kpO1xuIFxuIC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZTX0ZTJiMzNDssCiAgICAmIzM0O0FGX1JYUlBDJiMzNDssCiAgICAmIzM0O1JYS0FEJiMzNDssCiAgICAmIzM0O1JYR0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhJiMzNDssCiAgICAmIzM0O2Fmc19jcmVhdGVfeWZzX2NtX3Rva2VuJiMzNDssCiAgICAmIzM0O3J4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UmIzM0OywKICAgICYjMzQ7cnhycGNfc2VuZG1zZ19jbXNnJiMzNDssCiAgICAmIzM0O3B1dF91c2VyX2tleV9wYXlsb2FkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRlMgYW5kIFJ4UlBDIHN1YnN5c3RlbXMgdG8gaGFuZGxlIFJ4R0sgYXBwbGljYXRpb24gZGF0YSBpbnRlcm5hbGx5IHJhdGhlciB0aGFuIHJlbHlpbmcgb24gdXNlcnNwYWNlIE9PQiBtZXNzYWdlcy4gSXQgaW50cm9kdWNlcyBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAgdG8gZ2VuZXJhdGUgdGhlIGFwcCBkYXRhIGFuZCBwYXNzZXMgaXQgdG8gYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29yayBhbmQgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IGFsdGVycyBleGVjdXRpb24gZmxvdyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzZiMWUyZDllMTIzOTk0YWIyZDdhYTg4ODRlMzZmZThmMzQzMGM1NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMTc6NTM6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9hZnMvY21fc2VjdXJpdHkuYyBiL2ZzL2Fmcy9jbV9zZWN1cml0eS5jCmluZGV4IDEwMzE2OGM3MGRkNGRmLi5kYjJhM2IzMGYwMjA5NCAxMDA2NDQKLS0tIGEvZnMvYWZzL2NtX3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2NtX3NlY3VyaXR5LmMKQEAgLTYsNyAmIzQzOzYsOSBAQAogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tleS10eXBlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7Y3J5cHRvL2tyYjUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7a2V5cy91c2VyLXR5cGUuaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2Fmc19jbS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YWZzX2ZzLmgmIzM0OwpAQCAtMTksOTcgJiM0MzsyMSw2NiBAQAogI2RlZmluZSB4ZHJfbGVuX29iamVjdCh4KSAoNCAmIzQzOyByb3VuZF91cCgoeCksIHNpemVvZihfX2JlMzIpKSkKIAogI2lmZGVmIENPTkZJR19SWEdLCi1zdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICAgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcik7CiYjNDM7c3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCB1MzIga3JiNV9lbmN0eXBlKTsKICNlbmRpZgogCiAvKgotICogUmVzcG9uZCB0byBhbiBSeEdLIGNoYWxsZW5nZSwgYWRkaW5nIGFwcGRhdGEuCiYjNDM7ICogQ3JlYXRlIHRoZSBhcHBsaWNhdGlvbiBkYXRhIHRvIGdvIGluIGEgUkVTUE9OU0UgcGFja2V0IGEgc2VydmVyJiMzOTtzIENIQUxMRU5HRQomIzQzOyAqIGZyb20gdGhlIHBhcmFtZXRlcnMgY29udGFpbmVkIGluIGEga2V5LiAgVGhlIGtleSBzcGVjaWZpZXMgdGhlIHNlY3VyaXR5CiYjNDM7ICogaW5kZXggYW5kIG90aGVyIGFwcHJvcHJpYXRlIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZW5jb2RpbmcgdHlwZSBmb3IgUnhHSy4KICAqLwotc3RhdGljIGludCBhZnNfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSkKJiM0MztpbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpCiB7Ci0jaWZkZWYgQ09ORklHX1JYR0sKLQlzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9OwotCXN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXI7Ci0jZW5kaWYKLQlzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcjsKLQl1bnNpZ25lZCBsb25nIHBlZXJfZGF0YTsKLQl1MTYgc2VydmljZV9pZDsKJiM0MzsJdTMyIGtyYjVfZW5jdHlwZTsKJiM0MzsJaW50IHJldDsKIAl1OCBzZWN1cml0eV9pbmRleDsKIAotCXJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UoY2hhbGxlbmdlLCAmYW1wO3BlZXIsICZhbXA7cGVlcl9kYXRhLAotCQkJCSAgICAgJmFtcDtzZXJ2aWNlX2lkLCAmYW1wO3NlY3VyaXR5X2luZGV4KTsKLQotCV9lbnRlcigmIzM0OyV1LCV1JiMzNDssIHNlcnZpY2VfaWQsIHNlY3VyaXR5X2luZGV4KTsKLQotCXN3aXRjaCAoc2VydmljZV9pZCkgewotCQkvKiBXZSBkb24mIzM5O3Qgc2VuZCBDTV9TRVJWSUNFIFJQQ3MsIHNvIGRvbiYjMzk7dCBleHBlY3QgYSBjaGFsbGVuZ2UKLQkJICogdGhlcmVmcm9tLgotCQkgKi8KLQljYXNlIEZTX1NFUlZJQ0U6Ci0JY2FzZSBWTF9TRVJWSUNFOgotCWNhc2UgWUZTX0ZTX1NFUlZJQ0U6Ci0JY2FzZSBZRlNfVkxfU0VSVklDRToKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfd2FybigmIzM0O0NhbiYjMzk7dCByZXNwb25kIHRvIHVua25vd24gY2hhbGxlbmdlICV1OiV1JiMzNDssCi0JCQlzZXJ2aWNlX2lkLCBzZWN1cml0eV9pbmRleCk7Ci0JCXJldHVybiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFJYX1VTRVJfQUJPUlQsIC1FUFJPVE8sCi0JCQkJCQkgICAgIGFmc19hYm9ydF91bnN1cHBvcnRlZF9zZWNfY2xhc3MpOwotCX0KJiM0MzsJaWYgKCFrZXkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogUmVhZCBBUFBEQVRBIGZsYWcgYmVmb3JlIGNtX3J4Z2tfYXBwZGF0YSAqLwomIzQzOwlpZiAodGVzdF9iaXRfYWNxdWlyZShBRlNfU0VSVkVSX0ZMX0FQUERBVEEsICZhbXA7c2VydmVyLSZndDtmbGFncykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcnhycGNfa2VybmVsX3F1ZXJ5X2tleShrZXksICZhbXA7c2VjdXJpdHlfaW5kZXgsICZhbXA7a3JiNV9lbmN0eXBlKTsKJiM0MzsKJiM0MzsJX2VudGVyKCYjMzQ7JXUsJXUmIzM0Oywgc2VjdXJpdHlfaW5kZXgsIGtyYjVfZW5jdHlwZSk7CiAKLQlzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7CiYjNDM7CXJldCA9IDA7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtzZXJ2ZXItJmd0O2NtX3Rva2VuX2xvY2spOwomIzQzOwomIzQzOwkvKiBSZWFkIEFQUERBVEEgZmxhZyBiZWZvcmUgY21fcnhna19hcHBkYXRhICovCiYjNDM7CWlmICghdGVzdF9iaXRfYWNxdWlyZShBRlNfU0VSVkVSX0ZMX0FQUERBVEEsICZhbXA7c2VydmVyLSZndDtmbGFncykpIHsKJiM0MzsJCXN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHsKJiM0MzsJCWNhc2UgMDoKJiM0MzsJCQlicmVhazsKICNpZmRlZiBDT05GSUdfUlhLQUQKLQljYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOgotCQlyZXR1cm4gcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSk7CiYjNDM7CQljYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOgomIzQzOwkJCXNldF9iaXQoQUZTX1NFUlZFUl9GTF9BUFBEQVRBLCAmYW1wO3NlcnZlci0mZ3Q7ZmxhZ3MpOwomIzQzOwkJCWJyZWFrOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUlhHSwotCWNhc2UgUlhSUENfU0VDVVJJVFlfUlhHSzoKLQkJcmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgJmFtcDthcHBkYXRhKTsKLQotCWNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6Ci0JCXN3aXRjaCAoc2VydmljZV9pZCkgewotCQljYXNlIEZTX1NFUlZJQ0U6Ci0JCWNhc2UgWUZTX0ZTX1NFUlZJQ0U6Ci0JCQlzZXJ2ZXIgPSAoc3RydWN0IGFmc19zZXJ2ZXIgKilwZWVyX2RhdGE7Ci0JCQlpZiAoIXNlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhLmRhdGEpIHsKLQkJCQltdXRleF9sb2NrKCZhbXA7c2VydmVyLSZndDtjbV90b2tlbl9sb2NrKTsKLQkJCQlpZiAoIXNlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhLmRhdGEpCi0JCQkJCWFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKGNoYWxsZW5nZSwgc2VydmVyKTsKLQkJCQltdXRleF91bmxvY2soJmFtcDtzZXJ2ZXItJmd0O2NtX3Rva2VuX2xvY2spOwotCQkJfQotCQkJaWYgKHNlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhLmRhdGEpCi0JCQkJYXBwZGF0YSA9IHNlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhOwomIzQzOwkJY2FzZSBSWFJQQ19TRUNVUklUWV9SWEdLOgomIzQzOwkJCXNldF9iaXQoQUZTX1NFUlZFUl9GTF9BUFBEQVRBLCAmYW1wO3NlcnZlci0mZ3Q7ZmxhZ3MpOwogCQkJYnJlYWs7Ci0JCX0KLQkJcmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgJmFtcDthcHBkYXRhKTsKLSNlbmRpZgogCi0JZGVmYXVsdDoKLQkJcmV0dXJuIHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKGNoYWxsZW5nZSwgUlhfVVNFUl9BQk9SVCwgLUVQUk9UTywKLQkJCQkJCSAgICAgYWZzX2Fib3J0X3Vuc3VwcG9ydGVkX3NlY19jbGFzcyk7Ci0JfQotfQomIzQzOwkJY2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzoKJiM0MzsJCQlyZXQgPSBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzZXJ2ZXIsIGtyYjVfZW5jdHlwZSk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCXNldF9iaXQoQUZTX1NFUlZFUl9GTF9BUFBEQVRBLCAmYW1wO3NlcnZlci0mZ3Q7ZmxhZ3MpOwomIzQzOwkJCWJyZWFrOwomIzQzOyNlbmRpZgogCi0vKgotICogUHJvY2VzcyB0aGUgT09CIG1lc3NhZ2UgcXVldWUsIHByb2Nlc3NpbmcgY2hhbGxlbmdlIHBhY2tldHMuCi0gKi8KLXZvaWQgYWZzX3Byb2Nlc3Nfb29iX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZnNfbmV0LCByeF9vb2Jfd29yayk7Ci0Jc3RydWN0IHNrX2J1ZmYgKm9vYjsKLQllbnVtIHJ4cnBjX29vYl90eXBlIHR5cGU7Ci0KLQl3aGlsZSAoUkVBRF9PTkNFKG5ldC0mZ3Q7bGl2ZSkgJmFtcDsmYW1wOwotCSAgICAgICAob29iID0gcnhycGNfa2VybmVsX2RlcXVldWVfb29iKG5ldC0mZ3Q7c29ja2V0LCAmYW1wO3R5cGUpKSkgewotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOgotCQkJYWZzX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKG9vYik7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCVdBUk5fT05fT05DRSgxKTsKIAkJCWJyZWFrOwogCQl9Ci0JCXJ4cnBjX2tlcm5lbF9mcmVlX29vYihvb2IpOwogCX0KJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c2VydmVyLSZndDtjbV90b2tlbl9sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogI2lmZGVmIENPTkZJR19SWEdLCkBAIC0xNzcsMzcgJiM0MzsxNDgsMzQgQEAgaW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldCkKIC8qCiAgKiBDcmVhdGUgYW4gWUZTIFJ4R0sgR1NTIHRva2VuIHRvIHVzZSBhcyBhIHRpY2tldCB0byB0aGUgc3BlY2lmaWVkIGZpbGVzZXJ2ZXIuCiAgKi8KLXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkgICBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyKQomIzQzO3N0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGVuY3R5cGUpCiB7CiAJY29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY29ubl9rcmI1LCAqdG9rZW5fa3JiNTsKIAljb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKnRva2VuX2tleTsKIAlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQ7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwogCXN0cnVjdCBhZnNfbmV0ICpuZXQgPSBzZXJ2ZXItJmd0O2NlbGwtJmd0O25ldDsKLQljb25zdCBzdHJ1Y3Qga2V5ICprZXkgPSBuZXQtJmd0O2ZzX2NtX3Rva2VuX2tleTsKJiM0MzsJY29uc3Qgc3RydWN0IGtleSAqY21fa2V5ID0gbmV0LSZndDtmc19jbV90b2tlbl9rZXk7CiYjNDM7CXN0cnVjdCBrZXkgKmFwcGRhdGFfa2V5ID0gTlVMTDsKIAlzaXplX3Qga2V5c2l6ZSwgdXVpZHNpemUsIGF1dGhzaXplLCB0b2tzaXplLCBlbmNzaXplLCBjb250c2l6ZSwgYWRhdGFzaXplLCBvZmZzZXQ7CiAJX19iZTMyIGNhcHNbMV0gPSB7CiAJCVswXSA9IGh0b25sKEFGU19DQVBfRVJST1JfVFJBTlNMQVRJT04pLAogCX07CiAJX19iZTMyICp4ZHI7CiAJdm9pZCAqYXBwZGF0YSwgKkswLCAqZW5jYmFzZTsKLQl1MzIgZW5jdHlwZTsKIAlpbnQgcmV0OwogCi0JaWYgKCFrZXkpCiYjNDM7CWlmICghY21fa2V5KQogCQlyZXR1cm4gLUVOT0tFWTsKIAogCS8qIEFzc3VtZSB0aGF0IHRoZSBmaWxlc2VydmVyIGlzIGhhcHB5IHRvIHVzZSB0aGUgc2FtZSBlbmNvZGluZyB0eXBlIGFzCiAJICogd2Ugd2VyZSB0b2xkIHRvIHVzZSBieSB0aGUgdG9rZW4gb2J0YWluZWQgYnkgdGhlIHVzZXIuCiAJICovCi0JZW5jdHlwZSA9IHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShjaGFsbGVuZ2UpOwotCiAJY29ubl9rcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKGVuY3R5cGUpOwogCWlmICghY29ubl9rcmI1KQogCQlyZXR1cm4gLUVOT1BLRzsKLQl0b2tlbl9rcmI1ID0ga2V5LSZndDtwYXlsb2FkLmRhdGFbMF07Ci0JdG9rZW5fa2V5ID0gKGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqKSZhbXA7a2V5LSZndDtwYXlsb2FkLmRhdGFbMl07CiYjNDM7CXRva2VuX2tyYjUgPSBjbV9rZXktJmd0O3BheWxvYWQuZGF0YVswXTsKJiM0MzsJdG9rZW5fa2V5ID0gKGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqKSZhbXA7Y21fa2V5LSZndDtwYXlsb2FkLmRhdGFbMl07CiAKIAkvKiBzdHJ1Y3Qgcnhna19rZXkgewogCSAqCWFmc191aW50MzIJZW5jdHlwZTsKQEAgLTMyNyw5ICYjNDM7Mjk1LDIyIEBAIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBvdXRfYWVhZDsKIAotCXNlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhLmxlbiAgPSBhZGF0YXNpemU7Ci0Jc2VydmVyLSZndDtjbV9yeGdrX2FwcGRhdGEuZGF0YSA9IGFwcGRhdGE7Ci0JYXBwZGF0YSA9IE5VTEw7CiYjNDM7CWFwcGRhdGFfa2V5ID0ga2V5X2FsbG9jKCZhbXA7a2V5X3R5cGVfdXNlciwgJiMzNDtyeHJwYzogYWZzIHJ4Z2sgYXBwZGF0YSYjMzQ7LAomIzQzOwkJCQlHTE9CQUxfUk9PVF9VSUQsIEdMT0JBTF9ST09UX0dJRCwgY3VycmVudF9jcmVkKCksCiYjNDM7CQkJCUtFWV9QT1NfVklFVyB8IEtFWV9QT1NfU0VBUkNIIHwgS0VZX1VTUl9WSUVXLAomIzQzOwkJCQlLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLCBOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihhcHBkYXRhX2tleSkpIHsKJiM0MzsJCXJldCA9IFBUUl9FUlIoYXBwZGF0YV9rZXkpOwomIzQzOwkJZ290byBvdXRfYWVhZDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBrZXlfaW5zdGFudGlhdGVfYW5kX2xpbmsoYXBwZGF0YV9rZXksIGFwcGRhdGEsIGFkYXRhc2l6ZSwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlrZXlfcHV0KGFwcGRhdGFfa2V5KTsKJiM0MzsJCWdvdG8gb3V0X2FlYWQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VydmVyLSZndDtjbV9yeGdrX2FwcGRhdGEgPSBhcHBkYXRhX2tleTsKIAogb3V0X2FlYWQ6CiAJY3J5cHRvX2ZyZWVfYWVhZChhZWFkKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jbXNlcnZpY2UuYyBiL2ZzL2Fmcy9jbXNlcnZpY2UuYwppbmRleCA1NTQwYWUxY2FkNTk5YS4uZDU3OWE2NjVlM2RhMDkgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9jbXNlcnZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvY21zZXJ2aWNlLmMKQEAgLTM2NCw3ICYjNDM7MzY0LDggQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTMoc3RydWN0IGFmc19jYWxsICpjYWxsKQogCWlmICghYWZzX2NoZWNrX2NhbGxfc3RhdGUoY2FsbCwgQUZTX0NBTExfU1ZfUkVQTFlJTkcpKQogCQlyZXR1cm4gYWZzX2lvX2Vycm9yKGNhbGwsIGFmc19pb19lcnJvcl9jbV9yZXBseSk7CiAKLQlpZiAobWVtY21wKGNhbGwtJmd0O3JlcXVlc3QsICZhbXA7Y2FsbC0mZ3Q7c2VydmVyLSZndDtfdXVpZCwgc2l6ZW9mKGNhbGwtJmd0O3NlcnZlci0mZ3Q7X3V1aWQpKSAhPSAwKSB7CiYjNDM7CWlmIChjYWxsLSZndDtzZXJ2ZXIgJmFtcDsmYW1wOwomIzQzOwkgICAgbWVtY21wKGNhbGwtJmd0O3JlcXVlc3QsICZhbXA7Y2FsbC0mZ3Q7c2VydmVyLSZndDtfdXVpZCwgc2l6ZW9mKGNhbGwtJmd0O3NlcnZlci0mZ3Q7X3V1aWQpKSAhPSAwKSB7CiAJCXByX25vdGljZSgmIzM0O0NhbGxiYWNrIFVVSUQgZG9lcyBub3QgbWF0Y2ggZmlsZXNlcnZlciBVVUlEXG4mIzM0Oyk7CiAJCXRyYWNlX2Fmc19jbV9ub19zZXJ2ZXJfdShjYWxsLCBjYWxsLSZndDtyZXF1ZXN0KTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9hZnMvZnNfcHJvYmUuYyBiL2ZzL2Fmcy9mc19wcm9iZS5jCmluZGV4IGE5MWFkMTkzOGQwNzg4Li5lMjZmN2YxZTMwYTIzYSAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZzX3Byb2JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ZzX3Byb2JlLmMKQEAgLTI0MSw5ICYjNDM7MjQxLDE0IEBAIGludCBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLAogCXN0cnVjdCBhZnNfZW5kcG9pbnRfc3RhdGUgKmVzdGF0ZSwgKm9sZDsKIAlzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0ID0gTlVMTCwgKmFsaXN0OwogCXVuc2lnbmVkIGxvbmcgdW5wcm9iZWQ7CiYjNDM7CWludCByZXQ7CiAKIAlfZW50ZXIoJiMzNDslcFUmIzM0OywgJmFtcDtzZXJ2ZXItJmd0O3V1aWQpOwogCiYjNDM7CXJldCA9IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc2VydmVyLCBrZXkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiAJZXN0YXRlID0ga3phbGxvY19vYmooKmVzdGF0ZSk7CiAJaWYgKCFlc3RhdGUpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaAppbmRleCAwYjcyYTg1NjYyOTk5Mi4uM2U2MWM1NDNhNTBjNDggMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbnRlcm5hbC5oCkBAIC0yODMsNyAmIzQzOzI4Myw2IEBAIHN0cnVjdCBhZnNfbmV0IHsKIAlzdHJ1Y3Qgc29ja2V0CQkqc29ja2V0OwogCXN0cnVjdCBhZnNfY2FsbAkJKnNwYXJlX2luY29taW5nX2NhbGw7CiAJc3RydWN0IHdvcmtfc3RydWN0CWNoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcms7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CXJ4X29vYl93b3JrOwogCXN0cnVjdCBtdXRleAkJc29ja2V0X211dGV4OwogCWF0b21pY190CQlucl9vdXRzdGFuZGluZ19jYWxsczsKIAlhdG9taWNfdAkJbnJfc3VwZXJibG9ja3M7CkBAIC01NDcsNyAmIzQzOzU0Niw3IEBAIHN0cnVjdCBhZnNfc2VydmVyIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJZGVzdHJveWVyOwkvKiBXb3JrIGl0ZW0gdG8gdHJ5IGFuZCBkZXN0cm95IGEgc2VydmVyICovCiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CQkvKiBNYW5hZ2VtZW50IHRpbWVyICovCiAJc3RydWN0IG11dGV4CQljbV90b2tlbl9sb2NrOwkvKiBMb2NrIGdvdmVybmluZyBjcmVhdGlvbiBvZiBhcHBkYXRhICovCi0Jc3RydWN0IGtyYjVfYnVmZmVyCWNtX3J4Z2tfYXBwZGF0YTsgLyogQXBwZGF0YSB0byBiZSBpbmNsdWRlZCBpbiBSRVNQT05TRSBwYWNrZXQgKi8KJiM0MzsJc3RydWN0IGtleQkJKmNtX3J4Z2tfYXBwZGF0YTsgLyogQXBwZGF0YSB0byBiZSBpbmNsdWRlZCBpbiBSRVNQT05TRSBwYWNrZXQgKi8KIAl0aW1lNjRfdAkJdW51c2VfdGltZTsJLyogVGltZSBhdCB3aGljaCBsYXN0IHVudXNlZCAqLwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogI2RlZmluZSBBRlNfU0VSVkVSX0ZMX1JFU1BPTkRJTkcgMAkJLyogVGhlIHNlcnZlciBpcyByZXNwb25kaW5nICovCkBAIC01NTksNiAmIzQzOzU1OCw3IEBAIHN0cnVjdCBhZnNfc2VydmVyIHsKICNkZWZpbmUgQUZTX1NFUlZFUl9GTF9OT1RfRk9VTkQJNgkJLyogVkwgc2VydmVyIHNheXMgbm8gc3VjaCBzZXJ2ZXIgKi8KICNkZWZpbmUgQUZTX1NFUlZFUl9GTF9WTF9GQUlMCTcJCS8qIEZhaWxlZCB0byBhY2Nlc3MgVkwgc2VydmVyICovCiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfTUFZX0hBVkVfQ0IgOAkJLyogTWF5IGhhdmUgY2FsbGJhY2tzIG9uIHRoaXMgZmlsZXNlcnZlciAqLwomIzQzOyNkZWZpbmUgQUZTX1NFUlZFUl9GTF9BUFBEQVRBCTkJCS8qIFNldCBpZiBhcHBkYXRhIGNyZWF0ZWQgKi8KICNkZWZpbmUgQUZTX1NFUlZFUl9GTF9JU19ZRlMJMTYJCS8qIFNlcnZlciBpcyBZRlMgbm90IEFGUyAqLwogI2RlZmluZSBBRlNfU0VSVkVSX0ZMX05PX0lCVUxLCTE3CQkvKiBGaWxlc2VydmVyIGRvZXNuJiMzOTt0IHN1cHBvcnQgRlMuSW5saW5lQnVsa1N0YXR1cyAqLwogI2RlZmluZSBBRlNfU0VSVkVSX0ZMX05PX1JNMgkxOAkJLyogRmlsZXNlcnZlciBkb2VzbiYjMzk7dCBzdXBwb3J0IFlGUy5SZW1vdmVGaWxlMiAqLwpAQCAtMTA5MCw3ICYjNDM7MTA5MCw3IEBAIGV4dGVybiBib29sIGFmc19jbV9pbmNvbWluZ19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqKTsKIC8qCiAgKiBjbV9zZWN1cml0eS5jCiAgKi8KLXZvaWQgYWZzX3Byb2Nlc3Nfb29iX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiYjNDM7aW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KTsKICNpZmRlZiBDT05GSUdfUlhHSwogaW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldCk7CiAjZWxzZQpAQCAtMTQxNywyMSAmIzQzOzE0MTcsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX3NlZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZW51bSBhZnNfY2FsbF90cmFjZSB3aHkpCiAJCSAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWZzX21ha2Vfb3BfY2FsbChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsIHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwKLQkJCQkgICAgZ2ZwX3QgZ2ZwKQotewotCXN0cnVjdCBhZnNfYWRkcl9saXN0ICphbGlzdCA9IG9wLSZndDtlc3RhdGUtJmd0O2FkZHJlc3NlczsKLQotCW9wLSZndDtjYWxsCT0gY2FsbDsKLQlvcC0mZ3Q7dHlwZQk9IGNhbGwtJmd0O3R5cGU7Ci0JY2FsbC0mZ3Q7b3AJPSBvcDsKLQljYWxsLSZndDtrZXkJPSBvcC0mZ3Q7a2V5OwotCWNhbGwtJmd0O2ludHIJPSAhKG9wLSZndDtmbGFncyAmYW1wOyBBRlNfT1BFUkFUSU9OX1VOSU5UUik7Ci0JY2FsbC0mZ3Q7cGVlcgk9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC0mZ3Q7YWRkcnNbb3AtJmd0O2FkZHJfaW5kZXhdLnBlZXIpOwotCWNhbGwtJmd0O3NlcnZpY2VfaWQgPSBvcC0mZ3Q7c2VydmVyLSZndDtzZXJ2aWNlX2lkOwotCWFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKIAljYWxsLSZndDtpb3ZfbGVuID0gc2l6ZTsKQEAgLTE3NjMsNiAmIzQzOzE3NDgsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKkFGU19WTk9ERV9UT19JKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlKQogCXJldHVybiAmYW1wO3Zub2RlLSZndDtuZXRmcy5pbm9kZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLAomIzQzOwkJCQkgICAgZ2ZwX3QgZ2ZwKQomIzQzO3sKJiM0MzsJc3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtJmd0O2VzdGF0ZS0mZ3Q7YWRkcmVzc2VzOwomIzQzOwomIzQzOwlvcC0mZ3Q7Y2FsbAk9IGNhbGw7CiYjNDM7CW9wLSZndDt0eXBlCT0gY2FsbC0mZ3Q7dHlwZTsKJiM0MzsJY2FsbC0mZ3Q7b3AJPSBvcDsKJiM0MzsJY2FsbC0mZ3Q7c2VydmVyCT0gYWZzX3VzZV9zZXJ2ZXIob3AtJmd0O3NlcnZlciwgZmFsc2UsIGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NhbGwpOwomIzQzOwljYWxsLSZndDtrZXkJPSBvcC0mZ3Q7a2V5OwomIzQzOwljYWxsLSZndDtpbnRyCT0gIShvcC0mZ3Q7ZmxhZ3MgJmFtcDsgQUZTX09QRVJBVElPTl9VTklOVFIpOwomIzQzOwljYWxsLSZndDtwZWVyCT0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LSZndDthZGRyc1tvcC0mZ3Q7YWRkcl9pbmRleF0ucGVlcik7CiYjNDM7CWNhbGwtJmd0O3NlcnZpY2VfaWQgPSBvcC0mZ3Q7c2VydmVyLSZndDtzZXJ2aWNlX2lkOwomIzQzOwlhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7CiYjNDM7fQomIzQzOwogLyoKICAqIE5vdGUgdGhhdCBhIGRlbnRyeSBnb3QgY2hhbmdlZC4gIFdlIG5lZWQgdG8gc2V0IGRfZnNkYXRhIHRvIHRoZSBkYXRhIHZlcnNpb24KICAqIG51bWJlciBkZXJpdmVkIGZyb20gdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLiAgSXQgZG9lc24mIzM5O3QgbWF0dGVyIGlmCmRpZmYgLS1naXQgYS9mcy9hZnMvbWFpbi5jIGIvZnMvYWZzL21haW4uYwppbmRleCA3YTg4M2M1OTk3NmZmMi4uNjM1M2ZlYWE1ZmI0YjUgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL21haW4uYwpAQCAtNzMsNyAmIzQzOzczLDYgQEAgc3RhdGljIGludCBfX25ldF9pbml0IGFmc19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXRfbnMpCiAJZ2VuZXJhdGVfcmFuZG9tX3V1aWQoKHVuc2lnbmVkIGNoYXIgKikmYW1wO25ldC0mZ3Q7dXVpZCk7CiAKIAlJTklUX1dPUksoJmFtcDtuZXQtJmd0O2NoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcmssIGFmc19jaGFyZ2VfcHJlYWxsb2NhdGlvbik7Ci0JSU5JVF9XT1JLKCZhbXA7bmV0LSZndDtyeF9vb2Jfd29yaywgYWZzX3Byb2Nlc3Nfb29iX3F1ZXVlKTsKIAltdXRleF9pbml0KCZhbXA7bmV0LSZndDtzb2NrZXRfbXV0ZXgpOwogCiAJbmV0LSZndDtjZWxscyA9IFJCX1JPT1Q7CmRpZmYgLS1naXQgYS9mcy9hZnMvcnhycGMuYyBiL2ZzL2Fmcy9yeHJwYy5jCmluZGV4IGQ4MjkxNjY1N2EzZGRmLi5hZTQ4YzE1YjNkYjk0MyAxMDA2NDQKLS0tIGEvZnMvYWZzL3J4cnBjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL3J4cnBjLmMKQEAgLTI1LDE0ICYjNDM7MjUsMTIgQEAgc3RhdGljIHZvaWQgYWZzX3Byb2Nlc3NfYXN5bmNfY2FsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiBzdGF0aWMgdm9pZCBhZnNfcnhfbmV3X2NhbGwoc3RydWN0IHNvY2sgKiwgc3RydWN0IHJ4cnBjX2NhbGwgKiwgdW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbChzdHJ1Y3QgcnhycGNfY2FsbCAqLCB1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyB2b2lkIGFmc19yeF9hdHRhY2goc3RydWN0IHJ4cnBjX2NhbGwgKnJ4Y2FsbCwgdW5zaWduZWQgbG9uZyB1c2VyX2NhbGxfSUQpOwotc3RhdGljIHZvaWQgYWZzX3J4X25vdGlmeV9vb2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb29iKTsKIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY21fb3BfaWQoc3RydWN0IGFmc19jYWxsICopOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ4cnBjX2tlcm5lbF9vcHMgYWZzX3J4cnBjX2NhbGxiYWNrX29wcyA9IHsKIAkubm90aWZ5X25ld19jYWxsCT0gYWZzX3J4X25ld19jYWxsLAogCS5kaXNjYXJkX25ld19jYWxsCT0gYWZzX3J4X2Rpc2NhcmRfbmV3X2NhbGwsCiAJLnVzZXJfYXR0YWNoX2NhbGwJPSBhZnNfcnhfYXR0YWNoLAotCS5ub3RpZnlfb29iCQk9IGFmc19yeF9ub3RpZnlfb29iLAogfTsKIAogLyogYXN5bmNocm9ub3VzIGluY29taW5nIGNhbGwgaW5pdGlhbCBwcm9jZXNzaW5nICovCkBAIC03NCwxMCAmIzQzOzcyLDYgQEAgaW50IGFmc19vcGVuX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KQogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycm9yXzI7CiAKLQlyZXQgPSByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2Uoc29ja2V0LSZndDtzaywgdHJ1ZSk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gZXJyb3JfMjsKLQogCXJldCA9IGFmc19jcmVhdGVfdG9rZW5fa2V5KG5ldCwgc29ja2V0KTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcHJfZXJyKCYjMzQ7Q291bGRuJiMzOTt0IGNyZWF0ZSBSeEdLIENNIGtleTogJWRcbiYjMzQ7LCByZXQpOwpAQCAtMTI4LDcgJiM0MzsxMjIsNiBAQCB2b2lkIGFmc19jbG9zZV9zb2NrZXQoc3RydWN0IGFmc19uZXQgKm5ldCkKIAlfZW50ZXIoJiMzNDsmIzM0Oyk7CiAKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7bmV0LSZndDtjaGFyZ2VfcHJlYWxsb2NhdGlvbl93b3JrKTsKLQljYW5jZWxfd29ya19zeW5jKCZhbXA7bmV0LSZndDtyeF9vb2Jfd29yayk7CiAJLyogRnV0dXJlIHdvcmsgaXRlbXMgc2hvdWxkIG5vdyBzZWUgLSZndDtsaXZlIGlzIGZhbHNlLiAqLwogCiAJa2VybmVsX2xpc3RlbihuZXQtJmd0O3NvY2tldCwgMCk7CkBAIC0xNDksNyAmIzQzOzE0Miw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KQogCiAJa2VybmVsX3NvY2tfc2h1dGRvd24obmV0LSZndDtzb2NrZXQsIFNIVVRfUkRXUik7CiAJZmx1c2hfd29ya3F1ZXVlKGFmc19hc3luY19jYWxscyk7Ci0JY2FuY2VsX3dvcmtfc3luYygmYW1wO25ldC0mZ3Q7cnhfb29iX3dvcmspOwogCW5ldC0mZ3Q7c29ja2V0LSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhID0gTlVMTDsKIAlzb2NrX3JlbGVhc2UobmV0LSZndDtzb2NrZXQpOwogCWtleV9wdXQobmV0LSZndDtmc19jbV90b2tlbl9rZXkpOwpAQCAtMzQ3LDcgJiM0MzszMzksMTAgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCXN0cnVjdCByeHJwY19jYWxsICpyeGNhbGw7CiAJc3RydWN0IG1zZ2hkciBtc2c7CiAJc3RydWN0IGt2ZWMgaW92WzFdOwomIzQzOwl1bnNpZ25lZCBpbnQgZGVidWdfaWQgPSBjYWxsLSZndDtkZWJ1Z19pZDsKJiM0MzsJc3RydWN0IGtleSAqYXBwX2RhdGEgPSBOVUxMOwogCXNpemVfdCBsZW47CiYjNDM7CWJvb2wgd3JpdGVfaXRlciA9IGNhbGwtJmd0O3dyaXRlX2l0ZXI7CiAJczY0IHR4X3RvdGFsX2xlbjsKIAlpbnQgcmV0OwogCkBAIC0zNzgsOCAmIzQzOzM3MywyNSBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApCiAJCWNhbGwtJmd0O2Ryb3BfcmVmID0gdHJ1ZTsKIAl9CiAKJiM0MzsJaWYgKGNhbGwtJmd0O2tleSAmYW1wOyZhbXA7IGNhbGwtJmd0O3NlcnZlcikgewomIzQzOwkJdTMyIGtyYjVfZW5jdHlwZSA9IDA7CiYjNDM7CQl1OCBzZWN1cml0eV9pbmRleCA9IDA7CiYjNDM7CiYjNDM7CQlyeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNhbGwtJmd0O2tleSwgJmFtcDtzZWN1cml0eV9pbmRleCwgJmFtcDtrcmI1X2VuY3R5cGUpOwomIzQzOwkJc3dpdGNoIChzZWN1cml0eV9pbmRleCkgewomIzQzOyNpZmRlZiBDT05GSUdfUlhHSwomIzQzOwkJY2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzoKJiM0MzsJCQlhcHBfZGF0YSA9IGNhbGwtJmd0O3NlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhOwomIzQzOwkJCWJyZWFrOwomIzQzOyNlbmRpZgomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCS8qIGNyZWF0ZSBhIGNhbGwgKi8KLQlyeGNhbGwgPSByeHJwY19rZXJuZWxfYmVnaW5fY2FsbChjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cGVlciwgY2FsbC0mZ3Q7a2V5LAomIzQzOwlyeGNhbGwgPSByeHJwY19rZXJuZWxfYmVnaW5fY2FsbChjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cGVlciwKJiM0MzsJCQkJCSBjYWxsLSZndDtrZXksIGFwcF9kYXRhLAogCQkJCQkgKHVuc2lnbmVkIGxvbmcpY2FsbCwKIAkJCQkJIHR4X3RvdGFsX2xlbiwKIAkJCQkJIGNhbGwtJmd0O21heF9saWZlc3BhbiwKQEAgLTQxMCw3ICYjNDM7NDIyLDcgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCWlvdl9pdGVyX2t2ZWMoJmFtcDttc2cubXNnX2l0ZXIsIElURVJfU09VUkNFLCBpb3YsIDEsIGNhbGwtJmd0O3JlcXVlc3Rfc2l6ZSk7CiAJbXNnLm1zZ19jb250cm9sCQk9IE5VTEw7CiAJbXNnLm1zZ19jb250cm9sbGVuCT0gMDsKLQltc2cubXNnX2ZsYWdzCQk9IE1TR19XQUlUQUxMIHwgKGNhbGwtJmd0O3dyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApOwomIzQzOwltc2cubXNnX2ZsYWdzCQk9IE1TR19XQUlUQUxMIHwgKHdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApOwogCiAJcmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgcnhjYWxsLAogCQkJCSAgICAgJmFtcDttc2csIGNhbGwtJmd0O3JlcXVlc3Rfc2l6ZSwKQEAgLTQxOCw3ICYjNDM7NDMwLDkgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycm9yX2RvX2Fib3J0OwogCi0JaWYgKGNhbGwtJmd0O3dyaXRlX2l0ZXIpIHsKJiM0MzsJLyogV2UgbG9zdCBvdXIgcmVmIG9uIGNhbGwgaWYgTVNHX01PUkUgd2FzIHNldC4gKi8KJiM0MzsKJiM0MzsJaWYgKHdyaXRlX2l0ZXIpIHsKIAkJbXNnLm1zZ19pdGVyID0gKmNhbGwtJmd0O3dyaXRlX2l0ZXI7CiAJCW1zZy5tc2dfZmxhZ3MgJmFtcDs9IH5NU0dfTU9SRTsKIAkJdHJhY2VfYWZzX3NlbmRfZGF0YShjYWxsLCAmYW1wO21zZyk7CkBAIC00MjcsOSAmIzQzOzQ0MSw5IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcCkKIAkJCQkJICAgICBjYWxsLSZndDtyeGNhbGwsICZhbXA7bXNnLAogCQkJCQkgICAgIGlvdl9pdGVyX2NvdW50KCZhbXA7bXNnLm1zZ19pdGVyKSwKIAkJCQkJICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTsKLQkJKmNhbGwtJmd0O3dyaXRlX2l0ZXIgPSBtc2cubXNnX2l0ZXI7CiYjNDM7CQkvKiBXZSBsb3N0IG91ciByZWYgb24gY2FsbC4gKi8KIAotCQl0cmFjZV9hZnNfc2VudF9kYXRhKGNhbGwsICZhbXA7bXNnLCByZXQpOwomIzQzOwkJdHJhY2VfYWZzX3NlbnRfZGF0YShkZWJ1Z19pZCwgJmFtcDttc2csIHJldCk7CiAJCWlmIChyZXQgJmx0OyAwKQogCQkJZ290byBlcnJvcl9kb19hYm9ydDsKIAl9CkBAIC05ODMsMTQgJiM0Mzs5OTcsMyBAQCBub2lubGluZSBpbnQgYWZzX3Byb3RvY29sX2Vycm9yKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwKIAkJY2FsbC0mZ3Q7dW5tYXJzaGFsbGluZ19lcnJvciA9IHRydWU7CiAJcmV0dXJuIC1FQkFETVNHOwogfQotCi0vKgotICogV2FrZSB1cCBPT0Igbm90aWZpY2F0aW9uIHByb2Nlc3NpbmcuCi0gKi8KLXN0YXRpYyB2b2lkIGFmc19yeF9ub3RpZnlfb29iKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9vYikKLXsKLQlzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gc2stJmd0O3NrX3VzZXJfZGF0YTsKLQotCWlmIChSRUFEX09OQ0UobmV0LSZndDtsaXZlKSkKLQkJcXVldWVfd29yayhhZnNfd3EsICZhbXA7bmV0LSZndDtyeF9vb2Jfd29yayk7Ci19CmRpZmYgLS1naXQgYS9mcy9hZnMvc2VydmVyLmMgYi9mcy9hZnMvc2VydmVyLmMKaW5kZXggMGZlMTYyZWEyYTM2ZGIuLjc2YTlmMjVjZTQ5MDU4IDEwMDY0NAotLS0gYS9mcy9hZnMvc2VydmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL3NlcnZlci5jCkBAIC0zOTgsNyAmIzQzOzM5OCw3IEBAIHN0YXRpYyB2b2lkIGFmc19zZXJ2ZXJfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KQogCWFmc19wdXRfZW5kcG9pbnRfc3RhdGUocmN1X2FjY2Vzc19wb2ludGVyKHNlcnZlci0mZ3Q7ZW5kcG9pbnRfc3RhdGUpLAogCQkJICAgICAgIGFmc19lc3RhdGVfdHJhY2VfcHV0X3NlcnZlcik7CiAJYWZzX3B1dF9jZWxsKHNlcnZlci0mZ3Q7Y2VsbCwgYWZzX2NlbGxfdHJhY2VfcHV0X3NlcnZlcik7Ci0Ja2ZyZWUoc2VydmVyLSZndDtjbV9yeGdrX2FwcGRhdGEuZGF0YSk7CiYjNDM7CWtleV9wdXQoc2VydmVyLSZndDtjbV9yeGdrX2FwcGRhdGEpOwogCWtmcmVlKHNlcnZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaCBiL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaAppbmRleCAzODZjMzE0MzI3ODk5NS4uNzAwMmE5OTNhNDcyMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2tleXMvdXNlci10eXBlLmgKQEAgLTI2LDYgJiM0MzsyNiw3IEBACiAgKi8KIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIHsKIAlzdHJ1Y3QgcmN1X2hlYWQJcmN1OwkJLyogUkNVIGRlc3RydWN0b3IgKi8KJiM0MzsJcmVmY291bnRfdAlyZWY7CiAJdW5zaWduZWQgc2hvcnQJZGF0YWxlbjsJLyogbGVuZ3RoIG9mIHRoaXMgZGF0YSAqLwogCWNoYXIJCWRhdGFbXSBfX2FsaWduZWQoX19hbGlnbm9mX18odTY0KSk7IC8qIGFjdHVhbCBkYXRhICovCiB9OwpAQCAtMzcsNiAmIzQzOzM4LDcgQEAgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZDsKIAogZXh0ZXJuIGludCB1c2VyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApOwogZXh0ZXJuIHZvaWQgdXNlcl9mcmVlX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApOwomIzQzO3ZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpOwogZXh0ZXJuIGludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApOwogZXh0ZXJuIHZvaWQgdXNlcl9yZXZva2Uoc3RydWN0IGtleSAqa2V5KTsKIGV4dGVybiB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfcnhycGMuaCBiL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmgKaW5kZXggMGZiNGM0MWM5YmJmNTUuLjU2NTFhMTBiYTI2ZTYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZl9yeHJwYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmgKQEAgLTU1LDYgJiM0Mzs1NSw3IEBAIHZvaWQgcnhycGNfa2VybmVsX3NldF9ub3RpZmljYXRpb25zKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywKIAkJCQkJICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsCiAJCQkJCSAgIHN0cnVjdCBrZXkgKmtleSwKJiM0MzsJCQkJCSAgIHN0cnVjdCBrZXkgKmFwcF9kYXRhLAogCQkJCQkgICB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCwKIAkJCQkJICAgczY0IHR4X3RvdGFsX2xlbiwKIAkJCQkJICAgdTMyIGhhcmRfdGltZW91dCwKQEAgLTkxLDI0ICYjNDM7OTIsNyBAQCBib29sIHJ4cnBjX2tlcm5lbF9jaGVja19saWZlKGNvbnN0IHN0cnVjdCBzb2NrZXQgKiwgY29uc3Qgc3RydWN0IHJ4cnBjX2NhbGwgKik7CiAKIGludCByeHJwY19zb2NrX3NldF9taW5fc2VjdXJpdHlfbGV2ZWwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgdmFsKTsKIGludCByeHJwY19zb2NrX3NldF9zZWN1cml0eV9rZXlyaW5nKHN0cnVjdCBzb2NrICosIHN0cnVjdCBrZXkgKik7Ci1pbnQgcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzZXQpOwotCi1lbnVtIHJ4cnBjX29vYl90eXBlIHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYiwKLQkJCQkJICAgc3RydWN0IHJ4cnBjX3BlZXIgKipfcGVlciwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyAqX3BlZXJfYXBwZGF0YSk7Ci1zdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfa2VybmVsX2RlcXVldWVfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0JCQkJCSBlbnVtIHJ4cnBjX29vYl90eXBlICpfdHlwZSk7Ci12b2lkIHJ4cnBjX2tlcm5lbF9mcmVlX29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iKTsKLXZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLAotCQkJCSAgc3RydWN0IHJ4cnBjX3BlZXIgKipfcGVlciwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsCi0JCQkJICB1MTYgKl9zZXJ2aWNlX2lkLCB1OCAqX3NlY3VyaXR5X2luZGV4KTsKLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSwKLQkJCQkgIGludCBlcnJvciwgZW51bSByeHJwY19hYm9ydF9yZWFzb24gd2h5KTsKLWludCByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSk7Ci11MzIgcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpOwotaW50IHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICAgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpOwomIzQzO3ZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2tleShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHU4ICpfc2VjdXJpdHlfaW5kZXgsIHUzMiAqX2tyYjVfZW5jdHlwZSk7CiB1OCByeHJwY19rZXJuZWxfcXVlcnlfY2FsbF9zZWN1cml0eShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwKIAkJCQkgICAgdTE2ICpfc2VydmljZV9pZCwgdTMyICpfZW5jdHlwZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmgKaW5kZXggMWIzYzQ4YjU1OTFkZmQuLjNkOTYwODJlNmVhYzc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaApAQCAtMTQ4LDYgJiM0MzsxNDgsNyBAQCBlbnVtIHlmc19jbV9vcGVyYXRpb24gewogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfdW51c2Vfc2xpc3RfaXNvcnQsCSYjMzQ7VU5VIGlzb3J0JiMzNDspIFwKIAlFTShhZnNfc2VydmVyX3RyYWNlX3VwZGF0ZSwJCSYjMzQ7VVBEQVRFICAgJiMzNDspIFwKIAlFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9ieV91dWlkLAkmIzM0O1VTRSB1dWlkICYjMzQ7KSBcCiYjNDM7CUVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NhbGwsCQkmIzM0O1VTRSBjYWxsICYjMzQ7KSBcCiAJRU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY21fY2FsbCwJJiMzNDtVU0UgY20tY2wmIzM0OykgXAogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dldF9jYXBzLAkmIzM0O1VTRSBnY2FwcyYjMzQ7KSBcCiAJRU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYiwJJiMzNDtVU0UgZ3Z1cGMmIzM0OykgXApAQCAtOTM3LDkgJiM0Mzs5MzgsOSBAQCBUUkFDRV9FVkVOVChhZnNfc2VuZF9kYXRhLAogCSAgICApOwogCiBUUkFDRV9FVkVOVChhZnNfc2VudF9kYXRhLAotCSAgICBUUF9QUk9UTyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHJldCksCiYjNDM7CSAgICBUUF9QUk9UTyh1bnNpZ25lZCBpbnQgY2FsbF9kZWJ1Z19pZCwgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgcmV0KSwKIAotCSAgICBUUF9BUkdTKGNhbGwsIG1zZywgcmV0KSwKJiM0MzsJICAgIFRQX0FSR1MoY2FsbF9kZWJ1Z19pZCwgbXNnLCByZXQpLAogCiAJICAgIFRQX1NUUlVDVF9fZW50cnkoCiAJCSAgICBfX2ZpZWxkKHVuc2lnbmVkIGludCwJCWNhbGwpCkBAIC05NDksNyAmIzQzOzk1MCw3IEBAIFRSQUNFX0VWRU5UKGFmc19zZW50X2RhdGEsCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCSAgICBfX2VudHJ5LSZndDtjYWxsID0gY2FsbC0mZ3Q7ZGVidWdfaWQ7CiYjNDM7CQkgICAgX19lbnRyeS0mZ3Q7Y2FsbCA9IGNhbGxfZGVidWdfaWQ7CiAJCSAgICBfX2VudHJ5LSZndDtyZXQgPSByZXQ7CiAJCSAgICBfX2VudHJ5LSZndDtvZmZzZXQgPSBtc2ctJmd0O21zZ19pdGVyLnhhcnJheV9zdGFydCAmIzQzOyBtc2ctJmd0O21zZ19pdGVyLmlvdl9vZmZzZXQ7CiAJCSAgICBfX2VudHJ5LSZndDtjb3VudCA9IGlvdl9pdGVyX2NvdW50KCZhbXA7bXNnLSZndDttc2dfaXRlcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaAppbmRleCA3MDRhMTBkZTY2NzAwNC4uOGZjNDE5MmUwMzkyYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaApAQCAtMjYyLDcgJiM0MzsyNjIsNiBAQAogCUVNKHJ4cnBjX2Nvbm5fZnJlZSwJCQkmIzM0O0ZSRUUgICAgICAgICYjMzQ7KSBcCiAJRU0ocnhycGNfY29ubl9nZXRfYWN0aXZhdGVfY2FsbCwJJiMzNDtHRVQgYWN0LWNhbGwmIzM0OykgXAogCUVNKHJ4cnBjX2Nvbm5fZ2V0X2NhbGxfaW5wdXQsCQkmIzM0O0dFVCBpbnAtY2FsbCYjMzQ7KSBcCi0JRU0ocnhycGNfY29ubl9nZXRfY2hhbGxlbmdlX2lucHV0LAkmIzM0O0dFVCBpbnAtY2hhbCYjMzQ7KSBcCiAJRU0ocnhycGNfY29ubl9nZXRfY29ubl9pbnB1dCwJCSYjMzQ7R0VUIGlucC1jb25uJiMzNDspIFwKIAlFTShyeHJwY19jb25uX2dldF9pZGxlLAkJCSYjMzQ7R0VUIGlkbGUgICAgJiMzNDspIFwKIAlFTShyeHJwY19jb25uX2dldF9wb2tlX2Fib3J0LAkJJiMzNDtHRVQgcGstYWJvcnQmIzM0OykgXApAQCAtMjc0LDcgJiM0MzsyNzMsNiBAQAogCUVNKHJ4cnBjX2Nvbm5fbmV3X3NlcnZpY2UsCQkmIzM0O05FVyBzZXJ2aWNlICYjMzQ7KSBcCiAJRU0ocnhycGNfY29ubl9wdXRfY2FsbCwJCQkmIzM0O1BVVCBjYWxsICAgICYjMzQ7KSBcCiAJRU0ocnhycGNfY29ubl9wdXRfY2FsbF9pbnB1dCwJCSYjMzQ7UFVUIGlucC1jYWxsJiMzNDspIFwKLQlFTShyeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQsCSYjMzQ7UFVUIGlucC1jaGFsJiMzNDspIFwKIAlFTShyeHJwY19jb25uX3B1dF9jb25uX2lucHV0LAkJJiMzNDtQVVQgaW5wLWNvbm4mIzM0OykgXAogCUVNKHJ4cnBjX2Nvbm5fcHV0X2Rpc2NhcmRfaWRsZSwJCSYjMzQ7UFVUIGRpc2MtaWRsJiMzNDspIFwKIAlFTShyeHJwY19jb25uX3B1dF9sb2NhbF9kZWFkLAkJJiMzNDtQVVQgbG9jLWRlYWQmIzM0OykgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaAppbmRleCBkOTczNWFiZDRjNzkxMC4uN2Q2YTUwMTUxOTMxMTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oCkBAIC01OCwxMSAmIzQzOzU4LDcgQEAgZW51bSByeHJwY19jbXNnX3R5cGUgewogCVJYUlBDX1RYX0xFTkdUSAkJPSAxMiwJLyogLXMtOiBUb3RhbCBsZW5ndGggb2YgVHggZGF0YSAqLwogCVJYUlBDX1NFVF9DQUxMX1RJTUVPVVQJPSAxMywJLyogLXMtOiBTZXQgb25lIG9yIG1vcmUgY2FsbCB0aW1lb3V0cyAqLwogCVJYUlBDX0NIQVJHRV9BQ0NFUFQJPSAxNCwJLyogU3MtOiBDaGFyZ2UgdGhlIGFjY2VwdCBwb29sIHdpdGggYSB1c2VyIGNhbGwgSUQgKi8KLQlSWFJQQ19PT0JfSUQJCT0gMTUsCS8qIC1zcjogT09CIG1lc3NhZ2UgSUQgKi8KLQlSWFJQQ19DSEFMTEVOR0VECT0gMTYsCS8qIEMtcjogSW5mbyBvbiBhIHJlY2VpdmVkIENIQUxMRU5HRSAqLwotCVJYUlBDX1JFU1BPTkQJCT0gMTcsCS8qIENzLTogUmVzcG9uZCB0byBhIGNoYWxsZW5nZSAqLwotCVJYUlBDX1JFU1BPTkRFRAkJPSAxOCwJLyogUy1yOiBEYXRhIHJlY2VpdmVkIGluIFJFU1BPTlNFICovCi0JUlhSUENfUkVTUF9SWEdLX0FQUERBVEEJPSAxOSwJLyogQ3MtOiBSRVNQT05TRTogUnhHSyBhcHAgZGF0YSB0byBpbmNsdWRlICovCiYjNDM7CVJYUlBDX1JFU1BPTlNFX0FQUERBVEEJPSAyMCwJLyogQ3MtOiBVc2VyIGtleSBob2xkaW5nIGFwcCBkYXRhIGZvciBSRVNQT05TRSAqLwogCVJYUlBDX19TVVBQT1JURUQKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMKaW5kZXggYzNjOGMzMjQwZWY5NDYuLmFhM2MwNThmNDA5NTU5IDEwMDY0NAotLS0gYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYwpAQCAtMjA4LDYgJiM0MzsyMDgsNyBAQCBkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCkKIAkJa2xlYXZlKCYjMzQ7ID0gLUVOT01FTSYjMzQ7KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDt1cGF5bG9hZC0mZ3Q7cmVmLCAxKTsKIAogCXVwYXlsb2FkLSZndDtkYXRhbGVuID0gcmVzdWx0X2xlbjsKIAltZW1jcHkodXBheWxvYWQtJmd0O2RhdGEsIGRhdGEsIHJlc3VsdF9sZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL01ha2VmaWxlIGIvbmV0L3J4cnBjL01ha2VmaWxlCmluZGV4IGY5OTRmOWYzMGEyOWQ0Li5mN2E1ZTBhNTkyZWUxMyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9NYWtlZmlsZQpAQCAtMjQsNyAmIzQzOzI0LDYgQEAgcnhycGMteSA6PSBcCiAJbG9jYWxfb2JqZWN0Lm8gXAogCW1pc2MubyBcCiAJbmV0X25zLm8gXAotCW9vYi5vIFwKIAlvdXRwdXQubyBcCiAJcGVlcl9ldmVudC5vIFwKIAlwZWVyX29iamVjdC5vIFwKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hZl9yeHJwYy5jIGIvbmV0L3J4cnBjL2FmX3J4cnBjLmMKaW5kZXggOWFiMGYyMmM4ODFlYzUuLjlkNWNlMWM3YWQwZDIyIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYWZfcnhycGMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvYWZfcnhycGMuYwpAQCAtMzE4LDYgJiM0MzszMTgsNyBAQCBFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9wdXRfcGVlcik7CiAgKiBAc29jazogVGhlIHNvY2tldCBvbiB3aGljaCB0byBtYWtlIHRoZSBjYWxsCiAgKiBAcGVlcjogVGhlIHBlZXIgdG8gY29udGFjdAogICogQGtleTogVGhlIHNlY3VyaXR5IGNvbnRleHQgdG8gdXNlIChkZWZhdWx0cyB0byBzb2NrZXQgc2V0dGluZykKJiM0MzsgKiBAYXBwX2RhdGE6IFRoZSBzZWN1cml0eSByZXNwb25zZSBhcHBsaWNhdGlvbiBkYXRhIChvciBOVUxMKQogICogQHVzZXJfY2FsbF9JRDogVGhlIElEIHRvIHVzZQogICogQHR4X3RvdGFsX2xlbjogVG90YWwgbGVuZ3RoIG9mIGRhdGEgdG8gdHJhbnNtaXQgZHVyaW5nIHRoZSBjYWxsIChvciAtMSkKICAqIEBoYXJkX3RpbWVvdXQ6IFRoZSBtYXhpbXVtIGxpZmVzcGFuIG9mIHRoZSBjYWxsIGluIHNlYwpAQCAtMzQwLDYgJiM0MzszNDEsNyBAQCBFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9wdXRfcGVlcik7CiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywKIAkJCQkJICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsCiAJCQkJCSAgIHN0cnVjdCBrZXkgKmtleSwKJiM0MzsJCQkJCSAgIHN0cnVjdCBrZXkgKmFwcF9kYXRhLAogCQkJCQkgICB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCwKIAkJCQkJICAgczY0IHR4X3RvdGFsX2xlbiwKIAkJCQkJICAgdTMyIGhhcmRfdGltZW91dCwKQEAgLTM2OCw2ICYjNDM7MzcwLDcgQEAgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCWtleSA9IE5VTEw7IC8qIGEgbm8tc2VjdXJpdHkga2V5ICovCiAKIAltZW1zZXQoJmFtcDtwLCAwLCBzaXplb2YocCkpOwomIzQzOwlwLmFwcF9kYXRhCQk9IGFwcF9kYXRhOwogCXAudXNlcl9jYWxsX0lECQk9IHVzZXJfY2FsbF9JRDsKIAlwLnR4X3RvdGFsX2xlbgkJPSB0eF90b3RhbF9sZW47CiAJcC5pbnRlcnJ1cHRpYmlsaXR5CT0gaW50ZXJydXB0aWJpbGl0eTsKQEAgLTU5NSwxMCAmIzQzOzU5OCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuKQogCQlmYWxsdGhyb3VnaDsKIAljYXNlIFJYUlBDX1NFUlZFUl9CT1VORDoKIAljYXNlIFJYUlBDX1NFUlZFUl9MSVNURU5JTkc6Ci0JCWlmIChtLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX09PQikKLQkJCXJldCA9IHJ4cnBjX3NlbmRtc2dfb29iKHJ4LCBtLCBsZW4pOwotCQllbHNlCi0JCQlyZXQgPSByeHJwY19kb19zZW5kbXNnKHJ4LCBtLCBsZW4pOwomIzQzOwkJcmV0ID0gcnhycGNfZG9fc2VuZG1zZyhyeCwgbSwgbGVuKTsKIAkJLyogVGhlIHNvY2tldCBoYXMgYmVlbiB1bmxvY2tlZCAqLwogCQlnb3RvIG91dDsKIAlkZWZhdWx0OgpAQCAtNjMzLDcgJiM0Mzs2MzMsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCSAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKQogewogCXN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stJmd0O3NrKTsKLQl1bnNpZ25lZCBpbnQgbWluX3NlY19sZXZlbCwgdmFsOwomIzQzOwl1bnNpZ25lZCBpbnQgbWluX3NlY19sZXZlbDsKIAl1MTYgc2VydmljZV91cGdyYWRlWzJdOwogCWludCByZXQ7CiAKQEAgLTcxMCwyMyAmIzQzOzcxMCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCiAJCWNhc2UgUlhSUENfTUFOQUdFX1JFU1BPTlNFOgogCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHVuc2lnbmVkIGludCkpCi0JCQkJZ290byBlcnJvcjsKLQkJCXJldCA9IC1FSVNDT05OOwotCQkJaWYgKHJ4LSZndDtzay5za19zdGF0ZSAhPSBSWFJQQ19VTkJPVU5EKQotCQkJCWdvdG8gZXJyb3I7Ci0JCQlyZXQgPSBjb3B5X3NhZmVfZnJvbV9zb2NrcHRyKCZhbXA7dmFsLCBzaXplb2YodmFsKSwKLQkJCQkJCSAgICAgb3B0dmFsLCBvcHRsZW4pOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIGVycm9yOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWlmICh2YWwgJmd0OyAxKQotCQkJCWdvdG8gZXJyb3I7Ci0JCQlpZiAodmFsKQotCQkJCXNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsICZhbXA7cngtJmd0O2ZsYWdzKTsKLQkJCWVsc2UKLQkJCQljbGVhcl9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsICZhbXA7cngtJmd0O2ZsYWdzKTsKLQkJCWdvdG8gc3VjY2VzczsKJiM0MzsJCQlnb3RvIGVycm9yOwogCiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKQEAgLTgzNSw4ICYjNDM7ODE5LDYgQEAgc3RhdGljIGludCByeHJwY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJcngtJmd0O2NhbGxzID0gUkJfUk9PVDsKIAogCXNwaW5fbG9ja19pbml0KCZhbXA7cngtJmd0O2luY29taW5nX2xvY2spOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19vb2JxKTsKLQlyeC0mZ3Q7cGVuZGluZ19vb2JxID0gUkJfUk9PVDsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3J4LSZndDtzb2NrX2NhbGxzKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3J4LSZndDt0b19iZV9hY2NlcHRlZCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKTsKQEAgLTg4NCwyMyAmIzQzOzg2Niw2IEBAIHN0YXRpYyBpbnQgcnhycGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGZsYWdzKQogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBQdXJnZSB0aGUgb3V0LW9mLWJhbmQgcXVldWUuCi0gKi8KLXN0YXRpYyB2b2lkIHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzdHJ1Y3Qgc29jayAqc2spCi17Ci0Jc3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc2spOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7cngtJmd0O3JlY3Ztc2dfb29icSkpKQotCQlyeHJwY19rZXJuZWxfZnJlZV9vb2Ioc2tiKTsKLQl3aGlsZSAoIVJCX0VNUFRZX1JPT1QoJmFtcDtyeC0mZ3Q7cGVuZGluZ19vb2JxKSkgewotCQlza2IgPSByYl9lbnRyeShyeC0mZ3Q7cGVuZGluZ19vb2JxLnJiX25vZGUsIHN0cnVjdCBza19idWZmLCByYm5vZGUpOwotCQlyYl9lcmFzZSgmYW1wO3NrYi0mZ3Q7cmJub2RlLCAmYW1wO3J4LSZndDtwZW5kaW5nX29vYnEpOwotCQlyeHJwY19rZXJuZWxfZnJlZV9vb2Ioc2tiKTsKLQl9Ci19Ci0KIC8qCiAgKiBSeFJQQyBzb2NrZXQgZGVzdHJ1Y3RvcgogICovCkBAIC05MDgsNyAmIzQzOzg3Myw2IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX3NvY2tfZGVzdHJ1Y3RvcihzdHJ1Y3Qgc29jayAqc2spCiB7CiAJX2VudGVyKCYjMzQ7JXAmIzM0Oywgc2spOwogCi0JcnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTsKIAlyeHJwY19wdXJnZV9xdWV1ZSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKTsKIAogCVdBUk5fT04ocmVmY291bnRfcmVhZCgmYW1wO3NrLSZndDtza193bWVtX2FsbG9jKSk7CkBAIC05NjEsNyAmIzQzOzkyNSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVsZWFzZV9zb2NrKHN0cnVjdCBzb2NrICpzaykKIAlyeHJwY19kaXNjYXJkX3ByZWFsbG9jKHJ4KTsKIAlyeHJwY19yZWxlYXNlX2NhbGxzX29uX3NvY2tldChyeCk7CiAJZmx1c2hfd29ya3F1ZXVlKHJ4cnBjX3dvcmtxdWV1ZSk7Ci0JcnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTsKIAlyeHJwY19wdXJnZV9xdWV1ZSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKTsKIAogCXJ4cnBjX3VudXNlX2xvY2FsKHJ4LSZndDtsb2NhbCwgcnhycGNfbG9jYWxfdW51c2VfcmVsZWFzZV9zb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oIGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKaW5kZXggY2U5NDZiMGEwM2UyYjMuLjEwMWFjNzU0NDc1ODRkIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXItaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaApAQCAtMTcxLDkgJiM0MzsxNzEsNiBAQCBzdHJ1Y3QgcnhycGNfc29jayB7CiAJY29uc3Qgc3RydWN0IHJ4cnBjX2tlcm5lbF9vcHMgKmFwcF9vcHM7CS8qIFRhYmxlIG9mIGtlcm5lbCBhcHAgbm90aWZpY2F0aW9uIGZ1bmNzICovCiAJc3RydWN0IHJ4cnBjX2xvY2FsCSpsb2NhbDsJCS8qIGxvY2FsIGVuZHBvaW50ICovCiAJc3RydWN0IHJ4cnBjX2JhY2tsb2cJKmJhY2tsb2c7CS8qIFByZWFsbG9jYXRpb24gZm9yIHNlcnZpY2VzICovCi0Jc3RydWN0IHNrX2J1ZmZfaGVhZAlyZWN2bXNnX29vYnE7CS8qIE9PQiBtZXNzYWdlcyBmb3IgcmVjdm1zZyB0byBwaWNrIHVwICovCi0Jc3RydWN0IHJiX3Jvb3QJCXBlbmRpbmdfb29icTsJLyogT09CIG1lc3NhZ2VzIGF3YWl0aW5nIHVzZXJzcGFjZSB0byByZXNwb25kIHRvICovCi0JdTY0CQkJb29iX2lkX2NvdW50ZXI7CS8qIE9PQiBtZXNzYWdlIElEIGNvdW50ZXIgKi8KIAlzcGlubG9ja190CQlpbmNvbWluZ19sb2NrOwkvKiBJbmNvbWluZyBjYWxsIHZzIHNlcnZpY2Ugc2h1dGRvd24gbG9jayAqLwogCXN0cnVjdCBsaXN0X2hlYWQJc29ja19jYWxsczsJLyogTGlzdCBvZiBjYWxscyBvd25lZCBieSB0aGlzIHNvY2tldCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJdG9fYmVfYWNjZXB0ZWQ7CS8qIGNhbGxzIGF3YWl0aW5nIGFjY2VwdGFuY2UgKi8KQEAgLTE4NCw3ICYjNDM7MTgxLDYgQEAgc3RydWN0IHJ4cnBjX3NvY2sgewogCXN0cnVjdCByYl9yb290CQljYWxsczsJCS8qIFVzZXIgSUQgLSZndDsgY2FsbCBtYXBwaW5nICovCiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAjZGVmaW5lIFJYUlBDX1NPQ0tfQ09OTkVDVEVECQkwCS8qIGNvbm5lY3Rfc3J4IGlzIHNldCAqLwotI2RlZmluZSBSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRQkxCS8qIFVzZXIgd2FudHMgdG8gbWFuYWdlIFJFU1BPTlNFIHBhY2tldHMgKi8KIAlyd2xvY2tfdAkJY2FsbF9sb2NrOwkvKiBsb2NrIGZvciBjYWxscyAqLwogCXUzMgkJCW1pbl9zZWNfbGV2ZWw7CS8qIG1pbmltdW0gc2VjdXJpdHkgbGV2ZWwgKi8KICNkZWZpbmUgUlhSUENfU0VDVVJJVFlfTUFYCVJYUlBDX1NFQ1VSSVRZX0VOQ1JZUFQKQEAgLTI0MSw3ICYjNDM7MjM3LDYgQEAgc3RydWN0IHJ4cnBjX3NrYl9wcml2IHsKIAkJCXU4CQlyZWFzb247CQkvKiBSZWFzb24gZm9yIGFjayAqLwogCQl9IGFjazsKIAkJc3RydWN0IHsKLQkJCXN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uOwkvKiBDb25uZWN0aW9uIHJlZmVycmVkIHRvICovCiAJCQl1bmlvbiB7CiAJCQkJdTMyIHJ4a2FkX25vbmNlOwogCQkJfTsKQEAgLTMxMCwxMyAmIzQzOzMwNSw2IEBAIHN0cnVjdCByeHJwY19zZWN1cml0eSB7CiAJYm9vbCAoKnZhbGlkYXRlX2NoYWxsZW5nZSkoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKLQkvKiBGaWxsIG91dCB0aGUgY21zZyBmb3IgcmVjdm1zZygpIHRvIHBhc3Mgb24gYSBjaGFsbGVuZ2UgdG8gdXNlcnNwYWNlLgotCSAqIFRoZSBzZWN1cml0eSBjbGFzcyBnZXRzIHRvIGFkZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgotCSAqLwotCWludCAoKmNoYWxsZW5nZV90b19yZWN2bXNnKShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKLQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkgICAgc3RydWN0IG1zZ2hkciAqbXNnKTsKLQogCS8qIFBhcnNlIHNlbmRtc2coKSBjb250cm9sIG1lc3NhZ2UgYW5kIHJlc3BvbmQgdG8gY2hhbGxlbmdlLiAqLwogCWludCAoKnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UpKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCiAJCQkJCSAgICBzdHJ1Y3QgbXNnaGRyICptc2cpOwpAQCAtNTE2LDYgJiM0Mzs1MDQsNyBAQCBzdHJ1Y3QgcnhycGNfYnVuZGxlIHsKIAlzdHJ1Y3QgcnhycGNfbG9jYWwJKmxvY2FsOwkJLyogUmVwcmVzZW50YXRpb24gb2YgbG9jYWwgZW5kcG9pbnQgKi8KIAlzdHJ1Y3QgcnhycGNfcGVlcgkqcGVlcjsJCS8qIFJlbW90ZSBlbmRwb2ludCAqLwogCXN0cnVjdCBrZXkJCSprZXk7CQkvKiBTZWN1cml0eSBkZXRhaWxzICovCiYjNDM7CXN0cnVjdCBrZXkJCSphcHBfZGF0YTsJLyogU2VjdXJpdHkgcmVzcG9uc2UgYXBwIGRhdGEgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXByb2NfbGluazsJLyogTGluayBpbiBuZXQtJmd0O2J1bmRsZV9wcm9jX2xpc3QgKi8KIAljb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5OwkvKiBhcHBsaWVkIHNlY3VyaXR5IG1vZHVsZSAqLwogCXJlZmNvdW50X3QJCXJlZjsKQEAgLTcxOSw2ICYjNDM7NzA4LDcgQEAgc3RydWN0IHJ4cnBjX2NhbGwgewogCXN0cnVjdCByeHJwY19zb2NrIF9fcmN1CSpzb2NrZXQ7CS8qIHNvY2tldCByZXNwb25zaWJsZSAqLwogCXN0cnVjdCByeHJwY19uZXQJKnJ4bmV0OwkJLyogTmV0d29yayBuYW1lc3BhY2UgdG8gd2hpY2ggY2FsbCBiZWxvbmdzICovCiAJc3RydWN0IGtleQkJKmtleTsJCS8qIFNlY3VyaXR5IGRldGFpbHMgKi8KJiM0MzsJc3RydWN0IGtleQkJKmFwcF9kYXRhOwkvKiBTZWN1cml0eSByZXNwb25zZSBhcHAgZGF0YSAqLwogCWNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSAqc2VjdXJpdHk7CS8qIGFwcGxpZWQgc2VjdXJpdHkgbW9kdWxlICovCiAJc3RydWN0IG11dGV4CQl1c2VyX211dGV4OwkvKiBVc2VyIGFjY2VzcyBtdXRleCAqLwogCXN0cnVjdCBzb2NrYWRkcl9yeHJwYwlkZXN0X3NyeDsJLyogRGVzdGluYXRpb24gYWRkcmVzcyAqLwpAQCAtOTEzLDYgJiM0Mzs5MDMsNyBAQCBlbnVtIHJ4cnBjX2NvbW1hbmQgewogfTsKIAogc3RydWN0IHJ4cnBjX2NhbGxfcGFyYW1zIHsKJiM0MzsJc3RydWN0IGtleQkJKmFwcF9kYXRhOwkvKiBTZWN1cml0eSByZXNwb25zZSBhcHAgZGF0YSAqLwogCXM2NAkJCXR4X3RvdGFsX2xlbjsJLyogVG90YWwgVHggZGF0YSBsZW5ndGggKGlmIHNlbmQgZGF0YSkgKi8KIAl1bnNpZ25lZCBsb25nCQl1c2VyX2NhbGxfSUQ7CS8qIFVzZXImIzM5O3MgY2FsbCBJRCAqLwogCXN0cnVjdCB7CkBAIC0xMzc1LDEzICYjNDM7MTM2Niw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJ4cnBjX25ldCAqcnhycGNfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAlyZXR1cm4gbmV0X2dlbmVyaWMobmV0LCByeHJwY19uZXRfaWQpOwogfQogCi0vKgotICogb29iLmMKLSAqLwotYm9vbCByeHJwY19ub3RpZnlfc29ja2V0X29vYihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkIHJ4cnBjX2FkZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBza19idWZmICpza2IpOwotaW50IHJ4cnBjX3NlbmRtc2dfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTsKLQogLyoKICAqIG91dHB1dC5jCiAgKi8KZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jYWxsX29iamVjdC5jIGIvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmMKaW5kZXggODE3ZWQ5YWNiOTFlNjEuLjJkZjNkMDE5MGE4OTE4IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvY2FsbF9vYmplY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY2FsbF9vYmplY3QuYwpAQCAtMTk4LDcgJiM0MzsxOTgsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2FsbG9jX2NsaWVudF9jYWxsKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAlrdGltZV90IG5vdzsKIAlpbnQgcmV0OwogCi0JX2VudGVyKCYjMzQ7JiMzNDspOwomIzQzOwlfZW50ZXIoJiMzNDslcCYjMzQ7LCBwLSZndDthcHBfZGF0YSk7CiAKIAljYWxsID0gcnhycGNfYWxsb2NfY2FsbChyeCwgZ2ZwLCBkZWJ1Z19pZCk7CiAJaWYgKCFjYWxsKQpAQCAtMjExLDYgJiM0MzsyMTEsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2FsbG9jX2NsaWVudF9jYWxsKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAljYWxsLSZndDtpbnRlcnJ1cHRpYmlsaXR5CT0gcC0mZ3Q7aW50ZXJydXB0aWJpbGl0eTsKIAljYWxsLSZndDt0eF90b3RhbF9sZW4JPSBwLSZndDt0eF90b3RhbF9sZW47CiAJY2FsbC0mZ3Q7a2V5CQk9IGtleV9nZXQoY3AtJmd0O2tleSk7CiYjNDM7CWNhbGwtJmd0O2FwcF9kYXRhCQk9IGtleV9nZXQocC0mZ3Q7YXBwX2RhdGEpOwogCWNhbGwtJmd0O3BlZXIJCT0gcnhycGNfZ2V0X3BlZXIoY3AtJmd0O3BlZXIsIHJ4cnBjX3BlZXJfZ2V0X2NhbGwpOwogCWNhbGwtJmd0O2xvY2FsCQk9IHJ4cnBjX2dldF9sb2NhbChjcC0mZ3Q7bG9jYWwsIHJ4cnBjX2xvY2FsX2dldF9jYWxsKTsKIAljYWxsLSZndDtzZWN1cml0eV9sZXZlbAk9IGNwLSZndDtzZWN1cml0eV9sZXZlbDsKQEAgLTY5Nyw2ICYjNDM7Njk4LDcgQEAgc3RhdGljIHZvaWQgcnhycGNfZGVzdHJveV9jYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlyeHJwY19wdXRfcGVlcihjYWxsLSZndDtwZWVyLCByeHJwY19wZWVyX3B1dF9jYWxsKTsKIAlyeHJwY19wdXRfbG9jYWwoY2FsbC0mZ3Q7bG9jYWwsIHJ4cnBjX2xvY2FsX3B1dF9jYWxsKTsKIAlrZXlfcHV0KGNhbGwtJmd0O2tleSk7CiYjNDM7CWtleV9wdXQoY2FsbC0mZ3Q7YXBwX2RhdGEpOwogCWNhbGxfcmN1KCZhbXA7Y2FsbC0mZ3Q7cmN1LCByeHJwY19yY3VfZnJlZV9jYWxsKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2Nvbm5fY2xpZW50LmMgYi9uZXQvcnhycGMvY29ubl9jbGllbnQuYwppbmRleCA0ODUxOWYwZGUxODUzOS4uNWNiZmE3YjIyM2UwMTEgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9jb25uX2NsaWVudC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9jb25uX2NsaWVudC5jCkBAIC04MSw2ICYjNDM7ODEsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2J1bmRsZSAqcnhycGNfYWxsb2NfYnVuZGxlKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCQlidW5kbGUtJmd0O2xvY2FsCQk9IGNhbGwtJmd0O2xvY2FsOwogCQlidW5kbGUtJmd0O3BlZXIJCT0gcnhycGNfZ2V0X3BlZXIoY2FsbC0mZ3Q7cGVlciwgcnhycGNfcGVlcl9nZXRfYnVuZGxlKTsKIAkJYnVuZGxlLSZndDtrZXkJCT0ga2V5X2dldChjYWxsLSZndDtrZXkpOwomIzQzOwkJYnVuZGxlLSZndDthcHBfZGF0YQk9IGtleV9nZXQoY2FsbC0mZ3Q7YXBwX2RhdGEpOwogCQlidW5kbGUtJmd0O3NlY3VyaXR5CT0gY2FsbC0mZ3Q7c2VjdXJpdHk7CiAJCWJ1bmRsZS0mZ3Q7ZXhjbHVzaXZlCT0gdGVzdF9iaXQoUlhSUENfQ0FMTF9FWENMVVNJVkUsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpOwogCQlidW5kbGUtJmd0O3VwZ3JhZGUJCT0gdGVzdF9iaXQoUlhSUENfQ0FMTF9VUEdSQURFLCAmYW1wO2NhbGwtJmd0O2ZsYWdzKTsKQEAgLTExOCw2ICYjNDM7MTE5LDcgQEAgc3RhdGljIHZvaWQgcnhycGNfZnJlZV9idW5kbGUoc3RydWN0IHJ4cnBjX2J1bmRsZSAqYnVuZGxlKQogCXdyaXRlX3VubG9jaygmYW1wO2J1bmRsZS0mZ3Q7bG9jYWwtJmd0O3J4bmV0LSZndDtjb25uX2xvY2spOwogCXJ4cnBjX3B1dF9wZWVyKGJ1bmRsZS0mZ3Q7cGVlciwgcnhycGNfcGVlcl9wdXRfYnVuZGxlKTsKIAlrZXlfcHV0KGJ1bmRsZS0mZ3Q7a2V5KTsKJiM0MzsJa2V5X3B1dChidW5kbGUtJmd0O2FwcF9kYXRhKTsKIAlrZnJlZShidW5kbGUpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY29ubl9ldmVudC5jIGIvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuYwppbmRleCA2MTFjNzkwYmM2ZDBjZS4uOTE0NmI5ZDRjMmFjNTAgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9jb25uX2V2ZW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuYwpAQCAtMjc5LDEwICYjNDM7Mjc5LDcgQEAgc3RhdGljIGludCByeHJwY19wcm9jZXNzX2V2ZW50KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogCiAJc3dpdGNoIChzcC0mZ3Q7aGRyLnR5cGUpIHsKIAljYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX0NIQUxMRU5HRToKLQkJcmV0ID0gY29ubi0mZ3Q7c2VjdXJpdHktJmd0O3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNvbm4sIHNrYik7Ci0JCXNwLSZndDtjaGFsbC5jb25uID0gTlVMTDsKLQkJcnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTsKLQkJcmV0dXJuIHJldDsKJiM0MzsJCXJldHVybiBjb25uLSZndDtzZWN1cml0eS0mZ3Q7cmVzcG9uZF90b19jaGFsbGVuZ2UoY29ubiwgc2tiKTsKIAogCWNhc2UgUlhSUENfUEFDS0VUX1RZUEVfUkVTUE9OU0U6CiAJCXNwaW5fbG9ja19pcnEoJmFtcDtjb25uLSZndDtzdGF0ZV9sb2NrKTsKQEAgLTQyNSw2NiAmIzQzOzQyMiw2IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJcnhycGNfcXVldWVfY29ubihjb25uLCByeHJwY19jb25uX3F1ZXVlX3J4X3dvcmspOwogfQogCi0vKgotICogUG9zdCBhIENIQUxMRU5HRSBwYWNrZXQgdG8gdGhlIHNvY2tldCBvZiBvbmUgb2YgYSBjb25uZWN0aW9uJiMzOTtzIGNhbGxzIHNvIHRoYXQKLSAqIGl0IGNhbiBnZXQgYXBwbGljYXRpb24gZGF0YSB0byBpbmNsdWRlIGluIHRoZSBwYWNrZXQsIHBvc3NpYmx5IHF1ZXJ5aW5nCi0gKiB1c2Vyc3BhY2UuCi0gKi8KLXN0YXRpYyBib29sIHJ4cnBjX3Bvc3RfY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAotCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTsKLQlzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCA9IE5VTEw7Ci0Jc3RydWN0IHJ4cnBjX3NvY2sgKnJ4OwotCWJvb2wgcmVzcG9uZCA9IGZhbHNlLCBxdWV1ZWQgPSBmYWxzZTsKLQotCXNwLSZndDtjaGFsbC5jb25uID0KLQkJcnhycGNfZ2V0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9nZXRfY2hhbGxlbmdlX2lucHV0KTsKLQotCWlmICghY29ubi0mZ3Q7c2VjdXJpdHktJmd0O2NoYWxsZW5nZV90b19yZWN2bXNnKSB7Ci0JCXJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGNvbm4tJmd0O2NoYW5uZWxzKTsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKGNvbm4tJmd0O2NoYW5uZWxzW2ldLmNhbGwpIHsKLQkJCWNhbGwgPSBjb25uLSZndDtjaGFubmVsc1tpXS5jYWxsOwotCQkJcnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC0mZ3Q7c29ja2V0KTsKLQkJCWlmICghcngpIHsKLQkJCQljYWxsID0gTlVMTDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJcmVzcG9uZCA9IHRydWU7Ci0JCQlpZiAodGVzdF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsICZhbXA7cngtJmd0O2ZsYWdzKSkKLQkJCQlicmVhazsKLQkJCWNhbGwgPSBOVUxMOwotCQl9Ci0JfQotCi0JaWYgKCFyZXNwb25kKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyeHJwY19wdXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQpOwotCQlzcC0mZ3Q7Y2hhbGwuY29ubiA9IE5VTEw7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoY2FsbCkKLQkJcXVldWVkID0gcnhycGNfbm90aWZ5X3NvY2tldF9vb2IoY2FsbCwgc2tiKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQlpZiAoY2FsbCAmYW1wOyZhbXA7ICFxdWV1ZWQpIHsKLQkJcnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTsKLQkJc3AtJmd0O2NoYWxsLmNvbm4gPSBOVUxMOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKCFjYWxsKQotCQlyeHJwY19wb3N0X3BhY2tldF90b19jb25uKGNvbm4sIHNrYik7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KIC8qCiAgKiBJbnB1dCBhIGNvbm5lY3Rpb24tbGV2ZWwgcGFja2V0LgogICovCkBAIC01MTMsNyAmIzQzOzQ1MCw4IEBAIGJvb2wgcnhycGNfaW5wdXRfY29ubl9wYWNrZXQoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpCiAJCX0KIAkJaWYgKCFjb25uLSZndDtzZWN1cml0eS0mZ3Q7dmFsaWRhdGVfY2hhbGxlbmdlKGNvbm4sIHNrYikpCiAJCQlyZXR1cm4gZmFsc2U7Ci0JCXJldHVybiByeHJwY19wb3N0X2NoYWxsZW5nZShjb25uLCBza2IpOwomIzQzOwkJcnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihjb25uLCBza2IpOwomIzQzOwkJcmV0dXJuIHRydWU7CiAKIAljYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX1JFU1BPTlNFOgogCQlpZiAocnhycGNfaXNfY29ubl9hYm9ydGVkKGNvbm4pKSB7CmRpZmYgLS1naXQgYS9uZXQvcnhycGMva2V5LmMgYi9uZXQvcnhycGMva2V5LmMKaW5kZXggYTBhYTc4ZDg5Mjg5N2YuLjJkZGRiZTNjYWQ1Y2ZjIDEwMDY0NAotLS0gYS9uZXQvcnhycGMva2V5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2tleS5jCkBAIC04OTMsMyAmIzQzOzg5MywzOSBAQCBzdGF0aWMgbG9uZyByeHJwY19yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwKIAlfbGVhdmUoJiMzNDsgPSAlenUmIzM0Oywgc2l6ZSk7CiAJcmV0dXJuIHNpemU7CiB9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcnhycGNfa2VybmVsX3F1ZXJ5X2tleSAtIFF1ZXJ5IHBhcmFtZXRlcnMgZnJvbSBhbiByeHJwYyBrZXkKJiM0MzsgKiBAa2V5OiBUaGUga2V5IHRvIHF1ZXJ5CiYjNDM7ICogQF9zZWN1cml0eV9pbmRleDogV2hlcmUgdG8gcmV0dXJuIHRoZSBzZWN1cml0eSBpbmRleAomIzQzOyAqIEBfa3JiNV9lbmN0eXBlOiBXaGVyZSB0byByZXR1cm4gdGhlIGtyYjUgZW5jcnlwdGlvbiB0eXBlIGlmIGFwcGxpY2FibGUKJiM0MzsgKgomIzQzOyAqIFF1ZXJ5IGFuIHJ4cnBjIGF1dGhlbnRpY2F0aW9uIGtleSwgZXh0cmFjdGluZyB0aGUgc2VjdXJpdHkgaW5kZXggZnJvbSB0aGUKJiM0MzsgKiBmaXJzdCB0b2tlbiB0aGVyZWluLgomIzQzOyAqLwomIzQzO3ZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2tleShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHU4ICpfc2VjdXJpdHlfaW5kZXgsIHUzMiAqX2tyYjVfZW5jdHlwZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCByeHJwY19rZXlfdG9rZW4gKnRva2VuOwomIzQzOwomIzQzOwl0b2tlbiA9IGtleS0mZ3Q7cGF5bG9hZC5kYXRhWzBdOwomIzQzOwlpZiAoIXRva2VuKSB7CiYjNDM7CQkqX3NlY3VyaXR5X2luZGV4ID0gMDsKJiM0MzsJCSpfa3JiNV9lbmN0eXBlID0gMDsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkqX3NlY3VyaXR5X2luZGV4ID0gdG9rZW4tJmd0O3NlY3VyaXR5X2luZGV4OwomIzQzOwlzd2l0Y2ggKHRva2VuLSZndDtzZWN1cml0eV9pbmRleCkgewomIzQzOwljYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOgomIzQzOwkJKl9rcmI1X2VuY3R5cGUgPSAwOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6CiYjNDM7CQkqX2tyYjVfZW5jdHlwZSA9IHRva2VuLSZndDtyeGdrLSZndDtlbmN0eXBlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlXQVJOX09OX09OQ0UoMSk7CiYjNDM7CQkqX2tyYjVfZW5jdHlwZSA9IDA7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkpOwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL29vYi5jIGIvbmV0L3J4cnBjL29vYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODBlZTI0ODdkMDk0MS4uMDAwMDAwMDAwMDAwMDAKLS0tIGEvbmV0L3J4cnBjL29vYi5jCiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGwKQEAgLTEsMzg3ICYjNDM7MCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgotLyogT3V0IG9mIGJhbmQgbWVzc2FnZSBoYW5kbGluZyAoZS5nLiBjaGFsbGVuZ2UtcmVzcG9uc2UpCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDI1IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICYjMzQ7OiAmIzM0OyBmbXQKLQotI2luY2x1ZGUgJmx0O2xpbnV4L25ldC5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2dmcC5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwotI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bmV0L2FmX3J4cnBjLmgmZ3Q7Ci0jaW5jbHVkZSAmIzM0O2FyLWludGVybmFsLmgmIzM0OwotCi1lbnVtIHJ4cnBjX29vYl9jb21tYW5kIHsKLQlSWFJQQ19PT0JfQ01EX1VOU0VULAotCVJYUlBDX09PQl9DTURfUkVTUE9ORCwKLX0gX19tb2RlKGJ5dGUpOwotCi1zdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyB7Ci0JdTY0CQkJb29iX2lkOwkJLyogSUQgbnVtYmVyIG9mIG1lc3NhZ2UgaWYgcmVwbHkgKi8KLQlzMzIJCQlhYm9ydF9jb2RlOwotCWVudW0gcnhycGNfb29iX2NvbW1hbmQJY29tbWFuZDsKLQlib29sCQkJaGF2ZV9vb2JfaWQ6MTsKLX07Ci0KLS8qCi0gKiBQb3N0IGFuIG91dC1vZi1iYW5kIG1lc3NhZ2UgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlCi0gKiBhc3NvY2lhdGVkIHdpdGggYSByZWZlcmVuY2UgY2FsbC4KLSAqLwotYm9vbCByeHJwY19ub3RpZnlfc29ja2V0X29vYihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKHNrYik7Ci0Jc3RydWN0IHJ4cnBjX3NvY2sgKnJ4OwotCXN0cnVjdCBzb2NrICpzazsKLQlib29sIHF1ZXVlZCA9IGZhbHNlOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JcnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC0mZ3Q7c29ja2V0KTsKLQlpZiAocngpIHsKLQkJc2sgPSAmYW1wO3J4LSZndDtzazsKLQkJc3Bpbl9sb2NrX2lycSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2spOwotCi0JCWlmIChzay0mZ3Q7c2tfc3RhdGUgJmx0OyBSWFJQQ19DTE9TRSkgewotCQkJc2tiLSZndDtza2JfbXN0YW1wX25zID0gcngtJmd0O29vYl9pZF9jb3VudGVyJiM0MzsmIzQzOzsKLQkJCXJ4cnBjX2dldF9za2Ioc2tiLCByeHJwY19za2JfZ2V0X3Bvc3Rfb29iKTsKLQkJCXNrYl9xdWV1ZV90YWlsKCZhbXA7cngtJmd0O3JlY3Ztc2dfb29icSwgc2tiKTsKLQkJCXF1ZXVlZCA9IHRydWU7Ci0KLQkJCXRyYWNlX3J4cnBjX25vdGlmeV9zb2NrZXQoY2FsbC0mZ3Q7ZGVidWdfaWQsIHNwLSZndDtoZHIuc2VyaWFsKTsKLQkJCWlmIChyeC0mZ3Q7YXBwX29wcykKLQkJCQlyeC0mZ3Q7YXBwX29wcy0mZ3Q7bm90aWZ5X29vYihzaywgc2tiKTsKLQkJfQotCi0JCXNwaW5fdW5sb2NrX2lycSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2spOwotCQlpZiAocXVldWVkICZhbXA7JmFtcDsgIXJ4LSZndDthcHBfb3BzICZhbXA7JmFtcDsgIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkKLQkJCXNrLSZndDtza19kYXRhX3JlYWR5KHNrKTsKLQl9Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gcXVldWVkOwotfQotCi0vKgotICogTG9jYXRlIHRoZSBPT0IgbWVzc2FnZSB0byByZXNwb25kIHRvIGJ5IGl0cyBJRC4KLSAqLwotc3RhdGljIHN0cnVjdCBza19idWZmICpyeHJwY19maW5kX3BlbmRpbmdfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgdTY0IG9vYl9pZCkKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqcDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JcCA9IHJ4LSZndDtwZW5kaW5nX29vYnEucmJfbm9kZTsKLQl3aGlsZSAocCkgewotCQlza2IgPSByYl9lbnRyeShwLCBzdHJ1Y3Qgc2tfYnVmZiwgcmJub2RlKTsKLQotCQlpZiAob29iX2lkICZsdDsgc2tiLSZndDtza2JfbXN0YW1wX25zKQotCQkJcCA9IHAtJmd0O3JiX2xlZnQ7Ci0JCWVsc2UgaWYgKG9vYl9pZCAmZ3Q7IHNrYi0mZ3Q7c2tiX21zdGFtcF9ucykKLQkJCXAgPSBwLSZndDtyYl9yaWdodDsKLQkJZWxzZQotCQkJcmV0dXJuIHNrYjsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIEFkZCBhbiBPT0IgbWVzc2FnZSBpbnRvIHRoZSBwZW5kaW5nLXJlc3BvbnNlIHNldC4gIFdlIGFsd2F5cyBhc3NpZ24gdGhlIG5leHQKLSAqIHZhbHVlIGZyb20gYSA2NC1iaXQgY291bnRlciB0byB0aGUgb29iX2lkLCBzbyBqdXN0IGFzc3VtZSB3ZSYjMzk7cmUgYWx3YXlzIGdvaW5nCi0gKiB0byBiZSBvbiB0aGUgcmlnaHQtaGFuZCBlZGdlIG9mIHRoZSB0cmVlIGFuZCB0aGF0IHRoZSBjb3VudGVyIHdvbiYjMzk7dCB3cmFwLgotICogVGhlIHRyZWUgaXMgYWxzbyBnaXZlbiBhIHJlZiB0byB0aGUgbWVzc2FnZS4KLSAqLwotdm9pZCByeHJwY19hZGRfcGVuZGluZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCByYl9ub2RlICoqcHAgPSAmYW1wO3J4LSZndDtwZW5kaW5nX29vYnEucmJfbm9kZSwgKnAgPSBOVUxMOwotCi0Jd2hpbGUgKCpwcCkgewotCQlwID0gKnBwOwotCQlwcCA9ICZhbXA7KCpwcCktJmd0O3JiX3JpZ2h0OwotCX0KLQotCXJiX2xpbmtfbm9kZSgmYW1wO3NrYi0mZ3Q7cmJub2RlLCBwLCBwcCk7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZhbXA7c2tiLSZndDtyYm5vZGUsICZhbXA7cngtJmd0O3BlbmRpbmdfb29icSk7Ci19Ci0KLS8qCi0gKiBFeHRyYWN0IGNvbnRyb2wgbWVzc2FnZXMgZnJvbSB0aGUgc2VuZG1zZygpIGNvbnRyb2wgYnVmZmVyLgotICovCi1zdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfb29iX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyAqcCkKLXsKLQlzdHJ1Y3QgY21zZ2hkciAqY21zZzsKLQlpbnQgbGVuOwotCi0JaWYgKG1zZy0mZ3Q7bXNnX2NvbnRyb2xsZW4gPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmb3JfZWFjaF9jbXNnaGRyKGNtc2csIG1zZykgewotCQlpZiAoIUNNU0dfT0sobXNnLCBjbXNnKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWxlbiA9IGNtc2ctJmd0O2Ntc2dfbGVuIC0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKTsKLQkJX2RlYnVnKCYjMzQ7Q01TRyAlZCwgJWQsICVkJiMzNDssCi0JCSAgICAgICBjbXNnLSZndDtjbXNnX2xldmVsLCBjbXNnLSZndDtjbXNnX3R5cGUsIGxlbik7Ci0KLQkJaWYgKGNtc2ctJmd0O2Ntc2dfbGV2ZWwgIT0gU09MX1JYUlBDKQotCQkJY29udGludWU7Ci0KLQkJc3dpdGNoIChjbXNnLSZndDtjbXNnX3R5cGUpIHsKLQkJY2FzZSBSWFJQQ19PT0JfSUQ6Ci0JCQlpZiAobGVuICE9IHNpemVvZihwLSZndDtvb2JfaWQpIHx8IHAtJmd0O2hhdmVfb29iX2lkKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJbWVtY3B5KCZhbXA7cC0mZ3Q7b29iX2lkLCBDTVNHX0RBVEEoY21zZyksIHNpemVvZihwLSZndDtvb2JfaWQpKTsKLQkJCXAtJmd0O2hhdmVfb29iX2lkID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQljYXNlIFJYUlBDX1JFU1BPTkQ6Ci0JCQlpZiAocC0mZ3Q7Y29tbWFuZCAhPSBSWFJQQ19PT0JfQ01EX1VOU0VUKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJcC0mZ3Q7Y29tbWFuZCA9IFJYUlBDX09PQl9DTURfUkVTUE9ORDsKLQkJCWJyZWFrOwotCQljYXNlIFJYUlBDX0FCT1JUOgotCQkJaWYgKGxlbiAhPSBzaXplb2YocC0mZ3Q7YWJvcnRfY29kZSkgfHwgcC0mZ3Q7YWJvcnRfY29kZSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCW1lbWNweSgmYW1wO3AtJmd0O2Fib3J0X2NvZGUsIENNU0dfREFUQShjbXNnKSwgc2l6ZW9mKHAtJmd0O2Fib3J0X2NvZGUpKTsKLQkJCWlmIChwLSZndDthYm9ydF9jb2RlID09IDApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJY2FzZSBSWFJQQ19SRVNQX1JYR0tfQVBQREFUQToKLQkJCWlmIChwLSZndDtjb21tYW5kICE9IFJYUlBDX09PQl9DTURfUkVTUE9ORCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQlzd2l0Y2ggKHAtJmd0O2NvbW1hbmQpIHsKLQljYXNlIFJYUlBDX09PQl9DTURfUkVTUE9ORDoKLQkJaWYgKCFwLSZndDtoYXZlX29vYl9pZCkKLQkJCXJldHVybiAtRUJBRFNMVDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBBbGxvdyB1c2Vyc3BhY2UgdG8gcmVzcG9uZCB0byBhbiBPT0IgdXNpbmcgc2VuZG1zZygpLgotICovCi1zdGF0aWMgaW50IHJ4cnBjX3Jlc3BvbmRfdG9fb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwKLQkJCQlzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyAqcCwKLQkJCQlzdHJ1Y3QgbXNnaGRyICptc2cpCi17Ci0Jc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm47Ci0Jc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCByZXQ7Ci0KLQlza2IgPSByeHJwY19maW5kX3BlbmRpbmdfb29iKHJ4LCBwLSZndDtvb2JfaWQpOwotCWlmIChza2IpCi0JCXJiX2VyYXNlKCZhbXA7c2tiLSZndDtyYm5vZGUsICZhbXA7cngtJmd0O3BlbmRpbmdfb29icSk7Ci0JcmVsZWFzZV9zb2NrKCZhbXA7cngtJmd0O3NrKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FQkFEU0xUOwotCi0Jc3AgPSByeHJwY19za2Ioc2tiKTsKLQotCXN3aXRjaCAocC0mZ3Q7Y29tbWFuZCkgewotCWNhc2UgUlhSUENfT09CX0NNRF9SRVNQT05EOgotCQlyZXQgPSAtRVBST1RPOwotCQlpZiAoc2tiLSZndDttYXJrICE9IFJYUlBDX09PQl9DSEFMTEVOR0UpCi0JCQlicmVhazsKLQkJY29ubiA9IHNwLSZndDtjaGFsbC5jb25uOwotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJaWYgKCFjb25uLSZndDtzZWN1cml0eS0mZ3Q7c2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSkKLQkJCWJyZWFrOwotCQlpZiAocC0mZ3Q7YWJvcnRfY29kZSkgewotCQkJcnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBwLSZndDthYm9ydF9jb2RlLCAtRUNPTk5BQk9SVEVELAotCQkJCQkgcnhycGNfYWJvcnRfcmVzcG9uc2Vfc2VuZG1zZyk7Ci0JCQlyZXQgPSAwOwotCQl9IGVsc2UgewotCQkJcmV0ID0gY29ubi0mZ3Q7c2VjdXJpdHktJmd0O3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc2tiLCBtc2cpOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQotCXN3aXRjaCAoc2tiLSZndDttYXJrKSB7Ci0JY2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOgotCQlyeHJwY19wdXRfY29ubmVjdGlvbihzcC0mZ3Q7Y2hhbGwuY29ubiwgcnhycGNfY29ubl9wdXRfb29iKTsKLQkJYnJlYWs7Ci0JfQotCXJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9vb2IpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBTZW5kIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2Ugb3IgcmVzcG9uZCB0byBhIHJlY2VpdmVkIG91dC1vZi1iYW5kIG1lc3NhZ2UuCi0gKiAtIGNhbGxlciBnaXZlcyB1cyB0aGUgc29ja2V0IGxvY2sKLSAqIC0gdGhlIHNvY2tldCBtYXkgYmUgZWl0aGVyIGEgY2xpZW50IHNvY2tldCBvciBhIHNlcnZlciBzb2NrZXQKLSAqLwotaW50IHJ4cnBjX3NlbmRtc2dfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCByeHJwY19vb2JfcGFyYW1zIHAgPSB7fTsKLQlpbnQgcmV0OwotCi0JX2VudGVyKCYjMzQ7JiMzNDspOwotCi0JcmV0ID0gcnhycGNfc2VuZG1zZ19vb2JfY21zZyhtc2csICZhbXA7cCk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gZXJyb3JfcmVsZWFzZV9zb2NrOwotCi0JaWYgKHAuaGF2ZV9vb2JfaWQpCi0JCXJldHVybiByeHJwY19yZXNwb25kX3RvX29vYihyeCwgJmFtcDtwLCBtc2cpOwotCi0JcmVsZWFzZV9zb2NrKCZhbXA7cngtJmd0O3NrKTsKLQotCXN3aXRjaCAocC5jb21tYW5kKSB7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCi0JX2xlYXZlKCYjMzQ7ID0gJWQmIzM0OywgcmV0KTsKLQlyZXR1cm4gcmV0OwotCi1lcnJvcl9yZWxlYXNlX3NvY2s6Ci0JcmVsZWFzZV9zb2NrKCZhbXA7cngtJmd0O3NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2IgLSBRdWVyeSB0aGUgcGFyYW1ldGVycyBvZiBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlCi0gKiBAb29iOiBUaGUgbWVzc2FnZSB0byBxdWVyeQotICogQF9wZWVyOiBXaGVyZSB0byByZXR1cm4gdGhlIHBlZXIgcmVjb3JkCi0gKiBAX3BlZXJfYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgYXR0YWNoZWQgdG8gYSBwZWVyIHJlY29yZAotICoKLSAqIEV4dHJhY3QgdXNlZnVsIHBhcmFtZXRlcnMgZnJvbSBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlLiAgVGhlIHNvdXJjZSBwZWVyCi0gKiBwYXJhbWV0ZXJzIGFyZSByZXR1cm5lZCB0aHJvdWdoIHRoZSBhcmd1bWVudCBsaXN0IGFuZCB0aGUgbWVzc2FnZSB0eXBlIGlzCi0gKiByZXR1cm5lZC4KLSAqCi0gKiBSZXR1cm46Ci0gKiAqICVSWFJQQ19PT0JfQ0hBTExFTkdFIC0gQ2hhbGxlbmdlIHdhbnRpbmcgYSByZXNwb25zZS4KLSAqLwotZW51bSByeHJwY19vb2JfdHlwZSByeHJwY19rZXJuZWxfcXVlcnlfb29iKHN0cnVjdCBza19idWZmICpvb2IsCi0JCQkJCSAgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEpCi17Ci0Jc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihvb2IpOwotCWVudW0gcnhycGNfb29iX3R5cGUgdHlwZSA9IG9vYi0mZ3Q7bWFyazsKLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgUlhSUENfT09CX0NIQUxMRU5HRToKLQkJKl9wZWVyCQk9IHNwLSZndDtjaGFsbC5jb25uLSZndDtwZWVyOwotCQkqX3BlZXJfYXBwZGF0YQk9IHNwLSZndDtjaGFsbC5jb25uLSZndDtwZWVyLSZndDthcHBfZGF0YTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJV0FSTl9PTl9PTkNFKDEpOwotCQkqX3BlZXIJCT0gTlVMTDsKLQkJKl9wZWVyX2FwcGRhdGEJPSAwOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gdHlwZTsKLX0KLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3F1ZXJ5X29vYik7Ci0KLS8qKgotICogcnhycGNfa2VybmVsX2RlcXVldWVfb29iIC0gRGVxdWV1ZSBhbmQgcmV0dXJuIHRoZSBmcm9udCBPT0IgbWVzc2FnZQotICogQHNvY2s6IFRoZSBzb2NrZXQgdG8gcXVlcnkKLSAqIEBfdHlwZTogV2hlcmUgdG8gcmV0dXJuIHRoZSBtZXNzYWdlIHR5cGUKLSAqCi0gKiBEZXF1ZXVlIHRoZSBmcm9udCBPT0IgbWVzc2FnZSwgaWYgdGhlcmUgaXMgb25lLCBhbmQgcmV0dXJuIGl0IGFuZAotICogaXRzIHR5cGUuCi0gKgotICogUmV0dXJuOiBUaGUgc2tfYnVmZiByZXByZXNlbnRpbmcgdGhlIE9PQiBtZXNzYWdlIG9yICVOVUxMIGlmIHRoZSBxdWV1ZSB3YXMKLSAqIGVtcHR5LgotICovCi1zdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfa2VybmVsX2RlcXVldWVfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0JCQkJCSBlbnVtIHJ4cnBjX29vYl90eXBlICpfdHlwZSkKLXsKLQlzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLSZndDtzayk7Ci0Jc3RydWN0IHNrX2J1ZmYgKm9vYjsKLQotCW9vYiA9IHNrYl9kZXF1ZXVlKCZhbXA7cngtJmd0O3JlY3Ztc2dfb29icSk7Ci0JaWYgKG9vYikKLQkJKl90eXBlID0gb29iLSZndDttYXJrOwotCXJldHVybiBvb2I7Ci19Ci1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYik7Ci0KLS8qKgotICogcnhycGNfa2VybmVsX2ZyZWVfb29iIC0gRnJlZSBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlCi0gKiBAb29iOiBUaGUgT09CIG1lc3NhZ2UgdG8gZnJlZQotICoKLSAqIEZyZWUgYW4gT09CIG1lc3NhZ2UgYWxvbmcgd2l0aCBhbnkgcmVzb3VyY2VzIGl0IGhvbGRzLgotICovCi12b2lkIHJ4cnBjX2tlcm5lbF9mcmVlX29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iKQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Iob29iKTsKLQotCXN3aXRjaCAob29iLSZndDttYXJrKSB7Ci0JY2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOgotCQlyeHJwY19wdXRfY29ubmVjdGlvbihzcC0mZ3Q7Y2hhbGwuY29ubiwgcnhycGNfY29ubl9wdXRfb29iKTsKLQkJYnJlYWs7Ci0JfQotCi0JcnhycGNfZnJlZV9za2Iob29iLCByeHJwY19za2JfcHV0X3B1cmdlX29vYik7Ci19Ci1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9mcmVlX29vYik7Ci0KLS8qKgotICogcnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSAtIFF1ZXJ5IHRoZSBwYXJhbWV0ZXJzIG9mIGEgY2hhbGxlbmdlCi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHF1ZXJ5Ci0gKiBAX3BlZXI6IFdoZXJlIHRvIHJldHVybiB0aGUgcGVlciByZWNvcmQKLSAqIEBfcGVlcl9hcHBkYXRhOiBUaGUgYXBwbGljYXRpb24gZGF0YSBhdHRhY2hlZCB0byBhIHBlZXIgcmVjb3JkCi0gKiBAX3NlcnZpY2VfaWQ6IFdoZXJlIHRvIHJldHVybiB0aGUgY29ubmVjdGlvbiBzZXJ2aWNlIElECi0gKiBAX3NlY3VyaXR5X2luZGV4OiBXaGVyZSB0byByZXR1cm4gdGhlIGNvbm5lY3Rpb24gc2VjdXJpdHkgaW5kZXgKLSAqCi0gKiBFeHRyYWN0IHVzZWZ1bCBwYXJhbWV0ZXJzIGZyb20gYSBDSEFMTEVOR0UgbWVzc2FnZS4KLSAqLwotdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLAotCQkJCSAgdW5zaWduZWQgbG9uZyAqX3BlZXJfYXBwZGF0YSwKLQkJCQkgIHUxNiAqX3NlcnZpY2VfaWQsIHU4ICpfc2VjdXJpdHlfaW5kZXgpCi17Ci0Jc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpOwotCi0JKl9wZWVyCQk9IHNwLSZndDtjaGFsbC5jb25uLSZndDtwZWVyOwotCSpfcGVlcl9hcHBkYXRhCT0gc3AtJmd0O2NoYWxsLmNvbm4tJmd0O3BlZXItJmd0O2FwcF9kYXRhOwotCSpfc2VydmljZV9pZAk9IHNwLSZndDtoZHIuc2VydmljZUlkOwotCSpfc2VjdXJpdHlfaW5kZXggPSBzcC0mZ3Q7aGRyLnNlY3VyaXR5SW5kZXg7Ci19Ci1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UpOwotCi0vKioKLSAqIHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlIC0gQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byByZWplY3QgYSBjaGFsbGVuZ2UKLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgdG8gYmUgcmVqZWN0ZWQKLSAqIEBhYm9ydF9jb2RlOiBUaGUgYWJvcnQgY29kZSB0byBzdGljayBpbnRvIHRoZSBBQk9SVCBwYWNrZXQKLSAqIEBlcnJvcjogTG9jYWwgZXJyb3IgdmFsdWUKLSAqIEB3aHk6IEluZGljYXRpb24gYXMgdG8gd2h5LgotICoKLSAqIEFsbG93IGEga2VybmVsIHNlcnZpY2UgdG8gcmVqZWN0IGEgY2hhbGxlbmdlIGJ5IGFib3J0aW5nIHRoZSBjb25uZWN0aW9uIGlmCi0gKiBpdCYjMzk7cyBzdGlsbCBpbiBhbiBhYm9ydGFibGUgc3RhdGUuICBUaGUgZXJyb3IgaXMgcmV0dXJuZWQgc28gdGhpcyBmdW5jdGlvbgotICogY2FuIGJlIHVzZWQgd2l0aCBhIHJldHVybiBzdGF0ZW1lbnQuCi0gKgotICogUmV0dXJuOiBUaGUgJWVycm9yIHBhcmFtZXRlci4KLSAqLwotaW50IHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsIHUzMiBhYm9ydF9jb2RlLAotCQkJCSAgaW50IGVycm9yLCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpCi17Ci0Jc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpOwotCi0JX2VudGVyKCYjMzQ7eyV4fSwlZCwlZCwldSYjMzQ7LCBzcC0mZ3Q7aGRyLnNlcmlhbCwgYWJvcnRfY29kZSwgZXJyb3IsIHdoeSk7Ci0KLQlyeHJwY19hYm9ydF9jb25uKHNwLSZndDtjaGFsbC5jb25uLCBOVUxMLCBhYm9ydF9jb2RlLCBlcnJvciwgd2h5KTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jCmluZGV4IGVmY2JhNGIyZTc0ZjBjLi4yODU5YTgwZTE4NzY2MyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3JlY3Ztc2cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcmVjdm1zZy5jCkBAIC0yMTUsNjEgJiM0MzsyMTUsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfdXNlcl9pZChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IG1zZ2hkciAqbXNnLAogCX0KIH0KIAotLyoKLSAqIERlYWwgd2l0aCBhIENIQUxMRU5HRSBwYWNrZXQuCi0gKi8KLXN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19jaGFsbGVuZ2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAotCQkJCSAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsIHVuc2lnbmVkIGludCBmbGFncykKLXsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7Ci0Jc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4gPSBzcC0mZ3Q7Y2hhbGwuY29ubjsKLQotCXJldHVybiBjb25uLSZndDtzZWN1cml0eS0mZ3Q7Y2hhbGxlbmdlX3RvX3JlY3Ztc2coY29ubiwgY2hhbGxlbmdlLCBtc2cpOwotfQotCi0vKgotICogUHJvY2VzcyBPT0IgcGFja2V0cy4gIENhbGxlZCB3aXRoIHRoZSBzb2NrZXQgbG9ja2VkLgotICovCi1zdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKLQkJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKQotewotCXN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stJmd0O3NrKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWJvb2wgbmVlZF9yZXNwb25zZSA9IGZhbHNlOwotCWludCByZXQ7Ci0KLQlza2IgPSBza2JfcGVlaygmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpOwotCWlmICghc2tiKQotCQlyZXR1cm4gLUVBR0FJTjsKLQlyeHJwY19zZWVfc2tiKHNrYiwgcnhycGNfc2tiX3NlZV9yZWN2bXNnKTsKLQotCXJldCA9IHB1dF9jbXNnKG1zZywgU09MX1JYUlBDLCBSWFJQQ19PT0JfSUQsIHNpemVvZih1NjQpLAotCQkgICAgICAgJmFtcDtza2ItJmd0O3NrYl9tc3RhbXBfbnMpOwotCWlmIChyZXQgJmx0OyAwKQotCQlyZXR1cm4gcmV0OwotCi0Jc3dpdGNoICgoZW51bSByeHJwY19vb2JfdHlwZSlza2ItJmd0O21hcmspIHsKLQljYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6Ci0JCW5lZWRfcmVzcG9uc2UgPSB0cnVlOwotCQlyZXQgPSByeHJwY19yZWN2bXNnX2NoYWxsZW5nZShzb2NrLCBtc2csIHNrYiwgZmxhZ3MpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlXQVJOX09OQ0UoMSwgJiMzNDtyZWN2bXNnKCkgY2FuJiMzOTt0IHByb2Nlc3MgdW5rbm93biBPT0IgdHlwZSAldVxuJiMzNDssCi0JCQkgIHNrYi0mZ3Q7bWFyayk7Ci0JCXJldCA9IC1FSU87Ci0JCWJyZWFrOwotCX0KLQotCWlmICghKGZsYWdzICZhbXA7IE1TR19QRUVLKSkgewotCQlza2JfdW5saW5rKHNrYiwgJmFtcDtyeC0mZ3Q7cmVjdm1zZ19vb2JxKTsKLQkJaWYgKG5lZWRfcmVzcG9uc2UpCi0JCQlyeHJwY19hZGRfcGVuZGluZ19vb2IocngsIHNrYik7Ci0JCWVsc2UKLQkJCXJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9vb2IpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCiAvKgogICogRGVsaXZlciBtZXNzYWdlcyB0byBhIGNhbGwuICBUaGlzIGtlZXBzIHByb2Nlc3NpbmcgcGFja2V0cyB1bnRpbCB0aGUgYnVmZmVyCiAgKiBpcyBmaWxsZWQgYW5kIHdlIGZpbmQgZWl0aGVyIG1vcmUgREFUQSAocmV0dXJucyAwKSBvciB0aGUgZW5kIG9mIHRoZSBEQVRBCkBAIC0yODEsNyAmIzQzOzIyNiw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCQkJICAgICAgc2l6ZV90IGxlbiwgaW50IGZsYWdzLCBzaXplX3QgKl9vZmZzZXQpCiB7CiAJc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcDsKLQlzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLSZndDtzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlyeHJwY19zZXFfdCBzZXEgPSAwOwogCXNpemVfdCByZW1haW47CkBAIC0zNzYsMTMgJiM0MzszMjAsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwKIAogCQlpZiAoIShmbGFncyAmYW1wOyBNU0dfUEVFSykpCiAJCQlyeHJwY19yb3RhdGVfcnhfd2luZG93KGNhbGwpOwotCi0JCWlmICghcngtJmd0O2FwcF9vcHMgJmFtcDsmYW1wOwotCQkgICAgIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpKSB7Ci0JCQl0cmFjZV9yeHJwY19yZWN2ZGF0YShjYWxsLCByeHJwY19yZWN2bXNnX29vYnEsIHNlcSwKLQkJCQkJICAgICByeF9wa3Rfb2Zmc2V0LCByeF9wa3RfbGVuLCByZXQpOwotCQkJYnJlYWs7Ci0JCX0KIAl9CiAKIG91dDoKQEAgLTQxOSw3ICYjNDM7MzU2LDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCiAJdHJhY2VfcnhycGNfcmVjdm1zZygwLCByeHJwY19yZWN2bXNnX2VudGVyLCAwKTsKIAotCWlmIChmbGFncyAmYW1wOyAoTVNHX09PQiB8IE1TR19UUlVOQykpCiYjNDM7CWlmIChmbGFncyAmYW1wOyBNU0dfVFJVTkMpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXRpbWVvID0gc29ja19yY3Z0aW1lbygmYW1wO3J4LSZndDtzaywgZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUKTsKQEAgLTQzMCwxNCAmIzQzOzM2NywxMiBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJLyogUmV0dXJuIGltbWVkaWF0ZWx5IGlmIGEgY2xpZW50IHNvY2tldCBoYXMgbm8gb3V0c3RhbmRpbmcgY2FsbHMgKi8KIAlpZiAoUkJfRU1QVFlfUk9PVCgmYW1wO3J4LSZndDtjYWxscykgJmFtcDsmYW1wOwogCSAgICBsaXN0X2VtcHR5KCZhbXA7cngtJmd0O3JlY3Ztc2dfcSkgJmFtcDsmYW1wOwotCSAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19vb2JxKSAmYW1wOyZhbXA7CiAJICAgIHJ4LSZndDtzay5za19zdGF0ZSAhPSBSWFJQQ19TRVJWRVJfTElTVEVOSU5HKSB7CiAJCXJlbGVhc2Vfc29jaygmYW1wO3J4LSZndDtzayk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlmIChsaXN0X2VtcHR5KCZhbXA7cngtJmd0O3JlY3Ztc2dfcSkgJmFtcDsmYW1wOwotCSAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19vb2JxKSkgewomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO3J4LSZndDtyZWN2bXNnX3EpKSB7CiAJCXJldCA9IC1FV09VTERCTE9DSzsKIAkJaWYgKHRpbWVvID09IDApIHsKIAkJCWNhbGwgPSBOVUxMOwpAQCAtNDUzLDggJiM0MzszODgsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCWlmIChyZXQpCiAJCQlnb3RvIHdhaXRfZXJyb3I7CiAKLQkJaWYgKGxpc3RfZW1wdHkoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKSAmYW1wOyZhbXA7Ci0JCSAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19vb2JxKSkgewomIzQzOwkJaWYgKGxpc3RfZW1wdHkoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKSkgewogCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJCWdvdG8gd2FpdF9pbnRlcnJ1cHRlZDsKIAkJCXRyYWNlX3J4cnBjX3JlY3Ztc2coMCwgcnhycGNfcmVjdm1zZ193YWl0LCAwKTsKQEAgLTQ2NCwxNSAmIzQzOzM5OCw2IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAkJZ290byB0cnlfYWdhaW47CiAJfQogCi0JLyogRGVhbCB3aXRoIE9PQiBtZXNzYWdlcyBiZWZvcmUgd2UgY29uc2lkZXIgZ2V0dGluZyBub3JtYWwgZGF0YS4gKi8KLQlpZiAoIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpKSB7Ci0JCXJldCA9IHJ4cnBjX3JlY3Ztc2dfb29iKHNvY2ssIG1zZywgZmxhZ3MpOwotCQlyZWxlYXNlX3NvY2soJmFtcDtyeC0mZ3Q7c2spOwotCQlpZiAocmV0ID09IC1FQUdBSU4pCi0JCQlnb3RvIHRyeV9hZ2FpbjsKLQkJZ290byBlcnJvcl90cmFjZTsKLQl9Ci0KIAkvKiBGaW5kIHRoZSBuZXh0IGNhbGwgYW5kIGRlcXVldWUgaXQgaWYgd2UmIzM5O3JlIG5vdCBqdXN0IHBlZWtpbmcuICBJZiB3ZQogCSAqIGRvIGRlcXVldWUgaXQsIHRoYXQgY29tZXMgd2l0aCBhIHJlZiB0aGF0IHdlIHdpbGwgbmVlZCB0byByZWxlYXNlLgogCSAqIFdlIGFsc28gd2FudCB0byB3ZWVkIG91dCBjYWxscyB0aGF0IGdvdCByZXF1ZXVlZCB3aGlsc3Qgd2Ugd2VyZQpAQCAtNDgzLDggJiM0Mzs0MDgsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJY2FsbCA9IGxpc3RfZW50cnkobCwgc3RydWN0IHJ4cnBjX2NhbGwsIHJlY3Ztc2dfbGluayk7CiAKIAlpZiAoIXJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgJmFtcDsmYW1wOwotCSAgICBza2JfcXVldWVfZW1wdHkoJmFtcDtjYWxsLSZndDtyZWN2bXNnX3F1ZXVlKSAmYW1wOyZhbXA7Ci0JICAgIHNrYl9xdWV1ZV9lbXB0eSgmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpKSB7CiYjNDM7CSAgICBza2JfcXVldWVfZW1wdHkoJmFtcDtjYWxsLSZndDtyZWN2bXNnX3F1ZXVlKSkgewogCQlsaXN0X2RlbF9pbml0KCZhbXA7Y2FsbC0mZ3Q7cmVjdm1zZ19saW5rKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cngtJmd0O3JlY3Ztc2dfbG9jayk7CiAJCXJlbGVhc2Vfc29jaygmYW1wO3J4LSZndDtzayk7CmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcnhnay5jIGIvbmV0L3J4cnBjL3J4Z2suYwppbmRleCA3N2E2N2FjZTFkMjQ4MS4uOWFiNzY2ZDVmMGI2YzggMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9yeGdrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3J4Z2suYwpAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2V5LXR5cGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7a2V5cy91c2VyLXR5cGUuaCZndDsKICNpbmNsdWRlICYjMzQ7YXItaW50ZXJuYWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3J4Z2tfY29tbW9uLmgmIzM0OwogCkBAIC03MzQsMzcgJiM0Mzs3MzUsNiBAQCBzdGF0aWMgYm9vbCByeGdrX3ZhbGlkYXRlX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyoqCi0gKiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UgLSBRdWVyeSBSeEdLLXNwZWNpZmljIGNoYWxsZW5nZSBwYXJhbWV0ZXJzCi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHBhY2tldCB0byBxdWVyeQotICoKLSAqIFJldHVybjogVGhlIEtlcmJlcm9zIDUgZW5jb2RpbmcgdHlwZSBmb3IgdGhlIGNoYWxsZW5nZWQgY29ubmVjdGlvbi4KLSAqLwotdTMyIHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTsKLQotCXJldHVybiBzcC0mZ3Q7Y2hhbGwuY29ubi0mZ3Q7cnhnay5lbmN0eXBlOwotfQotRVhQT1JUX1NZTUJPTChyeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UpOwotCi0vKgotICogRmlsbCBvdXQgdGhlIGNvbnRyb2wgbWVzc2FnZSB0byBwYXNzIHRvIHVzZXJzcGFjZSB0byBpbmZvcm0gYWJvdXQgdGhlCi0gKiBjaGFsbGVuZ2UuCi0gKi8KLXN0YXRpYyBpbnQgcnhna19jaGFsbGVuZ2VfdG9fcmVjdm1zZyhzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKLQkJCQkgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpCi17Ci0Jc3RydWN0IHJ4Z2tfY2hhbGxlbmdlIGNoYWxsOwotCi0JY2hhbGwuYmFzZS5zZXJ2aWNlX2lkCQk9IGNvbm4tJmd0O3NlcnZpY2VfaWQ7Ci0JY2hhbGwuYmFzZS5zZWN1cml0eV9pbmRleAk9IGNvbm4tJmd0O3NlY3VyaXR5X2l4OwotCWNoYWxsLmVuY3R5cGUJCQk9IGNvbm4tJmd0O3J4Z2suZW5jdHlwZTsKLQotCXJldHVybiBwdXRfY21zZyhtc2csIFNPTF9SWFJQQywgUlhSUENfQ0hBTExFTkdFRCwgc2l6ZW9mKGNoYWxsKSwgJmFtcDtjaGFsbCk7Ci19Ci0KIC8qCiAgKiBJbnNlcnQgdGhlIHJlcXVpc2l0ZSBhbW91bnQgb2YgWERSIHBhZGRpbmcgZm9yIHRoZSBsZW5ndGggZ2l2ZW4uCiAgKi8KQEAgLTgzNyw3ICYjNDM7ODA3LDcgQEAgc3RhdGljIG5vaW5saW5lIHNzaXplX3Qgcnhna19pbnNlcnRfcmVzcG9uc2VfaGVhZGVyKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb24KICAqLwogc3RhdGljIHNzaXplX3Qgcnhna19jb25zdHJ1Y3RfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKIAkJCQkJICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJCSAgICBjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEsCiYjNDM7CQkJCQkgICAgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKmFwcGRhdGEsCiAJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcG9uc2UsCiAJCQkJCSAgICBzaXplX3Qgb2Zmc2V0KQogewpAQCAtODU5LDIwICYjNDM7ODI5LDIwIEBAIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiAtRVBST1RPOwogCi0JYS5hcHBkYXRhX2xlbiA9IGh0b25sKGFwcGRhdGEtJmd0O2xlbik7CiYjNDM7CWEuYXBwZGF0YV9sZW4gPSBodG9ubChhcHBkYXRhLSZndDtkYXRhbGVuKTsKIAogCXJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsICZhbXA7YSwgc2l6ZW9mKGEpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAlvZmZzZXQgJiM0Mzs9IHNpemVvZihhKTsKIAotCWlmIChhcHBkYXRhLSZndDtsZW4pIHsKLQkJcmV0ID0gc2tiX3N0b3JlX2JpdHMocmVzcG9uc2UsIG9mZnNldCwgYXBwZGF0YS0mZ3Q7ZGF0YSwgYXBwZGF0YS0mZ3Q7bGVuKTsKJiM0MzsJaWYgKGFwcGRhdGEtJmd0O2RhdGFsZW4pIHsKJiM0MzsJCXJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIGFwcGRhdGEtJmd0O2RhdGEsIGFwcGRhdGEtJmd0O2RhdGFsZW4pOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7Ci0JCW9mZnNldCAmIzQzOz0gYXBwZGF0YS0mZ3Q7bGVuOwomIzQzOwkJb2Zmc2V0ICYjNDM7PSBhcHBkYXRhLSZndDtkYXRhbGVuOwogCi0JCXJldCA9IHJ4Z2tfcGFkX291dChyZXNwb25zZSwgYXBwZGF0YS0mZ3Q7bGVuLCBvZmZzZXQpOwomIzQzOwkJcmV0ID0gcnhna19wYWRfb3V0KHJlc3BvbnNlLCBhcHBkYXRhLSZndDtkYXRhbGVuLCBvZmZzZXQpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7CiAJCW9mZnNldCAmIzQzOz0gcmV0OwpAQCAtODkwLDcgJiM0Mzs4NjAsNyBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogCXJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsICZhbXA7Yiwgc2l6ZW9mKGIpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKLQlyZXR1cm4gc2l6ZW9mKGEpICYjNDM7IHhkcl9yb3VuZF91cChhcHBkYXRhLSZndDtsZW4pICYjNDM7IHNpemVvZihiKTsKJiM0MzsJcmV0dXJuIHNpemVvZihhKSAmIzQzOyB4ZHJfcm91bmRfdXAoYXBwZGF0YS0mZ3Q7ZGF0YWxlbikgJiM0Mzsgc2l6ZW9mKGIpOwogfQogCiBzdGF0aWMgc3NpemVfdCByeGdrX2VuY3J5cHRfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKQEAgLTkyMyw3ICYjNDM7ODkzLDcgQEAgc3RhdGljIHNzaXplX3Qgcnhna19lbmNyeXB0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAgKi8KIHN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQkJICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpCiYjNDM7CQkJCSAgIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICphcHBkYXRhKQogewogCXN0cnVjdCByeHJwY19za2JfcHJpdiAqY3NwLCAqcnNwOwogCXN0cnVjdCByeGdrX2NvbnRleHQgKmdrOwpAQCAtOTM2LDcgJiM0Mzs5MDYsNyBAQCBzdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogCWlmIChJU19FUlIoZ2spKQogCQlyZXR1cm4gUFRSX0VSUihnayk7CiAKLQlhdXRoX2xlbiA9IDIwICYjNDM7ICg0ICYjNDM7IGFwcGRhdGEtJmd0O2xlbikgJiM0MzsgMTIgJiM0MzsgKDEgJiM0MzsgNCkgKiA0OwomIzQzOwlhdXRoX2xlbiA9IDIwICYjNDM7ICg0ICYjNDM7IGFwcGRhdGEtJmd0O2RhdGFsZW4pICYjNDM7IDEyICYjNDM7ICgxICYjNDM7IDQpICogNDsKIAlhdXRoeF9sZW4gPSBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIoZ2stJmd0O2tyYjUsIEtSQjVfRU5DUllQVF9NT0RFLAogCQkJCQkJYXV0aF9sZW4sICZhbXA7YXV0aF9vZmZzZXQpOwogCWxlbiA9IHNpemVvZihzdHJ1Y3QgcnhycGNfd2lyZV9oZWFkZXIpICYjNDM7CkBAIC0xMDExLDY2ICYjNDM7OTgxLDM2IEBAIHN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAgKiBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHBhY2tldC4KICAqLwogc3RhdGljIGludCByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAotCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSkKJiM0MzsJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKQogewotCV9lbnRlcigmIzM0O3slZCwleH0mIzM0OywgY29ubi0mZ3Q7ZGVidWdfaWQsIGtleV9zZXJpYWwoY29ubi0mZ3Q7a2V5KSk7CiYjNDM7CXN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIGR1bW15ID0ge30sICphcHBkYXRhID0gJmFtcDtkdW1teTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJX2VudGVyKCYjMzQ7eyVkLCV1LCV4LCV4fSYjMzQ7LAomIzQzOwkgICAgICAgY29ubi0mZ3Q7ZGVidWdfaWQsIGNvbm4tJmd0O3NlcnZpY2VfaWQsCiYjNDM7CSAgICAgICBrZXlfc2VyaWFsKGNvbm4tJmd0O2tleSksIGtleV9zZXJpYWwoY29ubi0mZ3Q7YnVuZGxlLSZndDthcHBfZGF0YSkpOwogCiAJaWYgKGtleV92YWxpZGF0ZShjb25uLSZndDtrZXkpICZsdDsgMCkKIAkJcmV0dXJuIHJ4cnBjX2Fib3J0X2Nvbm4oY29ubiwgTlVMTCwgUlhHS19FWFBJUkVELCAtRVBST1RPLAogCQkJCQlyeGdrX2Fib3J0X2NoYWxsX2tleV9leHBpcmVkKTsKIAotCXJldHVybiByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShjb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpOwotfQotCi1zdGF0aWMgaW50IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2Vfbm9fYXBwZGF0YShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKLQkJCQkJCXN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpCi17Ci0Jc3RydWN0IGtyYjVfYnVmZmVyIGFwcGRhdGEgPSB7fTsKLQotCXJldHVybiByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNvbm4sIGNoYWxsZW5nZSwgJmFtcDthcHBkYXRhKTsKLX0KLQotLyoqCi0gKiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZSAtIFJlc3BvbmQgdG8gYSBjaGFsbGVuZ2Ugd2l0aCBhcHBkYXRhCi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHJlc3BvbmQgdG8KLSAqIEBhcHBkYXRhOiBUaGUgYXBwbGljYXRpb24gZGF0YSB0byBpbmNsdWRlIGluIHRoZSBSRVNQT05TRSBhdXRoZW50aWNhdG9yCi0gKgotICogQWxsb3cgYSBrZXJuZWwgYXBwbGljYXRpb24gdG8gcmVzcG9uZCB0byBhIENIQUxMRU5HRSB3aXRoIGFwcGxpY2F0aW9uIGRhdGEKLSAqIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBSeEdLIFJFU1BPTlNFIEF1dGhlbnRpY2F0b3IuCi0gKgotICogUmV0dXJuOiAlMCBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgotICovCi1pbnQgcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSkKLXsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKmNzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpOwotCi0JcmV0dXJuIHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UoY3NwLSZndDtjaGFsbC5jb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpOwotfQotRVhQT1JUX1NZTUJPTChyeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZSk7Ci0KLS8qCi0gKiBQYXJzZSBzZW5kbXNnKCkgY29udHJvbCBtZXNzYWdlIGFuZCByZXNwb25kIHRvIGNoYWxsZW5nZS4gIFdlIG5lZWQgdG8gc2VlIGlmCi0gKiB0aGVyZSYjMzk7cyBhbiBhcHBkYXRhIHRvIGZpc2ggb3V0LgotICovCi1zdGF0aWMgaW50IHJ4Z2tfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLAotCQkJCQkgICAgIHN0cnVjdCBtc2doZHIgKm1zZykKLXsKLQlzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9OwotCXN0cnVjdCBjbXNnaGRyICpjbXNnOwotCi0JZm9yX2VhY2hfY21zZ2hkcihjbXNnLCBtc2cpIHsKLQkJaWYgKGNtc2ctJmd0O2Ntc2dfbGV2ZWwgIT0gU09MX1JYUlBDIHx8Ci0JCSAgICBjbXNnLSZndDtjbXNnX3R5cGUgIT0gUlhSUENfUkVTUF9SWEdLX0FQUERBVEEpCi0JCQljb250aW51ZTsKLQkJaWYgKGFwcGRhdGEuZGF0YSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlhcHBkYXRhLmRhdGEgPSBDTVNHX0RBVEEoY21zZyk7Ci0JCWFwcGRhdGEubGVuID0gY21zZy0mZ3Q7Y21zZ19sZW4gLSBzaXplb2Yoc3RydWN0IGNtc2doZHIpOwomIzQzOwlpZiAoY29ubi0mZ3Q7YnVuZGxlLSZndDthcHBfZGF0YSkgewomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJYXBwZGF0YSA9IChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKQomIzQzOwkJCXVzZXJfa2V5X3BheWxvYWRfcmN1KGNvbm4tJmd0O2J1bmRsZS0mZ3Q7YXBwX2RhdGEpOwomIzQzOwkJaWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oJmFtcDthcHBkYXRhLSZndDtyZWYpKQomIzQzOwkJCWFwcGRhdGEgPSBOVUxMOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlpZiAoIWFwcGRhdGEpCiYjNDM7CQkJcmV0dXJuIHJ4cnBjX2Fib3J0X2Nvbm4oY29ubiwgTlVMTCwgUlhHS19FWFBJUkVELCAtRUtFWVJFVk9LRUQsCiYjNDM7CQkJCQkJcnhna19hYm9ydF9jaGFsbF9rZXlfZXhwaXJlZCk7CiAJfQogCi0JcmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgJmFtcDthcHBkYXRhKTsKJiM0MzsJcmV0ID0gcnhna19jb25zdHJ1Y3RfcmVzcG9uc2UoY29ubiwgY2hhbGxlbmdlLCBhcHBkYXRhKTsKJiM0MzsKJiM0MzsJaWYgKGFwcGRhdGEgIT0gJmFtcDtkdW1teSkKJiM0MzsJCXB1dF91c2VyX2tleV9wYXlsb2FkKGFwcGRhdGEpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtMTM0Niw5ICYjNDM7MTI4Niw3IEBAIGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGdrX3lmcyA9IHsKIAkuZnJlZV9jYWxsX2NyeXB0bwkJPSByeGdrX2ZyZWVfY2FsbF9jcnlwdG8sCiAJLmlzc3VlX2NoYWxsZW5nZQkJPSByeGdrX2lzc3VlX2NoYWxsZW5nZSwKIAkudmFsaWRhdGVfY2hhbGxlbmdlCQk9IHJ4Z2tfdmFsaWRhdGVfY2hhbGxlbmdlLAotCS5jaGFsbGVuZ2VfdG9fcmVjdm1zZwkJPSByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnLAotCS5zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlCT0gcnhna19zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLAotCS5yZXNwb25kX3RvX2NoYWxsZW5nZQkJPSByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlX25vX2FwcGRhdGEsCiYjNDM7CS5yZXNwb25kX3RvX2NoYWxsZW5nZQkJPSByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLAogCS52ZXJpZnlfcmVzcG9uc2UJCT0gcnhna192ZXJpZnlfcmVzcG9uc2UsCiAJLmNsZWFyCQkJCT0gcnhna19jbGVhciwKIAkuZGVmYXVsdF9kZWNvZGVfdGlja2V0CQk9IHJ4Z2tfeWZzX2RlY29kZV90aWNrZXQsCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcnhrYWQuYyBiL25ldC9yeHJwYy9yeGthZC5jCmluZGV4IGNhOWYwZTgyY2I5YWM3Li5lNTViZmNhMTBlMWE5NCAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3J4a2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3J4a2FkLmMKQEAgLTc0OCwzMiAmIzQzOzc0OCw2IEBAIHN0YXRpYyBpbnQgcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIFJ4S0FEIGRvZXMgYXV0b21hdGljIHJlc3BvbnNlIG9ubHkgYXMgdGhlcmUmIzM5O3Mgbm90aGluZyB0byBtYW5hZ2UgdGhhdCBpc24mIzM5O3QKLSAqIGFscmVhZHkgaW4gdGhlIGtleS4KLSAqLwotc3RhdGljIGludCByeGthZF9zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJCSAgICAgIHN0cnVjdCBtc2doZHIgKm1zZykKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotLyoqCi0gKiByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UgLSBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHdpdGggYXBwZGF0YQotICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byByZXNwb25kIHRvCi0gKgotICogQWxsb3cgYSBrZXJuZWwgYXBwbGljYXRpb24gdG8gcmVzcG9uZCB0byBhIENIQUxMRU5HRS4KLSAqCi0gKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCi0gKi8KLWludCByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSkKLXsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKmNzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpOwotCi0JcmV0dXJuIHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNzcC0mZ3Q7Y2hhbGwuY29ubiwgY2hhbGxlbmdlKTsKLX0KLUVYUE9SVF9TWU1CT0wocnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKTsKLQogLyogRGVjcnlwdCBkYXRhIGluLXBsYWNlIHVzaW5nIERFUy1QQ0JDLiAgQGxlbiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOC4gKi8KIFZJU0lCTEVfSUZfS1VOSVQgdm9pZCBkZXNfcGNiY19kZWNyeXB0X2lucGxhY2UoY29uc3Qgc3RydWN0IGRlc19jdHggKmtleSwKIAkJCQkJICAgICAgIF9fbGU2NCBpdiwgdTggKmRhdGEsIHNpemVfdCBsZW4pCkBAIC0xMTM0LDcgJiM0MzsxMTA4LDYgQEAgY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHJ4a2FkID0gewogCS5mcmVlX2NhbGxfY3J5cHRvCQk9IHJ4a2FkX2ZyZWVfY2FsbF9jcnlwdG8sCiAJLmlzc3VlX2NoYWxsZW5nZQkJPSByeGthZF9pc3N1ZV9jaGFsbGVuZ2UsCiAJLnZhbGlkYXRlX2NoYWxsZW5nZQkJPSByeGthZF92YWxpZGF0ZV9jaGFsbGVuZ2UsCi0JLnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UJPSByeGthZF9zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLAogCS5yZXNwb25kX3RvX2NoYWxsZW5nZQkJPSByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZSwKIAkudmVyaWZ5X3Jlc3BvbnNlCQk9IHJ4a2FkX3ZlcmlmeV9yZXNwb25zZSwKIAkuY2xlYXIJCQkJPSByeGthZF9jbGVhciwKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZW5kbXNnLmMgYi9uZXQvcnhycGMvc2VuZG1zZy5jCmluZGV4IGVkMmM5YTUxMDA1YWRlLi4yMjVlZWM0MTBiZWRjOCAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3NlbmRtc2cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvc2VuZG1zZy5jCkBAIC00NTMsOSAmIzQzOzQ1Myw2IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAogc3VjY2VzczoKIAlyZXQgPSBjb3BpZWQ7Ci0JaWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgJmFtcDsmYW1wOwotCSAgICBjYWxsLSZndDtlcnJvciAmbHQ7IDApCi0JCXJldCA9IGNhbGwtJmd0O2Vycm9yOwogb3V0OgogCWNhbGwtJmd0O3R4X3BlbmRpbmcgPSB0eGI7CiAJX2xlYXZlKCYjMzQ7ID0gJWQmIzM0OywgcmV0KTsKQEAgLTQ2Nyw4ICYjNDM7NDY0LDE0IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAlyZXR1cm4gY2FsbC0mZ3Q7ZXJyb3I7CiAKIG1heWJlX2Vycm9yOgotCWlmIChjb3BpZWQpCiYjNDM7CWlmIChjb3BpZWQpIHsKJiM0MzsJCWlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBjYWxsLSZndDtlcnJvciAmbHQ7IDApIHsKJiM0MzsJCQlyZXQgPSBjYWxsLSZndDtlcnJvcjsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KIAkJZ290byBzdWNjZXNzOwomIzQzOwl9CiAJZ290byBvdXQ7CiAKIGVmYXVsdDoKQEAgLTUwMyw2ICYjNDM7NTA2LDggQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LAogc3RhdGljIGludCByeHJwY19zZW5kbXNnX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfc2VuZF9wYXJhbXMgKnApCiB7CiAJc3RydWN0IGNtc2doZHIgKmNtc2c7CiYjNDM7CWtleV9zZXJpYWxfdCBrZXlfaWQ7CiYjNDM7CWtleV9yZWZfdCBrZXk7CiAJYm9vbCBnb3RfdXNlcl9JRCA9IGZhbHNlOwogCWludCBsZW47CiAKQEAgLTU4Nyw2ICYjNDM7NTkyLDE4IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zICpwKQogCQkJCXJldHVybiAtRVJBTkdFOwogCQkJYnJlYWs7CiAKJiM0MzsJCWNhc2UgUlhSUENfUkVTUE9OU0VfQVBQREFUQToKJiM0MzsJCQlpZiAobGVuICE9IHNpemVvZihrZXlfc2VyaWFsX3QpKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQlpZiAocC0mZ3Q7Y2FsbC5hcHBfZGF0YSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJa2V5X2lkID0gKihrZXlfc2VyaWFsX3QgKilDTVNHX0RBVEEoY21zZyk7CiYjNDM7CQkJa2V5ID0gbG9va3VwX3VzZXJfa2V5KGtleV9pZCwgMCwgS0VZX05FRURfU0VBUkNIKTsKJiM0MzsJCQlpZiAoSVNfRVJSKGtleSkpCiYjNDM7CQkJCXJldHVybiBQVFJfRVJSKGtleSk7CiYjNDM7CQkJcC0mZ3Q7Y2FsbC5hcHBfZGF0YSA9IGtleV9yZWZfdG9fcHRyKGtleSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtNzg2LDYgJiM0Mzs4MDMsNyBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIAogZXJyb3JfcmVsZWFzZV9zb2NrOgogCXJlbGVhc2Vfc29jaygmYW1wO3J4LSZndDtzayk7CiYjNDM7CWtleV9wdXQocC5jYWxsLmFwcF9kYXRhKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvc2VydmVyX2tleS5jIGIvbmV0L3J4cnBjL3NlcnZlcl9rZXkuYwppbmRleCAzZWZlMTA0YjE5MzBjYi4uZmM2ZjQ3OGUxNzYyYTcgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3NlcnZlcl9rZXkuYwpAQCAtMTczLDQzICYjNDM7MTczLDMgQEAgaW50IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qga2V5ICprZXlyaW5nKQogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcpOwotCi0vKioKLSAqIHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZSAtIFNldCB0aGUgbWFuYWdlLXJlc3BvbnNlIGZsYWcgZm9yIGEga2VybmVsIHNlcnZpY2UKLSAqIEBzazogVGhlIHNvY2tldCB0byBzZXQgdGhlIGtleXJpbmcgb24KLSAqIEBzZXQ6IFRydWUgdG8gc2V0LCBmYWxzZSB0byBjbGVhciB0aGUgZmxhZwotICoKLSAqIFNldCB0aGUgZmxhZyBvbiBhbiByeHJwYyBzb2NrZXQgdG8gc2F5IHRoYXQgdGhlIGNhbGxlciB3YW50cyB0byBtYW5hZ2UgdGhlCi0gKiBSRVNQT05TRSBwYWNrZXQgYW5kIHRoZSB1c2VyLWRlZmluZWQgZGF0YSBpdCBtYXkgY29udGFpbi4gIFNldHRpbmcgdGhpcwotICogbWVhbnMgdGhhdCByZWN2bXNnKCkgd2lsbCByZXR1cm4gbWVzc2FnZXMgd2l0aCBSWFJQQ19DSEFMTEVOR0VEIGluIHRoZQotICogY29udHJvbCBtZXNzYWdlIGJ1ZmZlciBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFsbGVuZ2UuCi0gKgotICogVGhlIHVzZXIgc2hvdWxkIHJlc3BvbmQgdG8gdGhlIGNoYWxsZW5nZSBieSBwYXNzaW5nIFJYUlBDX1JFU1BPTkQgb3IKLSAqIFJYUlBDX1JFU1BPTkRfQUJPUlQgY29udHJvbCBtZXNzYWdlcyB3aXRoIHNlbmRtc2coKSB0byB0aGUgc2FtZSBjYWxsLgotICogU3VwcGxlbWVudGFyeSBjb250cm9sIG1lc3NhZ2VzLCBzdWNoIGFzIFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBLCBtYXkgYmUKLSAqIGluY2x1ZGVkIHRvIGluZGljYXRlIHRoZSBwYXJ0cyB0aGUgdXNlciB3YW50cyB0byBzdXBwbHkuCi0gKgotICogVGhlIHNlcnZlciB3aWxsIGJlIHBhc3NlZCB0aGUgcmVzcG9uc2UgZGF0YSB3aXRoIGEgUlhSUENfUkVTUE9OREVEIGNvbnRyb2wKLSAqIG1lc3NhZ2Ugd2hlbiBpdCBnZXRzIHRoZSBmaXJzdCBkYXRhIGZyb20gZWFjaCBjYWxsLgotICoKLSAqIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgaG9ub3VyZWQgYnkgc2VjdXJpdHkgY2xhc3NlcyB0aGF0IG5lZWQgYXV4aWxpYXJ5IGRhdGEKLSAqIChlLmcuIFJ4R0spLiAgVGhvc2UgdGhhdCBkb24mIzM5O3Qgb2ZmZXIgdGhlIGZhY2lsaXR5IChlLmcuIFJ4S0FEKSByZXNwb25kCi0gKiB3aXRob3V0IGNvbnN1bHRpbmcgdXNlcnNwYWNlLgotICoKLSAqIFJldHVybjogVGhlIHByZXZpb3VzIHNldHRpbmcuCi0gKi8KLWludCByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2Uoc3RydWN0IHNvY2sgKnNrLCBib29sIHNldCkKLXsKLQlzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzayk7Ci0JaW50IHJldDsKLQotCWxvY2tfc29jayhzayk7Ci0JcmV0ID0gISF0ZXN0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgJmFtcDtyeC0mZ3Q7ZmxhZ3MpOwotCWlmIChzZXQpCi0JCXNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsICZhbXA7cngtJmd0O2ZsYWdzKTsKLQllbHNlCi0JCWNsZWFyX2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgJmFtcDtyeC0mZ3Q7ZmxhZ3MpOwotCXJlbGVhc2Vfc29jayhzayk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wocnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jCmluZGV4IDZmODhiNTA3ZjkyNzkxLi45MGMxYmQ1ZDdkZmVjZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jCkBAIC02Nyw2ICYjNDM7NjcsNyBAQCBpbnQgdXNlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKQogCXVwYXlsb2FkID0ga21hbGxvY19mbGV4KCp1cGF5bG9hZCwgZGF0YSwgZGF0YWxlbik7CiAJaWYgKCF1cGF5bG9hZCkKIAkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO3VwYXlsb2FkLSZndDtyZWYsIDEpOwogCiAJLyogYXR0YWNoIHRoZSBkYXRhICovCiAJcHJlcC0mZ3Q7cXVvdGFsZW4gPSBkYXRhbGVuOwpAQCAtODgsMTIgJiM0Mzs4OSwyMiBAQCBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2ZyZWVfcHJlcGFyc2UpOwogCiBzdGF0aWMgdm9pZCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQogewotCXN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkOwomIzQzOwlzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZCA9CiYjNDM7CQljb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQsIHJjdSk7CiAKLQlwYXlsb2FkID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkLCByY3UpOwogCWtmcmVlX3NlbnNpdGl2ZShwYXlsb2FkKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogRnJlZSBhIHVzZXIgZGVmaW5lZCBrZXkgcGF5bG9hZC4KJiM0MzsgKi8KJiM0Mzt2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKQomIzQzO3sKJiM0MzsJaWYgKHBheWxvYWQgJmFtcDsmYW1wOyByZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtwYXlsb2FkLSZndDtyZWYpKQomIzQzOwkJY2FsbF9yY3UoJmFtcDtwYXlsb2FkLSZndDtyY3UsIHVzZXJfZnJlZV9wYXlsb2FkX3JjdSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHB1dF91c2VyX2tleV9wYXlsb2FkKTsKJiM0MzsKIC8qCiAgKiB1cGRhdGUgYSB1c2VyIGRlZmluZWQga2V5CiAgKiAtIHRoZSBrZXkmIzM5O3Mgc2VtYXBob3JlIGlzIHdyaXRlLWxvY2tlZApAQCAtMTE1LDggJiM0MzsxMjYsNyBAQCBpbnQgdXNlcl91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKQogCXJjdV9hc3NpZ25fa2V5cG9pbnRlcihrZXksIHByZXAtJmd0O3BheWxvYWQuZGF0YVswXSk7CiAJcHJlcC0mZ3Q7cGF5bG9hZC5kYXRhWzBdID0gTlVMTDsKIAotCWlmICh6YXApCi0JCWNhbGxfcmN1KCZhbXA7emFwLSZndDtyY3UsIHVzZXJfZnJlZV9wYXlsb2FkX3JjdSk7CiYjNDM7CXB1dF91c2VyX2tleV9wYXlsb2FkKHphcCk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfdXBkYXRlKTsKQEAgLTEzNCw3ICYjNDM7MTQ0LDcgQEAgdm9pZCB1c2VyX3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpCiAKIAlpZiAodXBheWxvYWQpIHsKIAkJcmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgTlVMTCk7Ci0JCWNhbGxfcmN1KCZhbXA7dXBheWxvYWQtJmd0O3JjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTsKJiM0MzsJCXB1dF91c2VyX2tleV9wYXlsb2FkKHVwYXlsb2FkKTsKIAl9CiB9CiAKQEAgLTE0Nyw5ICYjNDM7MTU3LDggQEAgdm9pZCB1c2VyX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KQogewogCXN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1cGF5bG9hZCA9IGtleS0mZ3Q7cGF5bG9hZC5kYXRhWzBdOwogCi0Ja2ZyZWVfc2Vuc2l0aXZlKHVwYXlsb2FkKTsKJiM0MzsJcHV0X3VzZXJfa2V5X3BheWxvYWQodXBheWxvYWQpOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2Rlc3Ryb3kpOwogCiAvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQwNQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBRlMvUnhSUEMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIGl0IGxvb2tzIGxpa2UgYSBmYWlybHkgc2lnbmlmaWNhbnQgcmVmYWN0b3Igb2YgdGhlIEFGUyBhbmQgUnhSUEMgc3Vic3lzdGVtcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIG1pbm9yIHR3ZWFrOyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBjb3JlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gaW50ZXJhY3Rpb24uIEl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGxvdy1sZXZlbCBzdHVmZiwgc3BlY2lmaWNhbGx5IHRoZSB3YXkgdGhlIGtlcm5lbCBoYW5kbGVzIFJ4UlBDIHJlc3BvbnNlcyBhbmQgb3V0LW9mLWJhbmQgbWVzc2FnZXMsIGFuZCBob3cgQUZTIGludGVyYWN0cyB3aXRoIFJ4UlBDLgoKRXNzZW50aWFsbHksIHRoZXkmIzM5O3JlIHJlbW92aW5nIHRoZSBgcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlYCBsb2dpYyBhbmQgZ2V0dGluZyByaWQgb2YgdGhlIE9PQiBtZXNzYWdlIGhhbmRsaW5nIGluIFJ4UlBDIGVudGlyZWx5LiBJbnN0ZWFkLCB0aGV5JiMzOTtyZSBjcmVhdGluZyBhcHBsaWNhdGlvbiBkYXRhIGZvciBSeEdLIHJlc3BvbnNlcyB3aXRoIHRoaXMgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIGZ1bmN0aW9uIGFuZCBzdG9yaW5nIGl0IGluIGEga2V5LiBUaGF0IGtleSBpcyB0aGVuIGZlZCBpbnRvIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAsIHdoaWNoIGlzIGFsc28gYmVpbmcgbW9kaWZpZWQgdG8gYWNjZXB0IHRoaXMgbmV3IGBhcHBfZGF0YWAgcGFyYW1ldGVyLiBUaGUgY3JpdGljYWwgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYCBmdW5jdGlvbiBpcyBnZXR0aW5nIHVwZGF0ZWQgdG8gY2FsbCBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAuIEFuZCwgb2YgY291cnNlLCB0aGV5JiMzOTtyZSBkZWxldGluZyBgb29iLmNgIGZyb20gdGhlIGBuZXQvcnhycGMvYCBkaXJlY3RvcnkuCgpHaXZlbiB0aGlzLCB0aGlzIHdpbGwgZGVmaW5pdGVseSBjaGFuZ2UgZXhlY3V0aW9uIGZsb3csIHNvIGZ1enppbmcgaXMgYSBtdXN0LiBXZSBuZWVkIHRvIGV4cG9zZSB0aGlzIHBhdGNoIHRvIGEgYmF0dGVyeSBvZiB0ZXN0cy4KClRvIHZlcmlmeSB0aGUgc2V0dXAsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBrZXJuZWwgY29uZmlncy4gV2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGFyZSBlbmFibGVkOiBgQ09ORklHX0FGU19GU2AsIGBDT05GSUdfQUZfUlhSUENgLCBgQ09ORklHX1JYS0FEYCwgYW5kIGBDT05GSUdfUlhHS2AgKHRoYXQgbGFzdCBvbmUsIGl0JiMzOTtzIG1lbnRpb25lZCBleHBsaWNpdGx5IGluIHRoZSBwYXRjaCwgc28gd2Ugc2hvdWxkIGRvdWJsZS1jaGVjaykuIFdlIHNob3VsZCBjaGVjayBgZnMvYWZzL0tjb25maWdgIGFuZCBgbmV0L3J4cnBjL0tjb25maWdgIGZvciB0aGUgY29uZmlnIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJYR0smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL0tjb25maWc9NTg9Y29uZmlnIFJYS0FEXG4tLVxubmV0L3J4cnBjL0tjb25maWctNjUtXG5uZXQvcnhycGMvS2NvbmZpZzo2Njpjb25maWcgUlhHS1xubmV0L3J4cnBjL0tjb25maWctNjctXHRib29sIFwmIzM0O1J4UlBDIEdTU0FQSSBzZWN1cml0eVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTc3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb24gTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBDT05GSUdfUlhHS2AgYW5kIGBDT05GSUdfUlhLQURgIGFyZSBkZWZpbml0ZWx5IGVuYWJsZWQsIGFuZCB3ZSBhbHNvIGhhdmUgYENPTkZJR19BRlNfRlNgIGFuZCBgQ09ORklHX0FGX1JYUlBDYC4gR29vZCwgdGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duIGEgYml0LiBOb3csIGxldCYjMzk7cyBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcyBhbmQgZmluZCB0aGUgZm9jdXMgc3ltYm9scy4KClJpZ2h0LCB0aGUgbW9kaWZpZWQgb3IgbmV3bHkgYWRkZWQgZnVuY3Rpb25zIGFyZTogYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgLCBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gLCBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgLCBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLCBgcnhycGNfa2VybmVsX3F1ZXJ5X2tleWAsIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCwgYHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlYCwgYHJ4cnBjX3NlbmRtc2dfY21zZ2AsIGFuZCBgcHV0X3VzZXJfa2V5X3BheWxvYWRgLiBUaGF0JiMzOTtzIGEgZGVjZW50LXNpemVkIGNodW5rIG9mIGNvZGUgdG8gcmV2aWV3LCBpbmRpY2F0aW5nIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzIHJlbGF0ZWQgdG8gQUZTIGFuZCBSeFJQQywgcG90ZW50aWFsbHkgaW52b2x2aW5nIGtleSBtYW5hZ2VtZW50IGFuZCBjb21tdW5pY2F0aW9uIHByb3RvY29scy4KCkkgdGhpbmsgSSYjMzk7bGwgc3RhcnQgYnkgZm9jdXNpbmcgb24gYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIGRhdGEgc3RydWN0dXJlIGlzIGJlaW5nIGNyZWF0ZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9jbV9zZWN1cml0eS5jPTI0PXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGtyYjVfZW5jdHlwZSk7XG4tLVxuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMzEtICovXG5mcy9hZnMvY21fc2VjdXJpdHkuYzozMjppbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0zMy17XG4tLVxuZnMvYWZzL2ZzX3Byb2JlLmM9MjM4PWludCBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxuLS1cbmZzL2Fmcy9mc19wcm9iZS5jLTI0Ny1cbmZzL2Fmcy9mc19wcm9iZS5jOjI0ODpcdHJldCA9IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc2VydmVyLCBrZXkpO1xuZnMvYWZzL2ZzX3Byb2JlLmMtMjQ5LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5mcy9hZnMvaW50ZXJuYWwuaD0xMDg4PWV4dGVybiBib29sIGFmc19jbV9pbmNvbWluZ19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqKTtcbi0tXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDkyLSAqL1xuZnMvYWZzL2ludGVybmFsLmg6MTA5MzppbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpO1xuZnMvYWZzL2ludGVybmFsLmgtMTA5NC0jaWZkZWYgQ09ORklHX1JYR0tcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk3NwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIHdob2xlIHRoaW5nLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgZmxvdywgdGhlIHVuZGVybHlpbmcgbG9naWMsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6YXRpb25zIHdlIGNhbiBleHBsb3JlIGluIHRoaXMgYXJlYS4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIG9yIG1heWJlIGV2ZW4gdGhlIGhhcmR3YXJlLCBiZWdpbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBpdCYjMzk7cyBkb2luZyBpbiBkZXRhaWwuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgcmVhZGluZyB0aGUgY29kZTsgaXQmIzM5O3MgYWJvdXQgY29ubmVjdGluZyBpdCB0byBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgdGhlIFJYUlBDIHByb3RvY29sLCB0aGUga2VybmVsJiMzOTtzIGFyY2hpdGVjdHVyZSwgYW5kIGFsbCB0aGUgcmVsZXZhbnQgaGFyZHdhcmUgYW5kIGhvdyBpdCBmaXRzLiBJIG5lZWQgdG8gZm9ybSBhIG1lbnRhbCBtb2RlbCBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyeHJwY19rZXJuZWxfYmVnaW5fY2FsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0PTc5NT1UaGUga2VybmVsIGludGVyZmFjZSBmdW5jdGlvbnMgYXJlIGFzIGZvbGxvd3M6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC03OTktXHRzdHJ1Y3QgcnhycGNfY2FsbCAqXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0OjgwMDpcdHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0LTgwMS1cdFx0XHRcdHN0cnVjdCBzb2NrYWRkcl9yeHJwYyAqc3J4LFxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QtOTg5LSAgICAgVGhpcyBpcyB1c2VkIHRvIGFjY2VwdCBhbiBpbmNvbWluZyBjYWxsIGFuZCB0byBhc3NpZ24gaXQgYSBjYWxsIElELiAgVGhpc1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdDo5OTA6ICAgICBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKCkgYW5kIGNhbGxzIGFjY2VwdGVkIG11c3RcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QtOTkxLSAgICAgYmUgZW5kZWQgaW4gdGhlIHNhbWUgd2F5LlxuLS1cbmZzL2Fmcy9yeHJwYy5jPTMzNz12b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4tLVxuZnMvYWZzL3J4cnBjLmMtMzkyLVx0LyogY3JlYXRlIGEgY2FsbCAqL1xuZnMvYWZzL3J4cnBjLmM6MzkzOlx0cnhjYWxsID0gcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXBlZXIsXG5mcy9hZnMvcnhycGMuYy0zOTQtXHRcdFx0XHRcdCBjYWxsLVx1MDAzZWtleSwgYXBwX2RhdGEsXG4tLVxuaW5jbHVkZS9uZXQvYWZfcnhycGMuaD01Mz12b2lkIHJ4cnBjX2tlcm5lbF9zZXRfbm90aWZpY2F0aW9ucyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuaW5jbHVkZS9uZXQvYWZfcnhycGMuaC01NC1cdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcnhycGNfa2VybmVsX29wcyAqYXBwX29wcyk7XG5pbmNsdWRlL25ldC9hZl9yeHJwYy5oOjU1OnN0cnVjdCByeHJwY19jYWxsICpyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuaW5jbHVkZS9uZXQvYWZfcnhycGMuaC01Ni1cdFx0XHRcdFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4tLVxubmV0L3J4cnBjL2FmX3J4cnBjLmM9MzE0PUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3B1dF9wZWVyKTtcbi0tXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zMTYtLyoqXG5uZXQvcnhycGMvYWZfcnhycGMuYzozMTc6ICogcnhycGNfa2VybmVsX2JlZ2luX2NhbGwgLSBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIGJlZ2luIGEgY2FsbFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtMzE4LSAqIEBzb2NrOiBUaGUgc29ja2V0IG9uIHdoaWNoIHRvIG1ha2UgdGhlIGNhbGxcbi0tXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zNDAtICovXG5uZXQvcnhycGMvYWZfcnhycGMuYzozNDE6c3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zNDItXHRcdFx0XHRcdCAgIHN0cnVjdCByeHJwY19wZWVyICpwZWVyLFxuLS1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTM5Ny19XG5uZXQvcnhycGMvYWZfcnhycGMuYzozOTg6RVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfYmVnaW5fY2FsbCk7XG5uZXQvcnhycGMvYWZfcnhycGMuYy0zOTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MzMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBDYWxsIHRvIEFjdGlvbjogYHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2VgKioKClJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzLiAmIzM0O0NoZWNrIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYC4mIzM0OyBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgaW50ZXJlc3RpbmcuIFRoZSBuYW1pbmcgY29udmVudGlvbiwgd2l0aCB0aGF0IHVuZGVyc2NvcmUsIHN1Z2dlc3RzIGl0JiMzOTtzIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3IgbW9kdWxlIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0g4oCTIGxpa2VseSBvbmUgdGhhdCYjMzk7cyBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aCBzb21lIGZvcm0gb2YgZXh0ZXJuYWwgaW5wdXQsIHBvdGVudGlhbGx5IGFzeW5jaHJvbm91cy4gVGhlIHRlcm0gJiMzNDtjaGFsbGVuZ2UmIzM0OyBpcyBjcml0aWNhbCBoZXJlLiBJdCBpbXBsaWVzIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBzeXN0ZW0sIG9yIGEgY29tcG9uZW50LCBpcyBiZWluZyB0ZXN0ZWQsIHByb2JlZCwgb3IgcG9zc2libHkgZXZlbiBleHBsb2l0ZWQuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBhIHNpbXBsZSB2YWxpZGF0aW9uIGNoZWNrIHRvIGEgbW9yZSBjb21wbGV4IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgc2NlbmFyaW8uCgpNeSBpbW1lZGlhdGUgY29uc2lkZXJhdGlvbnMgYXJlIGZvY3VzZWQgb24gaXRzIGRlc2lnbi4gSXMgaXQgcHJvcGVybHkgc2FuZGJveGVkPyBBcmUgdGhlcmUgYWRlcXVhdGUgaW5wdXQgdmFsaWRhdGlvbiBjaGVja3MgaW4gcGxhY2UgdG8gcHJldmVudCBjb21tb24gYXR0YWNrcyBsaWtlIGluamVjdGlvbiBvciBidWZmZXIgb3ZlcmZsb3dzPyBXaGF0IGFyZSB0aGUgYWNjZXNzIGNvbnRyb2wgbWVjaGFuaXNtcyBhcm91bmQgdGhpcyBmdW5jdGlvbiDigJMgd2hvIG9yIHdoYXQgaXMgYWxsb3dlZCB0byB0cmlnZ2VyIGl0LCBhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzPyBEb2VzIGl0IGV4aGliaXQgYW55IGluaGVyZW50IHZ1bG5lcmFiaWxpdHkgZHVlIHRvIHRpbWluZyBvciByZXNvdXJjZSBleGhhdXN0aW9uPyBUaGUgJiMzNDtyZXNwb25kJiMzNDsgcGFydCBzdWdnZXN0cyB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIGFjdGl2ZWx5IGRvIHNvbWV0aGluZywgd2hpY2ggcmF0Y2hldHMgdXAgdGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYW5kIHRoZSBwb3RlbnRpYWwgcmVzcG9uc2Ugb3B0aW9ucyBpcyBrZXkuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb24mIzM5O3MgYXJjaGl0ZWN0dXJlIOKAkyBpdHMgaW50ZXJuYWwgbG9naWMsIGFueSBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG1vZHVsZXMgdG8gZm9ybXVsYXRlIGFuIGluZm9ybWVkIGp1ZGdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhna19yZXNwb25kX3RvX2NoYWxsZW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvcnhnay5jPTg5ND1zdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9yeHJwYy9yeGdrLmMtOTgyLSAqL1xubmV0L3J4cnBjL3J4Z2suYzo5ODM6c3RhdGljIGludCByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxubmV0L3J4cnBjL3J4Z2suYy05ODQtXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4tLVxubmV0L3J4cnBjL3J4Z2suYz0xMjcyPWNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGdrX3lmcyA9IHtcbi0tXG5uZXQvcnhycGMvcnhnay5jLTEyODgtXHQudmFsaWRhdGVfY2hhbGxlbmdlXHRcdD0gcnhna192YWxpZGF0ZV9jaGFsbGVuZ2UsXG5uZXQvcnhycGMvcnhnay5jOjEyODk6XHQucmVzcG9uZF90b19jaGFsbGVuZ2VcdFx0PSByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxubmV0L3J4cnBjL3J4Z2suYy0xMjkwLVx0LnZlcmlmeV9yZXNwb25zZVx0XHQ9IHJ4Z2tfdmVyaWZ5X3Jlc3BvbnNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU0NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGlzIGNvZGUgYW5kIGl0cyBjb250ZXh0OgoKKipBbmFseXppbmcgYHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCoqCgpSaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0JiMzOTtzIGNsZWFybHkgYSBmdW5jdGlvbiwgbGlrZWx5IGludm9sdmVkIGluIGEgY2hhbGxlbmdlLXJlc3BvbnNlIGF1dGhlbnRpY2F0aW9uIHNjaGVtZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgS0FEIChvciBzaW1pbGFyKSBhdXRoZW50aWNhdGlvbiBmbG93LiBJcyB0aGlzIG9uIHRoZSBjbGllbnQtc2lkZSwgdGhlIHNlcnZlci1zaWRlLCBvciBib3RoPyBXaGF0IGFyZSB0aGUgaW5wdXRzPyBXaGF0IGFyZSB0aGUgZXhwZWN0ZWQgb3V0cHV0cz8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0eXBpY2FsIHN0ZXBzIGludm9sdmVkOiBjaGFsbGVuZ2UgZ2VuZXJhdGlvbiwgcmVzcG9uc2UgY2FsY3VsYXRpb24sIHZlcmlmaWNhdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoYXQgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgbWlnaHQgYmUgaGVyZS4gSXMgdGhpcyB3aGVyZSB3ZSYjMzk7cmUgaGFuZGxpbmcga2V5IGRlcml2YXRpb24sIGNyeXB0bywgb3Igbm9uY2UgaGFuZGxpbmc/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3IgdGltaW5nIGF0dGFja3MsIG9yIHBvdGVudGlhbCBvdmVyZmxvdyBpc3N1ZXM/IEkgbmVlZCB0byBhbmFseXplIGhvdyBpdCBoYW5kbGVzIGVycm9ycyBhbmQgcG90ZW50aWFsIHByb3RvY29sIHZpb2xhdGlvbnMuIElzIHRoZXJlIGFueSBvYnZpb3VzIGxvZ2dpbmcgdGhhdCBjb3VsZCBleHBvc2Ugc2Vuc2l0aXZlIGluZm9ybWF0aW9uLCBvciBpcyB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUgYnJvYWRlciB0aGFuIEkgaW5pdGlhbGx5IGFzc3VtZT8gVGltZSB0byBzdGFydCBkcmlsbGluZyBpbnRvIHRoZSBjb2RlLCBidXQgYmVmb3JlIEkgZG8sIEkgbmVlZCBhIHF1aWNrIG1lbnRhbCBjaGVja2xpc3Q6IHdoYXQmIzM5O3MgdGhlIGVudmlyb25tZW50IGl0JiMzOTtzIHJ1bm5pbmcgaW4/IFdoYXQgZGVwZW5kZW5jaWVzIGRvZXMgaXQgaGF2ZT8gQXJlIHRoZXJlIGFueSByZWNlbnQgYnVnIHJlcG9ydHMgb3IgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbiB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQW5kIG1vc3QgaW1wb3J0YW50bHksIHdoYXQmIzM5O3MgdGhlICpwdXJwb3NlKiBvZiB0aGlzIGludmVzdGlnYXRpb24/IFZ1bG5lcmFiaWxpdHkgYXNzZXNzbWVudD8gQ29kZSByZXZpZXc/IERlYnVnZ2luZz8gS25vd2luZyB0aGF0IHdpbGwgZGV0ZXJtaW5lIHdoZXJlIG15IGZvY3VzIGdvZXMgZmlyc3QuIEFscmlnaHQsIGxldCYjMzk7cyBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL3J4a2FkLmM9NjQyPWludCByeGthZF9pbnNlcnRfcmVzcG9uc2VfaGVhZGVyKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9yeHJwYy9yeGthZC5jLTY5Ni0gKi9cbm5ldC9yeHJwYy9yeGthZC5jOjY5NzpzdGF0aWMgaW50IHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxubmV0L3J4cnBjL3J4a2FkLmMtNjk4LVx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcbi0tXG5uZXQvcnhycGMvcnhrYWQuYz0xMDk1PWNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGthZCA9IHtcbi0tXG5uZXQvcnhycGMvcnhrYWQuYy0xMTEwLVx0LnZhbGlkYXRlX2NoYWxsZW5nZVx0XHQ9IHJ4a2FkX3ZhbGlkYXRlX2NoYWxsZW5nZSxcbm5ldC9yeHJwYy9yeGthZC5jOjExMTE6XHQucmVzcG9uZF90b19jaGFsbGVuZ2VcdFx0PSByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZSxcbm5ldC9yeHJwYy9yeGthZC5jLTExMTItXHQudmVyaWZ5X3Jlc3BvbnNlXHRcdD0gcnhrYWRfdmVyaWZ5X3Jlc3BvbnNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjE2NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHN1cHBvc2VkIHRvIHNvdW5kIGxpa2UgYW4gZXhwZXJ0OgoKKipEZWVwIERpdmU6IGBhZnNfY3JlYXRlX3lmc19jbV90b2tlbmAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiAmIzM0O2Fmc19jcmVhdGVfeWZzX2NtX3Rva2VuJiMzNDsuLi4gdGhhdCBpbW1lZGlhdGVseSBzaWduYWxzIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBBRlMgKEFuZHJldyBGaWxlIFN5c3RlbSkgaW50ZWdyYXRpb24sIGxpa2VseSB3aXRoaW4gYSBZRlMgKGxpa2VseSByZWZlcnJpbmcgdG8gdGhlIElCTSBTdGVybGluZyBPcmRlciBNYW5hZ2VtZW50IFN5c3RlbSwgYmFzZWQgb24gY29udGV4dCkgY29udGV4dCwgYW5kIHRoZSBjcmVhdGlvbiBvZiBhIHRva2VuIHNwZWNpZmljYWxseSBmb3IgQ2xvdWQgTWFuYWdlbWVudC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IG1lbnRhbGx5IHJlY29uc3RydWN0IHRoZSB0eXBpY2FsIGZsb3cgaGVyZS4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgdXNlciBhdXRoZW50aWNhdGlvbiwgYXV0aG9yaXphdGlvbiBjaGVja3Mgd2l0aGluIFlGUywgYW5kIHRoZW4gdGhlIGdlbmVyYXRpb24gb2YgYSB0ZW1wb3JhcnkgY3JlZGVudGlhbCBvciB0b2tlbiB0aGF0IEFGUyBjYW4gdXNlIHRvIGFjY2VzcyByZXNvdXJjZXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIElzIHRoaXMgYSBzaGFyZWQgdG9rZW4sIG9yIHNvbWV0aGluZyB0aWVkIHNwZWNpZmljYWxseSB0byBhIHVzZXIgc2Vzc2lvbiBvciBwcm9jZXNzPyBUaGUgc2Vuc2l0aXZpdHkgaGVyZSBpcyBoaWdoOiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBwcm9wZXIgcGVybWlzc2lvbnMgYW5kIGNvbnRyb2xzIGFyZSBpbiBwbGFjZS4gV2hhdCBhcmUgdGhlIGV4cGlyYXRpb24gcG9saWNpZXMgYW5kIHJldm9jYXRpb24gbWVjaGFuaXNtcz8KCkkmIzM5O20gaW5zdGFudGx5IHRoaW5raW5nIGFib3V0IHRoZSBkaWZmZXJlbnQgbGF5ZXJzIG9mIGFic3RyYWN0aW9uLiBJcyB0aGlzIHRva2VuIGNyZWF0aW9uIGhhcHBlbmluZyBkaXJlY3RseSB3aXRoaW4gdGhlIGNvcmUgWUZTIGNvZGUsIG9yIGlzIHRoZXJlIGFuIEFQSSBhYnN0cmFjdGlvbiBvciBtaWRkbGV3YXJlIGludm9sdmVkPyBJZiBpdCYjMzk7cyB0aGUgbGF0dGVyLCB0aGVuIHRoZSBhcmNoaXRlY3R1cmUgd2lsbCBiZSBzbGlnaHRseSBtb3JlIHJvYnVzdC4gVGhpcyBhbHNvIGluZmx1ZW5jZXMgbXkgaW1tZWRpYXRlIG5lZWQgdG8gY2hlY2sgbG9nZ2luZy4gV2hhdCBsb2dzIGFyZSBhdmFpbGFibGU/IEkgbmVlZCB0byByZXZpZXcgdG8gdW5kZXJzdGFuZCB0aGUgaW5wdXQgcGFyYW1ldGVycyB0byB0aGlzIGZ1bmN0aW9uIC0gdGhlIGNvbnRleHQgZnJvbSB3aGljaCBpdCBpcyBjYWxsZWQsIHdobyBpcyBjYWxsaW5nIGl0LCBhbmQgdGhlIGRhdGEgYmVpbmcgdXNlZCB0byBlc3RhYmxpc2ggdGhpcyBBRlMgdG9rZW4uCgpGdXJ0aGVybW9yZSwgSSBoYXZlIHRvIGJlIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBmYWlsdXJlIHNjZW5hcmlvcy4gV2hhdCBoYXBwZW5zIGlmIEFGUyBpcyBkb3duLCBvciBpZiBuZXR3b3JrIGNvbm5lY3Rpdml0eSBpcyBkaXNydXB0ZWQ/IEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaGFuZGxlIGVycm9ycywgdGltZW91dHMsIGFuZCBleGNlcHRpb24gaGFuZGxpbmc/IERvZXMgaXQgZ3JhY2VmdWxseSBkZWdyYWRlIG9yIGNyZWF0ZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaW4gaXRzIGZhaWx1cmUgc3RhdGVzPyBJIGFtIGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBlZGdlIGNhc2Ugc2NlbmFyaW9zLgoKTGFzdGx5LCBJIGhhdmUgdG8gY29tcGFyZSB0aGlzIGltcGxlbWVudGF0aW9uIGFnYWluc3Qgc3RhbmRhcmQgcHJhY3RpY2VzLiBTZWN1cml0eSwgcGVyZm9ybWFuY2UsIGFuZCBiZXN0IHByYWN0aWNlcyBhcmUgcGFyYW1vdW50IGluIHRva2VuIGNyZWF0aW9uIC0gdGhlIGxldmVsIG9mIHNlbnNpdGl2aXR5IGlzIGNyaXRpY2FsIGhlcmUsIGFuZCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFyZWFzIHRoYXQgZGV2aWF0ZSBmcm9tIGluZHVzdHJ5IHN0YW5kYXJkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2NtX3NlY3VyaXR5LmMtMjMtI2lmZGVmIENPTkZJR19SWEdLXG5mcy9hZnMvY21fc2VjdXJpdHkuYzoyNDpzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHUzMiBrcmI1X2VuY3R5cGUpO1xuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMjUtI2VuZGlmXG4tLVxuZnMvYWZzL2NtX3NlY3VyaXR5LmM9MzI9aW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KVxuLS1cbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTY4LVx0XHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxuZnMvYWZzL2NtX3NlY3VyaXR5LmM6Njk6XHRcdFx0cmV0ID0gYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc2VydmVyLCBrcmI1X2VuY3R5cGUpO1xuZnMvYWZzL2NtX3NlY3VyaXR5LmMtNzAtXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5mcy9hZnMvY21fc2VjdXJpdHkuYz05Mj1pbnQgYWZzX2NyZWF0ZV90b2tlbl9rZXkoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29ja2V0KVxuLS1cbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTE1MC0gKi9cbmZzL2Fmcy9jbV9zZWN1cml0eS5jOjE1MTpzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHUzMiBlbmN0eXBlKVxuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMTUyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5NzgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGByeHJwY19zZW5kbXNnX2Ntc2dgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgcmlnaHQgdG8gaXQuIFRoZSBmb2N1cyBoZXJlIGlzIGNsZWFybHkgb24gYHJ4cnBjX3NlbmRtc2dfY21zZ2AuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhhdCBmdW5jdGlvbiwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgbG93LWxldmVsIGRldGFpbHMgb2Ygc2VuZGluZyBtZXNzYWdlcyB3aXRoIGNvbnRyb2wgbWVzc2FnZXMgaW4gdGhlIFJYUlBDIHByb3RvY29sLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBpdCBoYW5kbGVzIHRoZSBjb25zdHJ1Y3Rpb24gYW5kIHRyYW5zbWlzc2lvbiBvZiB0aG9zZSBhbmNpbGxhcnkgZGF0YSBidWZmZXJzLiBJcyBpdCB0aGUgbWFpbiB3b3JraG9yc2UsIG9yIGEgaGVscGVyIGZ1bmN0aW9uPyBXaGF0JiMzOTtzIHRoZSByZWxhdGlvbnNoaXAgd2l0aCB0aGUgdW5kZXJseWluZyBzb2NrZXQgYW5kIG5ldHdvcmsgc3RhY2s/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IHdpdGggbGFyZ2VyIGNvbnRyb2wgbWVzc2FnZXMgb3IgZnJhZ21lbnRlZCBwYXlsb2Fkcz8gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBuZWVkIHRvIGdvIGRlZXAuLi4gbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J4cnBjX3NlbmRtc2dfY21zZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvc2VuZG1zZy5jPTMyMD1zdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4tLVxubmV0L3J4cnBjL3NlbmRtc2cuYy01MDUtICovXG5uZXQvcnhycGMvc2VuZG1zZy5jOjUwNjpzdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyAqcClcbm5ldC9yeHJwYy9zZW5kbXNnLmMtNTA3LXtcbi0tXG5uZXQvcnhycGMvc2VuZG1zZy5jPTY3Nz1pbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcnhycGMvc2VuZG1zZy5jLTY5NS1cbm5ldC9yeHJwYy9zZW5kbXNnLmM6Njk2Olx0cmV0ID0gcnhycGNfc2VuZG1zZ19jbXNnKG1zZywgXHUwMDI2cCk7XG5uZXQvcnhycGMvc2VuZG1zZy5jLTY5Ny1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDM1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBwdXRfdXNlcl9rZXlfcGF5bG9hZGAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcHV0X3VzZXJfa2V5X3BheWxvYWRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGl0cyBpbnB1dHMsIGFuZCB3aGF0IGl0JiMzOTtzIHVsdGltYXRlbHkgZG9pbmcgd2l0aCB1c2VyIGtleXMuIFRoZXJlJiMzOTtzIGEgc3VidGxlIG51YW5jZSBoZXJlIEkgc2hvdWxkIG5vdCBvdmVybG9vay4gSXTigJlzIGxpa2VseSBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3Iga2V5IG1hbmFnZW1lbnQgYW5kIGFueSB2dWxuZXJhYmlsaXR5IGhlcmUgaXMgYSBzaWduaWZpY2FudCByaXNrLiBJIHdvbmRlciBhYm91dCB0aGUgdHlwZS1zYWZldHkgY2hlY2tzPyBBcmUgdGhlcmUgcHJvcGVyIGlucHV0IHZhbGlkYXRpb25zLCBsaWtlIHNhbml0aXppbmcgaW5wdXRzIGFuZCBib3VuZGFyeSBjb25kaXRpb25zPyBJIG5lZWQgdG8gZm9jdXMgb24gcG90ZW50aWFsIHdlYWtuZXNzZXMgbGlrZSBidWZmZXIgb3ZlcmZsb3dzIG9yIGluamVjdGlvbiB2dWxuZXJhYmlsaXRpZXMuIFdlIHNob3VsZCBhbHNvIGNoZWNrIGZvciBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzPyBXaGF0IGlmIHRoZSBzdG9yYWdlIHN5c3RlbSBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZT8gQW5kLCBpcyB0aGVyZSBhbnkgbG9nZ2luZyB0byB0cmFjayB0aGUgb3BlcmF0aW9ucz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHV0X3VzZXJfa2V5X3BheWxvYWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oPTQwPWV4dGVybiB2b2lkIHVzZXJfZnJlZV9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaDo0MTp2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKTtcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC00Mi1leHRlcm4gaW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XG4tLVxubmV0L3J4cnBjL3J4Z2suYz05ODM9c3RhdGljIGludCByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9yeHJwYy9yeGdrLmMtMTAxMS1cdGlmIChhcHBkYXRhICE9IFx1MDAyNmR1bW15KVxubmV0L3J4cnBjL3J4Z2suYzoxMDEyOlx0XHRwdXRfdXNlcl9rZXlfcGF5bG9hZChhcHBkYXRhKTtcbm5ldC9yeHJwYy9yeGdrLmMtMTAxMy1cdHJldHVybiByZXQ7XG4tLVxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYz05MD1zdGF0aWMgdm9pZCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTAwLSAqL1xuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzoxMDE6dm9pZCBwdXRfdXNlcl9rZXlfcGF5bG9hZChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZClcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTAyLXtcbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEwNS19XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjEwNjpFWFBPUlRfU1lNQk9MX0dQTChwdXRfdXNlcl9rZXlfcGF5bG9hZCk7XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEwNy1cbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTExMj1pbnQgdXNlcl91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuLS1cbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTI4LVxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzoxMjk6XHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh6YXApO1xuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xMzAtXHRyZXR1cm4gcmV0O1xuLS1cbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM9MTM4PXZvaWQgdXNlcl9yZXZva2Uoc3RydWN0IGtleSAqa2V5KVxuLS1cbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTQ2LVx0XHRyY3VfYXNzaWduX2tleXBvaW50ZXIoa2V5LCBOVUxMKTtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTQ3Olx0XHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh1cGF5bG9hZCk7XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE0OC1cdH1cbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTE1Nj12b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXG4tLVxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xNTktXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjE2MDpcdHB1dF91c2VyX2tleV9wYXlsb2FkKHVwYXlsb2FkKTtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzMzQKCQkJCQkJCW91dHB1dDogMTkxCgkJCQkJCQl0aG91Z2h0czogMzU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgb3B0aW1pemF0aW9uIGFuZCB3aGVyZSB3ZSBzaG91bGQgZm9jdXMgb3VyIGVmZm9ydHMuIEluaXRpYWxseSwgSSBpZGVudGlmaWVkIHRoZXNlIHN5bWJvbHMgYXMgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0OiBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAsIGBhZnNfY3JlYXRlX3lmc19jbV90b2tlbmAsIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAsIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCwgYHJ4cnBjX3NlbmRtc2dfY21zZ2AsIGFuZCBgcHV0X3VzZXJfa2V5X3BheWxvYWRgLgoKTm93LCBsZXQmIzM5O3MgcmVmaW5lIHRoaXMgYSBiaXQuIEkgbmVlZCB0byBjb25zaWRlciBmcmVxdWVuY3kgYW5kIGltcGFjdC4gYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCBpcyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGNhbGwgd2hpY2ggc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IG5vdCB0aGUgYmlnZ2VzdCBib3R0bGVuZWNrLiBgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZWAgc291bmRzIGluZnJlcXVlbnQsIGl0IGlzIGNhbGxlZCB3aGVuIHJlc3BvbmRpbmcgdG8gYSBjaGFsbGVuZ2Ugd2hpY2ggaXMgbGVzcyBjb21tb24uIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCByZWxhdGVzIHRvIHByb2JpbmcgYSBmaWxlc2VydmVyIGFuZCB0aGVuIHdlIGhhdmUgdGhlIGByeHJwY19zZW5kbXNnX2Ntc2dgLCB3aGljaCBoYXBwZW5zIHdoZW4gc2VuZGluZyBtZXNzYWdlcyB3aXRoIGNvbnRyb2wgbWVzc2FnZXMuCgpSZWZpbmluZyB0aGUgbGlzdCwgaXQgbG9va3MgbGlrZSBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAsIGBhZnNfY3JlYXRlX3lmc19jbV90b2tlbmAsIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCwgYHJ4cnBjX3NlbmRtc2dfY21zZ2AsIGFuZCBgcHV0X3VzZXJfa2V5X3BheWxvYWRgIGFyZSB0aGUgb25lcyB0byBmb2N1cyBvbi4KCkkgYWxzbyBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgQUZTX0ZTYCwgYEFGX1JYUlBDYCwgYFJYS0FEYCwgYW5kIGBSWEdLYC4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gdGhhdCBgUlhHS2AgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIFllcywgYSBxdWljayBjaGVjayBpbiBgbmV0L3J4cnBjL0tjb25maWdgIGNvbmZpcm1zIGBjb25maWcgUlhHS2AuIEFuZCwgd2FpdCwgaXQmIzM5O3MgYSAqYm9vbCogd2hpY2ggbWF5IGhhdmUgaW1wbGljYXRpb25zIGZvciBob3cgaXQmIzM5O3MgaGFuZGxlZC4gVGhlbiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBLRVlTYC4gSSB0aGluayBgQ09ORklHX0tFWVNgIGlzIHVzdWFsbHkgZW5hYmxlZCwgc28gbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLiBJIHRoaW5rIEkmIzM5O3ZlIGdvdCBhIHNvbGlkIHNldCBvZiB0YXJnZXRzIGFuZCBjb25maWdzIHRvIGtlZXAgaW4gbWluZCBtb3ZpbmcgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtSWEtBRCYjMzQ7LAogICAgJiMzNDtSWEdLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YSYjMzQ7LAogICAgJiMzNDthZnNfY3JlYXRlX3lmc19jbV90b2tlbiYjMzQ7LAogICAgJiMzNDtyeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlJiMzNDssCiAgICAmIzM0O3J4cnBjX3NlbmRtc2dfY21zZyYjMzQ7LAogICAgJiMzNDtwdXRfdXNlcl9rZXlfcGF5bG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZTIGFuZCBSeFJQQyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBSeEdLIGFwcGxpY2F0aW9uIGRhdGEgaW50ZXJuYWxseSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHVzZXJzcGFjZSBPT0IgbWVzc2FnZXMuIEl0IGludHJvZHVjZXMgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIHRvIGdlbmVyYXRlIHRoZSBhcHAgZGF0YSBhbmQgcGFzc2VzIGl0IHRvIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtSWEtBRCYjMzQ7LAogICAgJiMzNDtSWEdLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YSYjMzQ7LAogICAgJiMzNDthZnNfY3JlYXRlX3lmc19jbV90b2tlbiYjMzQ7LAogICAgJiMzNDtyeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlJiMzNDssCiAgICAmIzM0O3J4cnBjX3NlbmRtc2dfY21zZyYjMzQ7LAogICAgJiMzNDtwdXRfdXNlcl9rZXlfcGF5bG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZTIGFuZCBSeFJQQyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBSeEdLIGFwcGxpY2F0aW9uIGRhdGEgaW50ZXJuYWxseSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHVzZXJzcGFjZSBPT0IgbWVzc2FnZXMuIEl0IGludHJvZHVjZXMgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIHRvIGdlbmVyYXRlIHRoZSBhcHAgZGF0YSBhbmQgcGFzc2VzIGl0IHRvIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1Mzo1Mi4yODE1NzYzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MDU4OTk3MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiLFxuICAgIFwiQUZfUlhSUENcIixcbiAgICBcIlJYS0FEXCIsXG4gICAgXCJSWEdLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YVwiLFxuICAgIFwiYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5cIixcbiAgICBcInJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2VcIixcbiAgICBcInJ4cnBjX3NlbmRtc2dfY21zZ1wiLFxuICAgIFwicHV0X3VzZXJfa2V5X3BheWxvYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZTIGFuZCBSeFJQQyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBSeEdLIGFwcGxpY2F0aW9uIGRhdGEgaW50ZXJuYWxseSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHVzZXJzcGFjZSBPT0IgbWVzc2FnZXMuIEl0IGludHJvZHVjZXMgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIHRvIGdlbmVyYXRlIHRoZSBhcHAgZGF0YSBhbmQgcGFzc2VzIGl0IHRvIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjUzOjUyLjI4MTU4MjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTc4NjM5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjNmIxZTJkOWUxMjM5OTRhYjJkN2FhODg4NGUzNmZlOGYzNDMwYzU3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMTc6NTM6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2NtX3NlY3VyaXR5LmMgYi9mcy9hZnMvY21fc2VjdXJpdHkuY1xcbmluZGV4IDEwMzE2OGM3MGRkNGRmLi5kYjJhM2IzMGYwMjA5NCAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvY21fc2VjdXJpdHkuY1xcbisrKyBiL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXFxuQEAgLTYsNyArNiw5IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tleS10eXBlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NjcnlwdG8va3JiNS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNja2V5cy91c2VyLXR5cGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJhZnNfY20uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImFmc19mcy5oXFxcIlxcbkBAIC0xOSw5NyArMjEsNjYgQEBcXG4gI2RlZmluZSB4ZHJfbGVuX29iamVjdCh4KSAoNCArIHJvdW5kX3VwKCh4KSwgc2l6ZW9mKF9fYmUzMikpKVxcbiBcXG4gI2lmZGVmIENPTkZJR19SWEdLXFxuLXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcik7XFxuK3N0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGtyYjVfZW5jdHlwZSk7XFxuICNlbmRpZlxcbiBcXG4gLypcXG4tICogUmVzcG9uZCB0byBhbiBSeEdLIGNoYWxsZW5nZSwgYWRkaW5nIGFwcGRhdGEuXFxuKyAqIENyZWF0ZSB0aGUgYXBwbGljYXRpb24gZGF0YSB0byBnbyBpbiBhIFJFU1BPTlNFIHBhY2tldCBhIHNlcnZlcidzIENIQUxMRU5HRVxcbisgKiBmcm9tIHRoZSBwYXJhbWV0ZXJzIGNvbnRhaW5lZCBpbiBhIGtleS4gIFRoZSBrZXkgc3BlY2lmaWVzIHRoZSBzZWN1cml0eVxcbisgKiBpbmRleCBhbmQgb3RoZXIgYXBwcm9wcmlhdGUgcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBlbmNvZGluZyB0eXBlIGZvciBSeEdLLlxcbiAgKi9cXG4tc3RhdGljIGludCBhZnNfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcXG4raW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KVxcbiB7XFxuLSNpZmRlZiBDT05GSUdfUlhHS1xcbi1cXHRzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9O1xcbi1cXHRzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyO1xcbi0jZW5kaWZcXG4tXFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBlZXI7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcGVlcl9kYXRhO1xcbi1cXHR1MTYgc2VydmljZV9pZDtcXG4rXFx0dTMyIGtyYjVfZW5jdHlwZTtcXG4rXFx0aW50IHJldDtcXG4gXFx0dTggc2VjdXJpdHlfaW5kZXg7XFxuIFxcbi1cXHRyeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSwgXFx1MDAyNnBlZXIsIFxcdTAwMjZwZWVyX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnNlcnZpY2VfaWQsIFxcdTAwMjZzZWN1cml0eV9pbmRleCk7XFxuLVxcbi1cXHRfZW50ZXIoXFxcIiV1LCV1XFxcIiwgc2VydmljZV9pZCwgc2VjdXJpdHlfaW5kZXgpO1xcbi1cXG4tXFx0c3dpdGNoIChzZXJ2aWNlX2lkKSB7XFxuLVxcdFxcdC8qIFdlIGRvbid0IHNlbmQgQ01fU0VSVklDRSBSUENzLCBzbyBkb24ndCBleHBlY3QgYSBjaGFsbGVuZ2VcXG4tXFx0XFx0ICogdGhlcmVmcm9tLlxcbi1cXHRcXHQgKi9cXG4tXFx0Y2FzZSBGU19TRVJWSUNFOlxcbi1cXHRjYXNlIFZMX1NFUlZJQ0U6XFxuLVxcdGNhc2UgWUZTX0ZTX1NFUlZJQ0U6XFxuLVxcdGNhc2UgWUZTX1ZMX1NFUlZJQ0U6XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRwcl93YXJuKFxcXCJDYW4ndCByZXNwb25kIHRvIHVua25vd24gY2hhbGxlbmdlICV1OiV1XFxcIixcXG4tXFx0XFx0XFx0c2VydmljZV9pZCwgc2VjdXJpdHlfaW5kZXgpO1xcbi1cXHRcXHRyZXR1cm4gcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UoY2hhbGxlbmdlLCBSWF9VU0VSX0FCT1JULCAtRVBST1RPLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGFmc19hYm9ydF91bnN1cHBvcnRlZF9zZWNfY2xhc3MpO1xcbi1cXHR9XFxuK1xcdGlmICgha2V5KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFJlYWQgQVBQREFUQSBmbGFnIGJlZm9yZSBjbV9yeGdrX2FwcGRhdGEgKi9cXG4rXFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoQUZTX1NFUlZFUl9GTF9BUFBEQVRBLCBcXHUwMDI2c2VydmVyLVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cnhycGNfa2VybmVsX3F1ZXJ5X2tleShrZXksIFxcdTAwMjZzZWN1cml0eV9pbmRleCwgXFx1MDAyNmtyYjVfZW5jdHlwZSk7XFxuK1xcbitcXHRfZW50ZXIoXFxcIiV1LCV1XFxcIiwgc2VjdXJpdHlfaW5kZXgsIGtyYjVfZW5jdHlwZSk7XFxuIFxcbi1cXHRzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7XFxuK1xcdHJldCA9IDA7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnNlcnZlci1cXHUwMDNlY21fdG9rZW5fbG9jayk7XFxuK1xcbitcXHQvKiBSZWFkIEFQUERBVEEgZmxhZyBiZWZvcmUgY21fcnhna19hcHBkYXRhICovXFxuK1xcdGlmICghdGVzdF9iaXRfYWNxdWlyZShBRlNfU0VSVkVSX0ZMX0FQUERBVEEsIFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7XFxuK1xcdFxcdGNhc2UgMDpcXG4rXFx0XFx0XFx0YnJlYWs7XFxuICNpZmRlZiBDT05GSUdfUlhLQURcXG4tXFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9SWEtBRDpcXG4tXFx0XFx0cmV0dXJuIHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UpO1xcbitcXHRcXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOlxcbitcXHRcXHRcXHRzZXRfYml0KEFGU19TRVJWRVJfRkxfQVBQREFUQSwgXFx1MDAyNnNlcnZlci1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHRicmVhaztcXG4gI2VuZGlmXFxuIFxcbiAjaWZkZWYgQ09ORklHX1JYR0tcXG4tXFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9SWEdLOlxcbi1cXHRcXHRyZXR1cm4gcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlLCBcXHUwMDI2YXBwZGF0YSk7XFxuLVxcbi1cXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxcbi1cXHRcXHRzd2l0Y2ggKHNlcnZpY2VfaWQpIHtcXG4tXFx0XFx0Y2FzZSBGU19TRVJWSUNFOlxcbi1cXHRcXHRjYXNlIFlGU19GU19TRVJWSUNFOlxcbi1cXHRcXHRcXHRzZXJ2ZXIgPSAoc3RydWN0IGFmc19zZXJ2ZXIgKilwZWVyX2RhdGE7XFxuLVxcdFxcdFxcdGlmICghc2VydmVyLVxcdTAwM2VjbV9yeGdrX2FwcGRhdGEuZGF0YSkge1xcbi1cXHRcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWNtX3Rva2VuX2xvY2spO1xcbi1cXHRcXHRcXHRcXHRpZiAoIXNlcnZlci1cXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpXFxuLVxcdFxcdFxcdFxcdFxcdGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKGNoYWxsZW5nZSwgc2VydmVyKTtcXG4tXFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWNtX3Rva2VuX2xvY2spO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmIChzZXJ2ZXItXFx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKVxcbi1cXHRcXHRcXHRcXHRhcHBkYXRhID0gc2VydmVyLVxcdTAwM2VjbV9yeGdrX2FwcGRhdGE7XFxuK1xcdFxcdGNhc2UgUlhSUENfU0VDVVJJVFlfUlhHSzpcXG4rXFx0XFx0XFx0c2V0X2JpdChBRlNfU0VSVkVSX0ZMX0FQUERBVEEsIFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFx0XFx0cmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgXFx1MDAyNmFwcGRhdGEpO1xcbi0jZW5kaWZcXG4gXFxuLVxcdGRlZmF1bHQ6XFxuLVxcdFxcdHJldHVybiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFJYX1VTRVJfQUJPUlQsIC1FUFJPVE8sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYWZzX2Fib3J0X3Vuc3VwcG9ydGVkX3NlY19jbGFzcyk7XFxuLVxcdH1cXG4tfVxcbitcXHRcXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxcbitcXHRcXHRcXHRyZXQgPSBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzZXJ2ZXIsIGtyYjVfZW5jdHlwZSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0c2V0X2JpdChBRlNfU0VSVkVSX0ZMX0FQUERBVEEsIFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbiBcXG4tLypcXG4tICogUHJvY2VzcyB0aGUgT09CIG1lc3NhZ2UgcXVldWUsIHByb2Nlc3NpbmcgY2hhbGxlbmdlIHBhY2tldHMuXFxuLSAqL1xcbi12b2lkIGFmc19wcm9jZXNzX29vYl9xdWV1ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLXtcXG4tXFx0c3RydWN0IGFmc19uZXQgKm5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWZzX25ldCwgcnhfb29iX3dvcmspO1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqb29iO1xcbi1cXHRlbnVtIHJ4cnBjX29vYl90eXBlIHR5cGU7XFxuLVxcbi1cXHR3aGlsZSAoUkVBRF9PTkNFKG5ldC1cXHUwMDNlbGl2ZSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICAgIChvb2IgPSByeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2IobmV0LVxcdTAwM2Vzb2NrZXQsIFxcdTAwMjZ0eXBlKSkpIHtcXG4tXFx0XFx0c3dpdGNoICh0eXBlKSB7XFxuLVxcdFxcdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcXG4tXFx0XFx0XFx0YWZzX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKG9vYik7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4tXFx0XFx0cnhycGNfa2VybmVsX2ZyZWVfb29iKG9vYik7XFxuIFxcdH1cXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2c2VydmVyLVxcdTAwM2VjbV90b2tlbl9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19SWEdLXFxuQEAgLTE3NywzNyArMTQ4LDM0IEBAIGludCBhZnNfY3JlYXRlX3Rva2VuX2tleShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpXFxuIC8qXFxuICAqIENyZWF0ZSBhbiBZRlMgUnhHSyBHU1MgdG9rZW4gdG8gdXNlIGFzIGEgdGlja2V0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZXNlcnZlci5cXG4gICovXFxuLXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcilcXG4rc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCB1MzIgZW5jdHlwZSlcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICpjb25uX2tyYjUsICp0b2tlbl9rcmI1O1xcbiBcXHRjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKnRva2VuX2tleTtcXG4gXFx0c3RydWN0IGNyeXB0b19hZWFkICphZWFkO1xcbiBcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7XFxuIFxcdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBzZXJ2ZXItXFx1MDAzZWNlbGwtXFx1MDAzZW5ldDtcXG4tXFx0Y29uc3Qgc3RydWN0IGtleSAqa2V5ID0gbmV0LVxcdTAwM2Vmc19jbV90b2tlbl9rZXk7XFxuK1xcdGNvbnN0IHN0cnVjdCBrZXkgKmNtX2tleSA9IG5ldC1cXHUwMDNlZnNfY21fdG9rZW5fa2V5O1xcbitcXHRzdHJ1Y3Qga2V5ICphcHBkYXRhX2tleSA9IE5VTEw7XFxuIFxcdHNpemVfdCBrZXlzaXplLCB1dWlkc2l6ZSwgYXV0aHNpemUsIHRva3NpemUsIGVuY3NpemUsIGNvbnRzaXplLCBhZGF0YXNpemUsIG9mZnNldDtcXG4gXFx0X19iZTMyIGNhcHNbMV0gPSB7XFxuIFxcdFxcdFswXSA9IGh0b25sKEFGU19DQVBfRVJST1JfVFJBTlNMQVRJT04pLFxcbiBcXHR9O1xcbiBcXHRfX2JlMzIgKnhkcjtcXG4gXFx0dm9pZCAqYXBwZGF0YSwgKkswLCAqZW5jYmFzZTtcXG4tXFx0dTMyIGVuY3R5cGU7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAoIWtleSlcXG4rXFx0aWYgKCFjbV9rZXkpXFxuIFxcdFxcdHJldHVybiAtRU5PS0VZO1xcbiBcXG4gXFx0LyogQXNzdW1lIHRoYXQgdGhlIGZpbGVzZXJ2ZXIgaXMgaGFwcHkgdG8gdXNlIHRoZSBzYW1lIGVuY29kaW5nIHR5cGUgYXNcXG4gXFx0ICogd2Ugd2VyZSB0b2xkIHRvIHVzZSBieSB0aGUgdG9rZW4gb2J0YWluZWQgYnkgdGhlIHVzZXIuXFxuIFxcdCAqL1xcbi1cXHRlbmN0eXBlID0gcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSk7XFxuLVxcbiBcXHRjb25uX2tyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZW5jdHlwZSk7XFxuIFxcdGlmICghY29ubl9rcmI1KVxcbiBcXHRcXHRyZXR1cm4gLUVOT1BLRztcXG4tXFx0dG9rZW5fa3JiNSA9IGtleS1cXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xcbi1cXHR0b2tlbl9rZXkgPSAoY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICopXFx1MDAyNmtleS1cXHUwMDNlcGF5bG9hZC5kYXRhWzJdO1xcbitcXHR0b2tlbl9rcmI1ID0gY21fa2V5LVxcdTAwM2VwYXlsb2FkLmRhdGFbMF07XFxuK1xcdHRva2VuX2tleSA9IChjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKilcXHUwMDI2Y21fa2V5LVxcdTAwM2VwYXlsb2FkLmRhdGFbMl07XFxuIFxcbiBcXHQvKiBzdHJ1Y3Qgcnhna19rZXkge1xcbiBcXHQgKlxcdGFmc191aW50MzJcXHRlbmN0eXBlO1xcbkBAIC0zMjcsOSArMjk1LDIyIEBAIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gb3V0X2FlYWQ7XFxuIFxcbi1cXHRzZXJ2ZXItXFx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5sZW4gID0gYWRhdGFzaXplO1xcbi1cXHRzZXJ2ZXItXFx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhID0gYXBwZGF0YTtcXG4tXFx0YXBwZGF0YSA9IE5VTEw7XFxuK1xcdGFwcGRhdGFfa2V5ID0ga2V5X2FsbG9jKFxcdTAwMjZrZXlfdHlwZV91c2VyLCBcXFwicnhycGM6IGFmcyByeGdrIGFwcGRhdGFcXFwiLFxcbitcXHRcXHRcXHRcXHRHTE9CQUxfUk9PVF9VSUQsIEdMT0JBTF9ST09UX0dJRCwgY3VycmVudF9jcmVkKCksXFxuK1xcdFxcdFxcdFxcdEtFWV9QT1NfVklFVyB8IEtFWV9QT1NfU0VBUkNIIHwgS0VZX1VTUl9WSUVXLFxcbitcXHRcXHRcXHRcXHRLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihhcHBkYXRhX2tleSkpIHtcXG4rXFx0XFx0cmV0ID0gUFRSX0VSUihhcHBkYXRhX2tleSk7XFxuK1xcdFxcdGdvdG8gb3V0X2FlYWQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGtleV9pbnN0YW50aWF0ZV9hbmRfbGluayhhcHBkYXRhX2tleSwgYXBwZGF0YSwgYWRhdGFzaXplLCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a2V5X3B1dChhcHBkYXRhX2tleSk7XFxuK1xcdFxcdGdvdG8gb3V0X2FlYWQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNlcnZlci1cXHUwMDNlY21fcnhna19hcHBkYXRhID0gYXBwZGF0YV9rZXk7XFxuIFxcbiBvdXRfYWVhZDpcXG4gXFx0Y3J5cHRvX2ZyZWVfYWVhZChhZWFkKTtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Ntc2VydmljZS5jIGIvZnMvYWZzL2Ntc2VydmljZS5jXFxuaW5kZXggNTU0MGFlMWNhZDU5OWEuLmQ1NzlhNjY1ZTNkYTA5IDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9jbXNlcnZpY2UuY1xcbisrKyBiL2ZzL2Fmcy9jbXNlcnZpY2UuY1xcbkBAIC0zNjQsNyArMzY0LDggQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTMoc3RydWN0IGFmc19jYWxsICpjYWxsKVxcbiBcXHRpZiAoIWFmc19jaGVja19jYWxsX3N0YXRlKGNhbGwsIEFGU19DQUxMX1NWX1JFUExZSU5HKSlcXG4gXFx0XFx0cmV0dXJuIGFmc19pb19lcnJvcihjYWxsLCBhZnNfaW9fZXJyb3JfY21fcmVwbHkpO1xcbiBcXG4tXFx0aWYgKG1lbWNtcChjYWxsLVxcdTAwM2VyZXF1ZXN0LCBcXHUwMDI2Y2FsbC1cXHUwMDNlc2VydmVyLVxcdTAwM2VfdXVpZCwgc2l6ZW9mKGNhbGwtXFx1MDAzZXNlcnZlci1cXHUwMDNlX3V1aWQpKSAhPSAwKSB7XFxuK1xcdGlmIChjYWxsLVxcdTAwM2VzZXJ2ZXIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG1lbWNtcChjYWxsLVxcdTAwM2VyZXF1ZXN0LCBcXHUwMDI2Y2FsbC1cXHUwMDNlc2VydmVyLVxcdTAwM2VfdXVpZCwgc2l6ZW9mKGNhbGwtXFx1MDAzZXNlcnZlci1cXHUwMDNlX3V1aWQpKSAhPSAwKSB7XFxuIFxcdFxcdHByX25vdGljZShcXFwiQ2FsbGJhY2sgVVVJRCBkb2VzIG5vdCBtYXRjaCBmaWxlc2VydmVyIFVVSURcXFxcblxcXCIpO1xcbiBcXHRcXHR0cmFjZV9hZnNfY21fbm9fc2VydmVyX3UoY2FsbCwgY2FsbC1cXHUwMDNlcmVxdWVzdCk7XFxuIFxcdFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZnNfcHJvYmUuYyBiL2ZzL2Fmcy9mc19wcm9iZS5jXFxuaW5kZXggYTkxYWQxOTM4ZDA3ODguLmUyNmY3ZjFlMzBhMjNhIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9mc19wcm9iZS5jXFxuKysrIGIvZnMvYWZzL2ZzX3Byb2JlLmNcXG5AQCAtMjQxLDkgKzI0MSwxNCBAQCBpbnQgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcXG4gXFx0c3RydWN0IGFmc19lbmRwb2ludF9zdGF0ZSAqZXN0YXRlLCAqb2xkO1xcbiBcXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0ID0gTlVMTCwgKmFsaXN0O1xcbiBcXHR1bnNpZ25lZCBsb25nIHVucHJvYmVkO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0X2VudGVyKFxcXCIlcFVcXFwiLCBcXHUwMDI2c2VydmVyLVxcdTAwM2V1dWlkKTtcXG4gXFxuK1xcdHJldCA9IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc2VydmVyLCBrZXkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdGVzdGF0ZSA9IGt6YWxsb2Nfb2JqKCplc3RhdGUpO1xcbiBcXHRpZiAoIWVzdGF0ZSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcXG5pbmRleCAwYjcyYTg1NjYyOTk5Mi4uM2U2MWM1NDNhNTBjNDggMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9hZnMvaW50ZXJuYWwuaFxcbkBAIC0yODMsNyArMjgzLDYgQEAgc3RydWN0IGFmc19uZXQge1xcbiBcXHRzdHJ1Y3Qgc29ja2V0XFx0XFx0KnNvY2tldDtcXG4gXFx0c3RydWN0IGFmc19jYWxsXFx0XFx0KnNwYXJlX2luY29taW5nX2NhbGw7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdGNoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcms7XFxuLVxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdHJ4X29vYl93b3JrO1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRzb2NrZXRfbXV0ZXg7XFxuIFxcdGF0b21pY190XFx0XFx0bnJfb3V0c3RhbmRpbmdfY2FsbHM7XFxuIFxcdGF0b21pY190XFx0XFx0bnJfc3VwZXJibG9ja3M7XFxuQEAgLTU0Nyw3ICs1NDYsNyBAQCBzdHJ1Y3QgYWZzX3NlcnZlciB7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdGRlc3Ryb3llcjtcXHQvKiBXb3JrIGl0ZW0gdG8gdHJ5IGFuZCBkZXN0cm95IGEgc2VydmVyICovXFxuIFxcdHN0cnVjdCB0aW1lcl9saXN0XFx0dGltZXI7XFx0XFx0LyogTWFuYWdlbWVudCB0aW1lciAqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRjbV90b2tlbl9sb2NrO1xcdC8qIExvY2sgZ292ZXJuaW5nIGNyZWF0aW9uIG9mIGFwcGRhdGEgKi9cXG4tXFx0c3RydWN0IGtyYjVfYnVmZmVyXFx0Y21fcnhna19hcHBkYXRhOyAvKiBBcHBkYXRhIHRvIGJlIGluY2x1ZGVkIGluIFJFU1BPTlNFIHBhY2tldCAqL1xcbitcXHRzdHJ1Y3Qga2V5XFx0XFx0KmNtX3J4Z2tfYXBwZGF0YTsgLyogQXBwZGF0YSB0byBiZSBpbmNsdWRlZCBpbiBSRVNQT05TRSBwYWNrZXQgKi9cXG4gXFx0dGltZTY0X3RcXHRcXHR1bnVzZV90aW1lO1xcdC8qIFRpbWUgYXQgd2hpY2ggbGFzdCB1bnVzZWQgKi9cXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGZsYWdzO1xcbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfUkVTUE9ORElORyAwXFx0XFx0LyogVGhlIHNlcnZlciBpcyByZXNwb25kaW5nICovXFxuQEAgLTU1OSw2ICs1NTgsNyBAQCBzdHJ1Y3QgYWZzX3NlcnZlciB7XFxuICNkZWZpbmUgQUZTX1NFUlZFUl9GTF9OT1RfRk9VTkRcXHQ2XFx0XFx0LyogVkwgc2VydmVyIHNheXMgbm8gc3VjaCBzZXJ2ZXIgKi9cXG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX1ZMX0ZBSUxcXHQ3XFx0XFx0LyogRmFpbGVkIHRvIGFjY2VzcyBWTCBzZXJ2ZXIgKi9cXG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX01BWV9IQVZFX0NCIDhcXHRcXHQvKiBNYXkgaGF2ZSBjYWxsYmFja3Mgb24gdGhpcyBmaWxlc2VydmVyICovXFxuKyNkZWZpbmUgQUZTX1NFUlZFUl9GTF9BUFBEQVRBXFx0OVxcdFxcdC8qIFNldCBpZiBhcHBkYXRhIGNyZWF0ZWQgKi9cXG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX0lTX1lGU1xcdDE2XFx0XFx0LyogU2VydmVyIGlzIFlGUyBub3QgQUZTICovXFxuICNkZWZpbmUgQUZTX1NFUlZFUl9GTF9OT19JQlVMS1xcdDE3XFx0XFx0LyogRmlsZXNlcnZlciBkb2Vzbid0IHN1cHBvcnQgRlMuSW5saW5lQnVsa1N0YXR1cyAqL1xcbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfTk9fUk0yXFx0MThcXHRcXHQvKiBGaWxlc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBZRlMuUmVtb3ZlRmlsZTIgKi9cXG5AQCAtMTA5MCw3ICsxMDkwLDcgQEAgZXh0ZXJuIGJvb2wgYWZzX2NtX2luY29taW5nX2NhbGwoc3RydWN0IGFmc19jYWxsICopO1xcbiAvKlxcbiAgKiBjbV9zZWN1cml0eS5jXFxuICAqL1xcbi12b2lkIGFmc19wcm9jZXNzX29vYl9xdWV1ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbitpbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpO1xcbiAjaWZkZWYgQ09ORklHX1JYR0tcXG4gaW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldCk7XFxuICNlbHNlXFxuQEAgLTE0MTcsMjEgKzE0MTcsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX3NlZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZW51bSBhZnNfY2FsbF90cmFjZSB3aHkpXFxuIFxcdFxcdCAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgYWZzX21ha2Vfb3BfY2FsbChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsIHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcXG4tXFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4te1xcbi1cXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cXHUwMDNlZXN0YXRlLVxcdTAwM2VhZGRyZXNzZXM7XFxuLVxcbi1cXHRvcC1cXHUwMDNlY2FsbFxcdD0gY2FsbDtcXG4tXFx0b3AtXFx1MDAzZXR5cGVcXHQ9IGNhbGwtXFx1MDAzZXR5cGU7XFxuLVxcdGNhbGwtXFx1MDAzZW9wXFx0PSBvcDtcXG4tXFx0Y2FsbC1cXHUwMDNla2V5XFx0PSBvcC1cXHUwMDNla2V5O1xcbi1cXHRjYWxsLVxcdTAwM2VpbnRyXFx0PSAhKG9wLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFGU19PUEVSQVRJT05fVU5JTlRSKTtcXG4tXFx0Y2FsbC1cXHUwMDNlcGVlclxcdD0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LVxcdTAwM2VhZGRyc1tvcC1cXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XFxuLVxcdGNhbGwtXFx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cXHUwMDNlc2VydmVyLVxcdTAwM2VzZXJ2aWNlX2lkO1xcbi1cXHRhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZXh0cmFjdF9iZWdpbihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXFxuIHtcXG4gXFx0Y2FsbC1cXHUwMDNlaW92X2xlbiA9IHNpemU7XFxuQEAgLTE3NjMsNiArMTc0OCwyMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqQUZTX1ZOT0RFX1RPX0koc3RydWN0IGFmc192bm9kZSAqdm5vZGUpXFxuIFxcdHJldHVybiBcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzLmlub2RlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgYWZzX21ha2Vfb3BfY2FsbChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsIHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcXG4rXFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4re1xcbitcXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cXHUwMDNlZXN0YXRlLVxcdTAwM2VhZGRyZXNzZXM7XFxuK1xcbitcXHRvcC1cXHUwMDNlY2FsbFxcdD0gY2FsbDtcXG4rXFx0b3AtXFx1MDAzZXR5cGVcXHQ9IGNhbGwtXFx1MDAzZXR5cGU7XFxuK1xcdGNhbGwtXFx1MDAzZW9wXFx0PSBvcDtcXG4rXFx0Y2FsbC1cXHUwMDNlc2VydmVyXFx0PSBhZnNfdXNlX3NlcnZlcihvcC1cXHUwMDNlc2VydmVyLCBmYWxzZSwgYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCk7XFxuK1xcdGNhbGwtXFx1MDAzZWtleVxcdD0gb3AtXFx1MDAzZWtleTtcXG4rXFx0Y2FsbC1cXHUwMDNlaW50clxcdD0gIShvcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBRlNfT1BFUkFUSU9OX1VOSU5UUik7XFxuK1xcdGNhbGwtXFx1MDAzZXBlZXJcXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cXHUwMDNlYWRkcnNbb3AtXFx1MDAzZWFkZHJfaW5kZXhdLnBlZXIpO1xcbitcXHRjYWxsLVxcdTAwM2VzZXJ2aWNlX2lkID0gb3AtXFx1MDAzZXNlcnZlci1cXHUwMDNlc2VydmljZV9pZDtcXG4rXFx0YWZzX21ha2VfY2FsbChjYWxsLCBnZnApO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBOb3RlIHRoYXQgYSBkZW50cnkgZ290IGNoYW5nZWQuICBXZSBuZWVkIHRvIHNldCBkX2ZzZGF0YSB0byB0aGUgZGF0YSB2ZXJzaW9uXFxuICAqIG51bWJlciBkZXJpdmVkIGZyb20gdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLiAgSXQgZG9lc24ndCBtYXR0ZXIgaWZcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL21haW4uYyBiL2ZzL2Fmcy9tYWluLmNcXG5pbmRleCA3YTg4M2M1OTk3NmZmMi4uNjM1M2ZlYWE1ZmI0YjUgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL21haW4uY1xcbisrKyBiL2ZzL2Fmcy9tYWluLmNcXG5AQCAtNzMsNyArNzMsNiBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgYWZzX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldF9ucylcXG4gXFx0Z2VuZXJhdGVfcmFuZG9tX3V1aWQoKHVuc2lnbmVkIGNoYXIgKilcXHUwMDI2bmV0LVxcdTAwM2V1dWlkKTtcXG4gXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2bmV0LVxcdTAwM2VjaGFyZ2VfcHJlYWxsb2NhdGlvbl93b3JrLCBhZnNfY2hhcmdlX3ByZWFsbG9jYXRpb24pO1xcbi1cXHRJTklUX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNlcnhfb29iX3dvcmssIGFmc19wcm9jZXNzX29vYl9xdWV1ZSk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNm5ldC1cXHUwMDNlc29ja2V0X211dGV4KTtcXG4gXFxuIFxcdG5ldC1cXHUwMDNlY2VsbHMgPSBSQl9ST09UO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvcnhycGMuYyBiL2ZzL2Fmcy9yeHJwYy5jXFxuaW5kZXggZDgyOTE2NjU3YTNkZGYuLmFlNDhjMTViM2RiOTQzIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9yeHJwYy5jXFxuKysrIGIvZnMvYWZzL3J4cnBjLmNcXG5AQCAtMjUsMTQgKzI1LDEyIEBAIHN0YXRpYyB2b2lkIGFmc19wcm9jZXNzX2FzeW5jX2NhbGwoc3RydWN0IHdvcmtfc3RydWN0ICopO1xcbiBzdGF0aWMgdm9pZCBhZnNfcnhfbmV3X2NhbGwoc3RydWN0IHNvY2sgKiwgc3RydWN0IHJ4cnBjX2NhbGwgKiwgdW5zaWduZWQgbG9uZyk7XFxuIHN0YXRpYyB2b2lkIGFmc19yeF9kaXNjYXJkX25ld19jYWxsKHN0cnVjdCByeHJwY19jYWxsICosIHVuc2lnbmVkIGxvbmcpO1xcbiBzdGF0aWMgdm9pZCBhZnNfcnhfYXR0YWNoKHN0cnVjdCByeHJwY19jYWxsICpyeGNhbGwsIHVuc2lnbmVkIGxvbmcgdXNlcl9jYWxsX0lEKTtcXG4tc3RhdGljIHZvaWQgYWZzX3J4X25vdGlmeV9vb2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb29iKTtcXG4gc3RhdGljIGludCBhZnNfZGVsaXZlcl9jbV9vcF9pZChzdHJ1Y3QgYWZzX2NhbGwgKik7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ4cnBjX2tlcm5lbF9vcHMgYWZzX3J4cnBjX2NhbGxiYWNrX29wcyA9IHtcXG4gXFx0Lm5vdGlmeV9uZXdfY2FsbFxcdD0gYWZzX3J4X25ld19jYWxsLFxcbiBcXHQuZGlzY2FyZF9uZXdfY2FsbFxcdD0gYWZzX3J4X2Rpc2NhcmRfbmV3X2NhbGwsXFxuIFxcdC51c2VyX2F0dGFjaF9jYWxsXFx0PSBhZnNfcnhfYXR0YWNoLFxcbi1cXHQubm90aWZ5X29vYlxcdFxcdD0gYWZzX3J4X25vdGlmeV9vb2IsXFxuIH07XFxuIFxcbiAvKiBhc3luY2hyb25vdXMgaW5jb21pbmcgY2FsbCBpbml0aWFsIHByb2Nlc3NpbmcgKi9cXG5AQCAtNzQsMTAgKzcyLDYgQEAgaW50IGFmc19vcGVuX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJvcl8yO1xcbiBcXG4tXFx0cmV0ID0gcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHNvY2tldC1cXHUwMDNlc2ssIHRydWUpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlcnJvcl8yO1xcbi1cXG4gXFx0cmV0ID0gYWZzX2NyZWF0ZV90b2tlbl9rZXkobmV0LCBzb2NrZXQpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cHJfZXJyKFxcXCJDb3VsZG4ndCBjcmVhdGUgUnhHSyBDTSBrZXk6ICVkXFxcXG5cXFwiLCByZXQpO1xcbkBAIC0xMjgsNyArMTIyLDYgQEAgdm9pZCBhZnNfY2xvc2Vfc29ja2V0KHN0cnVjdCBhZnNfbmV0ICpuZXQpXFxuIFxcdF9lbnRlcihcXFwiXFxcIik7XFxuIFxcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZuZXQtXFx1MDAzZWNoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcmspO1xcbi1cXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZuZXQtXFx1MDAzZXJ4X29vYl93b3JrKTtcXG4gXFx0LyogRnV0dXJlIHdvcmsgaXRlbXMgc2hvdWxkIG5vdyBzZWUgLVxcdTAwM2VsaXZlIGlzIGZhbHNlLiAqL1xcbiBcXG4gXFx0a2VybmVsX2xpc3RlbihuZXQtXFx1MDAzZXNvY2tldCwgMCk7XFxuQEAgLTE0OSw3ICsxNDIsNiBAQCB2b2lkIGFmc19jbG9zZV9zb2NrZXQoc3RydWN0IGFmc19uZXQgKm5ldClcXG4gXFxuIFxcdGtlcm5lbF9zb2NrX3NodXRkb3duKG5ldC1cXHUwMDNlc29ja2V0LCBTSFVUX1JEV1IpO1xcbiBcXHRmbHVzaF93b3JrcXVldWUoYWZzX2FzeW5jX2NhbGxzKTtcXG4tXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bmV0LVxcdTAwM2VyeF9vb2Jfd29yayk7XFxuIFxcdG5ldC1cXHUwMDNlc29ja2V0LVxcdTAwM2Vzay1cXHUwMDNlc2tfdXNlcl9kYXRhID0gTlVMTDtcXG4gXFx0c29ja19yZWxlYXNlKG5ldC1cXHUwMDNlc29ja2V0KTtcXG4gXFx0a2V5X3B1dChuZXQtXFx1MDAzZWZzX2NtX3Rva2VuX2tleSk7XFxuQEAgLTM0Nyw3ICszMzksMTAgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxcbiBcXHRzdHJ1Y3QgcnhycGNfY2FsbCAqcnhjYWxsO1xcbiBcXHRzdHJ1Y3QgbXNnaGRyIG1zZztcXG4gXFx0c3RydWN0IGt2ZWMgaW92WzFdO1xcbitcXHR1bnNpZ25lZCBpbnQgZGVidWdfaWQgPSBjYWxsLVxcdTAwM2VkZWJ1Z19pZDtcXG4rXFx0c3RydWN0IGtleSAqYXBwX2RhdGEgPSBOVUxMO1xcbiBcXHRzaXplX3QgbGVuO1xcbitcXHRib29sIHdyaXRlX2l0ZXIgPSBjYWxsLVxcdTAwM2V3cml0ZV9pdGVyO1xcbiBcXHRzNjQgdHhfdG90YWxfbGVuO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5AQCAtMzc4LDggKzM3MywyNSBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXFxuIFxcdFxcdGNhbGwtXFx1MDAzZWRyb3BfcmVmID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKGNhbGwtXFx1MDAzZWtleSBcXHUwMDI2XFx1MDAyNiBjYWxsLVxcdTAwM2VzZXJ2ZXIpIHtcXG4rXFx0XFx0dTMyIGtyYjVfZW5jdHlwZSA9IDA7XFxuK1xcdFxcdHU4IHNlY3VyaXR5X2luZGV4ID0gMDtcXG4rXFxuK1xcdFxcdHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoY2FsbC1cXHUwMDNla2V5LCBcXHUwMDI2c2VjdXJpdHlfaW5kZXgsIFxcdTAwMjZrcmI1X2VuY3R5cGUpO1xcbitcXHRcXHRzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7XFxuKyNpZmRlZiBDT05GSUdfUlhHS1xcbitcXHRcXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxcbitcXHRcXHRcXHRhcHBfZGF0YSA9IGNhbGwtXFx1MDAzZXNlcnZlci1cXHUwMDNlY21fcnhna19hcHBkYXRhO1xcbitcXHRcXHRcXHRicmVhaztcXG4rI2VuZGlmXFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdC8qIGNyZWF0ZSBhIGNhbGwgKi9cXG4tXFx0cnhjYWxsID0gcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoY2FsbC1cXHUwMDNlbmV0LVxcdTAwM2Vzb2NrZXQsIGNhbGwtXFx1MDAzZXBlZXIsIGNhbGwtXFx1MDAzZWtleSxcXG4rXFx0cnhjYWxsID0gcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoY2FsbC1cXHUwMDNlbmV0LVxcdTAwM2Vzb2NrZXQsIGNhbGwtXFx1MDAzZXBlZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCBjYWxsLVxcdTAwM2VrZXksIGFwcF9kYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgKHVuc2lnbmVkIGxvbmcpY2FsbCxcXG4gXFx0XFx0XFx0XFx0XFx0IHR4X3RvdGFsX2xlbixcXG4gXFx0XFx0XFx0XFx0XFx0IGNhbGwtXFx1MDAzZW1heF9saWZlc3BhbixcXG5AQCAtNDEwLDcgKzQyMiw3IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcXG4gXFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2bXNnLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgaW92LCAxLCBjYWxsLVxcdTAwM2VyZXF1ZXN0X3NpemUpO1xcbiBcXHRtc2cubXNnX2NvbnRyb2xcXHRcXHQ9IE5VTEw7XFxuIFxcdG1zZy5tc2dfY29udHJvbGxlblxcdD0gMDtcXG4tXFx0bXNnLm1zZ19mbGFnc1xcdFxcdD0gTVNHX1dBSVRBTEwgfCAoY2FsbC1cXHUwMDNld3JpdGVfaXRlciA/IE1TR19NT1JFIDogMCk7XFxuK1xcdG1zZy5tc2dfZmxhZ3NcXHRcXHQ9IE1TR19XQUlUQUxMIHwgKHdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApO1xcbiBcXG4gXFx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVxcdTAwM2VuZXQtXFx1MDAzZXNvY2tldCwgcnhjYWxsLFxcbiBcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZtc2csIGNhbGwtXFx1MDAzZXJlcXVlc3Rfc2l6ZSxcXG5AQCAtNDE4LDcgKzQzMCw5IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XFxuIFxcbi1cXHRpZiAoY2FsbC1cXHUwMDNld3JpdGVfaXRlcikge1xcbitcXHQvKiBXZSBsb3N0IG91ciByZWYgb24gY2FsbCBpZiBNU0dfTU9SRSB3YXMgc2V0LiAqL1xcbitcXG4rXFx0aWYgKHdyaXRlX2l0ZXIpIHtcXG4gXFx0XFx0bXNnLm1zZ19pdGVyID0gKmNhbGwtXFx1MDAzZXdyaXRlX2l0ZXI7XFxuIFxcdFxcdG1zZy5tc2dfZmxhZ3MgXFx1MDAyNj0gfk1TR19NT1JFO1xcbiBcXHRcXHR0cmFjZV9hZnNfc2VuZF9kYXRhKGNhbGwsIFxcdTAwMjZtc2cpO1xcbkBAIC00MjcsOSArNDQxLDkgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGNhbGwtXFx1MDAzZXJ4Y2FsbCwgXFx1MDAyNm1zZyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBpb3ZfaXRlcl9jb3VudChcXHUwMDI2bXNnLm1zZ19pdGVyKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTtcXG4tXFx0XFx0KmNhbGwtXFx1MDAzZXdyaXRlX2l0ZXIgPSBtc2cubXNnX2l0ZXI7XFxuK1xcdFxcdC8qIFdlIGxvc3Qgb3VyIHJlZiBvbiBjYWxsLiAqL1xcbiBcXG4tXFx0XFx0dHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCBcXHUwMDI2bXNnLCByZXQpO1xcbitcXHRcXHR0cmFjZV9hZnNfc2VudF9kYXRhKGRlYnVnX2lkLCBcXHUwMDI2bXNnLCByZXQpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0Z290byBlcnJvcl9kb19hYm9ydDtcXG4gXFx0fVxcbkBAIC05ODMsMTQgKzk5NywzIEBAIG5vaW5saW5lIGludCBhZnNfcHJvdG9jb2xfZXJyb3Ioc3RydWN0IGFmc19jYWxsICpjYWxsLFxcbiBcXHRcXHRjYWxsLVxcdTAwM2V1bm1hcnNoYWxsaW5nX2Vycm9yID0gdHJ1ZTtcXG4gXFx0cmV0dXJuIC1FQkFETVNHO1xcbiB9XFxuLVxcbi0vKlxcbi0gKiBXYWtlIHVwIE9PQiBub3RpZmljYXRpb24gcHJvY2Vzc2luZy5cXG4tICovXFxuLXN0YXRpYyB2b2lkIGFmc19yeF9ub3RpZnlfb29iKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9vYilcXG4te1xcbi1cXHRzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gc2stXFx1MDAzZXNrX3VzZXJfZGF0YTtcXG4tXFxuLVxcdGlmIChSRUFEX09OQ0UobmV0LVxcdTAwM2VsaXZlKSlcXG4tXFx0XFx0cXVldWVfd29yayhhZnNfd3EsIFxcdTAwMjZuZXQtXFx1MDAzZXJ4X29vYl93b3JrKTtcXG4tfVxcbmRpZmYgLS1naXQgYS9mcy9hZnMvc2VydmVyLmMgYi9mcy9hZnMvc2VydmVyLmNcXG5pbmRleCAwZmUxNjJlYTJhMzZkYi4uNzZhOWYyNWNlNDkwNTggMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL3NlcnZlci5jXFxuKysrIGIvZnMvYWZzL3NlcnZlci5jXFxuQEAgLTM5OCw3ICszOTgsNyBAQCBzdGF0aWMgdm9pZCBhZnNfc2VydmVyX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4gXFx0YWZzX3B1dF9lbmRwb2ludF9zdGF0ZShyY3VfYWNjZXNzX3BvaW50ZXIoc2VydmVyLVxcdTAwM2VlbmRwb2ludF9zdGF0ZSksXFxuIFxcdFxcdFxcdCAgICAgICBhZnNfZXN0YXRlX3RyYWNlX3B1dF9zZXJ2ZXIpO1xcbiBcXHRhZnNfcHV0X2NlbGwoc2VydmVyLVxcdTAwM2VjZWxsLCBhZnNfY2VsbF90cmFjZV9wdXRfc2VydmVyKTtcXG4tXFx0a2ZyZWUoc2VydmVyLVxcdTAwM2VjbV9yeGdrX2FwcGRhdGEuZGF0YSk7XFxuK1xcdGtleV9wdXQoc2VydmVyLVxcdTAwM2VjbV9yeGdrX2FwcGRhdGEpO1xcbiBcXHRrZnJlZShzZXJ2ZXIpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2tleXMvdXNlci10eXBlLmggYi9pbmNsdWRlL2tleXMvdXNlci10eXBlLmhcXG5pbmRleCAzODZjMzE0MzI3ODk5NS4uNzAwMmE5OTNhNDcyMjggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oXFxuKysrIGIvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oXFxuQEAgLTI2LDYgKzI2LDcgQEBcXG4gICovXFxuIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIHtcXG4gXFx0c3RydWN0IHJjdV9oZWFkXFx0cmN1O1xcdFxcdC8qIFJDVSBkZXN0cnVjdG9yICovXFxuK1xcdHJlZmNvdW50X3RcXHRyZWY7XFxuIFxcdHVuc2lnbmVkIHNob3J0XFx0ZGF0YWxlbjtcXHQvKiBsZW5ndGggb2YgdGhpcyBkYXRhICovXFxuIFxcdGNoYXJcXHRcXHRkYXRhW10gX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpOyAvKiBhY3R1YWwgZGF0YSAqL1xcbiB9O1xcbkBAIC0zNyw2ICszOCw3IEBAIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQ7XFxuIFxcbiBleHRlcm4gaW50IHVzZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XFxuIGV4dGVybiB2b2lkIHVzZXJfZnJlZV9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcXG4rdm9pZCBwdXRfdXNlcl9rZXlfcGF5bG9hZChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZCk7XFxuIGV4dGVybiBpbnQgdXNlcl91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcXG4gZXh0ZXJuIHZvaWQgdXNlcl9yZXZva2Uoc3RydWN0IGtleSAqa2V5KTtcXG4gZXh0ZXJuIHZvaWQgdXNlcl9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmggYi9pbmNsdWRlL25ldC9hZl9yeHJwYy5oXFxuaW5kZXggMGZiNGM0MWM5YmJmNTUuLjU2NTFhMTBiYTI2ZTYxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmhcXG4rKysgYi9pbmNsdWRlL25ldC9hZl9yeHJwYy5oXFxuQEAgLTU1LDYgKzU1LDcgQEAgdm9pZCByeHJwY19rZXJuZWxfc2V0X25vdGlmaWNhdGlvbnMoc3RydWN0IHNvY2tldCAqc29jayxcXG4gc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByeHJwY19wZWVyICpwZWVyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2V5ICprZXksXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrZXkgKmFwcF9kYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgczY0IHR4X3RvdGFsX2xlbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgdTMyIGhhcmRfdGltZW91dCxcXG5AQCAtOTEsMjQgKzkyLDcgQEAgYm9vbCByeHJwY19rZXJuZWxfY2hlY2tfbGlmZShjb25zdCBzdHJ1Y3Qgc29ja2V0ICosIGNvbnN0IHN0cnVjdCByeHJwY19jYWxsICopO1xcbiBcXG4gaW50IHJ4cnBjX3NvY2tfc2V0X21pbl9zZWN1cml0eV9sZXZlbChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCB2YWwpO1xcbiBpbnQgcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qga2V5ICopO1xcbi1pbnQgcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzZXQpO1xcbi1cXG4tZW51bSByeHJwY19vb2JfdHlwZSByeHJwY19rZXJuZWxfcXVlcnlfb29iKHN0cnVjdCBza19idWZmICpvb2IsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEpO1xcbi1zdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfa2VybmVsX2RlcXVldWVfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLVxcdFxcdFxcdFxcdFxcdCBlbnVtIHJ4cnBjX29vYl90eXBlICpfdHlwZSk7XFxuLXZvaWQgcnhycGNfa2VybmVsX2ZyZWVfb29iKHN0cnVjdCBza19idWZmICpvb2IpO1xcbi12b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxcbi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsXFxuLVxcdFxcdFxcdFxcdCAgdTE2ICpfc2VydmljZV9pZCwgdTggKl9zZWN1cml0eV9pbmRleCk7XFxuLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSxcXG4tXFx0XFx0XFx0XFx0ICBpbnQgZXJyb3IsIGVudW0gcnhycGNfYWJvcnRfcmVhc29uIHdoeSk7XFxuLWludCByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSk7XFxuLXUzMiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSk7XFxuLWludCByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSk7XFxuK3ZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2tleShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHU4ICpfc2VjdXJpdHlfaW5kZXgsIHUzMiAqX2tyYjVfZW5jdHlwZSk7XFxuIHU4IHJ4cnBjX2tlcm5lbF9xdWVyeV9jYWxsX3NlY3VyaXR5KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXHRcXHRcXHRcXHQgICAgdTE2ICpfc2VydmljZV9pZCwgdTMyICpfZW5jdHlwZSk7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXFxuaW5kZXggMWIzYzQ4YjU1OTFkZmQuLjNkOTYwODJlNmVhYzc2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcXG5AQCAtMTQ4LDYgKzE0OCw3IEBAIGVudW0geWZzX2NtX29wZXJhdGlvbiB7XFxuIFxcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdW51c2Vfc2xpc3RfaXNvcnQsXFx0XFxcIlVOVSBpc29ydFxcXCIpIFxcXFxcXG4gXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91cGRhdGUsXFx0XFx0XFxcIlVQREFURSAgIFxcXCIpIFxcXFxcXG4gXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfYnlfdXVpZCxcXHRcXFwiVVNFIHV1aWQgXFxcIikgXFxcXFxcbitcXHRFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9jYWxsLFxcdFxcdFxcXCJVU0UgY2FsbCBcXFwiKSBcXFxcXFxuIFxcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NtX2NhbGwsXFx0XFxcIlVTRSBjbS1jbFxcXCIpIFxcXFxcXG4gXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2V0X2NhcHMsXFx0XFxcIlVTRSBnY2Fwc1xcXCIpIFxcXFxcXG4gXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYixcXHRcXFwiVVNFIGd2dXBjXFxcIikgXFxcXFxcbkBAIC05MzcsOSArOTM4LDkgQEAgVFJBQ0VfRVZFTlQoYWZzX3NlbmRfZGF0YSxcXG4gXFx0ICAgICk7XFxuIFxcbiBUUkFDRV9FVkVOVChhZnNfc2VudF9kYXRhLFxcbi1cXHQgICAgVFBfUFJPVE8oc3RydWN0IGFmc19jYWxsICpjYWxsLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCByZXQpLFxcbitcXHQgICAgVFBfUFJPVE8odW5zaWduZWQgaW50IGNhbGxfZGVidWdfaWQsIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHJldCksXFxuIFxcbi1cXHQgICAgVFBfQVJHUyhjYWxsLCBtc2csIHJldCksXFxuK1xcdCAgICBUUF9BUkdTKGNhbGxfZGVidWdfaWQsIG1zZywgcmV0KSxcXG4gXFxuIFxcdCAgICBUUF9TVFJVQ1RfX2VudHJ5KFxcbiBcXHRcXHQgICAgX19maWVsZCh1bnNpZ25lZCBpbnQsXFx0XFx0Y2FsbClcXG5AQCAtOTQ5LDcgKzk1MCw3IEBAIFRSQUNFX0VWRU5UKGFmc19zZW50X2RhdGEsXFxuIFxcdFxcdFxcdCAgICAgKSxcXG4gXFxuIFxcdCAgICBUUF9mYXN0X2Fzc2lnbihcXG4tXFx0XFx0ICAgIF9fZW50cnktXFx1MDAzZWNhbGwgPSBjYWxsLVxcdTAwM2VkZWJ1Z19pZDtcXG4rXFx0XFx0ICAgIF9fZW50cnktXFx1MDAzZWNhbGwgPSBjYWxsX2RlYnVnX2lkO1xcbiBcXHRcXHQgICAgX19lbnRyeS1cXHUwMDNlcmV0ID0gcmV0O1xcbiBcXHRcXHQgICAgX19lbnRyeS1cXHUwMDNlb2Zmc2V0ID0gbXNnLVxcdTAwM2Vtc2dfaXRlci54YXJyYXlfc3RhcnQgKyBtc2ctXFx1MDAzZW1zZ19pdGVyLmlvdl9vZmZzZXQ7XFxuIFxcdFxcdCAgICBfX2VudHJ5LVxcdTAwM2Vjb3VudCA9IGlvdl9pdGVyX2NvdW50KFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcXG5pbmRleCA3MDRhMTBkZTY2NzAwNC4uOGZjNDE5MmUwMzkyYmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcXG5AQCAtMjYyLDcgKzI2Miw2IEBAXFxuIFxcdEVNKHJ4cnBjX2Nvbm5fZnJlZSxcXHRcXHRcXHRcXFwiRlJFRSAgICAgICAgXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jb25uX2dldF9hY3RpdmF0ZV9jYWxsLFxcdFxcXCJHRVQgYWN0LWNhbGxcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2Nvbm5fZ2V0X2NhbGxfaW5wdXQsXFx0XFx0XFxcIkdFVCBpbnAtY2FsbFxcXCIpIFxcXFxcXG4tXFx0RU0ocnhycGNfY29ubl9nZXRfY2hhbGxlbmdlX2lucHV0LFxcdFxcXCJHRVQgaW5wLWNoYWxcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2Nvbm5fZ2V0X2Nvbm5faW5wdXQsXFx0XFx0XFxcIkdFVCBpbnAtY29ublxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY29ubl9nZXRfaWRsZSxcXHRcXHRcXHRcXFwiR0VUIGlkbGUgICAgXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jb25uX2dldF9wb2tlX2Fib3J0LFxcdFxcdFxcXCJHRVQgcGstYWJvcnRcXFwiKSBcXFxcXFxuQEAgLTI3NCw3ICsyNzMsNiBAQFxcbiBcXHRFTShyeHJwY19jb25uX25ld19zZXJ2aWNlLFxcdFxcdFxcXCJORVcgc2VydmljZSBcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2Nvbm5fcHV0X2NhbGwsXFx0XFx0XFx0XFxcIlBVVCBjYWxsICAgIFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY29ubl9wdXRfY2FsbF9pbnB1dCxcXHRcXHRcXFwiUFVUIGlucC1jYWxsXFxcIikgXFxcXFxcbi1cXHRFTShyeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQsXFx0XFxcIlBVVCBpbnAtY2hhbFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY29ubl9wdXRfY29ubl9pbnB1dCxcXHRcXHRcXFwiUFVUIGlucC1jb25uXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jb25uX3B1dF9kaXNjYXJkX2lkbGUsXFx0XFx0XFxcIlBVVCBkaXNjLWlkbFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY29ubl9wdXRfbG9jYWxfZGVhZCxcXHRcXHRcXFwiUFVUIGxvYy1kZWFkXFxcIikgXFxcXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oXFxuaW5kZXggZDk3MzVhYmQ0Yzc5MTAuLjdkNmE1MDE1MTkzMTEyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmhcXG5AQCAtNTgsMTEgKzU4LDcgQEAgZW51bSByeHJwY19jbXNnX3R5cGUge1xcbiBcXHRSWFJQQ19UWF9MRU5HVEhcXHRcXHQ9IDEyLFxcdC8qIC1zLTogVG90YWwgbGVuZ3RoIG9mIFR4IGRhdGEgKi9cXG4gXFx0UlhSUENfU0VUX0NBTExfVElNRU9VVFxcdD0gMTMsXFx0LyogLXMtOiBTZXQgb25lIG9yIG1vcmUgY2FsbCB0aW1lb3V0cyAqL1xcbiBcXHRSWFJQQ19DSEFSR0VfQUNDRVBUXFx0PSAxNCxcXHQvKiBTcy06IENoYXJnZSB0aGUgYWNjZXB0IHBvb2wgd2l0aCBhIHVzZXIgY2FsbCBJRCAqL1xcbi1cXHRSWFJQQ19PT0JfSURcXHRcXHQ9IDE1LFxcdC8qIC1zcjogT09CIG1lc3NhZ2UgSUQgKi9cXG4tXFx0UlhSUENfQ0hBTExFTkdFRFxcdD0gMTYsXFx0LyogQy1yOiBJbmZvIG9uIGEgcmVjZWl2ZWQgQ0hBTExFTkdFICovXFxuLVxcdFJYUlBDX1JFU1BPTkRcXHRcXHQ9IDE3LFxcdC8qIENzLTogUmVzcG9uZCB0byBhIGNoYWxsZW5nZSAqL1xcbi1cXHRSWFJQQ19SRVNQT05ERURcXHRcXHQ9IDE4LFxcdC8qIFMtcjogRGF0YSByZWNlaXZlZCBpbiBSRVNQT05TRSAqL1xcbi1cXHRSWFJQQ19SRVNQX1JYR0tfQVBQREFUQVxcdD0gMTksXFx0LyogQ3MtOiBSRVNQT05TRTogUnhHSyBhcHAgZGF0YSB0byBpbmNsdWRlICovXFxuK1xcdFJYUlBDX1JFU1BPTlNFX0FQUERBVEFcXHQ9IDIwLFxcdC8qIENzLTogVXNlciBrZXkgaG9sZGluZyBhcHAgZGF0YSBmb3IgUkVTUE9OU0UgKi9cXG4gXFx0UlhSUENfX1NVUFBPUlRFRFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xcbmluZGV4IGMzYzhjMzI0MGVmOTQ2Li5hYTNjMDU4ZjQwOTU1OSAxMDA2NDRcXG4tLS0gYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xcbisrKyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXFxuQEAgLTIwOCw2ICsyMDgsNyBAQCBkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcXG4gXFx0XFx0a2xlYXZlKFxcXCIgPSAtRU5PTUVNXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2dXBheWxvYWQtXFx1MDAzZXJlZiwgMSk7XFxuIFxcbiBcXHR1cGF5bG9hZC1cXHUwMDNlZGF0YWxlbiA9IHJlc3VsdF9sZW47XFxuIFxcdG1lbWNweSh1cGF5bG9hZC1cXHUwMDNlZGF0YSwgZGF0YSwgcmVzdWx0X2xlbik7XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9NYWtlZmlsZSBiL25ldC9yeHJwYy9NYWtlZmlsZVxcbmluZGV4IGY5OTRmOWYzMGEyOWQ0Li5mN2E1ZTBhNTkyZWUxMyAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvTWFrZWZpbGVcXG4rKysgYi9uZXQvcnhycGMvTWFrZWZpbGVcXG5AQCAtMjQsNyArMjQsNiBAQCByeHJwYy15IDo9IFxcXFxcXG4gXFx0bG9jYWxfb2JqZWN0Lm8gXFxcXFxcbiBcXHRtaXNjLm8gXFxcXFxcbiBcXHRuZXRfbnMubyBcXFxcXFxuLVxcdG9vYi5vIFxcXFxcXG4gXFx0b3V0cHV0Lm8gXFxcXFxcbiBcXHRwZWVyX2V2ZW50Lm8gXFxcXFxcbiBcXHRwZWVyX29iamVjdC5vIFxcXFxcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FmX3J4cnBjLmMgYi9uZXQvcnhycGMvYWZfcnhycGMuY1xcbmluZGV4IDlhYjBmMjJjODgxZWM1Li45ZDVjZTFjN2FkMGQyMiAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvYWZfcnhycGMuY1xcbisrKyBiL25ldC9yeHJwYy9hZl9yeHJwYy5jXFxuQEAgLTMxOCw2ICszMTgsNyBAQCBFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9wdXRfcGVlcik7XFxuICAqIEBzb2NrOiBUaGUgc29ja2V0IG9uIHdoaWNoIHRvIG1ha2UgdGhlIGNhbGxcXG4gICogQHBlZXI6IFRoZSBwZWVyIHRvIGNvbnRhY3RcXG4gICogQGtleTogVGhlIHNlY3VyaXR5IGNvbnRleHQgdG8gdXNlIChkZWZhdWx0cyB0byBzb2NrZXQgc2V0dGluZylcXG4rICogQGFwcF9kYXRhOiBUaGUgc2VjdXJpdHkgcmVzcG9uc2UgYXBwbGljYXRpb24gZGF0YSAob3IgTlVMTClcXG4gICogQHVzZXJfY2FsbF9JRDogVGhlIElEIHRvIHVzZVxcbiAgKiBAdHhfdG90YWxfbGVuOiBUb3RhbCBsZW5ndGggb2YgZGF0YSB0byB0cmFuc21pdCBkdXJpbmcgdGhlIGNhbGwgKG9yIC0xKVxcbiAgKiBAaGFyZF90aW1lb3V0OiBUaGUgbWF4aW11bSBsaWZlc3BhbiBvZiB0aGUgY2FsbCBpbiBzZWNcXG5AQCAtMzQwLDYgKzM0MSw3IEBAIEVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3B1dF9wZWVyKTtcXG4gc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByeHJwY19wZWVyICpwZWVyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2V5ICprZXksXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrZXkgKmFwcF9kYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgczY0IHR4X3RvdGFsX2xlbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgdTMyIGhhcmRfdGltZW91dCxcXG5AQCAtMzY4LDYgKzM3MCw3IEBAIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbiBcXHRcXHRrZXkgPSBOVUxMOyAvKiBhIG5vLXNlY3VyaXR5IGtleSAqL1xcbiBcXG4gXFx0bWVtc2V0KFxcdTAwMjZwLCAwLCBzaXplb2YocCkpO1xcbitcXHRwLmFwcF9kYXRhXFx0XFx0PSBhcHBfZGF0YTtcXG4gXFx0cC51c2VyX2NhbGxfSURcXHRcXHQ9IHVzZXJfY2FsbF9JRDtcXG4gXFx0cC50eF90b3RhbF9sZW5cXHRcXHQ9IHR4X3RvdGFsX2xlbjtcXG4gXFx0cC5pbnRlcnJ1cHRpYmlsaXR5XFx0PSBpbnRlcnJ1cHRpYmlsaXR5O1xcbkBAIC01OTUsMTAgKzU5OCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuKVxcbiBcXHRcXHRmYWxsdGhyb3VnaDtcXG4gXFx0Y2FzZSBSWFJQQ19TRVJWRVJfQk9VTkQ6XFxuIFxcdGNhc2UgUlhSUENfU0VSVkVSX0xJU1RFTklORzpcXG4tXFx0XFx0aWYgKG0tXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19PT0IpXFxuLVxcdFxcdFxcdHJldCA9IHJ4cnBjX3NlbmRtc2dfb29iKHJ4LCBtLCBsZW4pO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHJldCA9IHJ4cnBjX2RvX3NlbmRtc2cocngsIG0sIGxlbik7XFxuK1xcdFxcdHJldCA9IHJ4cnBjX2RvX3NlbmRtc2cocngsIG0sIGxlbik7XFxuIFxcdFxcdC8qIFRoZSBzb2NrZXQgaGFzIGJlZW4gdW5sb2NrZWQgKi9cXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdGRlZmF1bHQ6XFxuQEAgLTYzMyw3ICs2MzMsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gXFx0XFx0XFx0ICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuIHtcXG4gXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cXHUwMDNlc2spO1xcbi1cXHR1bnNpZ25lZCBpbnQgbWluX3NlY19sZXZlbCwgdmFsO1xcbitcXHR1bnNpZ25lZCBpbnQgbWluX3NlY19sZXZlbDtcXG4gXFx0dTE2IHNlcnZpY2VfdXBncmFkZVsyXTtcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTcxMCwyMyArNzEwLDcgQEAgc3RhdGljIGludCByeHJwY19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcbiBcXHRcXHRjYXNlIFJYUlBDX01BTkFHRV9SRVNQT05TRTpcXG4gXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0aWYgKG9wdGxlbiAhPSBzaXplb2YodW5zaWduZWQgaW50KSlcXG4tXFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4tXFx0XFx0XFx0cmV0ID0gLUVJU0NPTk47XFxuLVxcdFxcdFxcdGlmIChyeC1cXHUwMDNlc2suc2tfc3RhdGUgIT0gUlhSUENfVU5CT1VORClcXG4tXFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4tXFx0XFx0XFx0cmV0ID0gY29weV9zYWZlX2Zyb21fc29ja3B0cihcXHUwMDI2dmFsLCBzaXplb2YodmFsKSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBvcHR2YWwsIG9wdGxlbik7XFxuLVxcdFxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuLVxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdGlmICh2YWwgXFx1MDAzZSAxKVxcbi1cXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbi1cXHRcXHRcXHRpZiAodmFsKVxcbi1cXHRcXHRcXHRcXHRzZXRfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcXHUwMDI2cngtXFx1MDAzZWZsYWdzKTtcXG4tXFx0XFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRcXHRjbGVhcl9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFxcdTAwMjZyeC1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHRcXHRnb3RvIHN1Y2Nlc3M7XFxuK1xcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcbiBcXHRcXHRkZWZhdWx0OlxcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtODM1LDggKzgxOSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbiBcXHRyeC1cXHUwMDNlY2FsbHMgPSBSQl9ST09UO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnJ4LVxcdTAwM2VpbmNvbWluZ19sb2NrKTtcXG4tXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfb29icSk7XFxuLVxcdHJ4LVxcdTAwM2VwZW5kaW5nX29vYnEgPSBSQl9ST09UO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cngtXFx1MDAzZXNvY2tfY2FsbHMpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cngtXFx1MDAzZXRvX2JlX2FjY2VwdGVkKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX3EpO1xcbkBAIC04ODQsMjMgKzg2Niw2IEBAIHN0YXRpYyBpbnQgcnhycGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGZsYWdzKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBQdXJnZSB0aGUgb3V0LW9mLWJhbmQgcXVldWUuXFxuLSAqL1xcbi1zdGF0aWMgdm9pZCByeHJwY19wdXJnZV9vb2JfcXVldWUoc3RydWN0IHNvY2sgKnNrKVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNrKTtcXG4tXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tXFxuLVxcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpKSlcXG4tXFx0XFx0cnhycGNfa2VybmVsX2ZyZWVfb29iKHNrYik7XFxuLVxcdHdoaWxlICghUkJfRU1QVFlfUk9PVChcXHUwMDI2cngtXFx1MDAzZXBlbmRpbmdfb29icSkpIHtcXG4tXFx0XFx0c2tiID0gcmJfZW50cnkocngtXFx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiwgcmJub2RlKTtcXG4tXFx0XFx0cmJfZXJhc2UoXFx1MDAyNnNrYi1cXHUwMDNlcmJub2RlLCBcXHUwMDI2cngtXFx1MDAzZXBlbmRpbmdfb29icSk7XFxuLVxcdFxcdHJ4cnBjX2tlcm5lbF9mcmVlX29vYihza2IpO1xcbi1cXHR9XFxuLX1cXG4tXFxuIC8qXFxuICAqIFJ4UlBDIHNvY2tldCBkZXN0cnVjdG9yXFxuICAqL1xcbkBAIC05MDgsNyArODczLDYgQEAgc3RhdGljIHZvaWQgcnhycGNfc29ja19kZXN0cnVjdG9yKHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRfZW50ZXIoXFxcIiVwXFxcIiwgc2spO1xcbiBcXG4tXFx0cnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTtcXG4gXFx0cnhycGNfcHVyZ2VfcXVldWUoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG4gXFxuIFxcdFdBUk5fT04ocmVmY291bnRfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3dtZW1fYWxsb2MpKTtcXG5AQCAtOTYxLDcgKzkyNSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVsZWFzZV9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4gXFx0cnhycGNfZGlzY2FyZF9wcmVhbGxvYyhyeCk7XFxuIFxcdHJ4cnBjX3JlbGVhc2VfY2FsbHNfb25fc29ja2V0KHJ4KTtcXG4gXFx0Zmx1c2hfd29ya3F1ZXVlKHJ4cnBjX3dvcmtxdWV1ZSk7XFxuLVxcdHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzayk7XFxuIFxcdHJ4cnBjX3B1cmdlX3F1ZXVlKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XFxuIFxcbiBcXHRyeHJwY191bnVzZV9sb2NhbChyeC1cXHUwMDNlbG9jYWwsIHJ4cnBjX2xvY2FsX3VudXNlX3JlbGVhc2Vfc29jayk7XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oIGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcXG5pbmRleCBjZTk0NmIwYTAzZTJiMy4uMTAxYWM3NTQ0NzU4NGQgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcXG4rKysgYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxcbkBAIC0xNzEsOSArMTcxLDYgQEAgc3RydWN0IHJ4cnBjX3NvY2sge1xcbiBcXHRjb25zdCBzdHJ1Y3QgcnhycGNfa2VybmVsX29wcyAqYXBwX29wcztcXHQvKiBUYWJsZSBvZiBrZXJuZWwgYXBwIG5vdGlmaWNhdGlvbiBmdW5jcyAqL1xcbiBcXHRzdHJ1Y3QgcnhycGNfbG9jYWxcXHQqbG9jYWw7XFx0XFx0LyogbG9jYWwgZW5kcG9pbnQgKi9cXG4gXFx0c3RydWN0IHJ4cnBjX2JhY2tsb2dcXHQqYmFja2xvZztcXHQvKiBQcmVhbGxvY2F0aW9uIGZvciBzZXJ2aWNlcyAqL1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXFx0cmVjdm1zZ19vb2JxO1xcdC8qIE9PQiBtZXNzYWdlcyBmb3IgcmVjdm1zZyB0byBwaWNrIHVwICovXFxuLVxcdHN0cnVjdCByYl9yb290XFx0XFx0cGVuZGluZ19vb2JxO1xcdC8qIE9PQiBtZXNzYWdlcyBhd2FpdGluZyB1c2Vyc3BhY2UgdG8gcmVzcG9uZCB0byAqL1xcbi1cXHR1NjRcXHRcXHRcXHRvb2JfaWRfY291bnRlcjtcXHQvKiBPT0IgbWVzc2FnZSBJRCBjb3VudGVyICovXFxuIFxcdHNwaW5sb2NrX3RcXHRcXHRpbmNvbWluZ19sb2NrO1xcdC8qIEluY29taW5nIGNhbGwgdnMgc2VydmljZSBzaHV0ZG93biBsb2NrICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRzb2NrX2NhbGxzO1xcdC8qIExpc3Qgb2YgY2FsbHMgb3duZWQgYnkgdGhpcyBzb2NrZXQgKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdHRvX2JlX2FjY2VwdGVkO1xcdC8qIGNhbGxzIGF3YWl0aW5nIGFjY2VwdGFuY2UgKi9cXG5AQCAtMTg0LDcgKzE4MSw2IEBAIHN0cnVjdCByeHJwY19zb2NrIHtcXG4gXFx0c3RydWN0IHJiX3Jvb3RcXHRcXHRjYWxscztcXHRcXHQvKiBVc2VyIElEIC1cXHUwMDNlIGNhbGwgbWFwcGluZyAqL1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZmxhZ3M7XFxuICNkZWZpbmUgUlhSUENfU09DS19DT05ORUNURURcXHRcXHQwXFx0LyogY29ubmVjdF9zcnggaXMgc2V0ICovXFxuLSNkZWZpbmUgUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0VcXHQxXFx0LyogVXNlciB3YW50cyB0byBtYW5hZ2UgUkVTUE9OU0UgcGFja2V0cyAqL1xcbiBcXHRyd2xvY2tfdFxcdFxcdGNhbGxfbG9jaztcXHQvKiBsb2NrIGZvciBjYWxscyAqL1xcbiBcXHR1MzJcXHRcXHRcXHRtaW5fc2VjX2xldmVsO1xcdC8qIG1pbmltdW0gc2VjdXJpdHkgbGV2ZWwgKi9cXG4gI2RlZmluZSBSWFJQQ19TRUNVUklUWV9NQVhcXHRSWFJQQ19TRUNVUklUWV9FTkNSWVBUXFxuQEAgLTI0MSw3ICsyMzcsNiBAQCBzdHJ1Y3QgcnhycGNfc2tiX3ByaXYge1xcbiBcXHRcXHRcXHR1OFxcdFxcdHJlYXNvbjtcXHRcXHQvKiBSZWFzb24gZm9yIGFjayAqL1xcbiBcXHRcXHR9IGFjaztcXG4gXFx0XFx0c3RydWN0IHtcXG4tXFx0XFx0XFx0c3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm47XFx0LyogQ29ubmVjdGlvbiByZWZlcnJlZCB0byAqL1xcbiBcXHRcXHRcXHR1bmlvbiB7XFxuIFxcdFxcdFxcdFxcdHUzMiByeGthZF9ub25jZTtcXG4gXFx0XFx0XFx0fTtcXG5AQCAtMzEwLDEzICszMDUsNiBAQCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkge1xcbiBcXHRib29sICgqdmFsaWRhdGVfY2hhbGxlbmdlKShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIFxcbi1cXHQvKiBGaWxsIG91dCB0aGUgY21zZyBmb3IgcmVjdm1zZygpIHRvIHBhc3Mgb24gYSBjaGFsbGVuZ2UgdG8gdXNlcnNwYWNlLlxcbi1cXHQgKiBUaGUgc2VjdXJpdHkgY2xhc3MgZ2V0cyB0byBhZGQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cXG4tXFx0ICovXFxuLVxcdGludCAoKmNoYWxsZW5nZV90b19yZWN2bXNnKShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4tXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXNnaGRyICptc2cpO1xcbi1cXG4gXFx0LyogUGFyc2Ugc2VuZG1zZygpIGNvbnRyb2wgbWVzc2FnZSBhbmQgcmVzcG9uZCB0byBjaGFsbGVuZ2UuICovXFxuIFxcdGludCAoKnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UpKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXNnaGRyICptc2cpO1xcbkBAIC01MTYsNiArNTA0LDcgQEAgc3RydWN0IHJ4cnBjX2J1bmRsZSB7XFxuIFxcdHN0cnVjdCByeHJwY19sb2NhbFxcdCpsb2NhbDtcXHRcXHQvKiBSZXByZXNlbnRhdGlvbiBvZiBsb2NhbCBlbmRwb2ludCAqL1xcbiBcXHRzdHJ1Y3QgcnhycGNfcGVlclxcdCpwZWVyO1xcdFxcdC8qIFJlbW90ZSBlbmRwb2ludCAqL1xcbiBcXHRzdHJ1Y3Qga2V5XFx0XFx0KmtleTtcXHRcXHQvKiBTZWN1cml0eSBkZXRhaWxzICovXFxuK1xcdHN0cnVjdCBrZXlcXHRcXHQqYXBwX2RhdGE7XFx0LyogU2VjdXJpdHkgcmVzcG9uc2UgYXBwIGRhdGEgKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdHByb2NfbGluaztcXHQvKiBMaW5rIGluIG5ldC1cXHUwMDNlYnVuZGxlX3Byb2NfbGlzdCAqL1xcbiBcXHRjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5O1xcdC8qIGFwcGxpZWQgc2VjdXJpdHkgbW9kdWxlICovXFxuIFxcdHJlZmNvdW50X3RcXHRcXHRyZWY7XFxuQEAgLTcxOSw2ICs3MDgsNyBAQCBzdHJ1Y3QgcnhycGNfY2FsbCB7XFxuIFxcdHN0cnVjdCByeHJwY19zb2NrIF9fcmN1XFx0KnNvY2tldDtcXHQvKiBzb2NrZXQgcmVzcG9uc2libGUgKi9cXG4gXFx0c3RydWN0IHJ4cnBjX25ldFxcdCpyeG5ldDtcXHRcXHQvKiBOZXR3b3JrIG5hbWVzcGFjZSB0byB3aGljaCBjYWxsIGJlbG9uZ3MgKi9cXG4gXFx0c3RydWN0IGtleVxcdFxcdCprZXk7XFx0XFx0LyogU2VjdXJpdHkgZGV0YWlscyAqL1xcbitcXHRzdHJ1Y3Qga2V5XFx0XFx0KmFwcF9kYXRhO1xcdC8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovXFxuIFxcdGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSAqc2VjdXJpdHk7XFx0LyogYXBwbGllZCBzZWN1cml0eSBtb2R1bGUgKi9cXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0dXNlcl9tdXRleDtcXHQvKiBVc2VyIGFjY2VzcyBtdXRleCAqL1xcbiBcXHRzdHJ1Y3Qgc29ja2FkZHJfcnhycGNcXHRkZXN0X3NyeDtcXHQvKiBEZXN0aW5hdGlvbiBhZGRyZXNzICovXFxuQEAgLTkxMyw2ICs5MDMsNyBAQCBlbnVtIHJ4cnBjX2NvbW1hbmQge1xcbiB9O1xcbiBcXG4gc3RydWN0IHJ4cnBjX2NhbGxfcGFyYW1zIHtcXG4rXFx0c3RydWN0IGtleVxcdFxcdCphcHBfZGF0YTtcXHQvKiBTZWN1cml0eSByZXNwb25zZSBhcHAgZGF0YSAqL1xcbiBcXHRzNjRcXHRcXHRcXHR0eF90b3RhbF9sZW47XFx0LyogVG90YWwgVHggZGF0YSBsZW5ndGggKGlmIHNlbmQgZGF0YSkgKi9cXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHVzZXJfY2FsbF9JRDtcXHQvKiBVc2VyJ3MgY2FsbCBJRCAqL1xcbiBcXHRzdHJ1Y3Qge1xcbkBAIC0xMzc1LDEzICsxMzY2LDYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcnhycGNfbmV0ICpyeHJwY19uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRyZXR1cm4gbmV0X2dlbmVyaWMobmV0LCByeHJwY19uZXRfaWQpO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBvb2IuY1xcbi0gKi9cXG4tYm9vbCByeHJwY19ub3RpZnlfc29ja2V0X29vYihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLXZvaWQgcnhycGNfYWRkX3BlbmRpbmdfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLWludCByeHJwY19zZW5kbXNnX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7XFxuLVxcbiAvKlxcbiAgKiBvdXRwdXQuY1xcbiAgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmMgYi9uZXQvcnhycGMvY2FsbF9vYmplY3QuY1xcbmluZGV4IDgxN2VkOWFjYjkxZTYxLi4yZGYzZDAxOTBhODkxOCAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvY2FsbF9vYmplY3QuY1xcbisrKyBiL25ldC9yeHJwYy9jYWxsX29iamVjdC5jXFxuQEAgLTE5OCw3ICsxOTgsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2FsbG9jX2NsaWVudF9jYWxsKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4gXFx0a3RpbWVfdCBub3c7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRfZW50ZXIoXFxcIlxcXCIpO1xcbitcXHRfZW50ZXIoXFxcIiVwXFxcIiwgcC1cXHUwMDNlYXBwX2RhdGEpO1xcbiBcXG4gXFx0Y2FsbCA9IHJ4cnBjX2FsbG9jX2NhbGwocngsIGdmcCwgZGVidWdfaWQpO1xcbiBcXHRpZiAoIWNhbGwpXFxuQEAgLTIxMSw2ICsyMTEsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2FsbG9jX2NsaWVudF9jYWxsKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4gXFx0Y2FsbC1cXHUwMDNlaW50ZXJydXB0aWJpbGl0eVxcdD0gcC1cXHUwMDNlaW50ZXJydXB0aWJpbGl0eTtcXG4gXFx0Y2FsbC1cXHUwMDNldHhfdG90YWxfbGVuXFx0PSBwLVxcdTAwM2V0eF90b3RhbF9sZW47XFxuIFxcdGNhbGwtXFx1MDAzZWtleVxcdFxcdD0ga2V5X2dldChjcC1cXHUwMDNla2V5KTtcXG4rXFx0Y2FsbC1cXHUwMDNlYXBwX2RhdGFcXHRcXHQ9IGtleV9nZXQocC1cXHUwMDNlYXBwX2RhdGEpO1xcbiBcXHRjYWxsLVxcdTAwM2VwZWVyXFx0XFx0PSByeHJwY19nZXRfcGVlcihjcC1cXHUwMDNlcGVlciwgcnhycGNfcGVlcl9nZXRfY2FsbCk7XFxuIFxcdGNhbGwtXFx1MDAzZWxvY2FsXFx0XFx0PSByeHJwY19nZXRfbG9jYWwoY3AtXFx1MDAzZWxvY2FsLCByeHJwY19sb2NhbF9nZXRfY2FsbCk7XFxuIFxcdGNhbGwtXFx1MDAzZXNlY3VyaXR5X2xldmVsXFx0PSBjcC1cXHUwMDNlc2VjdXJpdHlfbGV2ZWw7XFxuQEAgLTY5Nyw2ICs2OTgsNyBAQCBzdGF0aWMgdm9pZCByeHJwY19kZXN0cm95X2NhbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRyeHJwY19wdXRfcGVlcihjYWxsLVxcdTAwM2VwZWVyLCByeHJwY19wZWVyX3B1dF9jYWxsKTtcXG4gXFx0cnhycGNfcHV0X2xvY2FsKGNhbGwtXFx1MDAzZWxvY2FsLCByeHJwY19sb2NhbF9wdXRfY2FsbCk7XFxuIFxcdGtleV9wdXQoY2FsbC1cXHUwMDNla2V5KTtcXG4rXFx0a2V5X3B1dChjYWxsLVxcdTAwM2VhcHBfZGF0YSk7XFxuIFxcdGNhbGxfcmN1KFxcdTAwMjZjYWxsLVxcdTAwM2VyY3UsIHJ4cnBjX3JjdV9mcmVlX2NhbGwpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY29ubl9jbGllbnQuYyBiL25ldC9yeHJwYy9jb25uX2NsaWVudC5jXFxuaW5kZXggNDg1MTlmMGRlMTg1MzkuLjVjYmZhN2IyMjNlMDExIDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9jb25uX2NsaWVudC5jXFxuKysrIGIvbmV0L3J4cnBjL2Nvbm5fY2xpZW50LmNcXG5AQCAtODEsNiArODEsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2J1bmRsZSAqcnhycGNfYWxsb2NfYnVuZGxlKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXHRcXHRidW5kbGUtXFx1MDAzZWxvY2FsXFx0XFx0PSBjYWxsLVxcdTAwM2Vsb2NhbDtcXG4gXFx0XFx0YnVuZGxlLVxcdTAwM2VwZWVyXFx0XFx0PSByeHJwY19nZXRfcGVlcihjYWxsLVxcdTAwM2VwZWVyLCByeHJwY19wZWVyX2dldF9idW5kbGUpO1xcbiBcXHRcXHRidW5kbGUtXFx1MDAzZWtleVxcdFxcdD0ga2V5X2dldChjYWxsLVxcdTAwM2VrZXkpO1xcbitcXHRcXHRidW5kbGUtXFx1MDAzZWFwcF9kYXRhXFx0PSBrZXlfZ2V0KGNhbGwtXFx1MDAzZWFwcF9kYXRhKTtcXG4gXFx0XFx0YnVuZGxlLVxcdTAwM2VzZWN1cml0eVxcdD0gY2FsbC1cXHUwMDNlc2VjdXJpdHk7XFxuIFxcdFxcdGJ1bmRsZS1cXHUwMDNlZXhjbHVzaXZlXFx0PSB0ZXN0X2JpdChSWFJQQ19DQUxMX0VYQ0xVU0lWRSwgXFx1MDAyNmNhbGwtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0YnVuZGxlLVxcdTAwM2V1cGdyYWRlXFx0XFx0PSB0ZXN0X2JpdChSWFJQQ19DQUxMX1VQR1JBREUsIFxcdTAwMjZjYWxsLVxcdTAwM2VmbGFncyk7XFxuQEAgLTExOCw2ICsxMTksNyBAQCBzdGF0aWMgdm9pZCByeHJwY19mcmVlX2J1bmRsZShzdHJ1Y3QgcnhycGNfYnVuZGxlICpidW5kbGUpXFxuIFxcdHdyaXRlX3VubG9jayhcXHUwMDI2YnVuZGxlLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhuZXQtXFx1MDAzZWNvbm5fbG9jayk7XFxuIFxcdHJ4cnBjX3B1dF9wZWVyKGJ1bmRsZS1cXHUwMDNlcGVlciwgcnhycGNfcGVlcl9wdXRfYnVuZGxlKTtcXG4gXFx0a2V5X3B1dChidW5kbGUtXFx1MDAzZWtleSk7XFxuK1xcdGtleV9wdXQoYnVuZGxlLVxcdTAwM2VhcHBfZGF0YSk7XFxuIFxcdGtmcmVlKGJ1bmRsZSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX2V2ZW50LmMgYi9uZXQvcnhycGMvY29ubl9ldmVudC5jXFxuaW5kZXggNjExYzc5MGJjNmQwY2UuLjkxNDZiOWQ0YzJhYzUwIDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9jb25uX2V2ZW50LmNcXG4rKysgYi9uZXQvcnhycGMvY29ubl9ldmVudC5jXFxuQEAgLTI3OSwxMCArMjc5LDcgQEAgc3RhdGljIGludCByeHJwY19wcm9jZXNzX2V2ZW50KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXG4gXFx0c3dpdGNoIChzcC1cXHUwMDNlaGRyLnR5cGUpIHtcXG4gXFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9DSEFMTEVOR0U6XFxuLVxcdFxcdHJldCA9IGNvbm4tXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VyZXNwb25kX3RvX2NoYWxsZW5nZShjb25uLCBza2IpO1xcbi1cXHRcXHRzcC1cXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XFxuLVxcdFxcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldHVybiBjb25uLVxcdTAwM2VzZWN1cml0eS1cXHUwMDNlcmVzcG9uZF90b19jaGFsbGVuZ2UoY29ubiwgc2tiKTtcXG4gXFxuIFxcdGNhc2UgUlhSUENfUEFDS0VUX1RZUEVfUkVTUE9OU0U6XFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNvbm4tXFx1MDAzZXN0YXRlX2xvY2spO1xcbkBAIC00MjUsNjYgKzQyMiw2IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuIFxcdHJ4cnBjX3F1ZXVlX2Nvbm4oY29ubiwgcnhycGNfY29ubl9xdWV1ZV9yeF93b3JrKTtcXG4gfVxcbiBcXG4tLypcXG4tICogUG9zdCBhIENIQUxMRU5HRSBwYWNrZXQgdG8gdGhlIHNvY2tldCBvZiBvbmUgb2YgYSBjb25uZWN0aW9uJ3MgY2FsbHMgc28gdGhhdFxcbi0gKiBpdCBjYW4gZ2V0IGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgcGFja2V0LCBwb3NzaWJseSBxdWVyeWluZ1xcbi0gKiB1c2Vyc3BhY2UuXFxuLSAqL1xcbi1zdGF0aWMgYm9vbCByeHJwY19wb3N0X2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpO1xcbi1cXHRzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCA9IE5VTEw7XFxuLVxcdHN0cnVjdCByeHJwY19zb2NrICpyeDtcXG4tXFx0Ym9vbCByZXNwb25kID0gZmFsc2UsIHF1ZXVlZCA9IGZhbHNlO1xcbi1cXG4tXFx0c3AtXFx1MDAzZWNoYWxsLmNvbm4gPVxcbi1cXHRcXHRyeHJwY19nZXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX2dldF9jaGFsbGVuZ2VfaW5wdXQpO1xcbi1cXG4tXFx0aWYgKCFjb25uLVxcdTAwM2VzZWN1cml0eS1cXHUwMDNlY2hhbGxlbmdlX3RvX3JlY3Ztc2cpIHtcXG4tXFx0XFx0cnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihjb25uLCBza2IpO1xcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0fVxcbi1cXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXG4tXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGNvbm4tXFx1MDAzZWNoYW5uZWxzKTsgaSsrKSB7XFxuLVxcdFxcdGlmIChjb25uLVxcdTAwM2VjaGFubmVsc1tpXS5jYWxsKSB7XFxuLVxcdFxcdFxcdGNhbGwgPSBjb25uLVxcdTAwM2VjaGFubmVsc1tpXS5jYWxsO1xcbi1cXHRcXHRcXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVxcdTAwM2Vzb2NrZXQpO1xcbi1cXHRcXHRcXHRpZiAoIXJ4KSB7XFxuLVxcdFxcdFxcdFxcdGNhbGwgPSBOVUxMO1xcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0fVxcbi1cXG4tXFx0XFx0XFx0cmVzcG9uZCA9IHRydWU7XFxuLVxcdFxcdFxcdGlmICh0ZXN0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXFx1MDAyNnJ4LVxcdTAwM2VmbGFncykpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRjYWxsID0gTlVMTDtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIXJlc3BvbmQpIHtcXG4tXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdFxcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XFxuLVxcdFxcdHNwLVxcdTAwM2VjaGFsbC5jb25uID0gTlVMTDtcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoY2FsbClcXG4tXFx0XFx0cXVldWVkID0gcnhycGNfbm90aWZ5X3NvY2tldF9vb2IoY2FsbCwgc2tiKTtcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdGlmIChjYWxsIFxcdTAwMjZcXHUwMDI2ICFxdWV1ZWQpIHtcXG4tXFx0XFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTtcXG4tXFx0XFx0c3AtXFx1MDAzZWNoYWxsLmNvbm4gPSBOVUxMO1xcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghY2FsbClcXG4tXFx0XFx0cnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihjb25uLCBza2IpO1xcbi1cXHRyZXR1cm4gdHJ1ZTtcXG4tfVxcbi1cXG4gLypcXG4gICogSW5wdXQgYSBjb25uZWN0aW9uLWxldmVsIHBhY2tldC5cXG4gICovXFxuQEAgLTUxMyw3ICs0NTAsOCBAQCBib29sIHJ4cnBjX2lucHV0X2Nvbm5fcGFja2V0KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHR9XFxuIFxcdFxcdGlmICghY29ubi1cXHUwMDNlc2VjdXJpdHktXFx1MDAzZXZhbGlkYXRlX2NoYWxsZW5nZShjb25uLCBza2IpKVxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdFxcdHJldHVybiByeHJwY19wb3N0X2NoYWxsZW5nZShjb25uLCBza2IpO1xcbitcXHRcXHRyeHJwY19wb3N0X3BhY2tldF90b19jb25uKGNvbm4sIHNrYik7XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9SRVNQT05TRTpcXG4gXFx0XFx0aWYgKHJ4cnBjX2lzX2Nvbm5fYWJvcnRlZChjb25uKSkge1xcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMva2V5LmMgYi9uZXQvcnhycGMva2V5LmNcXG5pbmRleCBhMGFhNzhkODkyODk3Zi4uMmRkZGJlM2NhZDVjZmMgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2tleS5jXFxuKysrIGIvbmV0L3J4cnBjL2tleS5jXFxuQEAgLTg5MywzICs4OTMsMzkgQEAgc3RhdGljIGxvbmcgcnhycGNfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksXFxuIFxcdF9sZWF2ZShcXFwiID0gJXp1XFxcIiwgc2l6ZSk7XFxuIFxcdHJldHVybiBzaXplO1xcbiB9XFxuK1xcbisvKipcXG4rICogcnhycGNfa2VybmVsX3F1ZXJ5X2tleSAtIFF1ZXJ5IHBhcmFtZXRlcnMgZnJvbSBhbiByeHJwYyBrZXlcXG4rICogQGtleTogVGhlIGtleSB0byBxdWVyeVxcbisgKiBAX3NlY3VyaXR5X2luZGV4OiBXaGVyZSB0byByZXR1cm4gdGhlIHNlY3VyaXR5IGluZGV4XFxuKyAqIEBfa3JiNV9lbmN0eXBlOiBXaGVyZSB0byByZXR1cm4gdGhlIGtyYjUgZW5jcnlwdGlvbiB0eXBlIGlmIGFwcGxpY2FibGVcXG4rICpcXG4rICogUXVlcnkgYW4gcnhycGMgYXV0aGVudGljYXRpb24ga2V5LCBleHRyYWN0aW5nIHRoZSBzZWN1cml0eSBpbmRleCBmcm9tIHRoZVxcbisgKiBmaXJzdCB0b2tlbiB0aGVyZWluLlxcbisgKi9cXG4rdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgdTggKl9zZWN1cml0eV9pbmRleCwgdTMyICpfa3JiNV9lbmN0eXBlKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCByeHJwY19rZXlfdG9rZW4gKnRva2VuO1xcbitcXG4rXFx0dG9rZW4gPSBrZXktXFx1MDAzZXBheWxvYWQuZGF0YVswXTtcXG4rXFx0aWYgKCF0b2tlbikge1xcbitcXHRcXHQqX3NlY3VyaXR5X2luZGV4ID0gMDtcXG4rXFx0XFx0Kl9rcmI1X2VuY3R5cGUgPSAwO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdCpfc2VjdXJpdHlfaW5kZXggPSB0b2tlbi1cXHUwMDNlc2VjdXJpdHlfaW5kZXg7XFxuK1xcdHN3aXRjaCAodG9rZW4tXFx1MDAzZXNlY3VyaXR5X2luZGV4KSB7XFxuK1xcdGNhc2UgUlhSUENfU0VDVVJJVFlfUlhLQUQ6XFxuK1xcdFxcdCpfa3JiNV9lbmN0eXBlID0gMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6XFxuK1xcdFxcdCpfa3JiNV9lbmN0eXBlID0gdG9rZW4tXFx1MDAzZXJ4Z2stXFx1MDAzZWVuY3R5cGU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuK1xcdFxcdCpfa3JiNV9lbmN0eXBlID0gMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkpO1xcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvb29iLmMgYi9uZXQvcnhycGMvb29iLmNcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCBjODBlZTI0ODdkMDk0MS4uMDAwMDAwMDAwMDAwMDBcXG4tLS0gYS9uZXQvcnhycGMvb29iLmNcXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsMzg3ICswLDAgQEBcXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4tLyogT3V0IG9mIGJhbmQgbWVzc2FnZSBoYW5kbGluZyAoZS5nLiBjaGFsbGVuZ2UtcmVzcG9uc2UpXFxuLSAqXFxuLSAqIENvcHlyaWdodCAoQykgMjAyNSBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXFxuLSAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSlcXG4tICovXFxuLVxcbi0jZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFxcXCI6IFxcXCIgZm10XFxuLVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0LmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZnAuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NuZXQvYWZfcnhycGMuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFxcImFyLWludGVybmFsLmhcXFwiXFxuLVxcbi1lbnVtIHJ4cnBjX29vYl9jb21tYW5kIHtcXG4tXFx0UlhSUENfT09CX0NNRF9VTlNFVCxcXG4tXFx0UlhSUENfT09CX0NNRF9SRVNQT05ELFxcbi19IF9fbW9kZShieXRlKTtcXG4tXFxuLXN0cnVjdCByeHJwY19vb2JfcGFyYW1zIHtcXG4tXFx0dTY0XFx0XFx0XFx0b29iX2lkO1xcdFxcdC8qIElEIG51bWJlciBvZiBtZXNzYWdlIGlmIHJlcGx5ICovXFxuLVxcdHMzMlxcdFxcdFxcdGFib3J0X2NvZGU7XFxuLVxcdGVudW0gcnhycGNfb29iX2NvbW1hbmRcXHRjb21tYW5kO1xcbi1cXHRib29sXFx0XFx0XFx0aGF2ZV9vb2JfaWQ6MTtcXG4tfTtcXG4tXFxuLS8qXFxuLSAqIFBvc3QgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZSBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2VcXG4tICogYXNzb2NpYXRlZCB3aXRoIGEgcmVmZXJlbmNlIGNhbGwuXFxuLSAqL1xcbi1ib29sIHJ4cnBjX25vdGlmeV9zb2NrZXRfb29iKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTtcXG4tXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4O1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2s7XFxuLVxcdGJvb2wgcXVldWVkID0gZmFsc2U7XFxuLVxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcbi1cXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVxcdTAwM2Vzb2NrZXQpO1xcbi1cXHRpZiAocngpIHtcXG4tXFx0XFx0c2sgPSBcXHUwMDI2cngtXFx1MDAzZXNrO1xcbi1cXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19sb2NrKTtcXG4tXFxuLVxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgXFx1MDAzYyBSWFJQQ19DTE9TRSkge1xcbi1cXHRcXHRcXHRza2ItXFx1MDAzZXNrYl9tc3RhbXBfbnMgPSByeC1cXHUwMDNlb29iX2lkX2NvdW50ZXIrKztcXG4tXFx0XFx0XFx0cnhycGNfZ2V0X3NrYihza2IsIHJ4cnBjX3NrYl9nZXRfcG9zdF9vb2IpO1xcbi1cXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfb29icSwgc2tiKTtcXG4tXFx0XFx0XFx0cXVldWVkID0gdHJ1ZTtcXG4tXFxuLVxcdFxcdFxcdHRyYWNlX3J4cnBjX25vdGlmeV9zb2NrZXQoY2FsbC1cXHUwMDNlZGVidWdfaWQsIHNwLVxcdTAwM2VoZHIuc2VyaWFsKTtcXG4tXFx0XFx0XFx0aWYgKHJ4LVxcdTAwM2VhcHBfb3BzKVxcbi1cXHRcXHRcXHRcXHRyeC1cXHUwMDNlYXBwX29wcy1cXHUwMDNlbm90aWZ5X29vYihzaywgc2tiKTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19sb2NrKTtcXG4tXFx0XFx0aWYgKHF1ZXVlZCBcXHUwMDI2XFx1MDAyNiAhcngtXFx1MDAzZWFwcF9vcHMgXFx1MDAyNlxcdTAwMjYgIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcXG4tXFx0XFx0XFx0c2stXFx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xcbi1cXHR9XFxuLVxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFx0cmV0dXJuIHF1ZXVlZDtcXG4tfVxcbi1cXG4tLypcXG4tICogTG9jYXRlIHRoZSBPT0IgbWVzc2FnZSB0byByZXNwb25kIHRvIGJ5IGl0cyBJRC5cXG4tICovXFxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfZmluZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHU2NCBvb2JfaWQpXFxuLXtcXG4tXFx0c3RydWN0IHJiX25vZGUgKnA7XFxuLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLVxcbi1cXHRwID0gcngtXFx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlO1xcbi1cXHR3aGlsZSAocCkge1xcbi1cXHRcXHRza2IgPSByYl9lbnRyeShwLCBzdHJ1Y3Qgc2tfYnVmZiwgcmJub2RlKTtcXG4tXFxuLVxcdFxcdGlmIChvb2JfaWQgXFx1MDAzYyBza2ItXFx1MDAzZXNrYl9tc3RhbXBfbnMpXFxuLVxcdFxcdFxcdHAgPSBwLVxcdTAwM2VyYl9sZWZ0O1xcbi1cXHRcXHRlbHNlIGlmIChvb2JfaWQgXFx1MDAzZSBza2ItXFx1MDAzZXNrYl9tc3RhbXBfbnMpXFxuLVxcdFxcdFxcdHAgPSBwLVxcdTAwM2VyYl9yaWdodDtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRyZXR1cm4gc2tiO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gTlVMTDtcXG4tfVxcbi1cXG4tLypcXG4tICogQWRkIGFuIE9PQiBtZXNzYWdlIGludG8gdGhlIHBlbmRpbmctcmVzcG9uc2Ugc2V0LiAgV2UgYWx3YXlzIGFzc2lnbiB0aGUgbmV4dFxcbi0gKiB2YWx1ZSBmcm9tIGEgNjQtYml0IGNvdW50ZXIgdG8gdGhlIG9vYl9pZCwgc28ganVzdCBhc3N1bWUgd2UncmUgYWx3YXlzIGdvaW5nXFxuLSAqIHRvIGJlIG9uIHRoZSByaWdodC1oYW5kIGVkZ2Ugb2YgdGhlIHRyZWUgYW5kIHRoYXQgdGhlIGNvdW50ZXIgd29uJ3Qgd3JhcC5cXG4tICogVGhlIHRyZWUgaXMgYWxzbyBnaXZlbiBhIHJlZiB0byB0aGUgbWVzc2FnZS5cXG4tICovXFxuLXZvaWQgcnhycGNfYWRkX3BlbmRpbmdfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4te1xcbi1cXHRzdHJ1Y3QgcmJfbm9kZSAqKnBwID0gXFx1MDAyNnJ4LVxcdTAwM2VwZW5kaW5nX29vYnEucmJfbm9kZSwgKnAgPSBOVUxMO1xcbi1cXG4tXFx0d2hpbGUgKCpwcCkge1xcbi1cXHRcXHRwID0gKnBwO1xcbi1cXHRcXHRwcCA9IFxcdTAwMjYoKnBwKS1cXHUwMDNlcmJfcmlnaHQ7XFxuLVxcdH1cXG4tXFxuLVxcdHJiX2xpbmtfbm9kZShcXHUwMDI2c2tiLVxcdTAwM2VyYm5vZGUsIHAsIHBwKTtcXG4tXFx0cmJfaW5zZXJ0X2NvbG9yKFxcdTAwMjZza2ItXFx1MDAzZXJibm9kZSwgXFx1MDAyNnJ4LVxcdTAwM2VwZW5kaW5nX29vYnEpO1xcbi19XFxuLVxcbi0vKlxcbi0gKiBFeHRyYWN0IGNvbnRyb2wgbWVzc2FnZXMgZnJvbSB0aGUgc2VuZG1zZygpIGNvbnRyb2wgYnVmZmVyLlxcbi0gKi9cXG4tc3RhdGljIGludCByeHJwY19zZW5kbXNnX29vYl9jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgKnApXFxuLXtcXG4tXFx0c3RydWN0IGNtc2doZHIgKmNtc2c7XFxuLVxcdGludCBsZW47XFxuLVxcbi1cXHRpZiAobXNnLVxcdTAwM2Vtc2dfY29udHJvbGxlbiA9PSAwKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdGZvcl9lYWNoX2Ntc2doZHIoY21zZywgbXNnKSB7XFxuLVxcdFxcdGlmICghQ01TR19PSyhtc2csIGNtc2cpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdFxcdGxlbiA9IGNtc2ctXFx1MDAzZWNtc2dfbGVuIC0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKTtcXG4tXFx0XFx0X2RlYnVnKFxcXCJDTVNHICVkLCAlZCwgJWRcXFwiLFxcbi1cXHRcXHQgICAgICAgY21zZy1cXHUwMDNlY21zZ19sZXZlbCwgY21zZy1cXHUwMDNlY21zZ190eXBlLCBsZW4pO1xcbi1cXG4tXFx0XFx0aWYgKGNtc2ctXFx1MDAzZWNtc2dfbGV2ZWwgIT0gU09MX1JYUlBDKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdHN3aXRjaCAoY21zZy1cXHUwMDNlY21zZ190eXBlKSB7XFxuLVxcdFxcdGNhc2UgUlhSUENfT09CX0lEOlxcbi1cXHRcXHRcXHRpZiAobGVuICE9IHNpemVvZihwLVxcdTAwM2Vvb2JfaWQpIHx8IHAtXFx1MDAzZWhhdmVfb29iX2lkKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZwLVxcdTAwM2Vvb2JfaWQsIENNU0dfREFUQShjbXNnKSwgc2l6ZW9mKHAtXFx1MDAzZW9vYl9pZCkpO1xcbi1cXHRcXHRcXHRwLVxcdTAwM2VoYXZlX29vYl9pZCA9IHRydWU7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIFJYUlBDX1JFU1BPTkQ6XFxuLVxcdFxcdFxcdGlmIChwLVxcdTAwM2Vjb21tYW5kICE9IFJYUlBDX09PQl9DTURfVU5TRVQpXFxuLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRcXHRwLVxcdTAwM2Vjb21tYW5kID0gUlhSUENfT09CX0NNRF9SRVNQT05EO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBSWFJQQ19BQk9SVDpcXG4tXFx0XFx0XFx0aWYgKGxlbiAhPSBzaXplb2YocC1cXHUwMDNlYWJvcnRfY29kZSkgfHwgcC1cXHUwMDNlYWJvcnRfY29kZSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdFxcdG1lbWNweShcXHUwMDI2cC1cXHUwMDNlYWJvcnRfY29kZSwgQ01TR19EQVRBKGNtc2cpLCBzaXplb2YocC1cXHUwMDNlYWJvcnRfY29kZSkpO1xcbi1cXHRcXHRcXHRpZiAocC1cXHUwMDNlYWJvcnRfY29kZSA9PSAwKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgUlhSUENfUkVTUF9SWEdLX0FQUERBVEE6XFxuLVxcdFxcdFxcdGlmIChwLVxcdTAwM2Vjb21tYW5kICE9IFJYUlBDX09PQl9DTURfUkVTUE9ORClcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHRzd2l0Y2ggKHAtXFx1MDAzZWNvbW1hbmQpIHtcXG4tXFx0Y2FzZSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQ6XFxuLVxcdFxcdGlmICghcC1cXHUwMDNlaGF2ZV9vb2JfaWQpXFxuLVxcdFxcdFxcdHJldHVybiAtRUJBRFNMVDtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGRlZmF1bHQ6XFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tLypcXG4tICogQWxsb3cgdXNlcnNwYWNlIHRvIHJlc3BvbmQgdG8gYW4gT09CIHVzaW5nIHNlbmRtc2coKS5cXG4tICovXFxuLXN0YXRpYyBpbnQgcnhycGNfcmVzcG9uZF90b19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyAqcCxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IG1zZ2hkciAqbXNnKVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uO1xcbi1cXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwO1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0c2tiID0gcnhycGNfZmluZF9wZW5kaW5nX29vYihyeCwgcC1cXHUwMDNlb29iX2lkKTtcXG4tXFx0aWYgKHNrYilcXG4tXFx0XFx0cmJfZXJhc2UoXFx1MDAyNnNrYi1cXHUwMDNlcmJub2RlLCBcXHUwMDI2cngtXFx1MDAzZXBlbmRpbmdfb29icSk7XFxuLVxcdHJlbGVhc2Vfc29jayhcXHUwMDI2cngtXFx1MDAzZXNrKTtcXG4tXFx0aWYgKCFza2IpXFxuLVxcdFxcdHJldHVybiAtRUJBRFNMVDtcXG4tXFxuLVxcdHNwID0gcnhycGNfc2tiKHNrYik7XFxuLVxcbi1cXHRzd2l0Y2ggKHAtXFx1MDAzZWNvbW1hbmQpIHtcXG4tXFx0Y2FzZSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQ6XFxuLVxcdFxcdHJldCA9IC1FUFJPVE87XFxuLVxcdFxcdGlmIChza2ItXFx1MDAzZW1hcmsgIT0gUlhSUENfT09CX0NIQUxMRU5HRSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNvbm4gPSBzcC1cXHUwMDNlY2hhbGwuY29ubjtcXG4tXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuLVxcdFxcdGlmICghY29ubi1cXHUwMDNlc2VjdXJpdHktXFx1MDAzZXNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRpZiAocC1cXHUwMDNlYWJvcnRfY29kZSkge1xcbi1cXHRcXHRcXHRyeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIHAtXFx1MDAzZWFib3J0X2NvZGUsIC1FQ09OTkFCT1JURUQsXFxuLVxcdFxcdFxcdFxcdFxcdCByeHJwY19hYm9ydF9yZXNwb25zZV9zZW5kbXNnKTtcXG4tXFx0XFx0XFx0cmV0ID0gMDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cmV0ID0gY29ubi1cXHUwMDNlc2VjdXJpdHktXFx1MDAzZXNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc2tiLCBtc2cpO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0fVxcbi1cXG4tXFx0c3dpdGNoIChza2ItXFx1MDAzZW1hcmspIHtcXG4tXFx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxcbi1cXHRcXHRyeHJwY19wdXRfY29ubmVjdGlvbihzcC1cXHUwMDNlY2hhbGwuY29ubiwgcnhycGNfY29ubl9wdXRfb29iKTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFx0cnhycGNfZnJlZV9za2Ioc2tiLCByeHJwY19za2JfcHV0X29vYik7XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIFNlbmQgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZSBvciByZXNwb25kIHRvIGEgcmVjZWl2ZWQgb3V0LW9mLWJhbmQgbWVzc2FnZS5cXG4tICogLSBjYWxsZXIgZ2l2ZXMgdXMgdGhlIHNvY2tldCBsb2NrXFxuLSAqIC0gdGhlIHNvY2tldCBtYXkgYmUgZWl0aGVyIGEgY2xpZW50IHNvY2tldCBvciBhIHNlcnZlciBzb2NrZXRcXG4tICovXFxuLWludCByeHJwY19zZW5kbXNnX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyBwID0ge307XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRfZW50ZXIoXFxcIlxcXCIpO1xcbi1cXG4tXFx0cmV0ID0gcnhycGNfc2VuZG1zZ19vb2JfY21zZyhtc2csIFxcdTAwMjZwKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gZXJyb3JfcmVsZWFzZV9zb2NrO1xcbi1cXG4tXFx0aWYgKHAuaGF2ZV9vb2JfaWQpXFxuLVxcdFxcdHJldHVybiByeHJwY19yZXNwb25kX3RvX29vYihyeCwgXFx1MDAyNnAsIG1zZyk7XFxuLVxcbi1cXHRyZWxlYXNlX3NvY2soXFx1MDAyNnJ4LVxcdTAwM2Vzayk7XFxuLVxcbi1cXHRzd2l0Y2ggKHAuY29tbWFuZCkge1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0fVxcbi1cXG4tXFx0X2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuLVxcdHJldHVybiByZXQ7XFxuLVxcbi1lcnJvcl9yZWxlYXNlX3NvY2s6XFxuLVxcdHJlbGVhc2Vfc29jayhcXHUwMDI2cngtXFx1MDAzZXNrKTtcXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4tLyoqXFxuLSAqIHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2IgLSBRdWVyeSB0aGUgcGFyYW1ldGVycyBvZiBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlXFxuLSAqIEBvb2I6IFRoZSBtZXNzYWdlIHRvIHF1ZXJ5XFxuLSAqIEBfcGVlcjogV2hlcmUgdG8gcmV0dXJuIHRoZSBwZWVyIHJlY29yZFxcbi0gKiBAX3BlZXJfYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgYXR0YWNoZWQgdG8gYSBwZWVyIHJlY29yZFxcbi0gKlxcbi0gKiBFeHRyYWN0IHVzZWZ1bCBwYXJhbWV0ZXJzIGZyb20gYW4gb3V0LW9mLWJhbmQgbWVzc2FnZS4gIFRoZSBzb3VyY2UgcGVlclxcbi0gKiBwYXJhbWV0ZXJzIGFyZSByZXR1cm5lZCB0aHJvdWdoIHRoZSBhcmd1bWVudCBsaXN0IGFuZCB0aGUgbWVzc2FnZSB0eXBlIGlzXFxuLSAqIHJldHVybmVkLlxcbi0gKlxcbi0gKiBSZXR1cm46XFxuLSAqICogJVJYUlBDX09PQl9DSEFMTEVOR0UgLSBDaGFsbGVuZ2Ugd2FudGluZyBhIHJlc3BvbnNlLlxcbi0gKi9cXG4tZW51bSByeHJwY19vb2JfdHlwZSByeHJwY19rZXJuZWxfcXVlcnlfb29iKHN0cnVjdCBza19idWZmICpvb2IsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihvb2IpO1xcbi1cXHRlbnVtIHJ4cnBjX29vYl90eXBlIHR5cGUgPSBvb2ItXFx1MDAzZW1hcms7XFxuLVxcbi1cXHRzd2l0Y2ggKHR5cGUpIHtcXG4tXFx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxcbi1cXHRcXHQqX3BlZXJcXHRcXHQ9IHNwLVxcdTAwM2VjaGFsbC5jb25uLVxcdTAwM2VwZWVyO1xcbi1cXHRcXHQqX3BlZXJfYXBwZGF0YVxcdD0gc3AtXFx1MDAzZWNoYWxsLmNvbm4tXFx1MDAzZXBlZXItXFx1MDAzZWFwcF9kYXRhO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbi1cXHRcXHQqX3BlZXJcXHRcXHQ9IE5VTEw7XFxuLVxcdFxcdCpfcGVlcl9hcHBkYXRhXFx0PSAwO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIHR5cGU7XFxuLX1cXG4tRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfb29iKTtcXG4tXFxuLS8qKlxcbi0gKiByeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2IgLSBEZXF1ZXVlIGFuZCByZXR1cm4gdGhlIGZyb250IE9PQiBtZXNzYWdlXFxuLSAqIEBzb2NrOiBUaGUgc29ja2V0IHRvIHF1ZXJ5XFxuLSAqIEBfdHlwZTogV2hlcmUgdG8gcmV0dXJuIHRoZSBtZXNzYWdlIHR5cGVcXG4tICpcXG4tICogRGVxdWV1ZSB0aGUgZnJvbnQgT09CIG1lc3NhZ2UsIGlmIHRoZXJlIGlzIG9uZSwgYW5kIHJldHVybiBpdCBhbmRcXG4tICogaXRzIHR5cGUuXFxuLSAqXFxuLSAqIFJldHVybjogVGhlIHNrX2J1ZmYgcmVwcmVzZW50aW5nIHRoZSBPT0IgbWVzc2FnZSBvciAlTlVMTCBpZiB0aGUgcXVldWUgd2FzXFxuLSAqIGVtcHR5Llxcbi0gKi9cXG4tc3RydWN0IHNrX2J1ZmYgKnJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi1cXHRcXHRcXHRcXHRcXHQgZW51bSByeHJwY19vb2JfdHlwZSAqX3R5cGUpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cXHUwMDNlc2spO1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqb29iO1xcbi1cXG4tXFx0b29iID0gc2tiX2RlcXVldWUoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpO1xcbi1cXHRpZiAob29iKVxcbi1cXHRcXHQqX3R5cGUgPSBvb2ItXFx1MDAzZW1hcms7XFxuLVxcdHJldHVybiBvb2I7XFxuLX1cXG4tRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2IpO1xcbi1cXG4tLyoqXFxuLSAqIHJ4cnBjX2tlcm5lbF9mcmVlX29vYiAtIEZyZWUgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZVxcbi0gKiBAb29iOiBUaGUgT09CIG1lc3NhZ2UgdG8gZnJlZVxcbi0gKlxcbi0gKiBGcmVlIGFuIE9PQiBtZXNzYWdlIGFsb25nIHdpdGggYW55IHJlc291cmNlcyBpdCBob2xkcy5cXG4tICovXFxuLXZvaWQgcnhycGNfa2VybmVsX2ZyZWVfb29iKHN0cnVjdCBza19idWZmICpvb2IpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihvb2IpO1xcbi1cXG4tXFx0c3dpdGNoIChvb2ItXFx1MDAzZW1hcmspIHtcXG4tXFx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxcbi1cXHRcXHRyeHJwY19wdXRfY29ubmVjdGlvbihzcC1cXHUwMDNlY2hhbGwuY29ubiwgcnhycGNfY29ubl9wdXRfb29iKTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFxuLVxcdHJ4cnBjX2ZyZWVfc2tiKG9vYiwgcnhycGNfc2tiX3B1dF9wdXJnZV9vb2IpO1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX2ZyZWVfb29iKTtcXG4tXFxuLS8qKlxcbi0gKiByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlIC0gUXVlcnkgdGhlIHBhcmFtZXRlcnMgb2YgYSBjaGFsbGVuZ2VcXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byBxdWVyeVxcbi0gKiBAX3BlZXI6IFdoZXJlIHRvIHJldHVybiB0aGUgcGVlciByZWNvcmRcXG4tICogQF9wZWVyX2FwcGRhdGE6IFRoZSBhcHBsaWNhdGlvbiBkYXRhIGF0dGFjaGVkIHRvIGEgcGVlciByZWNvcmRcXG4tICogQF9zZXJ2aWNlX2lkOiBXaGVyZSB0byByZXR1cm4gdGhlIGNvbm5lY3Rpb24gc2VydmljZSBJRFxcbi0gKiBAX3NlY3VyaXR5X2luZGV4OiBXaGVyZSB0byByZXR1cm4gdGhlIGNvbm5lY3Rpb24gc2VjdXJpdHkgaW5kZXhcXG4tICpcXG4tICogRXh0cmFjdCB1c2VmdWwgcGFyYW1ldGVycyBmcm9tIGEgQ0hBTExFTkdFIG1lc3NhZ2UuXFxuLSAqL1xcbi12b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxcbi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsXFxuLVxcdFxcdFxcdFxcdCAgdTE2ICpfc2VydmljZV9pZCwgdTggKl9zZWN1cml0eV9pbmRleClcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XFxuLVxcbi1cXHQqX3BlZXJcXHRcXHQ9IHNwLVxcdTAwM2VjaGFsbC5jb25uLVxcdTAwM2VwZWVyO1xcbi1cXHQqX3BlZXJfYXBwZGF0YVxcdD0gc3AtXFx1MDAzZWNoYWxsLmNvbm4tXFx1MDAzZXBlZXItXFx1MDAzZWFwcF9kYXRhO1xcbi1cXHQqX3NlcnZpY2VfaWRcXHQ9IHNwLVxcdTAwM2VoZHIuc2VydmljZUlkO1xcbi1cXHQqX3NlY3VyaXR5X2luZGV4ID0gc3AtXFx1MDAzZWhkci5zZWN1cml0eUluZGV4O1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSk7XFxuLVxcbi0vKipcXG4tICogcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UgLSBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHJlamVjdCBhIGNoYWxsZW5nZVxcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIGJlIHJlamVjdGVkXFxuLSAqIEBhYm9ydF9jb2RlOiBUaGUgYWJvcnQgY29kZSB0byBzdGljayBpbnRvIHRoZSBBQk9SVCBwYWNrZXRcXG4tICogQGVycm9yOiBMb2NhbCBlcnJvciB2YWx1ZVxcbi0gKiBAd2h5OiBJbmRpY2F0aW9uIGFzIHRvIHdoeS5cXG4tICpcXG4tICogQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byByZWplY3QgYSBjaGFsbGVuZ2UgYnkgYWJvcnRpbmcgdGhlIGNvbm5lY3Rpb24gaWZcXG4tICogaXQncyBzdGlsbCBpbiBhbiBhYm9ydGFibGUgc3RhdGUuICBUaGUgZXJyb3IgaXMgcmV0dXJuZWQgc28gdGhpcyBmdW5jdGlvblxcbi0gKiBjYW4gYmUgdXNlZCB3aXRoIGEgcmV0dXJuIHN0YXRlbWVudC5cXG4tICpcXG4tICogUmV0dXJuOiBUaGUgJWVycm9yIHBhcmFtZXRlci5cXG4tICovXFxuLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSxcXG4tXFx0XFx0XFx0XFx0ICBpbnQgZXJyb3IsIGVudW0gcnhycGNfYWJvcnRfcmVhc29uIHdoeSlcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XFxuLVxcbi1cXHRfZW50ZXIoXFxcInsleH0sJWQsJWQsJXVcXFwiLCBzcC1cXHUwMDNlaGRyLnNlcmlhbCwgYWJvcnRfY29kZSwgZXJyb3IsIHdoeSk7XFxuLVxcbi1cXHRyeHJwY19hYm9ydF9jb25uKHNwLVxcdTAwM2VjaGFsbC5jb25uLCBOVUxMLCBhYm9ydF9jb2RlLCBlcnJvciwgd2h5KTtcXG4tXFx0cmV0dXJuIGVycm9yO1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UpO1xcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcmVjdm1zZy5jIGIvbmV0L3J4cnBjL3JlY3Ztc2cuY1xcbmluZGV4IGVmY2JhNGIyZTc0ZjBjLi4yODU5YTgwZTE4NzY2MyAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvcmVjdm1zZy5jXFxuKysrIGIvbmV0L3J4cnBjL3JlY3Ztc2cuY1xcbkBAIC0yMTUsNjEgKzIxNSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ191c2VyX2lkKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuIFxcdH1cXG4gfVxcbiBcXG4tLypcXG4tICogRGVhbCB3aXRoIGEgQ0hBTExFTkdFIHBhY2tldC5cXG4tICovXFxuLXN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19jaGFsbGVuZ2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xcbi1cXHRzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiA9IHNwLVxcdTAwM2VjaGFsbC5jb25uO1xcbi1cXG4tXFx0cmV0dXJuIGNvbm4tXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VjaGFsbGVuZ2VfdG9fcmVjdm1zZyhjb25uLCBjaGFsbGVuZ2UsIG1zZyk7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIFByb2Nlc3MgT09CIHBhY2tldHMuICBDYWxsZWQgd2l0aCB0aGUgc29ja2V0IGxvY2tlZC5cXG4tICovXFxuLXN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19vb2Ioc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBmbGFncylcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVxcdTAwM2Vzayk7XFxuLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLVxcdGJvb2wgbmVlZF9yZXNwb25zZSA9IGZhbHNlO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0c2tiID0gc2tiX3BlZWsoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpO1xcbi1cXHRpZiAoIXNrYilcXG4tXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuLVxcdHJ4cnBjX3NlZV9za2Ioc2tiLCByeHJwY19za2Jfc2VlX3JlY3Ztc2cpO1xcbi1cXG4tXFx0cmV0ID0gcHV0X2Ntc2cobXNnLCBTT0xfUlhSUEMsIFJYUlBDX09PQl9JRCwgc2l6ZW9mKHU2NCksXFxuLVxcdFxcdCAgICAgICBcXHUwMDI2c2tiLVxcdTAwM2Vza2JfbXN0YW1wX25zKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHRzd2l0Y2ggKChlbnVtIHJ4cnBjX29vYl90eXBlKXNrYi1cXHUwMDNlbWFyaykge1xcbi1cXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XFxuLVxcdFxcdG5lZWRfcmVzcG9uc2UgPSB0cnVlO1xcbi1cXHRcXHRyZXQgPSByeHJwY19yZWN2bXNnX2NoYWxsZW5nZShzb2NrLCBtc2csIHNrYiwgZmxhZ3MpO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJyZWN2bXNnKCkgY2FuJ3QgcHJvY2VzcyB1bmtub3duIE9PQiB0eXBlICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgIHNrYi1cXHUwMDNlbWFyayk7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIShmbGFncyBcXHUwMDI2IE1TR19QRUVLKSkge1xcbi1cXHRcXHRza2JfdW5saW5rKHNrYiwgXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpO1xcbi1cXHRcXHRpZiAobmVlZF9yZXNwb25zZSlcXG4tXFx0XFx0XFx0cnhycGNfYWRkX3BlbmRpbmdfb29iKHJ4LCBza2IpO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9vb2IpO1xcbi1cXHR9XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuIC8qXFxuICAqIERlbGl2ZXIgbWVzc2FnZXMgdG8gYSBjYWxsLiAgVGhpcyBrZWVwcyBwcm9jZXNzaW5nIHBhY2tldHMgdW50aWwgdGhlIGJ1ZmZlclxcbiAgKiBpcyBmaWxsZWQgYW5kIHdlIGZpbmQgZWl0aGVyIG1vcmUgREFUQSAocmV0dXJucyAwKSBvciB0aGUgZW5kIG9mIHRoZSBEQVRBXFxuQEAgLTI4MSw3ICsyMjYsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG4gXFx0XFx0XFx0ICAgICAgc2l6ZV90IGxlbiwgaW50IGZsYWdzLCBzaXplX3QgKl9vZmZzZXQpXFxuIHtcXG4gXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcDtcXG4tXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cXHUwMDNlc2spO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXHRyeHJwY19zZXFfdCBzZXEgPSAwO1xcbiBcXHRzaXplX3QgcmVtYWluO1xcbkBAIC0zNzYsMTMgKzMyMCw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXG4gXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBNU0dfUEVFSykpXFxuIFxcdFxcdFxcdHJ4cnBjX3JvdGF0ZV9yeF93aW5kb3coY2FsbCk7XFxuLVxcbi1cXHRcXHRpZiAoIXJ4LVxcdTAwM2VhcHBfb3BzIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xcbi1cXHRcXHRcXHR0cmFjZV9yeHJwY19yZWN2ZGF0YShjYWxsLCByeHJwY19yZWN2bXNnX29vYnEsIHNlcSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICByeF9wa3Rfb2Zmc2V0LCByeF9wa3RfbGVuLCByZXQpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBvdXQ6XFxuQEAgLTQxOSw3ICszNTYsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcbiBcXHR0cmFjZV9yeHJwY19yZWN2bXNnKDAsIHJ4cnBjX3JlY3Ztc2dfZW50ZXIsIDApO1xcbiBcXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgKE1TR19PT0IgfCBNU0dfVFJVTkMpKVxcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNU0dfVFJVTkMpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuIFxcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhcXHUwMDI2cngtXFx1MDAzZXNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuQEAgLTQzMCwxNCArMzY3LDEyIEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4gXFx0LyogUmV0dXJuIGltbWVkaWF0ZWx5IGlmIGEgY2xpZW50IHNvY2tldCBoYXMgbm8gb3V0c3RhbmRpbmcgY2FsbHMgKi9cXG4gXFx0aWYgKFJCX0VNUFRZX1JPT1QoXFx1MDAyNnJ4LVxcdTAwM2VjYWxscykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGxpc3RfZW1wdHkoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX3EpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICByeC1cXHUwMDNlc2suc2tfc3RhdGUgIT0gUlhSUENfU0VSVkVSX0xJU1RFTklORykge1xcbiBcXHRcXHRyZWxlYXNlX3NvY2soXFx1MDAyNnJ4LVxcdTAwM2Vzayk7XFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfcSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfb29icSkpIHtcXG4rXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX3EpKSB7XFxuIFxcdFxcdHJldCA9IC1FV09VTERCTE9DSztcXG4gXFx0XFx0aWYgKHRpbWVvID09IDApIHtcXG4gXFx0XFx0XFx0Y2FsbCA9IE5VTEw7XFxuQEAgLTQ1Myw4ICszODgsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gd2FpdF9lcnJvcjtcXG4gXFxuLVxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19xKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xcbitcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfcSkpIHtcXG4gXFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxcbiBcXHRcXHRcXHRcXHRnb3RvIHdhaXRfaW50ZXJydXB0ZWQ7XFxuIFxcdFxcdFxcdHRyYWNlX3J4cnBjX3JlY3Ztc2coMCwgcnhycGNfcmVjdm1zZ193YWl0LCAwKTtcXG5AQCAtNDY0LDE1ICszOTgsNiBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdGdvdG8gdHJ5X2FnYWluO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBEZWFsIHdpdGggT09CIG1lc3NhZ2VzIGJlZm9yZSB3ZSBjb25zaWRlciBnZXR0aW5nIG5vcm1hbCBkYXRhLiAqL1xcbi1cXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfb29icSkpIHtcXG4tXFx0XFx0cmV0ID0gcnhycGNfcmVjdm1zZ19vb2Ioc29jaywgbXNnLCBmbGFncyk7XFxuLVxcdFxcdHJlbGVhc2Vfc29jayhcXHUwMDI2cngtXFx1MDAzZXNrKTtcXG4tXFx0XFx0aWYgKHJldCA9PSAtRUFHQUlOKVxcbi1cXHRcXHRcXHRnb3RvIHRyeV9hZ2FpbjtcXG4tXFx0XFx0Z290byBlcnJvcl90cmFjZTtcXG4tXFx0fVxcbi1cXG4gXFx0LyogRmluZCB0aGUgbmV4dCBjYWxsIGFuZCBkZXF1ZXVlIGl0IGlmIHdlJ3JlIG5vdCBqdXN0IHBlZWtpbmcuICBJZiB3ZVxcbiBcXHQgKiBkbyBkZXF1ZXVlIGl0LCB0aGF0IGNvbWVzIHdpdGggYSByZWYgdGhhdCB3ZSB3aWxsIG5lZWQgdG8gcmVsZWFzZS5cXG4gXFx0ICogV2UgYWxzbyB3YW50IHRvIHdlZWQgb3V0IGNhbGxzIHRoYXQgZ290IHJlcXVldWVkIHdoaWxzdCB3ZSB3ZXJlXFxuQEAgLTQ4Myw4ICs0MDgsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdGNhbGwgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCByeHJwY19jYWxsLCByZWN2bXNnX2xpbmspO1xcbiBcXG4gXFx0aWYgKCFyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBza2JfcXVldWVfZW1wdHkoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfcXVldWUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBza2JfcXVldWVfZW1wdHkoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpKSB7XFxuK1xcdCAgICBza2JfcXVldWVfZW1wdHkoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfcXVldWUpKSB7XFxuIFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfbGluayk7XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jayk7XFxuIFxcdFxcdHJlbGVhc2Vfc29jayhcXHUwMDI2cngtXFx1MDAzZXNrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmNcXG5pbmRleCA3N2E2N2FjZTFkMjQ4MS4uOWFiNzY2ZDVmMGI2YzggMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL3J4Z2suY1xcbisrKyBiL25ldC9yeHJwYy9yeGdrLmNcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXktdHlwZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNja2V5cy91c2VyLXR5cGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImFyLWludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJyeGdrX2NvbW1vbi5oXFxcIlxcbiBcXG5AQCAtNzM0LDM3ICs3MzUsNiBAQCBzdGF0aWMgYm9vbCByeGdrX3ZhbGlkYXRlX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UgLSBRdWVyeSBSeEdLLXNwZWNpZmljIGNoYWxsZW5nZSBwYXJhbWV0ZXJzXFxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgcGFja2V0IHRvIHF1ZXJ5XFxuLSAqXFxuLSAqIFJldHVybjogVGhlIEtlcmJlcm9zIDUgZW5jb2RpbmcgdHlwZSBmb3IgdGhlIGNoYWxsZW5nZWQgY29ubmVjdGlvbi5cXG4tICovXFxuLXUzMiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XFxuLVxcbi1cXHRyZXR1cm4gc3AtXFx1MDAzZWNoYWxsLmNvbm4tXFx1MDAzZXJ4Z2suZW5jdHlwZTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MKHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSk7XFxuLVxcbi0vKlxcbi0gKiBGaWxsIG91dCB0aGUgY29udHJvbCBtZXNzYWdlIHRvIHBhc3MgdG8gdXNlcnNwYWNlIHRvIGluZm9ybSBhYm91dCB0aGVcXG4tICogY2hhbGxlbmdlLlxcbi0gKi9cXG4tc3RhdGljIGludCByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnKVxcbi17XFxuLVxcdHN0cnVjdCByeGdrX2NoYWxsZW5nZSBjaGFsbDtcXG4tXFxuLVxcdGNoYWxsLmJhc2Uuc2VydmljZV9pZFxcdFxcdD0gY29ubi1cXHUwMDNlc2VydmljZV9pZDtcXG4tXFx0Y2hhbGwuYmFzZS5zZWN1cml0eV9pbmRleFxcdD0gY29ubi1cXHUwMDNlc2VjdXJpdHlfaXg7XFxuLVxcdGNoYWxsLmVuY3R5cGVcXHRcXHRcXHQ9IGNvbm4tXFx1MDAzZXJ4Z2suZW5jdHlwZTtcXG4tXFxuLVxcdHJldHVybiBwdXRfY21zZyhtc2csIFNPTF9SWFJQQywgUlhSUENfQ0hBTExFTkdFRCwgc2l6ZW9mKGNoYWxsKSwgXFx1MDAyNmNoYWxsKTtcXG4tfVxcbi1cXG4gLypcXG4gICogSW5zZXJ0IHRoZSByZXF1aXNpdGUgYW1vdW50IG9mIFhEUiBwYWRkaW5nIGZvciB0aGUgbGVuZ3RoIGdpdmVuLlxcbiAgKi9cXG5AQCAtODM3LDcgKzgwNyw3IEBAIHN0YXRpYyBub2lubGluZSBzc2l6ZV90IHJ4Z2tfaW5zZXJ0X3Jlc3BvbnNlX2hlYWRlcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29uXFxuICAqL1xcbiBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICphcHBkYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3BvbnNlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90IG9mZnNldClcXG4ge1xcbkBAIC04NTksMjAgKzgyOSwyMCBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuIFxcbi1cXHRhLmFwcGRhdGFfbGVuID0gaHRvbmwoYXBwZGF0YS1cXHUwMDNlbGVuKTtcXG4rXFx0YS5hcHBkYXRhX2xlbiA9IGh0b25sKGFwcGRhdGEtXFx1MDAzZWRhdGFsZW4pO1xcbiBcXG4gXFx0cmV0ID0gc2tiX3N0b3JlX2JpdHMocmVzcG9uc2UsIG9mZnNldCwgXFx1MDAyNmEsIHNpemVvZihhKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRvZmZzZXQgKz0gc2l6ZW9mKGEpO1xcbiBcXG4tXFx0aWYgKGFwcGRhdGEtXFx1MDAzZWxlbikge1xcbi1cXHRcXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBhcHBkYXRhLVxcdTAwM2VkYXRhLCBhcHBkYXRhLVxcdTAwM2VsZW4pO1xcbitcXHRpZiAoYXBwZGF0YS1cXHUwMDNlZGF0YWxlbikge1xcbitcXHRcXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBhcHBkYXRhLVxcdTAwM2VkYXRhLCBhcHBkYXRhLVxcdTAwM2VkYXRhbGVuKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdG9mZnNldCArPSBhcHBkYXRhLVxcdTAwM2VsZW47XFxuK1xcdFxcdG9mZnNldCArPSBhcHBkYXRhLVxcdTAwM2VkYXRhbGVuO1xcbiBcXG4tXFx0XFx0cmV0ID0gcnhna19wYWRfb3V0KHJlc3BvbnNlLCBhcHBkYXRhLVxcdTAwM2VsZW4sIG9mZnNldCk7XFxuK1xcdFxcdHJldCA9IHJ4Z2tfcGFkX291dChyZXNwb25zZSwgYXBwZGF0YS1cXHUwMDNlZGF0YWxlbiwgb2Zmc2V0KTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdG9mZnNldCArPSByZXQ7XFxuQEAgLTg5MCw3ICs4NjAsNyBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBcXHUwMDI2Yiwgc2l6ZW9mKGIpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdHJldHVybiBzaXplb2YoYSkgKyB4ZHJfcm91bmRfdXAoYXBwZGF0YS1cXHUwMDNlbGVuKSArIHNpemVvZihiKTtcXG4rXFx0cmV0dXJuIHNpemVvZihhKSArIHhkcl9yb3VuZF91cChhcHBkYXRhLVxcdTAwM2VkYXRhbGVuKSArIHNpemVvZihiKTtcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3Qgcnhna19lbmNyeXB0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuQEAgLTkyMyw3ICs4OTMsNyBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2VuY3J5cHRfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gICovXFxuIHN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSlcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKmFwcGRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AsICpyc3A7XFxuIFxcdHN0cnVjdCByeGdrX2NvbnRleHQgKmdrO1xcbkBAIC05MzYsNyArOTA2LDcgQEAgc3RhdGljIGludCByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0aWYgKElTX0VSUihnaykpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGdrKTtcXG4gXFxuLVxcdGF1dGhfbGVuID0gMjAgKyAoNCArIGFwcGRhdGEtXFx1MDAzZWxlbikgKyAxMiArICgxICsgNCkgKiA0O1xcbitcXHRhdXRoX2xlbiA9IDIwICsgKDQgKyBhcHBkYXRhLVxcdTAwM2VkYXRhbGVuKSArIDEyICsgKDEgKyA0KSAqIDQ7XFxuIFxcdGF1dGh4X2xlbiA9IGNyeXB0b19rcmI1X2hvd19tdWNoX2J1ZmZlcihnay1cXHUwMDNla3JiNSwgS1JCNV9FTkNSWVBUX01PREUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGF1dGhfbGVuLCBcXHUwMDI2YXV0aF9vZmZzZXQpO1xcbiBcXHRsZW4gPSBzaXplb2Yoc3RydWN0IHJ4cnBjX3dpcmVfaGVhZGVyKSArXFxuQEAgLTEwMTEsNjYgKzk4MSwzNiBAQCBzdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiAgKiBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHBhY2tldC5cXG4gICovXFxuIHN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSlcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxcbiB7XFxuLVxcdF9lbnRlcihcXFwieyVkLCV4fVxcXCIsIGNvbm4tXFx1MDAzZWRlYnVnX2lkLCBrZXlfc2VyaWFsKGNvbm4tXFx1MDAzZWtleSkpO1xcbitcXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCBkdW1teSA9IHt9LCAqYXBwZGF0YSA9IFxcdTAwMjZkdW1teTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdF9lbnRlcihcXFwieyVkLCV1LCV4LCV4fVxcXCIsXFxuK1xcdCAgICAgICBjb25uLVxcdTAwM2VkZWJ1Z19pZCwgY29ubi1cXHUwMDNlc2VydmljZV9pZCxcXG4rXFx0ICAgICAgIGtleV9zZXJpYWwoY29ubi1cXHUwMDNla2V5KSwga2V5X3NlcmlhbChjb25uLVxcdTAwM2VidW5kbGUtXFx1MDAzZWFwcF9kYXRhKSk7XFxuIFxcbiBcXHRpZiAoa2V5X3ZhbGlkYXRlKGNvbm4tXFx1MDAzZWtleSkgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBSWEdLX0VYUElSRUQsIC1FUFJPVE8sXFxuIFxcdFxcdFxcdFxcdFxcdHJ4Z2tfYWJvcnRfY2hhbGxfa2V5X2V4cGlyZWQpO1xcbiBcXG4tXFx0cmV0dXJuIHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKGNvbm4sIGNoYWxsZW5nZSwgYXBwZGF0YSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZV9ub19hcHBkYXRhKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxcbi17XFxuLVxcdHN0cnVjdCBrcmI1X2J1ZmZlciBhcHBkYXRhID0ge307XFxuLVxcbi1cXHRyZXR1cm4gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShjb25uLCBjaGFsbGVuZ2UsIFxcdTAwMjZhcHBkYXRhKTtcXG4tfVxcbi1cXG4tLyoqXFxuLSAqIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlIC0gUmVzcG9uZCB0byBhIGNoYWxsZW5nZSB3aXRoIGFwcGRhdGFcXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byByZXNwb25kIHRvXFxuLSAqIEBhcHBkYXRhOiBUaGUgYXBwbGljYXRpb24gZGF0YSB0byBpbmNsdWRlIGluIHRoZSBSRVNQT05TRSBhdXRoZW50aWNhdG9yXFxuLSAqXFxuLSAqIEFsbG93IGEga2VybmVsIGFwcGxpY2F0aW9uIHRvIHJlc3BvbmQgdG8gYSBDSEFMTEVOR0Ugd2l0aCBhcHBsaWNhdGlvbiBkYXRhXFxuLSAqIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBSeEdLIFJFU1BPTlNFIEF1dGhlbnRpY2F0b3IuXFxuLSAqXFxuLSAqIFJldHVybjogJTAgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4tICovXFxuLWludCByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSlcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKmNzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xcbi1cXG4tXFx0cmV0dXJuIHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UoY3NwLVxcdTAwM2VjaGFsbC5jb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpO1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UpO1xcbi1cXG4tLypcXG4tICogUGFyc2Ugc2VuZG1zZygpIGNvbnRyb2wgbWVzc2FnZSBhbmQgcmVzcG9uZCB0byBjaGFsbGVuZ2UuICBXZSBuZWVkIHRvIHNlZSBpZlxcbi0gKiB0aGVyZSdzIGFuIGFwcGRhdGEgdG8gZmlzaCBvdXQuXFxuLSAqL1xcbi1zdGF0aWMgaW50IHJ4Z2tfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZylcXG4te1xcbi1cXHRzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9O1xcbi1cXHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcXG4tXFxuLVxcdGZvcl9lYWNoX2Ntc2doZHIoY21zZywgbXNnKSB7XFxuLVxcdFxcdGlmIChjbXNnLVxcdTAwM2VjbXNnX2xldmVsICE9IFNPTF9SWFJQQyB8fFxcbi1cXHRcXHQgICAgY21zZy1cXHUwMDNlY21zZ190eXBlICE9IFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aWYgKGFwcGRhdGEuZGF0YSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdGFwcGRhdGEuZGF0YSA9IENNU0dfREFUQShjbXNnKTtcXG4tXFx0XFx0YXBwZGF0YS5sZW4gPSBjbXNnLVxcdTAwM2VjbXNnX2xlbiAtIHNpemVvZihzdHJ1Y3QgY21zZ2hkcik7XFxuK1xcdGlmIChjb25uLVxcdTAwM2VidW5kbGUtXFx1MDAzZWFwcF9kYXRhKSB7XFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0XFx0YXBwZGF0YSA9IChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKVxcbitcXHRcXHRcXHR1c2VyX2tleV9wYXlsb2FkX3JjdShjb25uLVxcdTAwM2VidW5kbGUtXFx1MDAzZWFwcF9kYXRhKTtcXG4rXFx0XFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNmFwcGRhdGEtXFx1MDAzZXJlZikpXFxuK1xcdFxcdFxcdGFwcGRhdGEgPSBOVUxMO1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0aWYgKCFhcHBkYXRhKVxcbitcXHRcXHRcXHRyZXR1cm4gcnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBSWEdLX0VYUElSRUQsIC1FS0VZUkVWT0tFRCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cnhna19hYm9ydF9jaGFsbF9rZXlfZXhwaXJlZCk7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UsIFxcdTAwMjZhcHBkYXRhKTtcXG4rXFx0cmV0ID0gcnhna19jb25zdHJ1Y3RfcmVzcG9uc2UoY29ubiwgY2hhbGxlbmdlLCBhcHBkYXRhKTtcXG4rXFxuK1xcdGlmIChhcHBkYXRhICE9IFxcdTAwMjZkdW1teSlcXG4rXFx0XFx0cHV0X3VzZXJfa2V5X3BheWxvYWQoYXBwZGF0YSk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTEzNDYsOSArMTI4Niw3IEBAIGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGdrX3lmcyA9IHtcXG4gXFx0LmZyZWVfY2FsbF9jcnlwdG9cXHRcXHQ9IHJ4Z2tfZnJlZV9jYWxsX2NyeXB0byxcXG4gXFx0Lmlzc3VlX2NoYWxsZW5nZVxcdFxcdD0gcnhna19pc3N1ZV9jaGFsbGVuZ2UsXFxuIFxcdC52YWxpZGF0ZV9jaGFsbGVuZ2VcXHRcXHQ9IHJ4Z2tfdmFsaWRhdGVfY2hhbGxlbmdlLFxcbi1cXHQuY2hhbGxlbmdlX3RvX3JlY3Ztc2dcXHRcXHQ9IHJ4Z2tfY2hhbGxlbmdlX3RvX3JlY3Ztc2csXFxuLVxcdC5zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlXFx0PSByeGdrX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UsXFxuLVxcdC5yZXNwb25kX3RvX2NoYWxsZW5nZVxcdFxcdD0gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZV9ub19hcHBkYXRhLFxcbitcXHQucmVzcG9uZF90b19jaGFsbGVuZ2VcXHRcXHQ9IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UsXFxuIFxcdC52ZXJpZnlfcmVzcG9uc2VcXHRcXHQ9IHJ4Z2tfdmVyaWZ5X3Jlc3BvbnNlLFxcbiBcXHQuY2xlYXJcXHRcXHRcXHRcXHQ9IHJ4Z2tfY2xlYXIsXFxuIFxcdC5kZWZhdWx0X2RlY29kZV90aWNrZXRcXHRcXHQ9IHJ4Z2tfeWZzX2RlY29kZV90aWNrZXQsXFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeGthZC5jIGIvbmV0L3J4cnBjL3J4a2FkLmNcXG5pbmRleCBjYTlmMGU4MmNiOWFjNy4uZTU1YmZjYTEwZTFhOTQgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL3J4a2FkLmNcXG4rKysgYi9uZXQvcnhycGMvcnhrYWQuY1xcbkBAIC03NDgsMzIgKzc0OCw2IEBAIHN0YXRpYyBpbnQgcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFJ4S0FEIGRvZXMgYXV0b21hdGljIHJlc3BvbnNlIG9ubHkgYXMgdGhlcmUncyBub3RoaW5nIHRvIG1hbmFnZSB0aGF0IGlzbid0XFxuLSAqIGFscmVhZHkgaW4gdGhlIGtleS5cXG4tICovXFxuLXN0YXRpYyBpbnQgcnhrYWRfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpXFxuLXtcXG4tXFx0cmV0dXJuIC1FSU5WQUw7XFxuLX1cXG4tXFxuLS8qKlxcbi0gKiByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UgLSBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHdpdGggYXBwZGF0YVxcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHJlc3BvbmQgdG9cXG4tICpcXG4tICogQWxsb3cgYSBrZXJuZWwgYXBwbGljYXRpb24gdG8gcmVzcG9uZCB0byBhIENIQUxMRU5HRS5cXG4tICpcXG4tICogUmV0dXJuOiAlMCBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxcbi0gKi9cXG4taW50IHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqY3NwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XFxuLVxcbi1cXHRyZXR1cm4gcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2UoY3NwLVxcdTAwM2VjaGFsbC5jb25uLCBjaGFsbGVuZ2UpO1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKTtcXG4tXFxuIC8qIERlY3J5cHQgZGF0YSBpbi1wbGFjZSB1c2luZyBERVMtUENCQy4gIEBsZW4gbXVzdCBiZSBhIG11bHRpcGxlIG9mIDguICovXFxuIFZJU0lCTEVfSUZfS1VOSVQgdm9pZCBkZXNfcGNiY19kZWNyeXB0X2lucGxhY2UoY29uc3Qgc3RydWN0IGRlc19jdHggKmtleSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIF9fbGU2NCBpdiwgdTggKmRhdGEsIHNpemVfdCBsZW4pXFxuQEAgLTExMzQsNyArMTEwOCw2IEBAIGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGthZCA9IHtcXG4gXFx0LmZyZWVfY2FsbF9jcnlwdG9cXHRcXHQ9IHJ4a2FkX2ZyZWVfY2FsbF9jcnlwdG8sXFxuIFxcdC5pc3N1ZV9jaGFsbGVuZ2VcXHRcXHQ9IHJ4a2FkX2lzc3VlX2NoYWxsZW5nZSxcXG4gXFx0LnZhbGlkYXRlX2NoYWxsZW5nZVxcdFxcdD0gcnhrYWRfdmFsaWRhdGVfY2hhbGxlbmdlLFxcbi1cXHQuc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZVxcdD0gcnhrYWRfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSxcXG4gXFx0LnJlc3BvbmRfdG9fY2hhbGxlbmdlXFx0XFx0PSByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZSxcXG4gXFx0LnZlcmlmeV9yZXNwb25zZVxcdFxcdD0gcnhrYWRfdmVyaWZ5X3Jlc3BvbnNlLFxcbiBcXHQuY2xlYXJcXHRcXHRcXHRcXHQ9IHJ4a2FkX2NsZWFyLFxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvc2VuZG1zZy5jIGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xcbmluZGV4IGVkMmM5YTUxMDA1YWRlLi4yMjVlZWM0MTBiZWRjOCAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvc2VuZG1zZy5jXFxuKysrIGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xcbkBAIC00NTMsOSArNDUzLDYgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxcbiBcXG4gc3VjY2VzczpcXG4gXFx0cmV0ID0gY29waWVkO1xcbi1cXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgY2FsbC1cXHUwMDNlZXJyb3IgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXQgPSBjYWxsLVxcdTAwM2VlcnJvcjtcXG4gb3V0OlxcbiBcXHRjYWxsLVxcdTAwM2V0eF9wZW5kaW5nID0gdHhiO1xcbiBcXHRfbGVhdmUoXFxcIiA9ICVkXFxcIiwgcmV0KTtcXG5AQCAtNDY3LDggKzQ2NCwxNCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuIFxcdHJldHVybiBjYWxsLVxcdTAwM2VlcnJvcjtcXG4gXFxuIG1heWJlX2Vycm9yOlxcbi1cXHRpZiAoY29waWVkKVxcbitcXHRpZiAoY29waWVkKSB7XFxuK1xcdFxcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBjYWxsLVxcdTAwM2VlcnJvciBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0cmV0ID0gY2FsbC1cXHUwMDNlZXJyb3I7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuIFxcdFxcdGdvdG8gc3VjY2VzcztcXG4rXFx0fVxcbiBcXHRnb3RvIG91dDtcXG4gXFxuIGVmYXVsdDpcXG5AQCAtNTAzLDYgKzUwNiw4IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4gc3RhdGljIGludCByeHJwY19zZW5kbXNnX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfc2VuZF9wYXJhbXMgKnApXFxuIHtcXG4gXFx0c3RydWN0IGNtc2doZHIgKmNtc2c7XFxuK1xcdGtleV9zZXJpYWxfdCBrZXlfaWQ7XFxuK1xcdGtleV9yZWZfdCBrZXk7XFxuIFxcdGJvb2wgZ290X3VzZXJfSUQgPSBmYWxzZTtcXG4gXFx0aW50IGxlbjtcXG4gXFxuQEAgLTU4Nyw2ICs1OTIsMTggQEAgc3RhdGljIGludCByeHJwY19zZW5kbXNnX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfc2VuZF9wYXJhbXMgKnApXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuK1xcdFxcdGNhc2UgUlhSUENfUkVTUE9OU0VfQVBQREFUQTpcXG4rXFx0XFx0XFx0aWYgKGxlbiAhPSBzaXplb2Yoa2V5X3NlcmlhbF90KSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdGlmIChwLVxcdTAwM2VjYWxsLmFwcF9kYXRhKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0a2V5X2lkID0gKihrZXlfc2VyaWFsX3QgKilDTVNHX0RBVEEoY21zZyk7XFxuK1xcdFxcdFxcdGtleSA9IGxvb2t1cF91c2VyX2tleShrZXlfaWQsIDAsIEtFWV9ORUVEX1NFQVJDSCk7XFxuK1xcdFxcdFxcdGlmIChJU19FUlIoa2V5KSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoa2V5KTtcXG4rXFx0XFx0XFx0cC1cXHUwMDNlY2FsbC5hcHBfZGF0YSA9IGtleV9yZWZfdG9fcHRyKGtleSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG5AQCAtNzg2LDYgKzgwMyw3IEBAIGludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbiBcXG4gZXJyb3JfcmVsZWFzZV9zb2NrOlxcbiBcXHRyZWxlYXNlX3NvY2soXFx1MDAyNnJ4LVxcdTAwM2Vzayk7XFxuK1xcdGtleV9wdXQocC5jYWxsLmFwcF9kYXRhKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3NlcnZlcl9rZXkuYyBiL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmNcXG5pbmRleCAzZWZlMTA0YjE5MzBjYi4uZmM2ZjQ3OGUxNzYyYTcgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL3NlcnZlcl9rZXkuY1xcbisrKyBiL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmNcXG5AQCAtMTczLDQzICsxNzMsMyBAQCBpbnQgcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBrZXkgKmtleXJpbmcpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChyeHJwY19zb2NrX3NldF9zZWN1cml0eV9rZXlyaW5nKTtcXG4tXFxuLS8qKlxcbi0gKiByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2UgLSBTZXQgdGhlIG1hbmFnZS1yZXNwb25zZSBmbGFnIGZvciBhIGtlcm5lbCBzZXJ2aWNlXFxuLSAqIEBzazogVGhlIHNvY2tldCB0byBzZXQgdGhlIGtleXJpbmcgb25cXG4tICogQHNldDogVHJ1ZSB0byBzZXQsIGZhbHNlIHRvIGNsZWFyIHRoZSBmbGFnXFxuLSAqXFxuLSAqIFNldCB0aGUgZmxhZyBvbiBhbiByeHJwYyBzb2NrZXQgdG8gc2F5IHRoYXQgdGhlIGNhbGxlciB3YW50cyB0byBtYW5hZ2UgdGhlXFxuLSAqIFJFU1BPTlNFIHBhY2tldCBhbmQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGl0IG1heSBjb250YWluLiAgU2V0dGluZyB0aGlzXFxuLSAqIG1lYW5zIHRoYXQgcmVjdm1zZygpIHdpbGwgcmV0dXJuIG1lc3NhZ2VzIHdpdGggUlhSUENfQ0hBTExFTkdFRCBpbiB0aGVcXG4tICogY29udHJvbCBtZXNzYWdlIGJ1ZmZlciBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFsbGVuZ2UuXFxuLSAqXFxuLSAqIFRoZSB1c2VyIHNob3VsZCByZXNwb25kIHRvIHRoZSBjaGFsbGVuZ2UgYnkgcGFzc2luZyBSWFJQQ19SRVNQT05EIG9yXFxuLSAqIFJYUlBDX1JFU1BPTkRfQUJPUlQgY29udHJvbCBtZXNzYWdlcyB3aXRoIHNlbmRtc2coKSB0byB0aGUgc2FtZSBjYWxsLlxcbi0gKiBTdXBwbGVtZW50YXJ5IGNvbnRyb2wgbWVzc2FnZXMsIHN1Y2ggYXMgUlhSUENfUkVTUF9SWEdLX0FQUERBVEEsIG1heSBiZVxcbi0gKiBpbmNsdWRlZCB0byBpbmRpY2F0ZSB0aGUgcGFydHMgdGhlIHVzZXIgd2FudHMgdG8gc3VwcGx5Llxcbi0gKlxcbi0gKiBUaGUgc2VydmVyIHdpbGwgYmUgcGFzc2VkIHRoZSByZXNwb25zZSBkYXRhIHdpdGggYSBSWFJQQ19SRVNQT05ERUQgY29udHJvbFxcbi0gKiBtZXNzYWdlIHdoZW4gaXQgZ2V0cyB0aGUgZmlyc3QgZGF0YSBmcm9tIGVhY2ggY2FsbC5cXG4tICpcXG4tICogTm90ZSB0aGF0IHRoaXMgaXMgb25seSBob25vdXJlZCBieSBzZWN1cml0eSBjbGFzc2VzIHRoYXQgbmVlZCBhdXhpbGlhcnkgZGF0YVxcbi0gKiAoZS5nLiBSeEdLKS4gIFRob3NlIHRoYXQgZG9uJ3Qgb2ZmZXIgdGhlIGZhY2lsaXR5IChlLmcuIFJ4S0FEKSByZXNwb25kXFxuLSAqIHdpdGhvdXQgY29uc3VsdGluZyB1c2Vyc3BhY2UuXFxuLSAqXFxuLSAqIFJldHVybjogVGhlIHByZXZpb3VzIHNldHRpbmcuXFxuLSAqL1xcbi1pbnQgcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzZXQpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc2spO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0bG9ja19zb2NrKHNrKTtcXG4tXFx0cmV0ID0gISF0ZXN0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXFx1MDAyNnJ4LVxcdTAwM2VmbGFncyk7XFxuLVxcdGlmIChzZXQpXFxuLVxcdFxcdHNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFxcdTAwMjZyeC1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdGNsZWFyX2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXFx1MDAyNnJ4LVxcdTAwM2VmbGFncyk7XFxuLVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tRVhQT1JUX1NZTUJPTChyeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2UpO1xcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jIGIvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuY1xcbmluZGV4IDZmODhiNTA3ZjkyNzkxLi45MGMxYmQ1ZDdkZmVjZiAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXFxuKysrIGIvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuY1xcbkBAIC02Nyw2ICs2Nyw3IEBAIGludCB1c2VyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuIFxcdHVwYXlsb2FkID0ga21hbGxvY19mbGV4KCp1cGF5bG9hZCwgZGF0YSwgZGF0YWxlbik7XFxuIFxcdGlmICghdXBheWxvYWQpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnVwYXlsb2FkLVxcdTAwM2VyZWYsIDEpO1xcbiBcXG4gXFx0LyogYXR0YWNoIHRoZSBkYXRhICovXFxuIFxcdHByZXAtXFx1MDAzZXF1b3RhbGVuID0gZGF0YWxlbjtcXG5AQCAtODgsMTIgKzg5LDIyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfZnJlZV9wcmVwYXJzZSk7XFxuIFxcbiBzdGF0aWMgdm9pZCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbiB7XFxuLVxcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkO1xcbitcXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZCA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCwgcmN1KTtcXG4gXFxuLVxcdHBheWxvYWQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQsIHJjdSk7XFxuIFxcdGtmcmVlX3NlbnNpdGl2ZShwYXlsb2FkKTtcXG4gfVxcbiBcXG4rLypcXG4rICogRnJlZSBhIHVzZXIgZGVmaW5lZCBrZXkgcGF5bG9hZC5cXG4rICovXFxuK3ZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpXFxuK3tcXG4rXFx0aWYgKHBheWxvYWQgXFx1MDAyNlxcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZwYXlsb2FkLVxcdTAwM2VyZWYpKVxcbitcXHRcXHRjYWxsX3JjdShcXHUwMDI2cGF5bG9hZC1cXHUwMDNlcmN1LCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3UpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHB1dF91c2VyX2tleV9wYXlsb2FkKTtcXG4rXFxuIC8qXFxuICAqIHVwZGF0ZSBhIHVzZXIgZGVmaW5lZCBrZXlcXG4gICogLSB0aGUga2V5J3Mgc2VtYXBob3JlIGlzIHdyaXRlLWxvY2tlZFxcbkBAIC0xMTUsOCArMTI2LDcgQEAgaW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcXG4gXFx0cmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgcHJlcC1cXHUwMDNlcGF5bG9hZC5kYXRhWzBdKTtcXG4gXFx0cHJlcC1cXHUwMDNlcGF5bG9hZC5kYXRhWzBdID0gTlVMTDtcXG4gXFxuLVxcdGlmICh6YXApXFxuLVxcdFxcdGNhbGxfcmN1KFxcdTAwMjZ6YXAtXFx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcXG4rXFx0cHV0X3VzZXJfa2V5X3BheWxvYWQoemFwKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX3VwZGF0ZSk7XFxuQEAgLTEzNCw3ICsxNDQsNyBAQCB2b2lkIHVzZXJfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSlcXG4gXFxuIFxcdGlmICh1cGF5bG9hZCkge1xcbiBcXHRcXHRyY3VfYXNzaWduX2tleXBvaW50ZXIoa2V5LCBOVUxMKTtcXG4tXFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnVwYXlsb2FkLVxcdTAwM2VyY3UsIHVzZXJfZnJlZV9wYXlsb2FkX3JjdSk7XFxuK1xcdFxcdHB1dF91c2VyX2tleV9wYXlsb2FkKHVwYXlsb2FkKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0xNDcsOSArMTU3LDggQEAgdm9pZCB1c2VyX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KVxcbiB7XFxuIFxcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1cGF5bG9hZCA9IGtleS1cXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xcbiBcXG4tXFx0a2ZyZWVfc2Vuc2l0aXZlKHVwYXlsb2FkKTtcXG4rXFx0cHV0X3VzZXJfa2V5X3BheWxvYWQodXBheWxvYWQpO1xcbiB9XFxuLVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2Rlc3Ryb3kpO1xcbiBcXG4gLypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6NTM6NTMuODAwNTUwOTY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU1NDAwMTM1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiUlhLQURcIixcbiAgICBcIlJYR0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhXCIsXG4gICAgXCJhZnNfY3JlYXRlX3lmc19jbV90b2tlblwiLFxuICAgIFwicnhna19yZXNwb25kX3RvX2NoYWxsZW5nZVwiLFxuICAgIFwicnhycGNfc2VuZG1zZ19jbXNnXCIsXG4gICAgXCJwdXRfdXNlcl9rZXlfcGF5bG9hZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRlMgYW5kIFJ4UlBDIHN1YnN5c3RlbXMgdG8gaGFuZGxlIFJ4R0sgYXBwbGljYXRpb24gZGF0YSBpbnRlcm5hbGx5IHJhdGhlciB0aGFuIHJlbHlpbmcgb24gdXNlcnNwYWNlIE9PQiBtZXNzYWdlcy4gSXQgaW50cm9kdWNlcyBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAgdG8gZ2VuZXJhdGUgdGhlIGFwcCBkYXRhIGFuZCBwYXNzZXMgaXQgdG8gYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29yayBhbmQgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IGFsdGVycyBleGVjdXRpb24gZmxvdyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNmIxZTJkOWUxMjM5OTRhYjJkN2FhODg4NGUzNmZlOGYzNDMwYzU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxNzo1Mzo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jbV9zZWN1cml0eS5jIGIvZnMvYWZzL2NtX3NlY3VyaXR5LmNcbmluZGV4IDEwMzE2OGM3MGRkNGRmLi5kYjJhM2IzMGYwMjA5NCAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXG4rKysgYi9mcy9hZnMvY21fc2VjdXJpdHkuY1xuQEAgLTYsNyArNiw5IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2V5LXR5cGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2NyeXB0by9rcmI1LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NrZXlzL3VzZXItdHlwZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbiAjaW5jbHVkZSBcImFmc19jbS5oXCJcbiAjaW5jbHVkZSBcImFmc19mcy5oXCJcbkBAIC0xOSw5NyArMjEsNjYgQEBcbiAjZGVmaW5lIHhkcl9sZW5fb2JqZWN0KHgpICg0ICsgcm91bmRfdXAoKHgpLCBzaXplb2YoX19iZTMyKSkpXG4gXG4gI2lmZGVmIENPTkZJR19SWEdLXG4tc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcik7XG4rc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCB1MzIga3JiNV9lbmN0eXBlKTtcbiAjZW5kaWZcbiBcbiAvKlxuLSAqIFJlc3BvbmQgdG8gYW4gUnhHSyBjaGFsbGVuZ2UsIGFkZGluZyBhcHBkYXRhLlxuKyAqIENyZWF0ZSB0aGUgYXBwbGljYXRpb24gZGF0YSB0byBnbyBpbiBhIFJFU1BPTlNFIHBhY2tldCBhIHNlcnZlcidzIENIQUxMRU5HRVxuKyAqIGZyb20gdGhlIHBhcmFtZXRlcnMgY29udGFpbmVkIGluIGEga2V5LiAgVGhlIGtleSBzcGVjaWZpZXMgdGhlIHNlY3VyaXR5XG4rICogaW5kZXggYW5kIG90aGVyIGFwcHJvcHJpYXRlIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZW5jb2RpbmcgdHlwZSBmb3IgUnhHSy5cbiAgKi9cbi1zdGF0aWMgaW50IGFmc19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxuK2ludCBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBrZXkgKmtleSlcbiB7XG4tI2lmZGVmIENPTkZJR19SWEdLXG4tXHRzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9O1xuLVx0c3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcjtcbi0jZW5kaWZcbi1cdHN0cnVjdCByeHJwY19wZWVyICpwZWVyO1xuLVx0dW5zaWduZWQgbG9uZyBwZWVyX2RhdGE7XG4tXHR1MTYgc2VydmljZV9pZDtcbitcdHUzMiBrcmI1X2VuY3R5cGU7XG4rXHRpbnQgcmV0O1xuIFx0dTggc2VjdXJpdHlfaW5kZXg7XG4gXG4tXHRyeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSwgXHUwMDI2cGVlciwgXHUwMDI2cGVlcl9kYXRhLFxuLVx0XHRcdFx0ICAgICBcdTAwMjZzZXJ2aWNlX2lkLCBcdTAwMjZzZWN1cml0eV9pbmRleCk7XG4tXG4tXHRfZW50ZXIoXCIldSwldVwiLCBzZXJ2aWNlX2lkLCBzZWN1cml0eV9pbmRleCk7XG4tXG4tXHRzd2l0Y2ggKHNlcnZpY2VfaWQpIHtcbi1cdFx0LyogV2UgZG9uJ3Qgc2VuZCBDTV9TRVJWSUNFIFJQQ3MsIHNvIGRvbid0IGV4cGVjdCBhIGNoYWxsZW5nZVxuLVx0XHQgKiB0aGVyZWZyb20uXG4tXHRcdCAqL1xuLVx0Y2FzZSBGU19TRVJWSUNFOlxuLVx0Y2FzZSBWTF9TRVJWSUNFOlxuLVx0Y2FzZSBZRlNfRlNfU0VSVklDRTpcbi1cdGNhc2UgWUZTX1ZMX1NFUlZJQ0U6XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0cHJfd2FybihcIkNhbid0IHJlc3BvbmQgdG8gdW5rbm93biBjaGFsbGVuZ2UgJXU6JXVcIixcbi1cdFx0XHRzZXJ2aWNlX2lkLCBzZWN1cml0eV9pbmRleCk7XG4tXHRcdHJldHVybiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFJYX1VTRVJfQUJPUlQsIC1FUFJPVE8sXG4tXHRcdFx0XHRcdFx0ICAgICBhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzKTtcbi1cdH1cbitcdGlmICgha2V5KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFJlYWQgQVBQREFUQSBmbGFnIGJlZm9yZSBjbV9yeGdrX2FwcGRhdGEgKi9cbitcdGlmICh0ZXN0X2JpdF9hY3F1aXJlKEFGU19TRVJWRVJfRkxfQVBQREFUQSwgXHUwMDI2c2VydmVyLVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyeHJwY19rZXJuZWxfcXVlcnlfa2V5KGtleSwgXHUwMDI2c2VjdXJpdHlfaW5kZXgsIFx1MDAyNmtyYjVfZW5jdHlwZSk7XG4rXG4rXHRfZW50ZXIoXCIldSwldVwiLCBzZWN1cml0eV9pbmRleCwga3JiNV9lbmN0eXBlKTtcbiBcbi1cdHN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHtcbitcdHJldCA9IDA7XG4rXHRtdXRleF9sb2NrKFx1MDAyNnNlcnZlci1cdTAwM2VjbV90b2tlbl9sb2NrKTtcbitcbitcdC8qIFJlYWQgQVBQREFUQSBmbGFnIGJlZm9yZSBjbV9yeGdrX2FwcGRhdGEgKi9cbitcdGlmICghdGVzdF9iaXRfYWNxdWlyZShBRlNfU0VSVkVSX0ZMX0FQUERBVEEsIFx1MDAyNnNlcnZlci1cdTAwM2VmbGFncykpIHtcbitcdFx0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xuK1x0XHRjYXNlIDA6XG4rXHRcdFx0YnJlYWs7XG4gI2lmZGVmIENPTkZJR19SWEtBRFxuLVx0Y2FzZSBSWFJQQ19TRUNVUklUWV9SWEtBRDpcbi1cdFx0cmV0dXJuIHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UpO1xuK1x0XHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOlxuK1x0XHRcdHNldF9iaXQoQUZTX1NFUlZFUl9GTF9BUFBEQVRBLCBcdTAwMjZzZXJ2ZXItXHUwMDNlZmxhZ3MpO1xuK1x0XHRcdGJyZWFrO1xuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfUlhHS1xuLVx0Y2FzZSBSWFJQQ19TRUNVUklUWV9SWEdLOlxuLVx0XHRyZXR1cm4gcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlLCBcdTAwMjZhcHBkYXRhKTtcbi1cbi1cdGNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6XG4tXHRcdHN3aXRjaCAoc2VydmljZV9pZCkge1xuLVx0XHRjYXNlIEZTX1NFUlZJQ0U6XG4tXHRcdGNhc2UgWUZTX0ZTX1NFUlZJQ0U6XG4tXHRcdFx0c2VydmVyID0gKHN0cnVjdCBhZnNfc2VydmVyICopcGVlcl9kYXRhO1xuLVx0XHRcdGlmICghc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKSB7XG4tXHRcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnNlcnZlci1cdTAwM2VjbV90b2tlbl9sb2NrKTtcbi1cdFx0XHRcdGlmICghc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKVxuLVx0XHRcdFx0XHRhZnNfY3JlYXRlX3lmc19jbV90b2tlbihjaGFsbGVuZ2UsIHNlcnZlcik7XG4tXHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2c2VydmVyLVx1MDAzZWNtX3Rva2VuX2xvY2spO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKVxuLVx0XHRcdFx0YXBwZGF0YSA9IHNlcnZlci1cdTAwM2VjbV9yeGdrX2FwcGRhdGE7XG4rXHRcdGNhc2UgUlhSUENfU0VDVVJJVFlfUlhHSzpcbitcdFx0XHRzZXRfYml0KEFGU19TRVJWRVJfRkxfQVBQREFUQSwgXHUwMDI2c2VydmVyLVx1MDAzZWZsYWdzKTtcbiBcdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRyZXR1cm4gcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlLCBcdTAwMjZhcHBkYXRhKTtcbi0jZW5kaWZcbiBcbi1cdGRlZmF1bHQ6XG4tXHRcdHJldHVybiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFJYX1VTRVJfQUJPUlQsIC1FUFJPVE8sXG4tXHRcdFx0XHRcdFx0ICAgICBhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzKTtcbi1cdH1cbi19XG4rXHRcdGNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6XG4rXHRcdFx0cmV0ID0gYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc2VydmVyLCBrcmI1X2VuY3R5cGUpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRzZXRfYml0KEFGU19TRVJWRVJfRkxfQVBQREFUQSwgXHUwMDI2c2VydmVyLVx1MDAzZWZsYWdzKTtcbitcdFx0XHRicmVhaztcbisjZW5kaWZcbiBcbi0vKlxuLSAqIFByb2Nlc3MgdGhlIE9PQiBtZXNzYWdlIHF1ZXVlLCBwcm9jZXNzaW5nIGNoYWxsZW5nZSBwYWNrZXRzLlxuLSAqL1xuLXZvaWQgYWZzX3Byb2Nlc3Nfb29iX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi17XG4tXHRzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZnNfbmV0LCByeF9vb2Jfd29yayk7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqb29iO1xuLVx0ZW51bSByeHJwY19vb2JfdHlwZSB0eXBlO1xuLVxuLVx0d2hpbGUgKFJFQURfT05DRShuZXQtXHUwMDNlbGl2ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgKG9vYiA9IHJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYihuZXQtXHUwMDNlc29ja2V0LCBcdTAwMjZ0eXBlKSkpIHtcbi1cdFx0c3dpdGNoICh0eXBlKSB7XG4tXHRcdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcbi1cdFx0XHRhZnNfcmVzcG9uZF90b19jaGFsbGVuZ2Uob29iKTtcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRXQVJOX09OX09OQ0UoMSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbi1cdFx0cnhycGNfa2VybmVsX2ZyZWVfb29iKG9vYik7XG4gXHR9XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2c2VydmVyLVx1MDAzZWNtX3Rva2VuX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19SWEdLXG5AQCAtMTc3LDM3ICsxNDgsMzQgQEAgaW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldClcbiAvKlxuICAqIENyZWF0ZSBhbiBZRlMgUnhHSyBHU1MgdG9rZW4gdG8gdXNlIGFzIGEgdGlja2V0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZXNlcnZlci5cbiAgKi9cbi1zdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyKVxuK3N0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGVuY3R5cGUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY29ubl9rcmI1LCAqdG9rZW5fa3JiNTtcbiBcdGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqdG9rZW5fa2V5O1xuIFx0c3RydWN0IGNyeXB0b19hZWFkICphZWFkO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IHNnO1xuIFx0c3RydWN0IGFmc19uZXQgKm5ldCA9IHNlcnZlci1cdTAwM2VjZWxsLVx1MDAzZW5ldDtcbi1cdGNvbnN0IHN0cnVjdCBrZXkgKmtleSA9IG5ldC1cdTAwM2Vmc19jbV90b2tlbl9rZXk7XG4rXHRjb25zdCBzdHJ1Y3Qga2V5ICpjbV9rZXkgPSBuZXQtXHUwMDNlZnNfY21fdG9rZW5fa2V5O1xuK1x0c3RydWN0IGtleSAqYXBwZGF0YV9rZXkgPSBOVUxMO1xuIFx0c2l6ZV90IGtleXNpemUsIHV1aWRzaXplLCBhdXRoc2l6ZSwgdG9rc2l6ZSwgZW5jc2l6ZSwgY29udHNpemUsIGFkYXRhc2l6ZSwgb2Zmc2V0O1xuIFx0X19iZTMyIGNhcHNbMV0gPSB7XG4gXHRcdFswXSA9IGh0b25sKEFGU19DQVBfRVJST1JfVFJBTlNMQVRJT04pLFxuIFx0fTtcbiBcdF9fYmUzMiAqeGRyO1xuIFx0dm9pZCAqYXBwZGF0YSwgKkswLCAqZW5jYmFzZTtcbi1cdHUzMiBlbmN0eXBlO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICgha2V5KVxuK1x0aWYgKCFjbV9rZXkpXG4gXHRcdHJldHVybiAtRU5PS0VZO1xuIFxuIFx0LyogQXNzdW1lIHRoYXQgdGhlIGZpbGVzZXJ2ZXIgaXMgaGFwcHkgdG8gdXNlIHRoZSBzYW1lIGVuY29kaW5nIHR5cGUgYXNcbiBcdCAqIHdlIHdlcmUgdG9sZCB0byB1c2UgYnkgdGhlIHRva2VuIG9idGFpbmVkIGJ5IHRoZSB1c2VyLlxuIFx0ICovXG4tXHRlbmN0eXBlID0gcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSk7XG4tXG4gXHRjb25uX2tyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZW5jdHlwZSk7XG4gXHRpZiAoIWNvbm5fa3JiNSlcbiBcdFx0cmV0dXJuIC1FTk9QS0c7XG4tXHR0b2tlbl9rcmI1ID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbi1cdHRva2VuX2tleSA9IChjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKilcdTAwMjZrZXktXHUwMDNlcGF5bG9hZC5kYXRhWzJdO1xuK1x0dG9rZW5fa3JiNSA9IGNtX2tleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF07XG4rXHR0b2tlbl9rZXkgPSAoY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICopXHUwMDI2Y21fa2V5LVx1MDAzZXBheWxvYWQuZGF0YVsyXTtcbiBcbiBcdC8qIHN0cnVjdCByeGdrX2tleSB7XG4gXHQgKlx0YWZzX3VpbnQzMlx0ZW5jdHlwZTtcbkBAIC0zMjcsOSArMjk1LDIyIEBAIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X2FlYWQ7XG4gXG4tXHRzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmxlbiAgPSBhZGF0YXNpemU7XG4tXHRzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEgPSBhcHBkYXRhO1xuLVx0YXBwZGF0YSA9IE5VTEw7XG4rXHRhcHBkYXRhX2tleSA9IGtleV9hbGxvYyhcdTAwMjZrZXlfdHlwZV91c2VyLCBcInJ4cnBjOiBhZnMgcnhnayBhcHBkYXRhXCIsXG4rXHRcdFx0XHRHTE9CQUxfUk9PVF9VSUQsIEdMT0JBTF9ST09UX0dJRCwgY3VycmVudF9jcmVkKCksXG4rXHRcdFx0XHRLRVlfUE9TX1ZJRVcgfCBLRVlfUE9TX1NFQVJDSCB8IEtFWV9VU1JfVklFVyxcbitcdFx0XHRcdEtFWV9BTExPQ19OT1RfSU5fUVVPVEEsIE5VTEwpO1xuK1x0aWYgKElTX0VSUihhcHBkYXRhX2tleSkpIHtcbitcdFx0cmV0ID0gUFRSX0VSUihhcHBkYXRhX2tleSk7XG4rXHRcdGdvdG8gb3V0X2FlYWQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBrZXlfaW5zdGFudGlhdGVfYW5kX2xpbmsoYXBwZGF0YV9rZXksIGFwcGRhdGEsIGFkYXRhc2l6ZSwgTlVMTCwgTlVMTCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGtleV9wdXQoYXBwZGF0YV9rZXkpO1xuK1x0XHRnb3RvIG91dF9hZWFkO1xuK1x0fVxuK1xuK1x0c2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YSA9IGFwcGRhdGFfa2V5O1xuIFxuIG91dF9hZWFkOlxuIFx0Y3J5cHRvX2ZyZWVfYWVhZChhZWFkKTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvY21zZXJ2aWNlLmMgYi9mcy9hZnMvY21zZXJ2aWNlLmNcbmluZGV4IDU1NDBhZTFjYWQ1OTlhLi5kNTc5YTY2NWUzZGEwOSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9jbXNlcnZpY2UuY1xuKysrIGIvZnMvYWZzL2Ntc2VydmljZS5jXG5AQCAtMzY0LDcgKzM2NCw4IEBAIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiBcdGlmICghYWZzX2NoZWNrX2NhbGxfc3RhdGUoY2FsbCwgQUZTX0NBTExfU1ZfUkVQTFlJTkcpKVxuIFx0XHRyZXR1cm4gYWZzX2lvX2Vycm9yKGNhbGwsIGFmc19pb19lcnJvcl9jbV9yZXBseSk7XG4gXG4tXHRpZiAobWVtY21wKGNhbGwtXHUwMDNlcmVxdWVzdCwgXHUwMDI2Y2FsbC1cdTAwM2VzZXJ2ZXItXHUwMDNlX3V1aWQsIHNpemVvZihjYWxsLVx1MDAzZXNlcnZlci1cdTAwM2VfdXVpZCkpICE9IDApIHtcbitcdGlmIChjYWxsLVx1MDAzZXNlcnZlciBcdTAwMjZcdTAwMjZcbitcdCAgICBtZW1jbXAoY2FsbC1cdTAwM2VyZXF1ZXN0LCBcdTAwMjZjYWxsLVx1MDAzZXNlcnZlci1cdTAwM2VfdXVpZCwgc2l6ZW9mKGNhbGwtXHUwMDNlc2VydmVyLVx1MDAzZV91dWlkKSkgIT0gMCkge1xuIFx0XHRwcl9ub3RpY2UoXCJDYWxsYmFjayBVVUlEIGRvZXMgbm90IG1hdGNoIGZpbGVzZXJ2ZXIgVVVJRFxcblwiKTtcbiBcdFx0dHJhY2VfYWZzX2NtX25vX3NlcnZlcl91KGNhbGwsIGNhbGwtXHUwMDNlcmVxdWVzdCk7XG4gXHRcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc19wcm9iZS5jIGIvZnMvYWZzL2ZzX3Byb2JlLmNcbmluZGV4IGE5MWFkMTkzOGQwNzg4Li5lMjZmN2YxZTMwYTIzYSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9mc19wcm9iZS5jXG4rKysgYi9mcy9hZnMvZnNfcHJvYmUuY1xuQEAgLTI0MSw5ICsyNDEsMTQgQEAgaW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4gXHRzdHJ1Y3QgYWZzX2VuZHBvaW50X3N0YXRlICplc3RhdGUsICpvbGQ7XG4gXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0ID0gTlVMTCwgKmFsaXN0O1xuIFx0dW5zaWduZWQgbG9uZyB1bnByb2JlZDtcbitcdGludCByZXQ7XG4gXG4gXHRfZW50ZXIoXCIlcFVcIiwgXHUwMDI2c2VydmVyLVx1MDAzZXV1aWQpO1xuIFxuK1x0cmV0ID0gYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzZXJ2ZXIsIGtleSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0ZXN0YXRlID0ga3phbGxvY19vYmooKmVzdGF0ZSk7XG4gXHRpZiAoIWVzdGF0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxuaW5kZXggMGI3MmE4NTY2Mjk5OTIuLjNlNjFjNTQzYTUwYzQ4IDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcbisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5AQCAtMjgzLDcgKzI4Myw2IEBAIHN0cnVjdCBhZnNfbmV0IHtcbiBcdHN0cnVjdCBzb2NrZXRcdFx0KnNvY2tldDtcbiBcdHN0cnVjdCBhZnNfY2FsbFx0XHQqc3BhcmVfaW5jb21pbmdfY2FsbDtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdFx0Y2hhcmdlX3ByZWFsbG9jYXRpb25fd29yaztcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdFx0cnhfb29iX3dvcms7XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0c29ja2V0X211dGV4O1xuIFx0YXRvbWljX3RcdFx0bnJfb3V0c3RhbmRpbmdfY2FsbHM7XG4gXHRhdG9taWNfdFx0XHRucl9zdXBlcmJsb2NrcztcbkBAIC01NDcsNyArNTQ2LDcgQEAgc3RydWN0IGFmc19zZXJ2ZXIge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0XHRkZXN0cm95ZXI7XHQvKiBXb3JrIGl0ZW0gdG8gdHJ5IGFuZCBkZXN0cm95IGEgc2VydmVyICovXG4gXHRzdHJ1Y3QgdGltZXJfbGlzdFx0dGltZXI7XHRcdC8qIE1hbmFnZW1lbnQgdGltZXIgKi9cbiBcdHN0cnVjdCBtdXRleFx0XHRjbV90b2tlbl9sb2NrO1x0LyogTG9jayBnb3Zlcm5pbmcgY3JlYXRpb24gb2YgYXBwZGF0YSAqL1xuLVx0c3RydWN0IGtyYjVfYnVmZmVyXHRjbV9yeGdrX2FwcGRhdGE7IC8qIEFwcGRhdGEgdG8gYmUgaW5jbHVkZWQgaW4gUkVTUE9OU0UgcGFja2V0ICovXG4rXHRzdHJ1Y3Qga2V5XHRcdCpjbV9yeGdrX2FwcGRhdGE7IC8qIEFwcGRhdGEgdG8gYmUgaW5jbHVkZWQgaW4gUkVTUE9OU0UgcGFja2V0ICovXG4gXHR0aW1lNjRfdFx0XHR1bnVzZV90aW1lO1x0LyogVGltZSBhdCB3aGljaCBsYXN0IHVudXNlZCAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRmbGFncztcbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfUkVTUE9ORElORyAwXHRcdC8qIFRoZSBzZXJ2ZXIgaXMgcmVzcG9uZGluZyAqL1xuQEAgLTU1OSw2ICs1NTgsNyBAQCBzdHJ1Y3QgYWZzX3NlcnZlciB7XG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX05PVF9GT1VORFx0Nlx0XHQvKiBWTCBzZXJ2ZXIgc2F5cyBubyBzdWNoIHNlcnZlciAqL1xuICNkZWZpbmUgQUZTX1NFUlZFUl9GTF9WTF9GQUlMXHQ3XHRcdC8qIEZhaWxlZCB0byBhY2Nlc3MgVkwgc2VydmVyICovXG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX01BWV9IQVZFX0NCIDhcdFx0LyogTWF5IGhhdmUgY2FsbGJhY2tzIG9uIHRoaXMgZmlsZXNlcnZlciAqL1xuKyNkZWZpbmUgQUZTX1NFUlZFUl9GTF9BUFBEQVRBXHQ5XHRcdC8qIFNldCBpZiBhcHBkYXRhIGNyZWF0ZWQgKi9cbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfSVNfWUZTXHQxNlx0XHQvKiBTZXJ2ZXIgaXMgWUZTIG5vdCBBRlMgKi9cbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfTk9fSUJVTEtcdDE3XHRcdC8qIEZpbGVzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IEZTLklubGluZUJ1bGtTdGF0dXMgKi9cbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfTk9fUk0yXHQxOFx0XHQvKiBGaWxlc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBZRlMuUmVtb3ZlRmlsZTIgKi9cbkBAIC0xMDkwLDcgKzEwOTAsNyBAQCBleHRlcm4gYm9vbCBhZnNfY21faW5jb21pbmdfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKik7XG4gLypcbiAgKiBjbV9zZWN1cml0eS5jXG4gICovXG4tdm9pZCBhZnNfcHJvY2Vzc19vb2JfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbitpbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpO1xuICNpZmRlZiBDT05GSUdfUlhHS1xuIGludCBhZnNfY3JlYXRlX3Rva2VuX2tleShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpO1xuICNlbHNlXG5AQCAtMTQxNywyMSArMTQxNyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfc2VlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBlbnVtIGFmc19jYWxsX3RyYWNlIHdoeSlcbiBcdFx0ICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLFxuLVx0XHRcdFx0ICAgIGdmcF90IGdmcClcbi17XG4tXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuLVxuLVx0b3AtXHUwMDNlY2FsbFx0PSBjYWxsO1xuLVx0b3AtXHUwMDNldHlwZVx0PSBjYWxsLVx1MDAzZXR5cGU7XG4tXHRjYWxsLVx1MDAzZW9wXHQ9IG9wO1xuLVx0Y2FsbC1cdTAwM2VrZXlcdD0gb3AtXHUwMDNla2V5O1xuLVx0Y2FsbC1cdTAwM2VpbnRyXHQ9ICEob3AtXHUwMDNlZmxhZ3MgXHUwMDI2IEFGU19PUEVSQVRJT05fVU5JTlRSKTtcbi1cdGNhbGwtXHUwMDNlcGVlclx0PSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtXHUwMDNlYWRkcnNbb3AtXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XG4tXHRjYWxsLVx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cdTAwM2VzZXJ2ZXItXHUwMDNlc2VydmljZV9pZDtcbi1cdGFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcbiB7XG4gXHRjYWxsLVx1MDAzZWlvdl9sZW4gPSBzaXplO1xuQEAgLTE3NjMsNiArMTc0OCwyMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqQUZTX1ZOT0RFX1RPX0koc3RydWN0IGFmc192bm9kZSAqdm5vZGUpXG4gXHRyZXR1cm4gXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLFxuK1x0XHRcdFx0ICAgIGdmcF90IGdmcClcbit7XG4rXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuK1xuK1x0b3AtXHUwMDNlY2FsbFx0PSBjYWxsO1xuK1x0b3AtXHUwMDNldHlwZVx0PSBjYWxsLVx1MDAzZXR5cGU7XG4rXHRjYWxsLVx1MDAzZW9wXHQ9IG9wO1xuK1x0Y2FsbC1cdTAwM2VzZXJ2ZXJcdD0gYWZzX3VzZV9zZXJ2ZXIob3AtXHUwMDNlc2VydmVyLCBmYWxzZSwgYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCk7XG4rXHRjYWxsLVx1MDAzZWtleVx0PSBvcC1cdTAwM2VrZXk7XG4rXHRjYWxsLVx1MDAzZWludHJcdD0gIShvcC1cdTAwM2VmbGFncyBcdTAwMjYgQUZTX09QRVJBVElPTl9VTklOVFIpO1xuK1x0Y2FsbC1cdTAwM2VwZWVyXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cdTAwM2VhZGRyc1tvcC1cdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcbitcdGNhbGwtXHUwMDNlc2VydmljZV9pZCA9IG9wLVx1MDAzZXNlcnZlci1cdTAwM2VzZXJ2aWNlX2lkO1xuK1x0YWZzX21ha2VfY2FsbChjYWxsLCBnZnApO1xuK31cbitcbiAvKlxuICAqIE5vdGUgdGhhdCBhIGRlbnRyeSBnb3QgY2hhbmdlZC4gIFdlIG5lZWQgdG8gc2V0IGRfZnNkYXRhIHRvIHRoZSBkYXRhIHZlcnNpb25cbiAgKiBudW1iZXIgZGVyaXZlZCBmcm9tIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4gIEl0IGRvZXNuJ3QgbWF0dGVyIGlmXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL21haW4uYyBiL2ZzL2Fmcy9tYWluLmNcbmluZGV4IDdhODgzYzU5OTc2ZmYyLi42MzUzZmVhYTVmYjRiNSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9tYWluLmNcbisrKyBiL2ZzL2Fmcy9tYWluLmNcbkBAIC03Myw3ICs3Myw2IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBhZnNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0X25zKVxuIFx0Z2VuZXJhdGVfcmFuZG9tX3V1aWQoKHVuc2lnbmVkIGNoYXIgKilcdTAwMjZuZXQtXHUwMDNldXVpZCk7XG4gXG4gXHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZWNoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcmssIGFmc19jaGFyZ2VfcHJlYWxsb2NhdGlvbik7XG4tXHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZXJ4X29vYl93b3JrLCBhZnNfcHJvY2Vzc19vb2JfcXVldWUpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZuZXQtXHUwMDNlc29ja2V0X211dGV4KTtcbiBcbiBcdG5ldC1cdTAwM2VjZWxscyA9IFJCX1JPT1Q7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3J4cnBjLmMgYi9mcy9hZnMvcnhycGMuY1xuaW5kZXggZDgyOTE2NjU3YTNkZGYuLmFlNDhjMTViM2RiOTQzIDEwMDY0NFxuLS0tIGEvZnMvYWZzL3J4cnBjLmNcbisrKyBiL2ZzL2Fmcy9yeHJwYy5jXG5AQCAtMjUsMTQgKzI1LDEyIEBAIHN0YXRpYyB2b2lkIGFmc19wcm9jZXNzX2FzeW5jX2NhbGwoc3RydWN0IHdvcmtfc3RydWN0ICopO1xuIHN0YXRpYyB2b2lkIGFmc19yeF9uZXdfY2FsbChzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgcnhycGNfY2FsbCAqLCB1bnNpZ25lZCBsb25nKTtcbiBzdGF0aWMgdm9pZCBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbChzdHJ1Y3QgcnhycGNfY2FsbCAqLCB1bnNpZ25lZCBsb25nKTtcbiBzdGF0aWMgdm9pZCBhZnNfcnhfYXR0YWNoKHN0cnVjdCByeHJwY19jYWxsICpyeGNhbGwsIHVuc2lnbmVkIGxvbmcgdXNlcl9jYWxsX0lEKTtcbi1zdGF0aWMgdm9pZCBhZnNfcnhfbm90aWZ5X29vYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvb2IpO1xuIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY21fb3BfaWQoc3RydWN0IGFmc19jYWxsICopO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnhycGNfa2VybmVsX29wcyBhZnNfcnhycGNfY2FsbGJhY2tfb3BzID0ge1xuIFx0Lm5vdGlmeV9uZXdfY2FsbFx0PSBhZnNfcnhfbmV3X2NhbGwsXG4gXHQuZGlzY2FyZF9uZXdfY2FsbFx0PSBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbCxcbiBcdC51c2VyX2F0dGFjaF9jYWxsXHQ9IGFmc19yeF9hdHRhY2gsXG4tXHQubm90aWZ5X29vYlx0XHQ9IGFmc19yeF9ub3RpZnlfb29iLFxuIH07XG4gXG4gLyogYXN5bmNocm9ub3VzIGluY29taW5nIGNhbGwgaW5pdGlhbCBwcm9jZXNzaW5nICovXG5AQCAtNzQsMTAgKzcyLDYgQEAgaW50IGFmc19vcGVuX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJvcl8yO1xuIFxuLVx0cmV0ID0gcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHNvY2tldC1cdTAwM2VzaywgdHJ1ZSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycm9yXzI7XG4tXG4gXHRyZXQgPSBhZnNfY3JlYXRlX3Rva2VuX2tleShuZXQsIHNvY2tldCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRwcl9lcnIoXCJDb3VsZG4ndCBjcmVhdGUgUnhHSyBDTSBrZXk6ICVkXFxuXCIsIHJldCk7XG5AQCAtMTI4LDcgKzEyMiw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFx0X2VudGVyKFwiXCIpO1xuIFxuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZuZXQtXHUwMDNlY2hhcmdlX3ByZWFsbG9jYXRpb25fd29yayk7XG4tXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5ldC1cdTAwM2VyeF9vb2Jfd29yayk7XG4gXHQvKiBGdXR1cmUgd29yayBpdGVtcyBzaG91bGQgbm93IHNlZSAtXHUwMDNlbGl2ZSBpcyBmYWxzZS4gKi9cbiBcbiBcdGtlcm5lbF9saXN0ZW4obmV0LVx1MDAzZXNvY2tldCwgMCk7XG5AQCAtMTQ5LDcgKzE0Miw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFxuIFx0a2VybmVsX3NvY2tfc2h1dGRvd24obmV0LVx1MDAzZXNvY2tldCwgU0hVVF9SRFdSKTtcbiBcdGZsdXNoX3dvcmtxdWV1ZShhZnNfYXN5bmNfY2FsbHMpO1xuLVx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZuZXQtXHUwMDNlcnhfb29iX3dvcmspO1xuIFx0bmV0LVx1MDAzZXNvY2tldC1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgPSBOVUxMO1xuIFx0c29ja19yZWxlYXNlKG5ldC1cdTAwM2Vzb2NrZXQpO1xuIFx0a2V5X3B1dChuZXQtXHUwMDNlZnNfY21fdG9rZW5fa2V5KTtcbkBAIC0zNDcsNyArMzM5LDEwIEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdHN0cnVjdCByeHJwY19jYWxsICpyeGNhbGw7XG4gXHRzdHJ1Y3QgbXNnaGRyIG1zZztcbiBcdHN0cnVjdCBrdmVjIGlvdlsxXTtcbitcdHVuc2lnbmVkIGludCBkZWJ1Z19pZCA9IGNhbGwtXHUwMDNlZGVidWdfaWQ7XG4rXHRzdHJ1Y3Qga2V5ICphcHBfZGF0YSA9IE5VTEw7XG4gXHRzaXplX3QgbGVuO1xuK1x0Ym9vbCB3cml0ZV9pdGVyID0gY2FsbC1cdTAwM2V3cml0ZV9pdGVyO1xuIFx0czY0IHR4X3RvdGFsX2xlbjtcbiBcdGludCByZXQ7XG4gXG5AQCAtMzc4LDggKzM3MywyNSBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRcdGNhbGwtXHUwMDNlZHJvcF9yZWYgPSB0cnVlO1xuIFx0fVxuIFxuK1x0aWYgKGNhbGwtXHUwMDNla2V5IFx1MDAyNlx1MDAyNiBjYWxsLVx1MDAzZXNlcnZlcikge1xuK1x0XHR1MzIga3JiNV9lbmN0eXBlID0gMDtcbitcdFx0dTggc2VjdXJpdHlfaW5kZXggPSAwO1xuK1xuK1x0XHRyeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNhbGwtXHUwMDNla2V5LCBcdTAwMjZzZWN1cml0eV9pbmRleCwgXHUwMDI2a3JiNV9lbmN0eXBlKTtcbitcdFx0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xuKyNpZmRlZiBDT05GSUdfUlhHS1xuK1x0XHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxuK1x0XHRcdGFwcF9kYXRhID0gY2FsbC1cdTAwM2VzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhO1xuK1x0XHRcdGJyZWFrO1xuKyNlbmRpZlxuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHQvKiBjcmVhdGUgYSBjYWxsICovXG4tXHRyeGNhbGwgPSByeHJwY19rZXJuZWxfYmVnaW5fY2FsbChjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcGVlciwgY2FsbC1cdTAwM2VrZXksXG4rXHRyeGNhbGwgPSByeHJwY19rZXJuZWxfYmVnaW5fY2FsbChjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcGVlcixcbitcdFx0XHRcdFx0IGNhbGwtXHUwMDNla2V5LCBhcHBfZGF0YSxcbiBcdFx0XHRcdFx0ICh1bnNpZ25lZCBsb25nKWNhbGwsXG4gXHRcdFx0XHRcdCB0eF90b3RhbF9sZW4sXG4gXHRcdFx0XHRcdCBjYWxsLVx1MDAzZW1heF9saWZlc3BhbixcbkBAIC00MTAsNyArNDIyLDcgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuIFx0aW92X2l0ZXJfa3ZlYyhcdTAwMjZtc2cubXNnX2l0ZXIsIElURVJfU09VUkNFLCBpb3YsIDEsIGNhbGwtXHUwMDNlcmVxdWVzdF9zaXplKTtcbiBcdG1zZy5tc2dfY29udHJvbFx0XHQ9IE5VTEw7XG4gXHRtc2cubXNnX2NvbnRyb2xsZW5cdD0gMDtcbi1cdG1zZy5tc2dfZmxhZ3NcdFx0PSBNU0dfV0FJVEFMTCB8IChjYWxsLVx1MDAzZXdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApO1xuK1x0bXNnLm1zZ19mbGFnc1x0XHQ9IE1TR19XQUlUQUxMIHwgKHdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApO1xuIFxuIFx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIHJ4Y2FsbCxcbiBcdFx0XHRcdCAgICAgXHUwMDI2bXNnLCBjYWxsLVx1MDAzZXJlcXVlc3Rfc2l6ZSxcbkBAIC00MTgsNyArNDMwLDkgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJvcl9kb19hYm9ydDtcbiBcbi1cdGlmIChjYWxsLVx1MDAzZXdyaXRlX2l0ZXIpIHtcbitcdC8qIFdlIGxvc3Qgb3VyIHJlZiBvbiBjYWxsIGlmIE1TR19NT1JFIHdhcyBzZXQuICovXG4rXG4rXHRpZiAod3JpdGVfaXRlcikge1xuIFx0XHRtc2cubXNnX2l0ZXIgPSAqY2FsbC1cdTAwM2V3cml0ZV9pdGVyO1xuIFx0XHRtc2cubXNnX2ZsYWdzIFx1MDAyNj0gfk1TR19NT1JFO1xuIFx0XHR0cmFjZV9hZnNfc2VuZF9kYXRhKGNhbGwsIFx1MDAyNm1zZyk7XG5AQCAtNDI3LDkgKzQ0MSw5IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdFx0XHRcdFx0ICAgICBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLFxuIFx0XHRcdFx0XHQgICAgIGlvdl9pdGVyX2NvdW50KFx1MDAyNm1zZy5tc2dfaXRlciksXG4gXHRcdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7XG4tXHRcdCpjYWxsLVx1MDAzZXdyaXRlX2l0ZXIgPSBtc2cubXNnX2l0ZXI7XG4rXHRcdC8qIFdlIGxvc3Qgb3VyIHJlZiBvbiBjYWxsLiAqL1xuIFxuLVx0XHR0cmFjZV9hZnNfc2VudF9kYXRhKGNhbGwsIFx1MDAyNm1zZywgcmV0KTtcbitcdFx0dHJhY2VfYWZzX3NlbnRfZGF0YShkZWJ1Z19pZCwgXHUwMDI2bXNnLCByZXQpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XG4gXHR9XG5AQCAtOTgzLDE0ICs5OTcsMyBAQCBub2lubGluZSBpbnQgYWZzX3Byb3RvY29sX2Vycm9yKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcbiBcdFx0Y2FsbC1cdTAwM2V1bm1hcnNoYWxsaW5nX2Vycm9yID0gdHJ1ZTtcbiBcdHJldHVybiAtRUJBRE1TRztcbiB9XG4tXG4tLypcbi0gKiBXYWtlIHVwIE9PQiBub3RpZmljYXRpb24gcHJvY2Vzc2luZy5cbi0gKi9cbi1zdGF0aWMgdm9pZCBhZnNfcnhfbm90aWZ5X29vYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvb2IpXG4te1xuLVx0c3RydWN0IGFmc19uZXQgKm5ldCA9IHNrLVx1MDAzZXNrX3VzZXJfZGF0YTtcbi1cbi1cdGlmIChSRUFEX09OQ0UobmV0LVx1MDAzZWxpdmUpKVxuLVx0XHRxdWV1ZV93b3JrKGFmc193cSwgXHUwMDI2bmV0LVx1MDAzZXJ4X29vYl93b3JrKTtcbi19XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3NlcnZlci5jIGIvZnMvYWZzL3NlcnZlci5jXG5pbmRleCAwZmUxNjJlYTJhMzZkYi4uNzZhOWYyNWNlNDkwNTggMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc2VydmVyLmNcbisrKyBiL2ZzL2Fmcy9zZXJ2ZXIuY1xuQEAgLTM5OCw3ICszOTgsNyBAQCBzdGF0aWMgdm9pZCBhZnNfc2VydmVyX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbiBcdGFmc19wdXRfZW5kcG9pbnRfc3RhdGUocmN1X2FjY2Vzc19wb2ludGVyKHNlcnZlci1cdTAwM2VlbmRwb2ludF9zdGF0ZSksXG4gXHRcdFx0ICAgICAgIGFmc19lc3RhdGVfdHJhY2VfcHV0X3NlcnZlcik7XG4gXHRhZnNfcHV0X2NlbGwoc2VydmVyLVx1MDAzZWNlbGwsIGFmc19jZWxsX3RyYWNlX3B1dF9zZXJ2ZXIpO1xuLVx0a2ZyZWUoc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKTtcbitcdGtleV9wdXQoc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YSk7XG4gXHRrZnJlZShzZXJ2ZXIpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2tleXMvdXNlci10eXBlLmggYi9pbmNsdWRlL2tleXMvdXNlci10eXBlLmhcbmluZGV4IDM4NmMzMTQzMjc4OTk1Li43MDAyYTk5M2E0NzIyOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaFxuKysrIGIvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oXG5AQCAtMjYsNiArMjYsNyBAQFxuICAqL1xuIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIHtcbiBcdHN0cnVjdCByY3VfaGVhZFx0cmN1O1x0XHQvKiBSQ1UgZGVzdHJ1Y3RvciAqL1xuK1x0cmVmY291bnRfdFx0cmVmO1xuIFx0dW5zaWduZWQgc2hvcnRcdGRhdGFsZW47XHQvKiBsZW5ndGggb2YgdGhpcyBkYXRhICovXG4gXHRjaGFyXHRcdGRhdGFbXSBfX2FsaWduZWQoX19hbGlnbm9mX18odTY0KSk7IC8qIGFjdHVhbCBkYXRhICovXG4gfTtcbkBAIC0zNyw2ICszOCw3IEBAIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQ7XG4gXG4gZXh0ZXJuIGludCB1c2VyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xuIGV4dGVybiB2b2lkIHVzZXJfZnJlZV9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcbit2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKTtcbiBleHRlcm4gaW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XG4gZXh0ZXJuIHZvaWQgdXNlcl9yZXZva2Uoc3RydWN0IGtleSAqa2V5KTtcbiBleHRlcm4gdm9pZCB1c2VyX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl9yeHJwYy5oIGIvaW5jbHVkZS9uZXQvYWZfcnhycGMuaFxuaW5kZXggMGZiNGM0MWM5YmJmNTUuLjU2NTFhMTBiYTI2ZTYxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfcnhycGMuaFxuKysrIGIvaW5jbHVkZS9uZXQvYWZfcnhycGMuaFxuQEAgLTU1LDYgKzU1LDcgQEAgdm9pZCByeHJwY19rZXJuZWxfc2V0X25vdGlmaWNhdGlvbnMoc3RydWN0IHNvY2tldCAqc29jayxcbiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBrZXkgKmtleSxcbitcdFx0XHRcdFx0ICAgc3RydWN0IGtleSAqYXBwX2RhdGEsXG4gXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgdXNlcl9jYWxsX0lELFxuIFx0XHRcdFx0XHQgICBzNjQgdHhfdG90YWxfbGVuLFxuIFx0XHRcdFx0XHQgICB1MzIgaGFyZF90aW1lb3V0LFxuQEAgLTkxLDI0ICs5Miw3IEBAIGJvb2wgcnhycGNfa2VybmVsX2NoZWNrX2xpZmUoY29uc3Qgc3RydWN0IHNvY2tldCAqLCBjb25zdCBzdHJ1Y3QgcnhycGNfY2FsbCAqKTtcbiBcbiBpbnQgcnhycGNfc29ja19zZXRfbWluX3NlY3VyaXR5X2xldmVsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IHZhbCk7XG4gaW50IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc3RydWN0IHNvY2sgKiwgc3RydWN0IGtleSAqKTtcbi1pbnQgcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzZXQpO1xuLVxuLWVudW0gcnhycGNfb29iX3R5cGUgcnhycGNfa2VybmVsX3F1ZXJ5X29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iLFxuLVx0XHRcdFx0XHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxuLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhKTtcbi1zdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfa2VybmVsX2RlcXVldWVfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tXHRcdFx0XHRcdCBlbnVtIHJ4cnBjX29vYl90eXBlICpfdHlwZSk7XG4tdm9pZCByeHJwY19rZXJuZWxfZnJlZV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYik7XG4tdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXG4tXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsXG4tXHRcdFx0XHQgIHUxNiAqX3NlcnZpY2VfaWQsIHU4ICpfc2VjdXJpdHlfaW5kZXgpO1xuLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSxcbi1cdFx0XHRcdCAgaW50IGVycm9yLCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpO1xuLWludCByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSk7XG4tdTMyIHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKTtcbi1pbnQgcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhKTtcbit2b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoY29uc3Qgc3RydWN0IGtleSAqa2V5LCB1OCAqX3NlY3VyaXR5X2luZGV4LCB1MzIgKl9rcmI1X2VuY3R5cGUpO1xuIHU4IHJ4cnBjX2tlcm5lbF9xdWVyeV9jYWxsX3NlY3VyaXR5KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRcdFx0ICAgIHUxNiAqX3NlcnZpY2VfaWQsIHUzMiAqX2VuY3R5cGUpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcbmluZGV4IDFiM2M0OGI1NTkxZGZkLi4zZDk2MDgyZTZlYWM3NiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxuQEAgLTE0OCw2ICsxNDgsNyBAQCBlbnVtIHlmc19jbV9vcGVyYXRpb24ge1xuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91bnVzZV9zbGlzdF9pc29ydCxcdFwiVU5VIGlzb3J0XCIpIFxcXG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VwZGF0ZSxcdFx0XCJVUERBVEUgICBcIikgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2J5X3V1aWQsXHRcIlVTRSB1dWlkIFwiKSBcXFxuK1x0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCxcdFx0XCJVU0UgY2FsbCBcIikgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NtX2NhbGwsXHRcIlVTRSBjbS1jbFwiKSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2V0X2NhcHMsXHRcIlVTRSBnY2Fwc1wiKSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYixcdFwiVVNFIGd2dXBjXCIpIFxcXG5AQCAtOTM3LDkgKzkzOCw5IEBAIFRSQUNFX0VWRU5UKGFmc19zZW5kX2RhdGEsXG4gXHQgICAgKTtcbiBcbiBUUkFDRV9FVkVOVChhZnNfc2VudF9kYXRhLFxuLVx0ICAgIFRQX1BST1RPKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgcmV0KSxcbitcdCAgICBUUF9QUk9UTyh1bnNpZ25lZCBpbnQgY2FsbF9kZWJ1Z19pZCwgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgcmV0KSxcbiBcbi1cdCAgICBUUF9BUkdTKGNhbGwsIG1zZywgcmV0KSxcbitcdCAgICBUUF9BUkdTKGNhbGxfZGVidWdfaWQsIG1zZywgcmV0KSxcbiBcbiBcdCAgICBUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHQgICAgX19maWVsZCh1bnNpZ25lZCBpbnQsXHRcdGNhbGwpXG5AQCAtOTQ5LDcgKzk1MCw3IEBAIFRSQUNFX0VWRU5UKGFmc19zZW50X2RhdGEsXG4gXHRcdFx0ICAgICApLFxuIFxuIFx0ICAgIFRQX2Zhc3RfYXNzaWduKFxuLVx0XHQgICAgX19lbnRyeS1cdTAwM2VjYWxsID0gY2FsbC1cdTAwM2VkZWJ1Z19pZDtcbitcdFx0ICAgIF9fZW50cnktXHUwMDNlY2FsbCA9IGNhbGxfZGVidWdfaWQ7XG4gXHRcdCAgICBfX2VudHJ5LVx1MDAzZXJldCA9IHJldDtcbiBcdFx0ICAgIF9fZW50cnktXHUwMDNlb2Zmc2V0ID0gbXNnLVx1MDAzZW1zZ19pdGVyLnhhcnJheV9zdGFydCArIG1zZy1cdTAwM2Vtc2dfaXRlci5pb3Zfb2Zmc2V0O1xuIFx0XHQgICAgX19lbnRyeS1cdTAwM2Vjb3VudCA9IGlvdl9pdGVyX2NvdW50KFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlcik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcbmluZGV4IDcwNGExMGRlNjY3MDA0Li44ZmM0MTkyZTAzOTJiZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcbkBAIC0yNjIsNyArMjYyLDYgQEBcbiBcdEVNKHJ4cnBjX2Nvbm5fZnJlZSxcdFx0XHRcIkZSRUUgICAgICAgIFwiKSBcXFxuIFx0RU0ocnhycGNfY29ubl9nZXRfYWN0aXZhdGVfY2FsbCxcdFwiR0VUIGFjdC1jYWxsXCIpIFxcXG4gXHRFTShyeHJwY19jb25uX2dldF9jYWxsX2lucHV0LFx0XHRcIkdFVCBpbnAtY2FsbFwiKSBcXFxuLVx0RU0ocnhycGNfY29ubl9nZXRfY2hhbGxlbmdlX2lucHV0LFx0XCJHRVQgaW5wLWNoYWxcIikgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fZ2V0X2Nvbm5faW5wdXQsXHRcdFwiR0VUIGlucC1jb25uXCIpIFxcXG4gXHRFTShyeHJwY19jb25uX2dldF9pZGxlLFx0XHRcdFwiR0VUIGlkbGUgICAgXCIpIFxcXG4gXHRFTShyeHJwY19jb25uX2dldF9wb2tlX2Fib3J0LFx0XHRcIkdFVCBway1hYm9ydFwiKSBcXFxuQEAgLTI3NCw3ICsyNzMsNiBAQFxuIFx0RU0ocnhycGNfY29ubl9uZXdfc2VydmljZSxcdFx0XCJORVcgc2VydmljZSBcIikgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fcHV0X2NhbGwsXHRcdFx0XCJQVVQgY2FsbCAgICBcIikgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fcHV0X2NhbGxfaW5wdXQsXHRcdFwiUFVUIGlucC1jYWxsXCIpIFxcXG4tXHRFTShyeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQsXHRcIlBVVCBpbnAtY2hhbFwiKSBcXFxuIFx0RU0ocnhycGNfY29ubl9wdXRfY29ubl9pbnB1dCxcdFx0XCJQVVQgaW5wLWNvbm5cIikgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fcHV0X2Rpc2NhcmRfaWRsZSxcdFx0XCJQVVQgZGlzYy1pZGxcIikgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fcHV0X2xvY2FsX2RlYWQsXHRcdFwiUFVUIGxvYy1kZWFkXCIpIFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaFxuaW5kZXggZDk3MzVhYmQ0Yzc5MTAuLjdkNmE1MDE1MTkzMTEyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oXG5AQCAtNTgsMTEgKzU4LDcgQEAgZW51bSByeHJwY19jbXNnX3R5cGUge1xuIFx0UlhSUENfVFhfTEVOR1RIXHRcdD0gMTIsXHQvKiAtcy06IFRvdGFsIGxlbmd0aCBvZiBUeCBkYXRhICovXG4gXHRSWFJQQ19TRVRfQ0FMTF9USU1FT1VUXHQ9IDEzLFx0LyogLXMtOiBTZXQgb25lIG9yIG1vcmUgY2FsbCB0aW1lb3V0cyAqL1xuIFx0UlhSUENfQ0hBUkdFX0FDQ0VQVFx0PSAxNCxcdC8qIFNzLTogQ2hhcmdlIHRoZSBhY2NlcHQgcG9vbCB3aXRoIGEgdXNlciBjYWxsIElEICovXG4tXHRSWFJQQ19PT0JfSURcdFx0PSAxNSxcdC8qIC1zcjogT09CIG1lc3NhZ2UgSUQgKi9cbi1cdFJYUlBDX0NIQUxMRU5HRURcdD0gMTYsXHQvKiBDLXI6IEluZm8gb24gYSByZWNlaXZlZCBDSEFMTEVOR0UgKi9cbi1cdFJYUlBDX1JFU1BPTkRcdFx0PSAxNyxcdC8qIENzLTogUmVzcG9uZCB0byBhIGNoYWxsZW5nZSAqL1xuLVx0UlhSUENfUkVTUE9OREVEXHRcdD0gMTgsXHQvKiBTLXI6IERhdGEgcmVjZWl2ZWQgaW4gUkVTUE9OU0UgKi9cbi1cdFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBXHQ9IDE5LFx0LyogQ3MtOiBSRVNQT05TRTogUnhHSyBhcHAgZGF0YSB0byBpbmNsdWRlICovXG4rXHRSWFJQQ19SRVNQT05TRV9BUFBEQVRBXHQ9IDIwLFx0LyogQ3MtOiBVc2VyIGtleSBob2xkaW5nIGFwcCBkYXRhIGZvciBSRVNQT05TRSAqL1xuIFx0UlhSUENfX1NVUFBPUlRFRFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xuaW5kZXggYzNjOGMzMjQwZWY5NDYuLmFhM2MwNThmNDA5NTU5IDEwMDY0NFxuLS0tIGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcbisrKyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXG5AQCAtMjA4LDYgKzIwOCw3IEBAIGRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIFx0XHRrbGVhdmUoXCIgPSAtRU5PTUVNXCIpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbitcdHJlZmNvdW50X3NldChcdTAwMjZ1cGF5bG9hZC1cdTAwM2VyZWYsIDEpO1xuIFxuIFx0dXBheWxvYWQtXHUwMDNlZGF0YWxlbiA9IHJlc3VsdF9sZW47XG4gXHRtZW1jcHkodXBheWxvYWQtXHUwMDNlZGF0YSwgZGF0YSwgcmVzdWx0X2xlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL01ha2VmaWxlIGIvbmV0L3J4cnBjL01ha2VmaWxlXG5pbmRleCBmOTk0ZjlmMzBhMjlkNC4uZjdhNWUwYTU5MmVlMTMgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvTWFrZWZpbGVcbisrKyBiL25ldC9yeHJwYy9NYWtlZmlsZVxuQEAgLTI0LDcgKzI0LDYgQEAgcnhycGMteSA6PSBcXFxuIFx0bG9jYWxfb2JqZWN0Lm8gXFxcbiBcdG1pc2MubyBcXFxuIFx0bmV0X25zLm8gXFxcbi1cdG9vYi5vIFxcXG4gXHRvdXRwdXQubyBcXFxuIFx0cGVlcl9ldmVudC5vIFxcXG4gXHRwZWVyX29iamVjdC5vIFxcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FmX3J4cnBjLmMgYi9uZXQvcnhycGMvYWZfcnhycGMuY1xuaW5kZXggOWFiMGYyMmM4ODFlYzUuLjlkNWNlMWM3YWQwZDIyIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2FmX3J4cnBjLmNcbisrKyBiL25ldC9yeHJwYy9hZl9yeHJwYy5jXG5AQCAtMzE4LDYgKzMxOCw3IEBAIEVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3B1dF9wZWVyKTtcbiAgKiBAc29jazogVGhlIHNvY2tldCBvbiB3aGljaCB0byBtYWtlIHRoZSBjYWxsXG4gICogQHBlZXI6IFRoZSBwZWVyIHRvIGNvbnRhY3RcbiAgKiBAa2V5OiBUaGUgc2VjdXJpdHkgY29udGV4dCB0byB1c2UgKGRlZmF1bHRzIHRvIHNvY2tldCBzZXR0aW5nKVxuKyAqIEBhcHBfZGF0YTogVGhlIHNlY3VyaXR5IHJlc3BvbnNlIGFwcGxpY2F0aW9uIGRhdGEgKG9yIE5VTEwpXG4gICogQHVzZXJfY2FsbF9JRDogVGhlIElEIHRvIHVzZVxuICAqIEB0eF90b3RhbF9sZW46IFRvdGFsIGxlbmd0aCBvZiBkYXRhIHRvIHRyYW5zbWl0IGR1cmluZyB0aGUgY2FsbCAob3IgLTEpXG4gICogQGhhcmRfdGltZW91dDogVGhlIG1heGltdW0gbGlmZXNwYW4gb2YgdGhlIGNhbGwgaW4gc2VjXG5AQCAtMzQwLDYgKzM0MSw3IEBAIEVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3B1dF9wZWVyKTtcbiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBrZXkgKmtleSxcbitcdFx0XHRcdFx0ICAgc3RydWN0IGtleSAqYXBwX2RhdGEsXG4gXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgdXNlcl9jYWxsX0lELFxuIFx0XHRcdFx0XHQgICBzNjQgdHhfdG90YWxfbGVuLFxuIFx0XHRcdFx0XHQgICB1MzIgaGFyZF90aW1lb3V0LFxuQEAgLTM2OCw2ICszNzAsNyBAQCBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0a2V5ID0gTlVMTDsgLyogYSBuby1zZWN1cml0eSBrZXkgKi9cbiBcbiBcdG1lbXNldChcdTAwMjZwLCAwLCBzaXplb2YocCkpO1xuK1x0cC5hcHBfZGF0YVx0XHQ9IGFwcF9kYXRhO1xuIFx0cC51c2VyX2NhbGxfSURcdFx0PSB1c2VyX2NhbGxfSUQ7XG4gXHRwLnR4X3RvdGFsX2xlblx0XHQ9IHR4X3RvdGFsX2xlbjtcbiBcdHAuaW50ZXJydXB0aWJpbGl0eVx0PSBpbnRlcnJ1cHRpYmlsaXR5O1xuQEAgLTU5NSwxMCArNTk4LDcgQEAgc3RhdGljIGludCByeHJwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBsZW4pXG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBSWFJQQ19TRVJWRVJfQk9VTkQ6XG4gXHRjYXNlIFJYUlBDX1NFUlZFUl9MSVNURU5JTkc6XG4tXHRcdGlmIChtLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX09PQilcbi1cdFx0XHRyZXQgPSByeHJwY19zZW5kbXNnX29vYihyeCwgbSwgbGVuKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdHJldCA9IHJ4cnBjX2RvX3NlbmRtc2cocngsIG0sIGxlbik7XG4rXHRcdHJldCA9IHJ4cnBjX2RvX3NlbmRtc2cocngsIG0sIGxlbik7XG4gXHRcdC8qIFRoZSBzb2NrZXQgaGFzIGJlZW4gdW5sb2NrZWQgKi9cbiBcdFx0Z290byBvdXQ7XG4gXHRkZWZhdWx0OlxuQEAgLTYzMyw3ICs2MzMsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiB7XG4gXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbi1cdHVuc2lnbmVkIGludCBtaW5fc2VjX2xldmVsLCB2YWw7XG4rXHR1bnNpZ25lZCBpbnQgbWluX3NlY19sZXZlbDtcbiBcdHUxNiBzZXJ2aWNlX3VwZ3JhZGVbMl07XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTcxMCwyMyArNzEwLDcgQEAgc3RhdGljIGludCByeHJwY19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXG4gXHRcdGNhc2UgUlhSUENfTUFOQUdFX1JFU1BPTlNFOlxuIFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0aWYgKG9wdGxlbiAhPSBzaXplb2YodW5zaWduZWQgaW50KSlcbi1cdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0cmV0ID0gLUVJU0NPTk47XG4tXHRcdFx0aWYgKHJ4LVx1MDAzZXNrLnNrX3N0YXRlICE9IFJYUlBDX1VOQk9VTkQpXG4tXHRcdFx0XHRnb3RvIGVycm9yO1xuLVx0XHRcdHJldCA9IGNvcHlfc2FmZV9mcm9tX3NvY2twdHIoXHUwMDI2dmFsLCBzaXplb2YodmFsKSxcbi1cdFx0XHRcdFx0XHQgICAgIG9wdHZhbCwgb3B0bGVuKTtcbi1cdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBlcnJvcjtcbi1cdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdGlmICh2YWwgXHUwMDNlIDEpXG4tXHRcdFx0XHRnb3RvIGVycm9yO1xuLVx0XHRcdGlmICh2YWwpXG4tXHRcdFx0XHRzZXRfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcdTAwMjZyeC1cdTAwM2VmbGFncyk7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0Y2xlYXJfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcdTAwMjZyeC1cdTAwM2VmbGFncyk7XG4tXHRcdFx0Z290byBzdWNjZXNzO1xuK1x0XHRcdGdvdG8gZXJyb3I7XG4gXG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0YnJlYWs7XG5AQCAtODM1LDggKzgxOSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0cngtXHUwMDNlY2FsbHMgPSBSQl9ST09UO1xuIFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cngtXHUwMDNlaW5jb21pbmdfbG9jayk7XG4tXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSk7XG4tXHRyeC1cdTAwM2VwZW5kaW5nX29vYnEgPSBSQl9ST09UO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cngtXHUwMDNlc29ja19jYWxscyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZyeC1cdTAwM2V0b19iZV9hY2NlcHRlZCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpO1xuQEAgLTg4NCwyMyArODY2LDYgQEAgc3RhdGljIGludCByeHJwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZmxhZ3MpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIFB1cmdlIHRoZSBvdXQtb2YtYmFuZCBxdWV1ZS5cbi0gKi9cbi1zdGF0aWMgdm9pZCByeHJwY19wdXJnZV9vb2JfcXVldWUoc3RydWN0IHNvY2sgKnNrKVxuLXtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNrKTtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXG4tXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpKVxuLVx0XHRyeHJwY19rZXJuZWxfZnJlZV9vb2Ioc2tiKTtcbi1cdHdoaWxlICghUkJfRU1QVFlfUk9PVChcdTAwMjZyeC1cdTAwM2VwZW5kaW5nX29vYnEpKSB7XG4tXHRcdHNrYiA9IHJiX2VudHJ5KHJ4LVx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiwgcmJub2RlKTtcbi1cdFx0cmJfZXJhc2UoXHUwMDI2c2tiLVx1MDAzZXJibm9kZSwgXHUwMDI2cngtXHUwMDNlcGVuZGluZ19vb2JxKTtcbi1cdFx0cnhycGNfa2VybmVsX2ZyZWVfb29iKHNrYik7XG4tXHR9XG4tfVxuLVxuIC8qXG4gICogUnhSUEMgc29ja2V0IGRlc3RydWN0b3JcbiAgKi9cbkBAIC05MDgsNyArODczLDYgQEAgc3RhdGljIHZvaWQgcnhycGNfc29ja19kZXN0cnVjdG9yKHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRfZW50ZXIoXCIlcFwiLCBzayk7XG4gXG4tXHRyeHJwY19wdXJnZV9vb2JfcXVldWUoc2spO1xuIFx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG4gXG4gXHRXQVJOX09OKHJlZmNvdW50X3JlYWQoXHUwMDI2c2stXHUwMDNlc2tfd21lbV9hbGxvYykpO1xuQEAgLTk2MSw3ICs5MjUsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlbGVhc2Vfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4gXHRyeHJwY19kaXNjYXJkX3ByZWFsbG9jKHJ4KTtcbiBcdHJ4cnBjX3JlbGVhc2VfY2FsbHNfb25fc29ja2V0KHJ4KTtcbiBcdGZsdXNoX3dvcmtxdWV1ZShyeHJwY193b3JrcXVldWUpO1xuLVx0cnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTtcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuIFxuIFx0cnhycGNfdW51c2VfbG9jYWwocngtXHUwMDNlbG9jYWwsIHJ4cnBjX2xvY2FsX3VudXNlX3JlbGVhc2Vfc29jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmggYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxuaW5kZXggY2U5NDZiMGEwM2UyYjMuLjEwMWFjNzU0NDc1ODRkIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcbisrKyBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG5AQCAtMTcxLDkgKzE3MSw2IEBAIHN0cnVjdCByeHJwY19zb2NrIHtcbiBcdGNvbnN0IHN0cnVjdCByeHJwY19rZXJuZWxfb3BzICphcHBfb3BzO1x0LyogVGFibGUgb2Yga2VybmVsIGFwcCBub3RpZmljYXRpb24gZnVuY3MgKi9cbiBcdHN0cnVjdCByeHJwY19sb2NhbFx0KmxvY2FsO1x0XHQvKiBsb2NhbCBlbmRwb2ludCAqL1xuIFx0c3RydWN0IHJ4cnBjX2JhY2tsb2dcdCpiYWNrbG9nO1x0LyogUHJlYWxsb2NhdGlvbiBmb3Igc2VydmljZXMgKi9cbi1cdHN0cnVjdCBza19idWZmX2hlYWRcdHJlY3Ztc2dfb29icTtcdC8qIE9PQiBtZXNzYWdlcyBmb3IgcmVjdm1zZyB0byBwaWNrIHVwICovXG4tXHRzdHJ1Y3QgcmJfcm9vdFx0XHRwZW5kaW5nX29vYnE7XHQvKiBPT0IgbWVzc2FnZXMgYXdhaXRpbmcgdXNlcnNwYWNlIHRvIHJlc3BvbmQgdG8gKi9cbi1cdHU2NFx0XHRcdG9vYl9pZF9jb3VudGVyO1x0LyogT09CIG1lc3NhZ2UgSUQgY291bnRlciAqL1xuIFx0c3BpbmxvY2tfdFx0XHRpbmNvbWluZ19sb2NrO1x0LyogSW5jb21pbmcgY2FsbCB2cyBzZXJ2aWNlIHNodXRkb3duIGxvY2sgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWRcdHNvY2tfY2FsbHM7XHQvKiBMaXN0IG9mIGNhbGxzIG93bmVkIGJ5IHRoaXMgc29ja2V0ICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHR0b19iZV9hY2NlcHRlZDtcdC8qIGNhbGxzIGF3YWl0aW5nIGFjY2VwdGFuY2UgKi9cbkBAIC0xODQsNyArMTgxLDYgQEAgc3RydWN0IHJ4cnBjX3NvY2sge1xuIFx0c3RydWN0IHJiX3Jvb3RcdFx0Y2FsbHM7XHRcdC8qIFVzZXIgSUQgLVx1MDAzZSBjYWxsIG1hcHBpbmcgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gI2RlZmluZSBSWFJQQ19TT0NLX0NPTk5FQ1RFRFx0XHQwXHQvKiBjb25uZWN0X3NyeCBpcyBzZXQgKi9cbi0jZGVmaW5lIFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFXHQxXHQvKiBVc2VyIHdhbnRzIHRvIG1hbmFnZSBSRVNQT05TRSBwYWNrZXRzICovXG4gXHRyd2xvY2tfdFx0XHRjYWxsX2xvY2s7XHQvKiBsb2NrIGZvciBjYWxscyAqL1xuIFx0dTMyXHRcdFx0bWluX3NlY19sZXZlbDtcdC8qIG1pbmltdW0gc2VjdXJpdHkgbGV2ZWwgKi9cbiAjZGVmaW5lIFJYUlBDX1NFQ1VSSVRZX01BWFx0UlhSUENfU0VDVVJJVFlfRU5DUllQVFxuQEAgLTI0MSw3ICsyMzcsNiBAQCBzdHJ1Y3QgcnhycGNfc2tiX3ByaXYge1xuIFx0XHRcdHU4XHRcdHJlYXNvbjtcdFx0LyogUmVhc29uIGZvciBhY2sgKi9cbiBcdFx0fSBhY2s7XG4gXHRcdHN0cnVjdCB7XG4tXHRcdFx0c3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm47XHQvKiBDb25uZWN0aW9uIHJlZmVycmVkIHRvICovXG4gXHRcdFx0dW5pb24ge1xuIFx0XHRcdFx0dTMyIHJ4a2FkX25vbmNlO1xuIFx0XHRcdH07XG5AQCAtMzEwLDEzICszMDUsNiBAQCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkge1xuIFx0Ym9vbCAoKnZhbGlkYXRlX2NoYWxsZW5nZSkoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbi1cdC8qIEZpbGwgb3V0IHRoZSBjbXNnIGZvciByZWN2bXNnKCkgdG8gcGFzcyBvbiBhIGNoYWxsZW5nZSB0byB1c2Vyc3BhY2UuXG4tXHQgKiBUaGUgc2VjdXJpdHkgY2xhc3MgZ2V0cyB0byBhZGQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cbi1cdCAqL1xuLVx0aW50ICgqY2hhbGxlbmdlX3RvX3JlY3Ztc2cpKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICAgc3RydWN0IG1zZ2hkciAqbXNnKTtcbi1cbiBcdC8qIFBhcnNlIHNlbmRtc2coKSBjb250cm9sIG1lc3NhZ2UgYW5kIHJlc3BvbmQgdG8gY2hhbGxlbmdlLiAqL1xuIFx0aW50ICgqc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSkoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCBtc2doZHIgKm1zZyk7XG5AQCAtNTE2LDYgKzUwNCw3IEBAIHN0cnVjdCByeHJwY19idW5kbGUge1xuIFx0c3RydWN0IHJ4cnBjX2xvY2FsXHQqbG9jYWw7XHRcdC8qIFJlcHJlc2VudGF0aW9uIG9mIGxvY2FsIGVuZHBvaW50ICovXG4gXHRzdHJ1Y3QgcnhycGNfcGVlclx0KnBlZXI7XHRcdC8qIFJlbW90ZSBlbmRwb2ludCAqL1xuIFx0c3RydWN0IGtleVx0XHQqa2V5O1x0XHQvKiBTZWN1cml0eSBkZXRhaWxzICovXG4rXHRzdHJ1Y3Qga2V5XHRcdCphcHBfZGF0YTtcdC8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRwcm9jX2xpbms7XHQvKiBMaW5rIGluIG5ldC1cdTAwM2VidW5kbGVfcHJvY19saXN0ICovXG4gXHRjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5O1x0LyogYXBwbGllZCBzZWN1cml0eSBtb2R1bGUgKi9cbiBcdHJlZmNvdW50X3RcdFx0cmVmO1xuQEAgLTcxOSw2ICs3MDgsNyBAQCBzdHJ1Y3QgcnhycGNfY2FsbCB7XG4gXHRzdHJ1Y3QgcnhycGNfc29jayBfX3JjdVx0KnNvY2tldDtcdC8qIHNvY2tldCByZXNwb25zaWJsZSAqL1xuIFx0c3RydWN0IHJ4cnBjX25ldFx0KnJ4bmV0O1x0XHQvKiBOZXR3b3JrIG5hbWVzcGFjZSB0byB3aGljaCBjYWxsIGJlbG9uZ3MgKi9cbiBcdHN0cnVjdCBrZXlcdFx0KmtleTtcdFx0LyogU2VjdXJpdHkgZGV0YWlscyAqL1xuK1x0c3RydWN0IGtleVx0XHQqYXBwX2RhdGE7XHQvKiBTZWN1cml0eSByZXNwb25zZSBhcHAgZGF0YSAqL1xuIFx0Y29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5ICpzZWN1cml0eTtcdC8qIGFwcGxpZWQgc2VjdXJpdHkgbW9kdWxlICovXG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0dXNlcl9tdXRleDtcdC8qIFVzZXIgYWNjZXNzIG11dGV4ICovXG4gXHRzdHJ1Y3Qgc29ja2FkZHJfcnhycGNcdGRlc3Rfc3J4O1x0LyogRGVzdGluYXRpb24gYWRkcmVzcyAqL1xuQEAgLTkxMyw2ICs5MDMsNyBAQCBlbnVtIHJ4cnBjX2NvbW1hbmQge1xuIH07XG4gXG4gc3RydWN0IHJ4cnBjX2NhbGxfcGFyYW1zIHtcbitcdHN0cnVjdCBrZXlcdFx0KmFwcF9kYXRhO1x0LyogU2VjdXJpdHkgcmVzcG9uc2UgYXBwIGRhdGEgKi9cbiBcdHM2NFx0XHRcdHR4X3RvdGFsX2xlbjtcdC8qIFRvdGFsIFR4IGRhdGEgbGVuZ3RoIChpZiBzZW5kIGRhdGEpICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdHVzZXJfY2FsbF9JRDtcdC8qIFVzZXIncyBjYWxsIElEICovXG4gXHRzdHJ1Y3Qge1xuQEAgLTEzNzUsMTMgKzEzNjYsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCByeHJwY19uZXQgKnJ4cnBjX25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRyZXR1cm4gbmV0X2dlbmVyaWMobmV0LCByeHJwY19uZXRfaWQpO1xuIH1cbiBcbi0vKlxuLSAqIG9vYi5jXG4tICovXG4tYm9vbCByeHJwY19ub3RpZnlfc29ja2V0X29vYihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tdm9pZCByeHJwY19hZGRfcGVuZGluZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi1pbnQgcnhycGNfc2VuZG1zZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pO1xuLVxuIC8qXG4gICogb3V0cHV0LmNcbiAgKi9cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY2FsbF9vYmplY3QuYyBiL25ldC9yeHJwYy9jYWxsX29iamVjdC5jXG5pbmRleCA4MTdlZDlhY2I5MWU2MS4uMmRmM2QwMTkwYTg5MTggMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY2FsbF9vYmplY3QuY1xuKysrIGIvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmNcbkBAIC0xOTgsNyArMTk4LDcgQEAgc3RhdGljIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19hbGxvY19jbGllbnRfY2FsbChzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRrdGltZV90IG5vdztcbiBcdGludCByZXQ7XG4gXG4tXHRfZW50ZXIoXCJcIik7XG4rXHRfZW50ZXIoXCIlcFwiLCBwLVx1MDAzZWFwcF9kYXRhKTtcbiBcbiBcdGNhbGwgPSByeHJwY19hbGxvY19jYWxsKHJ4LCBnZnAsIGRlYnVnX2lkKTtcbiBcdGlmICghY2FsbClcbkBAIC0yMTEsNiArMjExLDcgQEAgc3RhdGljIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19hbGxvY19jbGllbnRfY2FsbChzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRjYWxsLVx1MDAzZWludGVycnVwdGliaWxpdHlcdD0gcC1cdTAwM2VpbnRlcnJ1cHRpYmlsaXR5O1xuIFx0Y2FsbC1cdTAwM2V0eF90b3RhbF9sZW5cdD0gcC1cdTAwM2V0eF90b3RhbF9sZW47XG4gXHRjYWxsLVx1MDAzZWtleVx0XHQ9IGtleV9nZXQoY3AtXHUwMDNla2V5KTtcbitcdGNhbGwtXHUwMDNlYXBwX2RhdGFcdFx0PSBrZXlfZ2V0KHAtXHUwMDNlYXBwX2RhdGEpO1xuIFx0Y2FsbC1cdTAwM2VwZWVyXHRcdD0gcnhycGNfZ2V0X3BlZXIoY3AtXHUwMDNlcGVlciwgcnhycGNfcGVlcl9nZXRfY2FsbCk7XG4gXHRjYWxsLVx1MDAzZWxvY2FsXHRcdD0gcnhycGNfZ2V0X2xvY2FsKGNwLVx1MDAzZWxvY2FsLCByeHJwY19sb2NhbF9nZXRfY2FsbCk7XG4gXHRjYWxsLVx1MDAzZXNlY3VyaXR5X2xldmVsXHQ9IGNwLVx1MDAzZXNlY3VyaXR5X2xldmVsO1xuQEAgLTY5Nyw2ICs2OTgsNyBAQCBzdGF0aWMgdm9pZCByeHJwY19kZXN0cm95X2NhbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cnhycGNfcHV0X3BlZXIoY2FsbC1cdTAwM2VwZWVyLCByeHJwY19wZWVyX3B1dF9jYWxsKTtcbiBcdHJ4cnBjX3B1dF9sb2NhbChjYWxsLVx1MDAzZWxvY2FsLCByeHJwY19sb2NhbF9wdXRfY2FsbCk7XG4gXHRrZXlfcHV0KGNhbGwtXHUwMDNla2V5KTtcbitcdGtleV9wdXQoY2FsbC1cdTAwM2VhcHBfZGF0YSk7XG4gXHRjYWxsX3JjdShcdTAwMjZjYWxsLVx1MDAzZXJjdSwgcnhycGNfcmN1X2ZyZWVfY2FsbCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX2NsaWVudC5jIGIvbmV0L3J4cnBjL2Nvbm5fY2xpZW50LmNcbmluZGV4IDQ4NTE5ZjBkZTE4NTM5Li41Y2JmYTdiMjIzZTAxMSAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9jb25uX2NsaWVudC5jXG4rKysgYi9uZXQvcnhycGMvY29ubl9jbGllbnQuY1xuQEAgLTgxLDYgKzgxLDcgQEAgc3RhdGljIHN0cnVjdCByeHJwY19idW5kbGUgKnJ4cnBjX2FsbG9jX2J1bmRsZShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0YnVuZGxlLVx1MDAzZWxvY2FsXHRcdD0gY2FsbC1cdTAwM2Vsb2NhbDtcbiBcdFx0YnVuZGxlLVx1MDAzZXBlZXJcdFx0PSByeHJwY19nZXRfcGVlcihjYWxsLVx1MDAzZXBlZXIsIHJ4cnBjX3BlZXJfZ2V0X2J1bmRsZSk7XG4gXHRcdGJ1bmRsZS1cdTAwM2VrZXlcdFx0PSBrZXlfZ2V0KGNhbGwtXHUwMDNla2V5KTtcbitcdFx0YnVuZGxlLVx1MDAzZWFwcF9kYXRhXHQ9IGtleV9nZXQoY2FsbC1cdTAwM2VhcHBfZGF0YSk7XG4gXHRcdGJ1bmRsZS1cdTAwM2VzZWN1cml0eVx0PSBjYWxsLVx1MDAzZXNlY3VyaXR5O1xuIFx0XHRidW5kbGUtXHUwMDNlZXhjbHVzaXZlXHQ9IHRlc3RfYml0KFJYUlBDX0NBTExfRVhDTFVTSVZFLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKTtcbiBcdFx0YnVuZGxlLVx1MDAzZXVwZ3JhZGVcdFx0PSB0ZXN0X2JpdChSWFJQQ19DQUxMX1VQR1JBREUsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpO1xuQEAgLTExOCw2ICsxMTksNyBAQCBzdGF0aWMgdm9pZCByeHJwY19mcmVlX2J1bmRsZShzdHJ1Y3QgcnhycGNfYnVuZGxlICpidW5kbGUpXG4gXHR3cml0ZV91bmxvY2soXHUwMDI2YnVuZGxlLVx1MDAzZWxvY2FsLVx1MDAzZXJ4bmV0LVx1MDAzZWNvbm5fbG9jayk7XG4gXHRyeHJwY19wdXRfcGVlcihidW5kbGUtXHUwMDNlcGVlciwgcnhycGNfcGVlcl9wdXRfYnVuZGxlKTtcbiBcdGtleV9wdXQoYnVuZGxlLVx1MDAzZWtleSk7XG4rXHRrZXlfcHV0KGJ1bmRsZS1cdTAwM2VhcHBfZGF0YSk7XG4gXHRrZnJlZShidW5kbGUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY29ubl9ldmVudC5jIGIvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuY1xuaW5kZXggNjExYzc5MGJjNmQwY2UuLjkxNDZiOWQ0YzJhYzUwIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuY1xuKysrIGIvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuY1xuQEAgLTI3OSwxMCArMjc5LDcgQEAgc3RhdGljIGludCByeHJwY19wcm9jZXNzX2V2ZW50KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFxuIFx0c3dpdGNoIChzcC1cdTAwM2VoZHIudHlwZSkge1xuIFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9DSEFMTEVOR0U6XG4tXHRcdHJldCA9IGNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlcmVzcG9uZF90b19jaGFsbGVuZ2UoY29ubiwgc2tiKTtcbi1cdFx0c3AtXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XG4tXHRcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdHJldHVybiBjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZXJlc3BvbmRfdG9fY2hhbGxlbmdlKGNvbm4sIHNrYik7XG4gXG4gXHRjYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX1JFU1BPTlNFOlxuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNvbm4tXHUwMDNlc3RhdGVfbG9jayk7XG5AQCAtNDI1LDY2ICs0MjIsNiBAQCBzdGF0aWMgdm9pZCByeHJwY19wb3N0X3BhY2tldF90b19jb25uKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0cnhycGNfcXVldWVfY29ubihjb25uLCByeHJwY19jb25uX3F1ZXVlX3J4X3dvcmspO1xuIH1cbiBcbi0vKlxuLSAqIFBvc3QgYSBDSEFMTEVOR0UgcGFja2V0IHRvIHRoZSBzb2NrZXQgb2Ygb25lIG9mIGEgY29ubmVjdGlvbidzIGNhbGxzIHNvIHRoYXRcbi0gKiBpdCBjYW4gZ2V0IGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgcGFja2V0LCBwb3NzaWJseSBxdWVyeWluZ1xuLSAqIHVzZXJzcGFjZS5cbi0gKi9cbi1zdGF0aWMgYm9vbCByeHJwY19wb3N0X2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTtcbi1cdHN0cnVjdCByeHJwY19jYWxsICpjYWxsID0gTlVMTDtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbi1cdGJvb2wgcmVzcG9uZCA9IGZhbHNlLCBxdWV1ZWQgPSBmYWxzZTtcbi1cbi1cdHNwLVx1MDAzZWNoYWxsLmNvbm4gPVxuLVx0XHRyeHJwY19nZXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX2dldF9jaGFsbGVuZ2VfaW5wdXQpO1xuLVxuLVx0aWYgKCFjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZWNoYWxsZW5nZV90b19yZWN2bXNnKSB7XG4tXHRcdHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjb25uLVx1MDAzZWNoYW5uZWxzKTsgaSsrKSB7XG4tXHRcdGlmIChjb25uLVx1MDAzZWNoYW5uZWxzW2ldLmNhbGwpIHtcbi1cdFx0XHRjYWxsID0gY29ubi1cdTAwM2VjaGFubmVsc1tpXS5jYWxsO1xuLVx0XHRcdHJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtXHUwMDNlc29ja2V0KTtcbi1cdFx0XHRpZiAoIXJ4KSB7XG4tXHRcdFx0XHRjYWxsID0gTlVMTDtcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRyZXNwb25kID0gdHJ1ZTtcbi1cdFx0XHRpZiAodGVzdF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKSlcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdGNhbGwgPSBOVUxMO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHRpZiAoIXJlc3BvbmQpIHtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XG4tXHRcdHNwLVx1MDAzZWNoYWxsLmNvbm4gPSBOVUxMO1xuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHR9XG4tXG4tXHRpZiAoY2FsbClcbi1cdFx0cXVldWVkID0gcnhycGNfbm90aWZ5X3NvY2tldF9vb2IoY2FsbCwgc2tiKTtcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0aWYgKGNhbGwgXHUwMDI2XHUwMDI2ICFxdWV1ZWQpIHtcbi1cdFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTtcbi1cdFx0c3AtXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbi1cbi1cdGlmICghY2FsbClcbi1cdFx0cnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihjb25uLCBza2IpO1xuLVx0cmV0dXJuIHRydWU7XG4tfVxuLVxuIC8qXG4gICogSW5wdXQgYSBjb25uZWN0aW9uLWxldmVsIHBhY2tldC5cbiAgKi9cbkBAIC01MTMsNyArNDUwLDggQEAgYm9vbCByeHJwY19pbnB1dF9jb25uX3BhY2tldChzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0fVxuIFx0XHRpZiAoIWNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNldmFsaWRhdGVfY2hhbGxlbmdlKGNvbm4sIHNrYikpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHRyZXR1cm4gcnhycGNfcG9zdF9jaGFsbGVuZ2UoY29ubiwgc2tiKTtcbitcdFx0cnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihjb25uLCBza2IpO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGNhc2UgUlhSUENfUEFDS0VUX1RZUEVfUkVTUE9OU0U6XG4gXHRcdGlmIChyeHJwY19pc19jb25uX2Fib3J0ZWQoY29ubikpIHtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMva2V5LmMgYi9uZXQvcnhycGMva2V5LmNcbmluZGV4IGEwYWE3OGQ4OTI4OTdmLi4yZGRkYmUzY2FkNWNmYyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9rZXkuY1xuKysrIGIvbmV0L3J4cnBjL2tleS5jXG5AQCAtODkzLDMgKzg5MywzOSBAQCBzdGF0aWMgbG9uZyByeHJwY19yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSxcbiBcdF9sZWF2ZShcIiA9ICV6dVwiLCBzaXplKTtcbiBcdHJldHVybiBzaXplO1xuIH1cbitcbisvKipcbisgKiByeHJwY19rZXJuZWxfcXVlcnlfa2V5IC0gUXVlcnkgcGFyYW1ldGVycyBmcm9tIGFuIHJ4cnBjIGtleVxuKyAqIEBrZXk6IFRoZSBrZXkgdG8gcXVlcnlcbisgKiBAX3NlY3VyaXR5X2luZGV4OiBXaGVyZSB0byByZXR1cm4gdGhlIHNlY3VyaXR5IGluZGV4XG4rICogQF9rcmI1X2VuY3R5cGU6IFdoZXJlIHRvIHJldHVybiB0aGUga3JiNSBlbmNyeXB0aW9uIHR5cGUgaWYgYXBwbGljYWJsZVxuKyAqXG4rICogUXVlcnkgYW4gcnhycGMgYXV0aGVudGljYXRpb24ga2V5LCBleHRyYWN0aW5nIHRoZSBzZWN1cml0eSBpbmRleCBmcm9tIHRoZVxuKyAqIGZpcnN0IHRva2VuIHRoZXJlaW4uXG4rICovXG4rdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgdTggKl9zZWN1cml0eV9pbmRleCwgdTMyICpfa3JiNV9lbmN0eXBlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCByeHJwY19rZXlfdG9rZW4gKnRva2VuO1xuK1xuK1x0dG9rZW4gPSBrZXktXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xuK1x0aWYgKCF0b2tlbikge1xuK1x0XHQqX3NlY3VyaXR5X2luZGV4ID0gMDtcbitcdFx0Kl9rcmI1X2VuY3R5cGUgPSAwO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQqX3NlY3VyaXR5X2luZGV4ID0gdG9rZW4tXHUwMDNlc2VjdXJpdHlfaW5kZXg7XG4rXHRzd2l0Y2ggKHRva2VuLVx1MDAzZXNlY3VyaXR5X2luZGV4KSB7XG4rXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOlxuK1x0XHQqX2tyYjVfZW5jdHlwZSA9IDA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbitcdFx0Kl9rcmI1X2VuY3R5cGUgPSB0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZWVuY3R5cGU7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0V0FSTl9PTl9PTkNFKDEpO1xuK1x0XHQqX2tyYjVfZW5jdHlwZSA9IDA7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK31cbitFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkpO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9vb2IuYyBiL25ldC9yeHJwYy9vb2IuY1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBjODBlZTI0ODdkMDk0MS4uMDAwMDAwMDAwMDAwMDBcbi0tLSBhL25ldC9yeHJwYy9vb2IuY1xuKysrIC9kZXYvbnVsbFxuQEAgLTEsMzg3ICswLDAgQEBcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuLS8qIE91dCBvZiBiYW5kIG1lc3NhZ2UgaGFuZGxpbmcgKGUuZy4gY2hhbGxlbmdlLXJlc3BvbnNlKVxuLSAqXG4tICogQ29weXJpZ2h0IChDKSAyMDI1IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pXG4tICovXG4tXG4tI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcIjogXCIgZm10XG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NuZXQvYWZfcnhycGMuaFx1MDAzZVxuLSNpbmNsdWRlIFwiYXItaW50ZXJuYWwuaFwiXG4tXG4tZW51bSByeHJwY19vb2JfY29tbWFuZCB7XG4tXHRSWFJQQ19PT0JfQ01EX1VOU0VULFxuLVx0UlhSUENfT09CX0NNRF9SRVNQT05ELFxuLX0gX19tb2RlKGJ5dGUpO1xuLVxuLXN0cnVjdCByeHJwY19vb2JfcGFyYW1zIHtcbi1cdHU2NFx0XHRcdG9vYl9pZDtcdFx0LyogSUQgbnVtYmVyIG9mIG1lc3NhZ2UgaWYgcmVwbHkgKi9cbi1cdHMzMlx0XHRcdGFib3J0X2NvZGU7XG4tXHRlbnVtIHJ4cnBjX29vYl9jb21tYW5kXHRjb21tYW5kO1xuLVx0Ym9vbFx0XHRcdGhhdmVfb29iX2lkOjE7XG4tfTtcbi1cbi0vKlxuLSAqIFBvc3QgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZSBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2Vcbi0gKiBhc3NvY2lhdGVkIHdpdGggYSByZWZlcmVuY2UgY2FsbC5cbi0gKi9cbi1ib29sIHJ4cnBjX25vdGlmeV9zb2NrZXRfb29iKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbi1cdHN0cnVjdCBzb2NrICpzaztcbi1cdGJvb2wgcXVldWVkID0gZmFsc2U7XG4tXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXG4tXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVx1MDAzZXNvY2tldCk7XG4tXHRpZiAocngpIHtcbi1cdFx0c2sgPSBcdTAwMjZyeC1cdTAwM2Vzaztcbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuLVxuLVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgXHUwMDNjIFJYUlBDX0NMT1NFKSB7XG4tXHRcdFx0c2tiLVx1MDAzZXNrYl9tc3RhbXBfbnMgPSByeC1cdTAwM2Vvb2JfaWRfY291bnRlcisrO1xuLVx0XHRcdHJ4cnBjX2dldF9za2Ioc2tiLCByeHJwY19za2JfZ2V0X3Bvc3Rfb29iKTtcbi1cdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEsIHNrYik7XG4tXHRcdFx0cXVldWVkID0gdHJ1ZTtcbi1cbi1cdFx0XHR0cmFjZV9yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwtXHUwMDNlZGVidWdfaWQsIHNwLVx1MDAzZWhkci5zZXJpYWwpO1xuLVx0XHRcdGlmIChyeC1cdTAwM2VhcHBfb3BzKVxuLVx0XHRcdFx0cngtXHUwMDNlYXBwX29wcy1cdTAwM2Vub3RpZnlfb29iKHNrLCBza2IpO1xuLVx0XHR9XG4tXG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuLVx0XHRpZiAocXVldWVkIFx1MDAyNlx1MDAyNiAhcngtXHUwMDNlYXBwX29wcyBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcbi1cdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbi1cdH1cbi1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0cmV0dXJuIHF1ZXVlZDtcbi19XG4tXG4tLypcbi0gKiBMb2NhdGUgdGhlIE9PQiBtZXNzYWdlIHRvIHJlc3BvbmQgdG8gYnkgaXRzIElELlxuLSAqL1xuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfZmluZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHU2NCBvb2JfaWQpXG4te1xuLVx0c3RydWN0IHJiX25vZGUgKnA7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLVxuLVx0cCA9IHJ4LVx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlO1xuLVx0d2hpbGUgKHApIHtcbi1cdFx0c2tiID0gcmJfZW50cnkocCwgc3RydWN0IHNrX2J1ZmYsIHJibm9kZSk7XG4tXG4tXHRcdGlmIChvb2JfaWQgXHUwMDNjIHNrYi1cdTAwM2Vza2JfbXN0YW1wX25zKVxuLVx0XHRcdHAgPSBwLVx1MDAzZXJiX2xlZnQ7XG4tXHRcdGVsc2UgaWYgKG9vYl9pZCBcdTAwM2Ugc2tiLVx1MDAzZXNrYl9tc3RhbXBfbnMpXG4tXHRcdFx0cCA9IHAtXHUwMDNlcmJfcmlnaHQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXR1cm4gc2tiO1xuLVx0fVxuLVxuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLVxuLS8qXG4tICogQWRkIGFuIE9PQiBtZXNzYWdlIGludG8gdGhlIHBlbmRpbmctcmVzcG9uc2Ugc2V0LiAgV2UgYWx3YXlzIGFzc2lnbiB0aGUgbmV4dFxuLSAqIHZhbHVlIGZyb20gYSA2NC1iaXQgY291bnRlciB0byB0aGUgb29iX2lkLCBzbyBqdXN0IGFzc3VtZSB3ZSdyZSBhbHdheXMgZ29pbmdcbi0gKiB0byBiZSBvbiB0aGUgcmlnaHQtaGFuZCBlZGdlIG9mIHRoZSB0cmVlIGFuZCB0aGF0IHRoZSBjb3VudGVyIHdvbid0IHdyYXAuXG4tICogVGhlIHRyZWUgaXMgYWxzbyBnaXZlbiBhIHJlZiB0byB0aGUgbWVzc2FnZS5cbi0gKi9cbi12b2lkIHJ4cnBjX2FkZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBza19idWZmICpza2IpXG4te1xuLVx0c3RydWN0IHJiX25vZGUgKipwcCA9IFx1MDAyNnJ4LVx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlLCAqcCA9IE5VTEw7XG4tXG4tXHR3aGlsZSAoKnBwKSB7XG4tXHRcdHAgPSAqcHA7XG4tXHRcdHBwID0gXHUwMDI2KCpwcCktXHUwMDNlcmJfcmlnaHQ7XG4tXHR9XG4tXG4tXHRyYl9saW5rX25vZGUoXHUwMDI2c2tiLVx1MDAzZXJibm9kZSwgcCwgcHApO1xuLVx0cmJfaW5zZXJ0X2NvbG9yKFx1MDAyNnNrYi1cdTAwM2VyYm5vZGUsIFx1MDAyNnJ4LVx1MDAzZXBlbmRpbmdfb29icSk7XG4tfVxuLVxuLS8qXG4tICogRXh0cmFjdCBjb250cm9sIG1lc3NhZ2VzIGZyb20gdGhlIHNlbmRtc2coKSBjb250cm9sIGJ1ZmZlci5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfb29iX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyAqcClcbi17XG4tXHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcbi1cdGludCBsZW47XG4tXG4tXHRpZiAobXNnLVx1MDAzZW1zZ19jb250cm9sbGVuID09IDApXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0Zm9yX2VhY2hfY21zZ2hkcihjbXNnLCBtc2cpIHtcbi1cdFx0aWYgKCFDTVNHX09LKG1zZywgY21zZykpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRcdGxlbiA9IGNtc2ctXHUwMDNlY21zZ19sZW4gLSBzaXplb2Yoc3RydWN0IGNtc2doZHIpO1xuLVx0XHRfZGVidWcoXCJDTVNHICVkLCAlZCwgJWRcIixcbi1cdFx0ICAgICAgIGNtc2ctXHUwMDNlY21zZ19sZXZlbCwgY21zZy1cdTAwM2VjbXNnX3R5cGUsIGxlbik7XG4tXG4tXHRcdGlmIChjbXNnLVx1MDAzZWNtc2dfbGV2ZWwgIT0gU09MX1JYUlBDKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRzd2l0Y2ggKGNtc2ctXHUwMDNlY21zZ190eXBlKSB7XG4tXHRcdGNhc2UgUlhSUENfT09CX0lEOlxuLVx0XHRcdGlmIChsZW4gIT0gc2l6ZW9mKHAtXHUwMDNlb29iX2lkKSB8fCBwLVx1MDAzZWhhdmVfb29iX2lkKVxuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0bWVtY3B5KFx1MDAyNnAtXHUwMDNlb29iX2lkLCBDTVNHX0RBVEEoY21zZyksIHNpemVvZihwLVx1MDAzZW9vYl9pZCkpO1xuLVx0XHRcdHAtXHUwMDNlaGF2ZV9vb2JfaWQgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJYUlBDX1JFU1BPTkQ6XG4tXHRcdFx0aWYgKHAtXHUwMDNlY29tbWFuZCAhPSBSWFJQQ19PT0JfQ01EX1VOU0VUKVxuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0cC1cdTAwM2Vjb21tYW5kID0gUlhSUENfT09CX0NNRF9SRVNQT05EO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJYUlBDX0FCT1JUOlxuLVx0XHRcdGlmIChsZW4gIT0gc2l6ZW9mKHAtXHUwMDNlYWJvcnRfY29kZSkgfHwgcC1cdTAwM2VhYm9ydF9jb2RlKVxuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0bWVtY3B5KFx1MDAyNnAtXHUwMDNlYWJvcnRfY29kZSwgQ01TR19EQVRBKGNtc2cpLCBzaXplb2YocC1cdTAwM2VhYm9ydF9jb2RlKSk7XG4tXHRcdFx0aWYgKHAtXHUwMDNlYWJvcnRfY29kZSA9PSAwKVxuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgUlhSUENfUkVTUF9SWEdLX0FQUERBVEE6XG4tXHRcdFx0aWYgKHAtXHUwMDNlY29tbWFuZCAhPSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQpXG4tXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0c3dpdGNoIChwLVx1MDAzZWNvbW1hbmQpIHtcbi1cdGNhc2UgUlhSUENfT09CX0NNRF9SRVNQT05EOlxuLVx0XHRpZiAoIXAtXHUwMDNlaGF2ZV9vb2JfaWQpXG4tXHRcdFx0cmV0dXJuIC1FQkFEU0xUO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLS8qXG4tICogQWxsb3cgdXNlcnNwYWNlIHRvIHJlc3BvbmQgdG8gYW4gT09CIHVzaW5nIHNlbmRtc2coKS5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4cnBjX3Jlc3BvbmRfdG9fb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbi1cdFx0XHRcdHN0cnVjdCByeHJwY19vb2JfcGFyYW1zICpwLFxuLVx0XHRcdFx0c3RydWN0IG1zZ2hkciAqbXNnKVxuLXtcbi1cdHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uO1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcDtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXHRpbnQgcmV0O1xuLVxuLVx0c2tiID0gcnhycGNfZmluZF9wZW5kaW5nX29vYihyeCwgcC1cdTAwM2Vvb2JfaWQpO1xuLVx0aWYgKHNrYilcbi1cdFx0cmJfZXJhc2UoXHUwMDI2c2tiLVx1MDAzZXJibm9kZSwgXHUwMDI2cngtXHUwMDNlcGVuZGluZ19vb2JxKTtcbi1cdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG4tXHRpZiAoIXNrYilcbi1cdFx0cmV0dXJuIC1FQkFEU0xUO1xuLVxuLVx0c3AgPSByeHJwY19za2Ioc2tiKTtcbi1cbi1cdHN3aXRjaCAocC1cdTAwM2Vjb21tYW5kKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DTURfUkVTUE9ORDpcbi1cdFx0cmV0ID0gLUVQUk9UTztcbi1cdFx0aWYgKHNrYi1cdTAwM2VtYXJrICE9IFJYUlBDX09PQl9DSEFMTEVOR0UpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNvbm4gPSBzcC1cdTAwM2VjaGFsbC5jb25uO1xuLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbi1cdFx0aWYgKCFjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZXNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGlmIChwLVx1MDAzZWFib3J0X2NvZGUpIHtcbi1cdFx0XHRyeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIHAtXHUwMDNlYWJvcnRfY29kZSwgLUVDT05OQUJPUlRFRCxcbi1cdFx0XHRcdFx0IHJ4cnBjX2Fib3J0X3Jlc3BvbnNlX3NlbmRtc2cpO1xuLVx0XHRcdHJldCA9IDA7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmV0ID0gY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VzZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHNrYiwgbXNnKTtcbi1cdFx0fVxuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0c3dpdGNoIChza2ItXHUwMDNlbWFyaykge1xuLVx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxuLVx0XHRyeHJwY19wdXRfY29ubmVjdGlvbihzcC1cdTAwM2VjaGFsbC5jb25uLCByeHJwY19jb25uX3B1dF9vb2IpO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9vb2IpO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLypcbi0gKiBTZW5kIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2Ugb3IgcmVzcG9uZCB0byBhIHJlY2VpdmVkIG91dC1vZi1iYW5kIG1lc3NhZ2UuXG4tICogLSBjYWxsZXIgZ2l2ZXMgdXMgdGhlIHNvY2tldCBsb2NrXG4tICogLSB0aGUgc29ja2V0IG1heSBiZSBlaXRoZXIgYSBjbGllbnQgc29ja2V0IG9yIGEgc2VydmVyIHNvY2tldFxuLSAqL1xuLWludCByeHJwY19zZW5kbXNnX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi17XG4tXHRzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyBwID0ge307XG4tXHRpbnQgcmV0O1xuLVxuLVx0X2VudGVyKFwiXCIpO1xuLVxuLVx0cmV0ID0gcnhycGNfc2VuZG1zZ19vb2JfY21zZyhtc2csIFx1MDAyNnApO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJvcl9yZWxlYXNlX3NvY2s7XG4tXG4tXHRpZiAocC5oYXZlX29vYl9pZClcbi1cdFx0cmV0dXJuIHJ4cnBjX3Jlc3BvbmRfdG9fb29iKHJ4LCBcdTAwMjZwLCBtc2cpO1xuLVxuLVx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbi1cbi1cdHN3aXRjaCAocC5jb21tYW5kKSB7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdF9sZWF2ZShcIiA9ICVkXCIsIHJldCk7XG4tXHRyZXR1cm4gcmV0O1xuLVxuLWVycm9yX3JlbGVhc2Vfc29jazpcbi1cdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfcXVlcnlfb29iIC0gUXVlcnkgdGhlIHBhcmFtZXRlcnMgb2YgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZVxuLSAqIEBvb2I6IFRoZSBtZXNzYWdlIHRvIHF1ZXJ5XG4tICogQF9wZWVyOiBXaGVyZSB0byByZXR1cm4gdGhlIHBlZXIgcmVjb3JkXG4tICogQF9wZWVyX2FwcGRhdGE6IFRoZSBhcHBsaWNhdGlvbiBkYXRhIGF0dGFjaGVkIHRvIGEgcGVlciByZWNvcmRcbi0gKlxuLSAqIEV4dHJhY3QgdXNlZnVsIHBhcmFtZXRlcnMgZnJvbSBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlLiAgVGhlIHNvdXJjZSBwZWVyXG4tICogcGFyYW1ldGVycyBhcmUgcmV0dXJuZWQgdGhyb3VnaCB0aGUgYXJndW1lbnQgbGlzdCBhbmQgdGhlIG1lc3NhZ2UgdHlwZSBpc1xuLSAqIHJldHVybmVkLlxuLSAqXG4tICogUmV0dXJuOlxuLSAqICogJVJYUlBDX09PQl9DSEFMTEVOR0UgLSBDaGFsbGVuZ2Ugd2FudGluZyBhIHJlc3BvbnNlLlxuLSAqL1xuLWVudW0gcnhycGNfb29iX3R5cGUgcnhycGNfa2VybmVsX3F1ZXJ5X29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iLFxuLVx0XHRcdFx0XHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxuLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Iob29iKTtcbi1cdGVudW0gcnhycGNfb29iX3R5cGUgdHlwZSA9IG9vYi1cdTAwM2VtYXJrO1xuLVxuLVx0c3dpdGNoICh0eXBlKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XG4tXHRcdCpfcGVlclx0XHQ9IHNwLVx1MDAzZWNoYWxsLmNvbm4tXHUwMDNlcGVlcjtcbi1cdFx0Kl9wZWVyX2FwcGRhdGFcdD0gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VwZWVyLVx1MDAzZWFwcF9kYXRhO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdFdBUk5fT05fT05DRSgxKTtcbi1cdFx0Kl9wZWVyXHRcdD0gTlVMTDtcbi1cdFx0Kl9wZWVyX2FwcGRhdGFcdD0gMDtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHRyZXR1cm4gdHlwZTtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfb29iKTtcbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2IgLSBEZXF1ZXVlIGFuZCByZXR1cm4gdGhlIGZyb250IE9PQiBtZXNzYWdlXG4tICogQHNvY2s6IFRoZSBzb2NrZXQgdG8gcXVlcnlcbi0gKiBAX3R5cGU6IFdoZXJlIHRvIHJldHVybiB0aGUgbWVzc2FnZSB0eXBlXG4tICpcbi0gKiBEZXF1ZXVlIHRoZSBmcm9udCBPT0IgbWVzc2FnZSwgaWYgdGhlcmUgaXMgb25lLCBhbmQgcmV0dXJuIGl0IGFuZFxuLSAqIGl0cyB0eXBlLlxuLSAqXG4tICogUmV0dXJuOiBUaGUgc2tfYnVmZiByZXByZXNlbnRpbmcgdGhlIE9PQiBtZXNzYWdlIG9yICVOVUxMIGlmIHRoZSBxdWV1ZSB3YXNcbi0gKiBlbXB0eS5cbi0gKi9cbi1zdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfa2VybmVsX2RlcXVldWVfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tXHRcdFx0XHRcdCBlbnVtIHJ4cnBjX29vYl90eXBlICpfdHlwZSlcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbi1cdHN0cnVjdCBza19idWZmICpvb2I7XG4tXG4tXHRvb2IgPSBza2JfZGVxdWV1ZShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpO1xuLVx0aWYgKG9vYilcbi1cdFx0Kl90eXBlID0gb29iLVx1MDAzZW1hcms7XG4tXHRyZXR1cm4gb29iO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYik7XG4tXG4tLyoqXG4tICogcnhycGNfa2VybmVsX2ZyZWVfb29iIC0gRnJlZSBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlXG4tICogQG9vYjogVGhlIE9PQiBtZXNzYWdlIHRvIGZyZWVcbi0gKlxuLSAqIEZyZWUgYW4gT09CIG1lc3NhZ2UgYWxvbmcgd2l0aCBhbnkgcmVzb3VyY2VzIGl0IGhvbGRzLlxuLSAqL1xuLXZvaWQgcnhycGNfa2VybmVsX2ZyZWVfb29iKHN0cnVjdCBza19idWZmICpvb2IpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihvb2IpO1xuLVxuLVx0c3dpdGNoIChvb2ItXHUwMDNlbWFyaykge1xuLVx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxuLVx0XHRyeHJwY19wdXRfY29ubmVjdGlvbihzcC1cdTAwM2VjaGFsbC5jb25uLCByeHJwY19jb25uX3B1dF9vb2IpO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdHJ4cnBjX2ZyZWVfc2tiKG9vYiwgcnhycGNfc2tiX3B1dF9wdXJnZV9vb2IpO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9mcmVlX29vYik7XG4tXG4tLyoqXG4tICogcnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSAtIFF1ZXJ5IHRoZSBwYXJhbWV0ZXJzIG9mIGEgY2hhbGxlbmdlXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byBxdWVyeVxuLSAqIEBfcGVlcjogV2hlcmUgdG8gcmV0dXJuIHRoZSBwZWVyIHJlY29yZFxuLSAqIEBfcGVlcl9hcHBkYXRhOiBUaGUgYXBwbGljYXRpb24gZGF0YSBhdHRhY2hlZCB0byBhIHBlZXIgcmVjb3JkXG4tICogQF9zZXJ2aWNlX2lkOiBXaGVyZSB0byByZXR1cm4gdGhlIGNvbm5lY3Rpb24gc2VydmljZSBJRFxuLSAqIEBfc2VjdXJpdHlfaW5kZXg6IFdoZXJlIHRvIHJldHVybiB0aGUgY29ubmVjdGlvbiBzZWN1cml0eSBpbmRleFxuLSAqXG4tICogRXh0cmFjdCB1c2VmdWwgcGFyYW1ldGVycyBmcm9tIGEgQ0hBTExFTkdFIG1lc3NhZ2UuXG4tICovXG4tdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXG4tXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsXG4tXHRcdFx0XHQgIHUxNiAqX3NlcnZpY2VfaWQsIHU4ICpfc2VjdXJpdHlfaW5kZXgpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0Kl9wZWVyXHRcdD0gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VwZWVyO1xuLVx0Kl9wZWVyX2FwcGRhdGFcdD0gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VwZWVyLVx1MDAzZWFwcF9kYXRhO1xuLVx0Kl9zZXJ2aWNlX2lkXHQ9IHNwLVx1MDAzZWhkci5zZXJ2aWNlSWQ7XG4tXHQqX3NlY3VyaXR5X2luZGV4ID0gc3AtXHUwMDNlaGRyLnNlY3VyaXR5SW5kZXg7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSk7XG4tXG4tLyoqXG4tICogcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UgLSBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHJlamVjdCBhIGNoYWxsZW5nZVxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgdG8gYmUgcmVqZWN0ZWRcbi0gKiBAYWJvcnRfY29kZTogVGhlIGFib3J0IGNvZGUgdG8gc3RpY2sgaW50byB0aGUgQUJPUlQgcGFja2V0XG4tICogQGVycm9yOiBMb2NhbCBlcnJvciB2YWx1ZVxuLSAqIEB3aHk6IEluZGljYXRpb24gYXMgdG8gd2h5LlxuLSAqXG4tICogQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byByZWplY3QgYSBjaGFsbGVuZ2UgYnkgYWJvcnRpbmcgdGhlIGNvbm5lY3Rpb24gaWZcbi0gKiBpdCdzIHN0aWxsIGluIGFuIGFib3J0YWJsZSBzdGF0ZS4gIFRoZSBlcnJvciBpcyByZXR1cm5lZCBzbyB0aGlzIGZ1bmN0aW9uXG4tICogY2FuIGJlIHVzZWQgd2l0aCBhIHJldHVybiBzdGF0ZW1lbnQuXG4tICpcbi0gKiBSZXR1cm46IFRoZSAlZXJyb3IgcGFyYW1ldGVyLlxuLSAqL1xuLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSxcbi1cdFx0XHRcdCAgaW50IGVycm9yLCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0X2VudGVyKFwieyV4fSwlZCwlZCwldVwiLCBzcC1cdTAwM2VoZHIuc2VyaWFsLCBhYm9ydF9jb2RlLCBlcnJvciwgd2h5KTtcbi1cbi1cdHJ4cnBjX2Fib3J0X2Nvbm4oc3AtXHUwMDNlY2hhbGwuY29ubiwgTlVMTCwgYWJvcnRfY29kZSwgZXJyb3IsIHdoeSk7XG4tXHRyZXR1cm4gZXJyb3I7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UpO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jXG5pbmRleCBlZmNiYTRiMmU3NGYwYy4uMjg1OWE4MGUxODc2NjMgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcmVjdm1zZy5jXG4rKysgYi9uZXQvcnhycGMvcmVjdm1zZy5jXG5AQCAtMjE1LDYxICsyMTUsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfdXNlcl9pZChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IG1zZ2hkciAqbXNnLFxuIFx0fVxuIH1cbiBcbi0vKlxuLSAqIERlYWwgd2l0aCBhIENIQUxMRU5HRSBwYWNrZXQuXG4tICovXG4tc3RhdGljIGludCByeHJwY19yZWN2bXNnX2NoYWxsZW5nZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVx0c3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4gPSBzcC1cdTAwM2VjaGFsbC5jb25uO1xuLVxuLVx0cmV0dXJuIGNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlY2hhbGxlbmdlX3RvX3JlY3Ztc2coY29ubiwgY2hhbGxlbmdlLCBtc2cpO1xuLX1cbi1cbi0vKlxuLSAqIFByb2Nlc3MgT09CIHBhY2tldHMuICBDYWxsZWQgd2l0aCB0aGUgc29ja2V0IGxvY2tlZC5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi1cdFx0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncylcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXHRib29sIG5lZWRfcmVzcG9uc2UgPSBmYWxzZTtcbi1cdGludCByZXQ7XG4tXG4tXHRza2IgPSBza2JfcGVlayhcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpO1xuLVx0aWYgKCFza2IpXG4tXHRcdHJldHVybiAtRUFHQUlOO1xuLVx0cnhycGNfc2VlX3NrYihza2IsIHJ4cnBjX3NrYl9zZWVfcmVjdm1zZyk7XG4tXG4tXHRyZXQgPSBwdXRfY21zZyhtc2csIFNPTF9SWFJQQywgUlhSUENfT09CX0lELCBzaXplb2YodTY0KSxcbi1cdFx0ICAgICAgIFx1MDAyNnNrYi1cdTAwM2Vza2JfbXN0YW1wX25zKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHRzd2l0Y2ggKChlbnVtIHJ4cnBjX29vYl90eXBlKXNrYi1cdTAwM2VtYXJrKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XG4tXHRcdG5lZWRfcmVzcG9uc2UgPSB0cnVlO1xuLVx0XHRyZXQgPSByeHJwY19yZWN2bXNnX2NoYWxsZW5nZShzb2NrLCBtc2csIHNrYiwgZmxhZ3MpO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdFdBUk5fT05DRSgxLCBcInJlY3Ztc2coKSBjYW4ndCBwcm9jZXNzIHVua25vd24gT09CIHR5cGUgJXVcXG5cIixcbi1cdFx0XHQgIHNrYi1cdTAwM2VtYXJrKTtcbi1cdFx0cmV0ID0gLUVJTztcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHRpZiAoIShmbGFncyBcdTAwMjYgTVNHX1BFRUspKSB7XG4tXHRcdHNrYl91bmxpbmsoc2tiLCBcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpO1xuLVx0XHRpZiAobmVlZF9yZXNwb25zZSlcbi1cdFx0XHRyeHJwY19hZGRfcGVuZGluZ19vb2IocngsIHNrYik7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyeHJwY19mcmVlX3NrYihza2IsIHJ4cnBjX3NrYl9wdXRfb29iKTtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuIC8qXG4gICogRGVsaXZlciBtZXNzYWdlcyB0byBhIGNhbGwuICBUaGlzIGtlZXBzIHByb2Nlc3NpbmcgcGFja2V0cyB1bnRpbCB0aGUgYnVmZmVyXG4gICogaXMgZmlsbGVkIGFuZCB3ZSBmaW5kIGVpdGhlciBtb3JlIERBVEEgKHJldHVybnMgMCkgb3IgdGhlIGVuZCBvZiB0aGUgREFUQVxuQEAgLTI4MSw3ICsyMjYsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHQgICAgICBzaXplX3QgbGVuLCBpbnQgZmxhZ3MsIHNpemVfdCAqX29mZnNldClcbiB7XG4gXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwO1xuLVx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0cnhycGNfc2VxX3Qgc2VxID0gMDtcbiBcdHNpemVfdCByZW1haW47XG5AQCAtMzc2LDEzICszMjAsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcbiBcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE1TR19QRUVLKSlcbiBcdFx0XHRyeHJwY19yb3RhdGVfcnhfd2luZG93KGNhbGwpO1xuLVxuLVx0XHRpZiAoIXJ4LVx1MDAzZWFwcF9vcHMgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpIHtcbi1cdFx0XHR0cmFjZV9yeHJwY19yZWN2ZGF0YShjYWxsLCByeHJwY19yZWN2bXNnX29vYnEsIHNlcSxcbi1cdFx0XHRcdFx0ICAgICByeF9wa3Rfb2Zmc2V0LCByeF9wa3RfbGVuLCByZXQpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4gXHR9XG4gXG4gb3V0OlxuQEAgLTQxOSw3ICszNTYsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXG4gXHR0cmFjZV9yeHJwY19yZWN2bXNnKDAsIHJ4cnBjX3JlY3Ztc2dfZW50ZXIsIDApO1xuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoTVNHX09PQiB8IE1TR19UUlVOQykpXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19UUlVOQylcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKFx1MDAyNnJ4LVx1MDAzZXNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbkBAIC00MzAsMTQgKzM2NywxMiBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHQvKiBSZXR1cm4gaW1tZWRpYXRlbHkgaWYgYSBjbGllbnQgc29ja2V0IGhhcyBubyBvdXRzdGFuZGluZyBjYWxscyAqL1xuIFx0aWYgKFJCX0VNUFRZX1JPT1QoXHUwMDI2cngtXHUwMDNlY2FsbHMpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGxpc3RfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSBcdTAwMjZcdTAwMjZcbiBcdCAgICByeC1cdTAwM2Vzay5za19zdGF0ZSAhPSBSWFJQQ19TRVJWRVJfTElTVEVOSU5HKSB7XG4gXHRcdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG4gXHRcdHJldHVybiAtRUFHQUlOO1xuIFx0fVxuIFxuLVx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuK1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKSkge1xuIFx0XHRyZXQgPSAtRVdPVUxEQkxPQ0s7XG4gXHRcdGlmICh0aW1lbyA9PSAwKSB7XG4gXHRcdFx0Y2FsbCA9IE5VTEw7XG5AQCAtNDUzLDggKzM4OCw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIHdhaXRfZXJyb3I7XG4gXG4tXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuK1x0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpKSB7XG4gXHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIFx0XHRcdFx0Z290byB3YWl0X2ludGVycnVwdGVkO1xuIFx0XHRcdHRyYWNlX3J4cnBjX3JlY3Ztc2coMCwgcnhycGNfcmVjdm1zZ193YWl0LCAwKTtcbkBAIC00NjQsMTUgKzM5OCw2IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0Z290byB0cnlfYWdhaW47XG4gXHR9XG4gXG4tXHQvKiBEZWFsIHdpdGggT09CIG1lc3NhZ2VzIGJlZm9yZSB3ZSBjb25zaWRlciBnZXR0aW5nIG5vcm1hbCBkYXRhLiAqL1xuLVx0aWYgKCFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuLVx0XHRyZXQgPSByeHJwY19yZWN2bXNnX29vYihzb2NrLCBtc2csIGZsYWdzKTtcbi1cdFx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbi1cdFx0aWYgKHJldCA9PSAtRUFHQUlOKVxuLVx0XHRcdGdvdG8gdHJ5X2FnYWluO1xuLVx0XHRnb3RvIGVycm9yX3RyYWNlO1xuLVx0fVxuLVxuIFx0LyogRmluZCB0aGUgbmV4dCBjYWxsIGFuZCBkZXF1ZXVlIGl0IGlmIHdlJ3JlIG5vdCBqdXN0IHBlZWtpbmcuICBJZiB3ZVxuIFx0ICogZG8gZGVxdWV1ZSBpdCwgdGhhdCBjb21lcyB3aXRoIGEgcmVmIHRoYXQgd2Ugd2lsbCBuZWVkIHRvIHJlbGVhc2UuXG4gXHQgKiBXZSBhbHNvIHdhbnQgdG8gd2VlZCBvdXQgY2FsbHMgdGhhdCBnb3QgcmVxdWV1ZWQgd2hpbHN0IHdlIHdlcmVcbkBAIC00ODMsOCArNDA4LDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0Y2FsbCA9IGxpc3RfZW50cnkobCwgc3RydWN0IHJ4cnBjX2NhbGwsIHJlY3Ztc2dfbGluayk7XG4gXG4gXHRpZiAoIXJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19xdWV1ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpIHtcbitcdCAgICBza2JfcXVldWVfZW1wdHkoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX3F1ZXVlKSkge1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rKTtcbiBcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4gXHRcdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmNcbmluZGV4IDc3YTY3YWNlMWQyNDgxLi45YWI3NjZkNWYwYjZjOCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yeGdrLmNcbisrKyBiL25ldC9yeHJwYy9yeGdrLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXktdHlwZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNja2V5cy91c2VyLXR5cGUuaFx1MDAzZVxuICNpbmNsdWRlIFwiYXItaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJyeGdrX2NvbW1vbi5oXCJcbiBcbkBAIC03MzQsMzcgKzczNSw2IEBAIHN0YXRpYyBib29sIHJ4Z2tfdmFsaWRhdGVfY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLS8qKlxuLSAqIHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSAtIFF1ZXJ5IFJ4R0stc3BlY2lmaWMgY2hhbGxlbmdlIHBhcmFtZXRlcnNcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHBhY2tldCB0byBxdWVyeVxuLSAqXG4tICogUmV0dXJuOiBUaGUgS2VyYmVyb3MgNSBlbmNvZGluZyB0eXBlIGZvciB0aGUgY2hhbGxlbmdlZCBjb25uZWN0aW9uLlxuLSAqL1xuLXUzMiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XG4tXG4tXHRyZXR1cm4gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VyeGdrLmVuY3R5cGU7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKTtcbi1cbi0vKlxuLSAqIEZpbGwgb3V0IHRoZSBjb250cm9sIG1lc3NhZ2UgdG8gcGFzcyB0byB1c2Vyc3BhY2UgdG8gaW5mb3JtIGFib3V0IHRoZVxuLSAqIGNoYWxsZW5nZS5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4Z2tfY2hhbGxlbmdlX3RvX3JlY3Ztc2coc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZylcbi17XG4tXHRzdHJ1Y3Qgcnhna19jaGFsbGVuZ2UgY2hhbGw7XG4tXG4tXHRjaGFsbC5iYXNlLnNlcnZpY2VfaWRcdFx0PSBjb25uLVx1MDAzZXNlcnZpY2VfaWQ7XG4tXHRjaGFsbC5iYXNlLnNlY3VyaXR5X2luZGV4XHQ9IGNvbm4tXHUwMDNlc2VjdXJpdHlfaXg7XG4tXHRjaGFsbC5lbmN0eXBlXHRcdFx0PSBjb25uLVx1MDAzZXJ4Z2suZW5jdHlwZTtcbi1cbi1cdHJldHVybiBwdXRfY21zZyhtc2csIFNPTF9SWFJQQywgUlhSUENfQ0hBTExFTkdFRCwgc2l6ZW9mKGNoYWxsKSwgXHUwMDI2Y2hhbGwpO1xuLX1cbi1cbiAvKlxuICAqIEluc2VydCB0aGUgcmVxdWlzaXRlIGFtb3VudCBvZiBYRFIgcGFkZGluZyBmb3IgdGhlIGxlbmd0aCBnaXZlbi5cbiAgKi9cbkBAIC04MzcsNyArODA3LDcgQEAgc3RhdGljIG5vaW5saW5lIHNzaXplX3Qgcnhna19pbnNlcnRfcmVzcG9uc2VfaGVhZGVyKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25cbiAgKi9cbiBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSxcbitcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICphcHBkYXRhLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3BvbnNlLFxuIFx0XHRcdFx0XHQgICAgc2l6ZV90IG9mZnNldClcbiB7XG5AQCAtODU5LDIwICs4MjksMjAgQEAgc3RhdGljIHNzaXplX3Qgcnhna19jb25zdHJ1Y3RfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiAtRVBST1RPO1xuIFxuLVx0YS5hcHBkYXRhX2xlbiA9IGh0b25sKGFwcGRhdGEtXHUwMDNlbGVuKTtcbitcdGEuYXBwZGF0YV9sZW4gPSBodG9ubChhcHBkYXRhLVx1MDAzZWRhdGFsZW4pO1xuIFxuIFx0cmV0ID0gc2tiX3N0b3JlX2JpdHMocmVzcG9uc2UsIG9mZnNldCwgXHUwMDI2YSwgc2l6ZW9mKGEpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXHRvZmZzZXQgKz0gc2l6ZW9mKGEpO1xuIFxuLVx0aWYgKGFwcGRhdGEtXHUwMDNlbGVuKSB7XG4tXHRcdHJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIGFwcGRhdGEtXHUwMDNlZGF0YSwgYXBwZGF0YS1cdTAwM2VsZW4pO1xuK1x0aWYgKGFwcGRhdGEtXHUwMDNlZGF0YWxlbikge1xuK1x0XHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBhcHBkYXRhLVx1MDAzZWRhdGEsIGFwcGRhdGEtXHUwMDNlZGF0YWxlbik7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0b2Zmc2V0ICs9IGFwcGRhdGEtXHUwMDNlbGVuO1xuK1x0XHRvZmZzZXQgKz0gYXBwZGF0YS1cdTAwM2VkYXRhbGVuO1xuIFxuLVx0XHRyZXQgPSByeGdrX3BhZF9vdXQocmVzcG9uc2UsIGFwcGRhdGEtXHUwMDNlbGVuLCBvZmZzZXQpO1xuK1x0XHRyZXQgPSByeGdrX3BhZF9vdXQocmVzcG9uc2UsIGFwcGRhdGEtXHUwMDNlZGF0YWxlbiwgb2Zmc2V0KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRvZmZzZXQgKz0gcmV0O1xuQEAgLTg5MCw3ICs4NjAsNyBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0cmV0ID0gc2tiX3N0b3JlX2JpdHMocmVzcG9uc2UsIG9mZnNldCwgXHUwMDI2Yiwgc2l6ZW9mKGIpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4tXHRyZXR1cm4gc2l6ZW9mKGEpICsgeGRyX3JvdW5kX3VwKGFwcGRhdGEtXHUwMDNlbGVuKSArIHNpemVvZihiKTtcbitcdHJldHVybiBzaXplb2YoYSkgKyB4ZHJfcm91bmRfdXAoYXBwZGF0YS1cdTAwM2VkYXRhbGVuKSArIHNpemVvZihiKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Qgcnhna19lbmNyeXB0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG5AQCAtOTIzLDcgKzg5Myw3IEBAIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfZW5jcnlwdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuICAqL1xuIHN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhKVxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKmFwcGRhdGEpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AsICpyc3A7XG4gXHRzdHJ1Y3Qgcnhna19jb250ZXh0ICpnaztcbkBAIC05MzYsNyArOTA2LDcgQEAgc3RhdGljIGludCByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdGlmIChJU19FUlIoZ2spKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihnayk7XG4gXG4tXHRhdXRoX2xlbiA9IDIwICsgKDQgKyBhcHBkYXRhLVx1MDAzZWxlbikgKyAxMiArICgxICsgNCkgKiA0O1xuK1x0YXV0aF9sZW4gPSAyMCArICg0ICsgYXBwZGF0YS1cdTAwM2VkYXRhbGVuKSArIDEyICsgKDEgKyA0KSAqIDQ7XG4gXHRhdXRoeF9sZW4gPSBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIoZ2stXHUwMDNla3JiNSwgS1JCNV9FTkNSWVBUX01PREUsXG4gXHRcdFx0XHRcdFx0YXV0aF9sZW4sIFx1MDAyNmF1dGhfb2Zmc2V0KTtcbiBcdGxlbiA9IHNpemVvZihzdHJ1Y3QgcnhycGNfd2lyZV9oZWFkZXIpICtcbkBAIC0xMDExLDY2ICs5ODEsMzYgQEAgc3RhdGljIGludCByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiAgKiBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHBhY2tldC5cbiAgKi9cbiBzdGF0aWMgaW50IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSlcbitcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcbiB7XG4tXHRfZW50ZXIoXCJ7JWQsJXh9XCIsIGNvbm4tXHUwMDNlZGVidWdfaWQsIGtleV9zZXJpYWwoY29ubi1cdTAwM2VrZXkpKTtcbitcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIGR1bW15ID0ge30sICphcHBkYXRhID0gXHUwMDI2ZHVtbXk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0X2VudGVyKFwieyVkLCV1LCV4LCV4fVwiLFxuK1x0ICAgICAgIGNvbm4tXHUwMDNlZGVidWdfaWQsIGNvbm4tXHUwMDNlc2VydmljZV9pZCxcbitcdCAgICAgICBrZXlfc2VyaWFsKGNvbm4tXHUwMDNla2V5KSwga2V5X3NlcmlhbChjb25uLVx1MDAzZWJ1bmRsZS1cdTAwM2VhcHBfZGF0YSkpO1xuIFxuIFx0aWYgKGtleV92YWxpZGF0ZShjb25uLVx1MDAzZWtleSkgXHUwMDNjIDApXG4gXHRcdHJldHVybiByeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIFJYR0tfRVhQSVJFRCwgLUVQUk9UTyxcbiBcdFx0XHRcdFx0cnhna19hYm9ydF9jaGFsbF9rZXlfZXhwaXJlZCk7XG4gXG4tXHRyZXR1cm4gcnhna19jb25zdHJ1Y3RfcmVzcG9uc2UoY29ubiwgY2hhbGxlbmdlLCBhcHBkYXRhKTtcbi19XG4tXG4tc3RhdGljIGludCByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlX25vX2FwcGRhdGEoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4tXHRcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcbi17XG4tXHRzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9O1xuLVxuLVx0cmV0dXJuIHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UoY29ubiwgY2hhbGxlbmdlLCBcdTAwMjZhcHBkYXRhKTtcbi19XG4tXG4tLyoqXG4tICogcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UgLSBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHdpdGggYXBwZGF0YVxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgdG8gcmVzcG9uZCB0b1xuLSAqIEBhcHBkYXRhOiBUaGUgYXBwbGljYXRpb24gZGF0YSB0byBpbmNsdWRlIGluIHRoZSBSRVNQT05TRSBhdXRoZW50aWNhdG9yXG4tICpcbi0gKiBBbGxvdyBhIGtlcm5lbCBhcHBsaWNhdGlvbiB0byByZXNwb25kIHRvIGEgQ0hBTExFTkdFIHdpdGggYXBwbGljYXRpb24gZGF0YVxuLSAqIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBSeEdLIFJFU1BPTlNFIEF1dGhlbnRpY2F0b3IuXG4tICpcbi0gKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4tICovXG4taW50IHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSlcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKmNzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0cmV0dXJuIHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UoY3NwLVx1MDAzZWNoYWxsLmNvbm4sIGNoYWxsZW5nZSwgYXBwZGF0YSk7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UpO1xuLVxuLS8qXG4tICogUGFyc2Ugc2VuZG1zZygpIGNvbnRyb2wgbWVzc2FnZSBhbmQgcmVzcG9uZCB0byBjaGFsbGVuZ2UuICBXZSBuZWVkIHRvIHNlZSBpZlxuLSAqIHRoZXJlJ3MgYW4gYXBwZGF0YSB0byBmaXNoIG91dC5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4Z2tfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZylcbi17XG4tXHRzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9O1xuLVx0c3RydWN0IGNtc2doZHIgKmNtc2c7XG4tXG4tXHRmb3JfZWFjaF9jbXNnaGRyKGNtc2csIG1zZykge1xuLVx0XHRpZiAoY21zZy1cdTAwM2VjbXNnX2xldmVsICE9IFNPTF9SWFJQQyB8fFxuLVx0XHQgICAgY21zZy1cdTAwM2VjbXNnX3R5cGUgIT0gUlhSUENfUkVTUF9SWEdLX0FQUERBVEEpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChhcHBkYXRhLmRhdGEpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdGFwcGRhdGEuZGF0YSA9IENNU0dfREFUQShjbXNnKTtcbi1cdFx0YXBwZGF0YS5sZW4gPSBjbXNnLVx1MDAzZWNtc2dfbGVuIC0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKTtcbitcdGlmIChjb25uLVx1MDAzZWJ1bmRsZS1cdTAwM2VhcHBfZGF0YSkge1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRcdGFwcGRhdGEgPSAoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKilcbitcdFx0XHR1c2VyX2tleV9wYXlsb2FkX3JjdShjb25uLVx1MDAzZWJ1bmRsZS1cdTAwM2VhcHBfZGF0YSk7XG4rXHRcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmFwcGRhdGEtXHUwMDNlcmVmKSlcbitcdFx0XHRhcHBkYXRhID0gTlVMTDtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdGlmICghYXBwZGF0YSlcbitcdFx0XHRyZXR1cm4gcnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBSWEdLX0VYUElSRUQsIC1FS0VZUkVWT0tFRCxcbitcdFx0XHRcdFx0XHRyeGdrX2Fib3J0X2NoYWxsX2tleV9leHBpcmVkKTtcbiBcdH1cbiBcbi1cdHJldHVybiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UsIFx1MDAyNmFwcGRhdGEpO1xuK1x0cmV0ID0gcnhna19jb25zdHJ1Y3RfcmVzcG9uc2UoY29ubiwgY2hhbGxlbmdlLCBhcHBkYXRhKTtcbitcbitcdGlmIChhcHBkYXRhICE9IFx1MDAyNmR1bW15KVxuK1x0XHRwdXRfdXNlcl9rZXlfcGF5bG9hZChhcHBkYXRhKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qXG5AQCAtMTM0Niw5ICsxMjg2LDcgQEAgY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHJ4Z2tfeWZzID0ge1xuIFx0LmZyZWVfY2FsbF9jcnlwdG9cdFx0PSByeGdrX2ZyZWVfY2FsbF9jcnlwdG8sXG4gXHQuaXNzdWVfY2hhbGxlbmdlXHRcdD0gcnhna19pc3N1ZV9jaGFsbGVuZ2UsXG4gXHQudmFsaWRhdGVfY2hhbGxlbmdlXHRcdD0gcnhna192YWxpZGF0ZV9jaGFsbGVuZ2UsXG4tXHQuY2hhbGxlbmdlX3RvX3JlY3Ztc2dcdFx0PSByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnLFxuLVx0LnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2VcdD0gcnhna19zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxuLVx0LnJlc3BvbmRfdG9fY2hhbGxlbmdlXHRcdD0gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZV9ub19hcHBkYXRhLFxuK1x0LnJlc3BvbmRfdG9fY2hhbGxlbmdlXHRcdD0gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZSxcbiBcdC52ZXJpZnlfcmVzcG9uc2VcdFx0PSByeGdrX3ZlcmlmeV9yZXNwb25zZSxcbiBcdC5jbGVhclx0XHRcdFx0PSByeGdrX2NsZWFyLFxuIFx0LmRlZmF1bHRfZGVjb2RlX3RpY2tldFx0XHQ9IHJ4Z2tfeWZzX2RlY29kZV90aWNrZXQsXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4a2FkLmMgYi9uZXQvcnhycGMvcnhrYWQuY1xuaW5kZXggY2E5ZjBlODJjYjlhYzcuLmU1NWJmY2ExMGUxYTk0IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL3J4a2FkLmNcbisrKyBiL25ldC9yeHJwYy9yeGthZC5jXG5AQCAtNzQ4LDMyICs3NDgsNiBAQCBzdGF0aWMgaW50IHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLypcbi0gKiBSeEtBRCBkb2VzIGF1dG9tYXRpYyByZXNwb25zZSBvbmx5IGFzIHRoZXJlJ3Mgbm90aGluZyB0byBtYW5hZ2UgdGhhdCBpc24ndFxuLSAqIGFscmVhZHkgaW4gdGhlIGtleS5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4a2FkX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdFx0ICAgICAgc3RydWN0IG1zZ2hkciAqbXNnKVxuLXtcbi1cdHJldHVybiAtRUlOVkFMO1xuLX1cbi1cbi0vKipcbi0gKiByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UgLSBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHdpdGggYXBwZGF0YVxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgdG8gcmVzcG9uZCB0b1xuLSAqXG4tICogQWxsb3cgYSBrZXJuZWwgYXBwbGljYXRpb24gdG8gcmVzcG9uZCB0byBhIENIQUxMRU5HRS5cbi0gKlxuLSAqIFJldHVybjogJTAgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbi0gKi9cbi1pbnQgcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTtcbi1cbi1cdHJldHVybiByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZShjc3AtXHUwMDNlY2hhbGwuY29ubiwgY2hhbGxlbmdlKTtcbi19XG4tRVhQT1JUX1NZTUJPTChyeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UpO1xuLVxuIC8qIERlY3J5cHQgZGF0YSBpbi1wbGFjZSB1c2luZyBERVMtUENCQy4gIEBsZW4gbXVzdCBiZSBhIG11bHRpcGxlIG9mIDguICovXG4gVklTSUJMRV9JRl9LVU5JVCB2b2lkIGRlc19wY2JjX2RlY3J5cHRfaW5wbGFjZShjb25zdCBzdHJ1Y3QgZGVzX2N0eCAqa2V5LFxuIFx0XHRcdFx0XHQgICAgICAgX19sZTY0IGl2LCB1OCAqZGF0YSwgc2l6ZV90IGxlbilcbkBAIC0xMTM0LDcgKzExMDgsNiBAQCBjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgcnhrYWQgPSB7XG4gXHQuZnJlZV9jYWxsX2NyeXB0b1x0XHQ9IHJ4a2FkX2ZyZWVfY2FsbF9jcnlwdG8sXG4gXHQuaXNzdWVfY2hhbGxlbmdlXHRcdD0gcnhrYWRfaXNzdWVfY2hhbGxlbmdlLFxuIFx0LnZhbGlkYXRlX2NoYWxsZW5nZVx0XHQ9IHJ4a2FkX3ZhbGlkYXRlX2NoYWxsZW5nZSxcbi1cdC5zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlXHQ9IHJ4a2FkX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UsXG4gXHQucmVzcG9uZF90b19jaGFsbGVuZ2VcdFx0PSByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZSxcbiBcdC52ZXJpZnlfcmVzcG9uc2VcdFx0PSByeGthZF92ZXJpZnlfcmVzcG9uc2UsXG4gXHQuY2xlYXJcdFx0XHRcdD0gcnhrYWRfY2xlYXIsXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3NlbmRtc2cuYyBiL25ldC9yeHJwYy9zZW5kbXNnLmNcbmluZGV4IGVkMmM5YTUxMDA1YWRlLi4yMjVlZWM0MTBiZWRjOCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9zZW5kbXNnLmNcbisrKyBiL25ldC9yeHJwYy9zZW5kbXNnLmNcbkBAIC00NTMsOSArNDUzLDYgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFxuIHN1Y2Nlc3M6XG4gXHRyZXQgPSBjb3BpZWQ7XG4tXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBjYWxsLVx1MDAzZWVycm9yIFx1MDAzYyAwKVxuLVx0XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuIG91dDpcbiBcdGNhbGwtXHUwMDNldHhfcGVuZGluZyA9IHR4YjtcbiBcdF9sZWF2ZShcIiA9ICVkXCIsIHJldCk7XG5AQCAtNDY3LDggKzQ2NCwxNCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRyZXR1cm4gY2FsbC1cdTAwM2VlcnJvcjtcbiBcbiBtYXliZV9lcnJvcjpcbi1cdGlmIChjb3BpZWQpXG4rXHRpZiAoY29waWVkKSB7XG4rXHRcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgY2FsbC1cdTAwM2VlcnJvciBcdTAwM2MgMCkge1xuK1x0XHRcdHJldCA9IGNhbGwtXHUwMDNlZXJyb3I7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbiBcdFx0Z290byBzdWNjZXNzO1xuK1x0fVxuIFx0Z290byBvdXQ7XG4gXG4gZWZhdWx0OlxuQEAgLTUwMyw2ICs1MDYsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gc3RhdGljIGludCByeHJwY19zZW5kbXNnX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfc2VuZF9wYXJhbXMgKnApXG4ge1xuIFx0c3RydWN0IGNtc2doZHIgKmNtc2c7XG4rXHRrZXlfc2VyaWFsX3Qga2V5X2lkO1xuK1x0a2V5X3JlZl90IGtleTtcbiBcdGJvb2wgZ290X3VzZXJfSUQgPSBmYWxzZTtcbiBcdGludCBsZW47XG4gXG5AQCAtNTg3LDYgKzU5MiwxOCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyAqcClcbiBcdFx0XHRcdHJldHVybiAtRVJBTkdFO1xuIFx0XHRcdGJyZWFrO1xuIFxuK1x0XHRjYXNlIFJYUlBDX1JFU1BPTlNFX0FQUERBVEE6XG4rXHRcdFx0aWYgKGxlbiAhPSBzaXplb2Yoa2V5X3NlcmlhbF90KSlcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdGlmIChwLVx1MDAzZWNhbGwuYXBwX2RhdGEpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRrZXlfaWQgPSAqKGtleV9zZXJpYWxfdCAqKUNNU0dfREFUQShjbXNnKTtcbitcdFx0XHRrZXkgPSBsb29rdXBfdXNlcl9rZXkoa2V5X2lkLCAwLCBLRVlfTkVFRF9TRUFSQ0gpO1xuK1x0XHRcdGlmIChJU19FUlIoa2V5KSlcbitcdFx0XHRcdHJldHVybiBQVFJfRVJSKGtleSk7XG4rXHRcdFx0cC1cdTAwM2VjYWxsLmFwcF9kYXRhID0ga2V5X3JlZl90b19wdHIoa2V5KTtcbitcdFx0XHRicmVhaztcbitcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuQEAgLTc4Niw2ICs4MDMsNyBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcbiBlcnJvcl9yZWxlYXNlX3NvY2s6XG4gXHRyZWxlYXNlX3NvY2soXHUwMDI2cngtXHUwMDNlc2spO1xuK1x0a2V5X3B1dChwLmNhbGwuYXBwX2RhdGEpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3NlcnZlcl9rZXkuYyBiL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmNcbmluZGV4IDNlZmUxMDRiMTkzMGNiLi5mYzZmNDc4ZTE3NjJhNyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmNcbisrKyBiL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmNcbkBAIC0xNzMsNDMgKzE3MywzIEBAIGludCByeHJwY19zb2NrX3NldF9zZWN1cml0eV9rZXlyaW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGtleSAqa2V5cmluZylcbiBcdHJldHVybiByZXQ7XG4gfVxuIEVYUE9SVF9TWU1CT0wocnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyk7XG4tXG4tLyoqXG4tICogcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlIC0gU2V0IHRoZSBtYW5hZ2UtcmVzcG9uc2UgZmxhZyBmb3IgYSBrZXJuZWwgc2VydmljZVxuLSAqIEBzazogVGhlIHNvY2tldCB0byBzZXQgdGhlIGtleXJpbmcgb25cbi0gKiBAc2V0OiBUcnVlIHRvIHNldCwgZmFsc2UgdG8gY2xlYXIgdGhlIGZsYWdcbi0gKlxuLSAqIFNldCB0aGUgZmxhZyBvbiBhbiByeHJwYyBzb2NrZXQgdG8gc2F5IHRoYXQgdGhlIGNhbGxlciB3YW50cyB0byBtYW5hZ2UgdGhlXG4tICogUkVTUE9OU0UgcGFja2V0IGFuZCB0aGUgdXNlci1kZWZpbmVkIGRhdGEgaXQgbWF5IGNvbnRhaW4uICBTZXR0aW5nIHRoaXNcbi0gKiBtZWFucyB0aGF0IHJlY3Ztc2coKSB3aWxsIHJldHVybiBtZXNzYWdlcyB3aXRoIFJYUlBDX0NIQUxMRU5HRUQgaW4gdGhlXG4tICogY29udHJvbCBtZXNzYWdlIGJ1ZmZlciBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFsbGVuZ2UuXG4tICpcbi0gKiBUaGUgdXNlciBzaG91bGQgcmVzcG9uZCB0byB0aGUgY2hhbGxlbmdlIGJ5IHBhc3NpbmcgUlhSUENfUkVTUE9ORCBvclxuLSAqIFJYUlBDX1JFU1BPTkRfQUJPUlQgY29udHJvbCBtZXNzYWdlcyB3aXRoIHNlbmRtc2coKSB0byB0aGUgc2FtZSBjYWxsLlxuLSAqIFN1cHBsZW1lbnRhcnkgY29udHJvbCBtZXNzYWdlcywgc3VjaCBhcyBSWFJQQ19SRVNQX1JYR0tfQVBQREFUQSwgbWF5IGJlXG4tICogaW5jbHVkZWQgdG8gaW5kaWNhdGUgdGhlIHBhcnRzIHRoZSB1c2VyIHdhbnRzIHRvIHN1cHBseS5cbi0gKlxuLSAqIFRoZSBzZXJ2ZXIgd2lsbCBiZSBwYXNzZWQgdGhlIHJlc3BvbnNlIGRhdGEgd2l0aCBhIFJYUlBDX1JFU1BPTkRFRCBjb250cm9sXG4tICogbWVzc2FnZSB3aGVuIGl0IGdldHMgdGhlIGZpcnN0IGRhdGEgZnJvbSBlYWNoIGNhbGwuXG4tICpcbi0gKiBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IGhvbm91cmVkIGJ5IHNlY3VyaXR5IGNsYXNzZXMgdGhhdCBuZWVkIGF1eGlsaWFyeSBkYXRhXG4tICogKGUuZy4gUnhHSykuICBUaG9zZSB0aGF0IGRvbid0IG9mZmVyIHRoZSBmYWNpbGl0eSAoZS5nLiBSeEtBRCkgcmVzcG9uZFxuLSAqIHdpdGhvdXQgY29uc3VsdGluZyB1c2Vyc3BhY2UuXG4tICpcbi0gKiBSZXR1cm46IFRoZSBwcmV2aW91cyBzZXR0aW5nLlxuLSAqL1xuLWludCByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2Uoc3RydWN0IHNvY2sgKnNrLCBib29sIHNldClcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzayk7XG4tXHRpbnQgcmV0O1xuLVxuLVx0bG9ja19zb2NrKHNrKTtcbi1cdHJldCA9ICEhdGVzdF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdGlmIChzZXQpXG4tXHRcdHNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdGVsc2Vcbi1cdFx0Y2xlYXJfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcdTAwMjZyeC1cdTAwM2VmbGFncyk7XG4tXHRyZWxlYXNlX3NvY2soc2spO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2UpO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG5pbmRleCA2Zjg4YjUwN2Y5Mjc5MS4uOTBjMWJkNWQ3ZGZlY2YgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG4rKysgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG5AQCAtNjcsNiArNjcsNyBAQCBpbnQgdXNlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIFx0dXBheWxvYWQgPSBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCBkYXRhbGVuKTtcbiBcdGlmICghdXBheWxvYWQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNnVwYXlsb2FkLVx1MDAzZXJlZiwgMSk7XG4gXG4gXHQvKiBhdHRhY2ggdGhlIGRhdGEgKi9cbiBcdHByZXAtXHUwMDNlcXVvdGFsZW4gPSBkYXRhbGVuO1xuQEAgLTg4LDEyICs4OSwyMiBAQCBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2ZyZWVfcHJlcGFyc2UpO1xuIFxuIHN0YXRpYyB2b2lkIHVzZXJfZnJlZV9wYXlsb2FkX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4ge1xuLVx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQ7XG4rXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZCA9XG4rXHRcdGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCwgcmN1KTtcbiBcbi1cdHBheWxvYWQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQsIHJjdSk7XG4gXHRrZnJlZV9zZW5zaXRpdmUocGF5bG9hZCk7XG4gfVxuIFxuKy8qXG4rICogRnJlZSBhIHVzZXIgZGVmaW5lZCBrZXkgcGF5bG9hZC5cbisgKi9cbit2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKVxuK3tcbitcdGlmIChwYXlsb2FkIFx1MDAyNlx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cGF5bG9hZC1cdTAwM2VyZWYpKVxuK1x0XHRjYWxsX3JjdShcdTAwMjZwYXlsb2FkLVx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocHV0X3VzZXJfa2V5X3BheWxvYWQpO1xuK1xuIC8qXG4gICogdXBkYXRlIGEgdXNlciBkZWZpbmVkIGtleVxuICAqIC0gdGhlIGtleSdzIHNlbWFwaG9yZSBpcyB3cml0ZS1sb2NrZWRcbkBAIC0xMTUsOCArMTI2LDcgQEAgaW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbiBcdHJjdV9hc3NpZ25fa2V5cG9pbnRlcihrZXksIHByZXAtXHUwMDNlcGF5bG9hZC5kYXRhWzBdKTtcbiBcdHByZXAtXHUwMDNlcGF5bG9hZC5kYXRhWzBdID0gTlVMTDtcbiBcbi1cdGlmICh6YXApXG4tXHRcdGNhbGxfcmN1KFx1MDAyNnphcC1cdTAwM2VyY3UsIHVzZXJfZnJlZV9wYXlsb2FkX3JjdSk7XG4rXHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh6YXApO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodXNlcl91cGRhdGUpO1xuQEAgLTEzNCw3ICsxNDQsNyBAQCB2b2lkIHVzZXJfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSlcbiBcbiBcdGlmICh1cGF5bG9hZCkge1xuIFx0XHRyY3VfYXNzaWduX2tleXBvaW50ZXIoa2V5LCBOVUxMKTtcbi1cdFx0Y2FsbF9yY3UoXHUwMDI2dXBheWxvYWQtXHUwMDNlcmN1LCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3UpO1xuK1x0XHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh1cGF5bG9hZCk7XG4gXHR9XG4gfVxuIFxuQEAgLTE0Nyw5ICsxNTcsOCBAQCB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXG4ge1xuIFx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbiBcbi1cdGtmcmVlX3NlbnNpdGl2ZSh1cGF5bG9hZCk7XG4rXHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh1cGF5bG9hZCk7XG4gfVxuLVxuIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfZGVzdHJveSk7XG4gXG4gLypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjUzOjUzLjgwMDU1MzEwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MDY4NTMxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQUZTL1J4UlBDIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGluIGZyb250IG9mIG1lLCBhbmQgaXQgbG9va3MgbGlrZSBhIGZhaXJseSBzaWduaWZpY2FudCByZWZhY3RvciBvZiB0aGUgQUZTIGFuZCBSeFJQQyBzdWJzeXN0ZW1zLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIG1vcmUgdGhhbiBqdXN0IGEgbWlub3IgdHdlYWs7IGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgY29yZSBuZXR3b3JrIGFuZCBmaWxlc3lzdGVtIGludGVyYWN0aW9uLiBJdCdzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGxvdy1sZXZlbCBzdHVmZiwgc3BlY2lmaWNhbGx5IHRoZSB3YXkgdGhlIGtlcm5lbCBoYW5kbGVzIFJ4UlBDIHJlc3BvbnNlcyBhbmQgb3V0LW9mLWJhbmQgbWVzc2FnZXMsIGFuZCBob3cgQUZTIGludGVyYWN0cyB3aXRoIFJ4UlBDLlxuXG5Fc3NlbnRpYWxseSwgdGhleSdyZSByZW1vdmluZyB0aGUgYHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZWAgbG9naWMgYW5kIGdldHRpbmcgcmlkIG9mIHRoZSBPT0IgbWVzc2FnZSBoYW5kbGluZyBpbiBSeFJQQyBlbnRpcmVseS4gSW5zdGVhZCwgdGhleSdyZSBjcmVhdGluZyBhcHBsaWNhdGlvbiBkYXRhIGZvciBSeEdLIHJlc3BvbnNlcyB3aXRoIHRoaXMgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIGZ1bmN0aW9uIGFuZCBzdG9yaW5nIGl0IGluIGEga2V5LiBUaGF0IGtleSBpcyB0aGVuIGZlZCBpbnRvIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAsIHdoaWNoIGlzIGFsc28gYmVpbmcgbW9kaWZpZWQgdG8gYWNjZXB0IHRoaXMgbmV3IGBhcHBfZGF0YWAgcGFyYW1ldGVyLiBUaGUgY3JpdGljYWwgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYCBmdW5jdGlvbiBpcyBnZXR0aW5nIHVwZGF0ZWQgdG8gY2FsbCBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAuIEFuZCwgb2YgY291cnNlLCB0aGV5J3JlIGRlbGV0aW5nIGBvb2IuY2AgZnJvbSB0aGUgYG5ldC9yeHJwYy9gIGRpcmVjdG9yeS5cblxuR2l2ZW4gdGhpcywgdGhpcyB3aWxsIGRlZmluaXRlbHkgY2hhbmdlIGV4ZWN1dGlvbiBmbG93LCBzbyBmdXp6aW5nIGlzIGEgbXVzdC4gV2UgbmVlZCB0byBleHBvc2UgdGhpcyBwYXRjaCB0byBhIGJhdHRlcnkgb2YgdGVzdHMuXG5cblRvIHZlcmlmeSB0aGUgc2V0dXAsIGxldCdzIGxvb2sgYXQgdGhlIGtlcm5lbCBjb25maWdzLiBXZSdyZSBnb2luZyB0byBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgZW5hYmxlZDogYENPTkZJR19BRlNfRlNgLCBgQ09ORklHX0FGX1JYUlBDYCwgYENPTkZJR19SWEtBRGAsIGFuZCBgQ09ORklHX1JYR0tgICh0aGF0IGxhc3Qgb25lLCBpdCdzIG1lbnRpb25lZCBleHBsaWNpdGx5IGluIHRoZSBwYXRjaCwgc28gd2Ugc2hvdWxkIGRvdWJsZS1jaGVjaykuIFdlIHNob3VsZCBjaGVjayBgZnMvYWZzL0tjb25maWdgIGFuZCBgbmV0L3J4cnBjL0tjb25maWdgIGZvciB0aGUgY29uZmlnIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDA1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6NTQ6MDEuMjA3NDA4OTY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjA2NjYxODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSWEdLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9LY29uZmlnPTU4PWNvbmZpZyBSWEtBRFxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctNjUtXFxubmV0L3J4cnBjL0tjb25maWc6NjY6Y29uZmlnIFJYR0tcXG5uZXQvcnhycGMvS2NvbmZpZy02Ny1cXHRib29sIFxcXCJSeFJQQyBHU1NBUEkgc2VjdXJpdHlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjU0OjQzLjgxNDA3NzI1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDY2MTU3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBNb2RpZmljYXRpb25zKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgQ09ORklHX1JYR0tgIGFuZCBgQ09ORklHX1JYS0FEYCBhcmUgZGVmaW5pdGVseSBlbmFibGVkLCBhbmQgd2UgYWxzbyBoYXZlIGBDT05GSUdfQUZTX0ZTYCBhbmQgYENPTkZJR19BRl9SWFJQQ2AuIEdvb2QsIHRoYXQgbmFycm93cyB0aGluZ3MgZG93biBhIGJpdC4gTm93LCBsZXQncyBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcyBhbmQgZmluZCB0aGUgZm9jdXMgc3ltYm9scy5cblxuUmlnaHQsIHRoZSBtb2RpZmllZCBvciBuZXdseSBhZGRlZCBmdW5jdGlvbnMgYXJlOiBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAsIGBhZnNfY3JlYXRlX3lmc19jbV90b2tlbmAsIGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmAsIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAsIGByeHJwY19rZXJuZWxfcXVlcnlfa2V5YCwgYHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2VgLCBgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2VgLCBgcnhycGNfc2VuZG1zZ19jbXNnYCwgYW5kIGBwdXRfdXNlcl9rZXlfcGF5bG9hZGAuIFRoYXQncyBhIGRlY2VudC1zaXplZCBjaHVuayBvZiBjb2RlIHRvIHJldmlldywgaW5kaWNhdGluZyBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyByZWxhdGVkIHRvIEFGUyBhbmQgUnhSUEMsIHBvdGVudGlhbGx5IGludm9sdmluZyBrZXkgbWFuYWdlbWVudCBhbmQgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMuXG5cbkkgdGhpbmsgSSdsbCBzdGFydCBieSBmb2N1c2luZyBvbiBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAuIEl0J3MgbGlrZWx5IHRoYXQgYSBkYXRhIHN0cnVjdHVyZSBpcyBiZWluZyBjcmVhdGVkLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE3NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1NDo0Ny43MjA2OTU3NzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1NTQwNTM4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9jbV9zZWN1cml0eS5jPTI0PXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGtyYjVfZW5jdHlwZSk7XFxuLS1cXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0zMS0gKi9cXG5mcy9hZnMvY21fc2VjdXJpdHkuYzozMjppbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpXFxuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMzMte1xcbi0tXFxuZnMvYWZzL2ZzX3Byb2JlLmM9MjM4PWludCBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxcbi0tXFxuZnMvYWZzL2ZzX3Byb2JlLmMtMjQ3LVxcbmZzL2Fmcy9mc19wcm9iZS5jOjI0ODpcXHRyZXQgPSBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHNlcnZlciwga2V5KTtcXG5mcy9hZnMvZnNfcHJvYmUuYy0yNDktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaD0xMDg4PWV4dGVybiBib29sIGFmc19jbV9pbmNvbWluZ19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqKTtcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwOTItICovXFxuZnMvYWZzL2ludGVybmFsLmg6MTA5MzppbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpO1xcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwOTQtI2lmZGVmIENPTkZJR19SWEdLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjU0OjUyLjQ3NjEwOTI2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NjczOTQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYC4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSB0aGluZy4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIGZsb3csIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemF0aW9ucyB3ZSBjYW4gZXhwbG9yZSBpbiB0aGlzIGFyZWEuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLCBvciBtYXliZSBldmVuIHRoZSBoYXJkd2FyZSwgYmVnaW5zLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgaXQncyBkb2luZyBpbiBkZXRhaWwuIFRoaXMgaXNuJ3QganVzdCBhYm91dCByZWFkaW5nIHRoZSBjb2RlOyBpdCdzIGFib3V0IGNvbm5lY3RpbmcgaXQgdG8gbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIHRoZSBSWFJQQyBwcm90b2NvbCwgdGhlIGtlcm5lbCdzIGFyY2hpdGVjdHVyZSwgYW5kIGFsbCB0aGUgcmVsZXZhbnQgaGFyZHdhcmUgYW5kIGhvdyBpdCBmaXRzLiBJIG5lZWQgdG8gZm9ybSBhIG1lbnRhbCBtb2RlbCBvZiB3aGF0J3MgaGFwcGVuaW5nLiBUaW1lIHRvIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTk3NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjU0OjU1LjY1Mjg1MTg4MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkzNjAxOTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3Q9Nzk1PVRoZSBrZXJuZWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgYXMgZm9sbG93czpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QtNzk5LVxcdHN0cnVjdCByeHJwY19jYWxsICpcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0OjgwMDpcXHRyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QtODAxLVxcdFxcdFxcdFxcdHN0cnVjdCBzb2NrYWRkcl9yeHJwYyAqc3J4LFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC05ODktICAgICBUaGlzIGlzIHVzZWQgdG8gYWNjZXB0IGFuIGluY29taW5nIGNhbGwgYW5kIHRvIGFzc2lnbiBpdCBhIGNhbGwgSUQuICBUaGlzXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdDo5OTA6ICAgICBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKCkgYW5kIGNhbGxzIGFjY2VwdGVkIG11c3RcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0LTk5MS0gICAgIGJlIGVuZGVkIGluIHRoZSBzYW1lIHdheS5cXG4tLVxcbmZzL2Fmcy9yeHJwYy5jPTMzNz12b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXFxuLS1cXG5mcy9hZnMvcnhycGMuYy0zOTItXFx0LyogY3JlYXRlIGEgY2FsbCAqL1xcbmZzL2Fmcy9yeHJwYy5jOjM5MzpcXHRyeGNhbGwgPSByeHJwY19rZXJuZWxfYmVnaW5fY2FsbChjYWxsLVxcdTAwM2VuZXQtXFx1MDAzZXNvY2tldCwgY2FsbC1cXHUwMDNlcGVlcixcXG5mcy9hZnMvcnhycGMuYy0zOTQtXFx0XFx0XFx0XFx0XFx0IGNhbGwtXFx1MDAzZWtleSwgYXBwX2RhdGEsXFxuLS1cXG5pbmNsdWRlL25ldC9hZl9yeHJwYy5oPTUzPXZvaWQgcnhycGNfa2VybmVsX3NldF9ub3RpZmljYXRpb25zKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuaW5jbHVkZS9uZXQvYWZfcnhycGMuaC01NC1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHJ4cnBjX2tlcm5lbF9vcHMgKmFwcF9vcHMpO1xcbmluY2x1ZGUvbmV0L2FmX3J4cnBjLmg6NTU6c3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuaW5jbHVkZS9uZXQvYWZfcnhycGMuaC01Ni1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcixcXG4tLVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jPTMxND1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9wdXRfcGVlcik7XFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zMTYtLyoqXFxubmV0L3J4cnBjL2FmX3J4cnBjLmM6MzE3OiAqIHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsIC0gQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byBiZWdpbiBhIGNhbGxcXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zMTgtICogQHNvY2s6IFRoZSBzb2NrZXQgb24gd2hpY2ggdG8gbWFrZSB0aGUgY2FsbFxcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtMzQwLSAqL1xcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjM0MTpzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zNDItXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zOTctfVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjM5ODpFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKTtcXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zOTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjU1OjAwLjU0NjQ2MjAxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjQ4NTY2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIENhbGwgdG8gQWN0aW9uOiBgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZWAqKlxuXG5SaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzLiBcIkNoZWNrIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYC5cIiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgaW50ZXJlc3RpbmcuIFRoZSBuYW1pbmcgY29udmVudGlvbiwgd2l0aCB0aGF0IHVuZGVyc2NvcmUsIHN1Z2dlc3RzIGl0J3MgYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBtb2R1bGUgd2l0aGluIGEgbGFyZ2VyIHN5c3RlbSDigJMgbGlrZWx5IG9uZSB0aGF0J3MgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggc29tZSBmb3JtIG9mIGV4dGVybmFsIGlucHV0LCBwb3RlbnRpYWxseSBhc3luY2hyb25vdXMuIFRoZSB0ZXJtIFwiY2hhbGxlbmdlXCIgaXMgY3JpdGljYWwgaGVyZS4gSXQgaW1wbGllcyBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgc3lzdGVtLCBvciBhIGNvbXBvbmVudCwgaXMgYmVpbmcgdGVzdGVkLCBwcm9iZWQsIG9yIHBvc3NpYmx5IGV2ZW4gZXhwbG9pdGVkLiBUaGlzIGNvdWxkIGJlIGFueXRoaW5nIGZyb20gYSBzaW1wbGUgdmFsaWRhdGlvbiBjaGVjayB0byBhIG1vcmUgY29tcGxleCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHNjZW5hcmlvLlxuXG5NeSBpbW1lZGlhdGUgY29uc2lkZXJhdGlvbnMgYXJlIGZvY3VzZWQgb24gaXRzIGRlc2lnbi4gSXMgaXQgcHJvcGVybHkgc2FuZGJveGVkPyBBcmUgdGhlcmUgYWRlcXVhdGUgaW5wdXQgdmFsaWRhdGlvbiBjaGVja3MgaW4gcGxhY2UgdG8gcHJldmVudCBjb21tb24gYXR0YWNrcyBsaWtlIGluamVjdGlvbiBvciBidWZmZXIgb3ZlcmZsb3dzPyBXaGF0IGFyZSB0aGUgYWNjZXNzIGNvbnRyb2wgbWVjaGFuaXNtcyBhcm91bmQgdGhpcyBmdW5jdGlvbiDigJMgd2hvIG9yIHdoYXQgaXMgYWxsb3dlZCB0byB0cmlnZ2VyIGl0LCBhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzPyBEb2VzIGl0IGV4aGliaXQgYW55IGluaGVyZW50IHZ1bG5lcmFiaWxpdHkgZHVlIHRvIHRpbWluZyBvciByZXNvdXJjZSBleGhhdXN0aW9uPyBUaGUgXCJyZXNwb25kXCIgcGFydCBzdWdnZXN0cyB0aGF0IGl0J3MgZ29pbmcgdG8gYWN0aXZlbHkgZG8gc29tZXRoaW5nLCB3aGljaCByYXRjaGV0cyB1cCB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcyBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhbmQgdGhlIHBvdGVudGlhbCByZXNwb25zZSBvcHRpb25zIGlzIGtleS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJ3MgYXJjaGl0ZWN0dXJlIOKAkyBpdHMgaW50ZXJuYWwgbG9naWMsIGFueSBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG1vZHVsZXMgdG8gZm9ybXVsYXRlIGFuIGluZm9ybWVkIGp1ZGdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5MzMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1NTowNC4zMTEzMjQ4MzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NDUyMjA2NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnhna19yZXNwb25kX3RvX2NoYWxsZW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvcnhnay5jPTg5ND1zdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3J4cnBjL3J4Z2suYy05ODItICovXFxubmV0L3J4cnBjL3J4Z2suYzo5ODM6c3RhdGljIGludCByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbm5ldC9yeHJwYy9yeGdrLmMtOTg0LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcXG4tLVxcbm5ldC9yeHJwYy9yeGdrLmM9MTI3Mj1jb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgcnhna195ZnMgPSB7XFxuLS1cXG5uZXQvcnhycGMvcnhnay5jLTEyODgtXFx0LnZhbGlkYXRlX2NoYWxsZW5nZVxcdFxcdD0gcnhna192YWxpZGF0ZV9jaGFsbGVuZ2UsXFxubmV0L3J4cnBjL3J4Z2suYzoxMjg5OlxcdC5yZXNwb25kX3RvX2NoYWxsZW5nZVxcdFxcdD0gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZSxcXG5uZXQvcnhycGMvcnhnay5jLTEyOTAtXFx0LnZlcmlmeV9yZXNwb25zZVxcdFxcdD0gcnhna192ZXJpZnlfcmVzcG9uc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjU1OjA4LjI1NjU1MzA1OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgzMzk3OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBzdW1tYXJpemVkLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGlzIGNvZGUgYW5kIGl0cyBjb250ZXh0OlxuXG4qKkFuYWx5emluZyBgcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2VgKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0J3MgY2xlYXJseSBhIGZ1bmN0aW9uLCBsaWtlbHkgaW52b2x2ZWQgaW4gYSBjaGFsbGVuZ2UtcmVzcG9uc2UgYXV0aGVudGljYXRpb24gc2NoZW1lLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbWFwIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBLQUQgKG9yIHNpbWlsYXIpIGF1dGhlbnRpY2F0aW9uIGZsb3cuIElzIHRoaXMgb24gdGhlIGNsaWVudC1zaWRlLCB0aGUgc2VydmVyLXNpZGUsIG9yIGJvdGg/IFdoYXQgYXJlIHRoZSBpbnB1dHM/IFdoYXQgYXJlIHRoZSBleHBlY3RlZCBvdXRwdXRzPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHR5cGljYWwgc3RlcHMgaW52b2x2ZWQ6IGNoYWxsZW5nZSBnZW5lcmF0aW9uLCByZXNwb25zZSBjYWxjdWxhdGlvbiwgdmVyaWZpY2F0aW9uLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hhdCB0aGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBtaWdodCBiZSBoZXJlLiBJcyB0aGlzIHdoZXJlIHdlJ3JlIGhhbmRsaW5nIGtleSBkZXJpdmF0aW9uLCBjcnlwdG8sIG9yIG5vbmNlIGhhbmRsaW5nPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIHRpbWluZyBhdHRhY2tzLCBvciBwb3RlbnRpYWwgb3ZlcmZsb3cgaXNzdWVzPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgaXQgaGFuZGxlcyBlcnJvcnMgYW5kIHBvdGVudGlhbCBwcm90b2NvbCB2aW9sYXRpb25zLiBJcyB0aGVyZSBhbnkgb2J2aW91cyBsb2dnaW5nIHRoYXQgY291bGQgZXhwb3NlIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiwgb3IgaXMgdGhlIGZ1bmN0aW9uJ3Mgc2NvcGUgYnJvYWRlciB0aGFuIEkgaW5pdGlhbGx5IGFzc3VtZT8gVGltZSB0byBzdGFydCBkcmlsbGluZyBpbnRvIHRoZSBjb2RlLCBidXQgYmVmb3JlIEkgZG8sIEkgbmVlZCBhIHF1aWNrIG1lbnRhbCBjaGVja2xpc3Q6IHdoYXQncyB0aGUgZW52aXJvbm1lbnQgaXQncyBydW5uaW5nIGluPyBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIGl0IGhhdmU/IEFyZSB0aGVyZSBhbnkgcmVjZW50IGJ1ZyByZXBvcnRzIG9yIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgZnVuY3Rpb24gdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFuZCBtb3N0IGltcG9ydGFudGx5LCB3aGF0J3MgdGhlICpwdXJwb3NlKiBvZiB0aGlzIGludmVzdGlnYXRpb24/IFZ1bG5lcmFiaWxpdHkgYXNzZXNzbWVudD8gQ29kZSByZXZpZXc/IERlYnVnZ2luZz8gS25vd2luZyB0aGF0IHdpbGwgZGV0ZXJtaW5lIHdoZXJlIG15IGZvY3VzIGdvZXMgZmlyc3QuIEFscmlnaHQsIGxldCdzIGdldCBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTU0NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjU1OjExLjkzOTk1NDA2OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMTAzMTUxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvcnhrYWQuYz02NDI9aW50IHJ4a2FkX2luc2VydF9yZXNwb25zZV9oZWFkZXIoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuLS1cXG5uZXQvcnhycGMvcnhrYWQuYy02OTYtICovXFxubmV0L3J4cnBjL3J4a2FkLmM6Njk3OnN0YXRpYyBpbnQgcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxubmV0L3J4cnBjL3J4a2FkLmMtNjk4LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXFxuLS1cXG5uZXQvcnhycGMvcnhrYWQuYz0xMDk1PWNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGthZCA9IHtcXG4tLVxcbm5ldC9yeHJwYy9yeGthZC5jLTExMTAtXFx0LnZhbGlkYXRlX2NoYWxsZW5nZVxcdFxcdD0gcnhrYWRfdmFsaWRhdGVfY2hhbGxlbmdlLFxcbm5ldC9yeHJwYy9yeGthZC5jOjExMTE6XFx0LnJlc3BvbmRfdG9fY2hhbGxlbmdlXFx0XFx0PSByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZSxcXG5uZXQvcnhycGMvcnhrYWQuYy0xMTEyLVxcdC52ZXJpZnlfcmVzcG9uc2VcXHRcXHQ9IHJ4a2FkX3ZlcmlmeV9yZXNwb25zZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6NTU6MTMuOTUwOTk0NjMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODU3NTg3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHN1cHBvc2VkIHRvIHNvdW5kIGxpa2UgYW4gZXhwZXJ0OlxuXG4qKkRlZXAgRGl2ZTogYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gXCJhZnNfY3JlYXRlX3lmc19jbV90b2tlblwiLi4uIHRoYXQgaW1tZWRpYXRlbHkgc2lnbmFscyBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgQUZTIChBbmRyZXcgRmlsZSBTeXN0ZW0pIGludGVncmF0aW9uLCBsaWtlbHkgd2l0aGluIGEgWUZTIChsaWtlbHkgcmVmZXJyaW5nIHRvIHRoZSBJQk0gU3RlcmxpbmcgT3JkZXIgTWFuYWdlbWVudCBTeXN0ZW0sIGJhc2VkIG9uIGNvbnRleHQpIGNvbnRleHQsIGFuZCB0aGUgY3JlYXRpb24gb2YgYSB0b2tlbiBzcGVjaWZpY2FsbHkgZm9yIENsb3VkIE1hbmFnZW1lbnQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IG1lbnRhbGx5IHJlY29uc3RydWN0IHRoZSB0eXBpY2FsIGZsb3cgaGVyZS4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgdXNlciBhdXRoZW50aWNhdGlvbiwgYXV0aG9yaXphdGlvbiBjaGVja3Mgd2l0aGluIFlGUywgYW5kIHRoZW4gdGhlIGdlbmVyYXRpb24gb2YgYSB0ZW1wb3JhcnkgY3JlZGVudGlhbCBvciB0b2tlbiB0aGF0IEFGUyBjYW4gdXNlIHRvIGFjY2VzcyByZXNvdXJjZXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIElzIHRoaXMgYSBzaGFyZWQgdG9rZW4sIG9yIHNvbWV0aGluZyB0aWVkIHNwZWNpZmljYWxseSB0byBhIHVzZXIgc2Vzc2lvbiBvciBwcm9jZXNzPyBUaGUgc2Vuc2l0aXZpdHkgaGVyZSBpcyBoaWdoOiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBwcm9wZXIgcGVybWlzc2lvbnMgYW5kIGNvbnRyb2xzIGFyZSBpbiBwbGFjZS4gV2hhdCBhcmUgdGhlIGV4cGlyYXRpb24gcG9saWNpZXMgYW5kIHJldm9jYXRpb24gbWVjaGFuaXNtcz9cblxuSSdtIGluc3RhbnRseSB0aGlua2luZyBhYm91dCB0aGUgZGlmZmVyZW50IGxheWVycyBvZiBhYnN0cmFjdGlvbi4gSXMgdGhpcyB0b2tlbiBjcmVhdGlvbiBoYXBwZW5pbmcgZGlyZWN0bHkgd2l0aGluIHRoZSBjb3JlIFlGUyBjb2RlLCBvciBpcyB0aGVyZSBhbiBBUEkgYWJzdHJhY3Rpb24gb3IgbWlkZGxld2FyZSBpbnZvbHZlZD8gSWYgaXQncyB0aGUgbGF0dGVyLCB0aGVuIHRoZSBhcmNoaXRlY3R1cmUgd2lsbCBiZSBzbGlnaHRseSBtb3JlIHJvYnVzdC4gVGhpcyBhbHNvIGluZmx1ZW5jZXMgbXkgaW1tZWRpYXRlIG5lZWQgdG8gY2hlY2sgbG9nZ2luZy4gV2hhdCBsb2dzIGFyZSBhdmFpbGFibGU/IEkgbmVlZCB0byByZXZpZXcgdG8gdW5kZXJzdGFuZCB0aGUgaW5wdXQgcGFyYW1ldGVycyB0byB0aGlzIGZ1bmN0aW9uIC0gdGhlIGNvbnRleHQgZnJvbSB3aGljaCBpdCBpcyBjYWxsZWQsIHdobyBpcyBjYWxsaW5nIGl0LCBhbmQgdGhlIGRhdGEgYmVpbmcgdXNlZCB0byBlc3RhYmxpc2ggdGhpcyBBRlMgdG9rZW4uXG5cbkZ1cnRoZXJtb3JlLCBJIGhhdmUgdG8gYmUgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGZhaWx1cmUgc2NlbmFyaW9zLiBXaGF0IGhhcHBlbnMgaWYgQUZTIGlzIGRvd24sIG9yIGlmIG5ldHdvcmsgY29ubmVjdGl2aXR5IGlzIGRpc3J1cHRlZD8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBoYW5kbGUgZXJyb3JzLCB0aW1lb3V0cywgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZz8gRG9lcyBpdCBncmFjZWZ1bGx5IGRlZ3JhZGUgb3IgY3JlYXRlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBpbiBpdHMgZmFpbHVyZSBzdGF0ZXM/IEkgYW0gYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIGVkZ2UgY2FzZSBzY2VuYXJpb3MuXG5cbkxhc3RseSwgSSBoYXZlIHRvIGNvbXBhcmUgdGhpcyBpbXBsZW1lbnRhdGlvbiBhZ2FpbnN0IHN0YW5kYXJkIHByYWN0aWNlcy4gU2VjdXJpdHksIHBlcmZvcm1hbmNlLCBhbmQgYmVzdCBwcmFjdGljZXMgYXJlIHBhcmFtb3VudCBpbiB0b2tlbiBjcmVhdGlvbiAtIHRoZSBsZXZlbCBvZiBzZW5zaXRpdml0eSBpcyBjcml0aWNhbCBoZXJlLCBhbmQgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFyZWFzIHRoYXQgZGV2aWF0ZSBmcm9tIGluZHVzdHJ5IHN0YW5kYXJkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxNjcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1NToxOC4xMzY3NTYzOTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDczMjQxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2NtX3NlY3VyaXR5LmMtMjMtI2lmZGVmIENPTkZJR19SWEdLXFxuZnMvYWZzL2NtX3NlY3VyaXR5LmM6MjQ6c3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCB1MzIga3JiNV9lbmN0eXBlKTtcXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0yNS0jZW5kaWZcXG4tLVxcbmZzL2Fmcy9jbV9zZWN1cml0eS5jPTMyPWludCBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBrZXkgKmtleSlcXG4tLVxcbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTY4LVxcdFxcdGNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6XFxuZnMvYWZzL2NtX3NlY3VyaXR5LmM6Njk6XFx0XFx0XFx0cmV0ID0gYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc2VydmVyLCBrcmI1X2VuY3R5cGUpO1xcbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTcwLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvYWZzL2NtX3NlY3VyaXR5LmM9OTI9aW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldClcXG4tLVxcbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTE1MC0gKi9cXG5mcy9hZnMvY21fc2VjdXJpdHkuYzoxNTE6c3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCB1MzIgZW5jdHlwZSlcXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0xNTIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1NToyMC4wODQwODg2MjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MjM3MTM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGByeHJwY19zZW5kbXNnX2Ntc2dgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IHJpZ2h0IHRvIGl0LiBUaGUgZm9jdXMgaGVyZSBpcyBjbGVhcmx5IG9uIGByeHJwY19zZW5kbXNnX2Ntc2dgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoYXQgZnVuY3Rpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHNlbmRpbmcgbWVzc2FnZXMgd2l0aCBjb250cm9sIG1lc3NhZ2VzIGluIHRoZSBSWFJQQyBwcm90b2NvbC4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBpdCBoYW5kbGVzIHRoZSBjb25zdHJ1Y3Rpb24gYW5kIHRyYW5zbWlzc2lvbiBvZiB0aG9zZSBhbmNpbGxhcnkgZGF0YSBidWZmZXJzLiBJcyBpdCB0aGUgbWFpbiB3b3JraG9yc2UsIG9yIGEgaGVscGVyIGZ1bmN0aW9uPyBXaGF0J3MgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBhbmQgbmV0d29yayBzdGFjaz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgd2l0aCBsYXJnZXIgY29udHJvbCBtZXNzYWdlcyBvciBmcmFnbWVudGVkIHBheWxvYWRzPyBUaGlzIGlzIHdoZXJlIEknbGwgbmVlZCB0byBnbyBkZWVwLi4uIGxldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5NzgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1NToyMy41NTY0NjI5MjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTkzOTk1NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnhycGNfc2VuZG1zZ19jbXNnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9zZW5kbXNnLmM9MzIwPXN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4tLVxcbm5ldC9yeHJwYy9zZW5kbXNnLmMtNTA1LSAqL1xcbm5ldC9yeHJwYy9zZW5kbXNnLmM6NTA2OnN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zICpwKVxcbm5ldC9yeHJwYy9zZW5kbXNnLmMtNTA3LXtcXG4tLVxcbm5ldC9yeHJwYy9zZW5kbXNnLmM9Njc3PWludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3J4cnBjL3NlbmRtc2cuYy02OTUtXFxubmV0L3J4cnBjL3NlbmRtc2cuYzo2OTY6XFx0cmV0ID0gcnhycGNfc2VuZG1zZ19jbXNnKG1zZywgXFx1MDAyNnApO1xcbm5ldC9yeHJwYy9zZW5kbXNnLmMtNjk3LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1NToyNS41NTU4NjczMzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAxMDgyNjI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYHB1dF91c2VyX2tleV9wYXlsb2FkYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcHV0X3VzZXJfa2V5X3BheWxvYWRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGl0cyBpbnB1dHMsIGFuZCB3aGF0IGl0J3MgdWx0aW1hdGVseSBkb2luZyB3aXRoIHVzZXIga2V5cy4gVGhlcmUncyBhIHN1YnRsZSBudWFuY2UgaGVyZSBJIHNob3VsZCBub3Qgb3Zlcmxvb2suIEl04oCZcyBsaWtlbHkgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGtleSBtYW5hZ2VtZW50IGFuZCBhbnkgdnVsbmVyYWJpbGl0eSBoZXJlIGlzIGEgc2lnbmlmaWNhbnQgcmlzay4gSSB3b25kZXIgYWJvdXQgdGhlIHR5cGUtc2FmZXR5IGNoZWNrcz8gQXJlIHRoZXJlIHByb3BlciBpbnB1dCB2YWxpZGF0aW9ucywgbGlrZSBzYW5pdGl6aW5nIGlucHV0cyBhbmQgYm91bmRhcnkgY29uZGl0aW9ucz8gSSBuZWVkIHRvIGZvY3VzIG9uIHBvdGVudGlhbCB3ZWFrbmVzc2VzIGxpa2UgYnVmZmVyIG92ZXJmbG93cyBvciBpbmplY3Rpb24gdnVsbmVyYWJpbGl0aWVzLiBXZSBzaG91bGQgYWxzbyBjaGVjayBmb3IgcHJvcGVyIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGtleSBhbHJlYWR5IGV4aXN0cz8gV2hhdCBpZiB0aGUgc3RvcmFnZSBzeXN0ZW0gaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGU/IEFuZCwgaXMgdGhlcmUgYW55IGxvZ2dpbmcgdG8gdHJhY2sgdGhlIG9wZXJhdGlvbnM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDM1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6NTU6MjguNTY2Njk3OTA0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTk2MTcyNDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB1dF91c2VyX2tleV9wYXlsb2FkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUva2V5cy91c2VyLXR5cGUuaD00MD1leHRlcm4gdm9pZCB1c2VyX2ZyZWVfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XFxuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oOjQxOnZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpO1xcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC00Mi1leHRlcm4gaW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XFxuLS1cXG5uZXQvcnhycGMvcnhnay5jPTk4Mz1zdGF0aWMgaW50IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuLS1cXG5uZXQvcnhycGMvcnhnay5jLTEwMTEtXFx0aWYgKGFwcGRhdGEgIT0gXFx1MDAyNmR1bW15KVxcbm5ldC9yeHJwYy9yeGdrLmM6MTAxMjpcXHRcXHRwdXRfdXNlcl9rZXlfcGF5bG9hZChhcHBkYXRhKTtcXG5uZXQvcnhycGMvcnhnay5jLTEwMTMtXFx0cmV0dXJuIHJldDtcXG4tLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM9OTA9c3RhdGljIHZvaWQgdXNlcl9mcmVlX3BheWxvYWRfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTAwLSAqL1xcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTAxOnZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpXFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xMDIte1xcbi0tXFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xMDUtfVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTA2OkVYUE9SVF9TWU1CT0xfR1BMKHB1dF91c2VyX2tleV9wYXlsb2FkKTtcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEwNy1cXG4tLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM9MTEyPWludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEyOC1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjEyOTpcXHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh6YXApO1xcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTMwLVxcdHJldHVybiByZXQ7XFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTEzOD12b2lkIHVzZXJfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSlcXG4tLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTQ2LVxcdFxcdHJjdV9hc3NpZ25fa2V5cG9pbnRlcihrZXksIE5VTEwpO1xcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTQ3OlxcdFxcdHB1dF91c2VyX2tleV9wYXlsb2FkKHVwYXlsb2FkKTtcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE0OC1cXHR9XFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTE1Nj12b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE1OS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjE2MDpcXHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh1cGF5bG9hZCk7XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xNjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1NTozMS41NjI5MjA5NTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcwMDY3NzY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgRm9jdXMgZm9yIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBvcHRpbWl6YXRpb24gYW5kIHdoZXJlIHdlIHNob3VsZCBmb2N1cyBvdXIgZWZmb3J0cy4gSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgdGhlc2Ugc3ltYm9scyBhcyBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3Q6IGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCwgYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYCwgYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCwgYHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2VgLCBgcnhycGNfc2VuZG1zZ19jbXNnYCwgYW5kIGBwdXRfdXNlcl9rZXlfcGF5bG9hZGAuXG5cbk5vdywgbGV0J3MgcmVmaW5lIHRoaXMgYSBiaXQuIEkgbmVlZCB0byBjb25zaWRlciBmcmVxdWVuY3kgYW5kIGltcGFjdC4gYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCBpcyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGNhbGwgd2hpY2ggc3VnZ2VzdHMgaXQncyBsaWtlbHkgbm90IHRoZSBiaWdnZXN0IGJvdHRsZW5lY2suIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCBzb3VuZHMgaW5mcmVxdWVudCwgaXQgaXMgY2FsbGVkIHdoZW4gcmVzcG9uZGluZyB0byBhIGNoYWxsZW5nZSB3aGljaCBpcyBsZXNzIGNvbW1vbi4gYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIHJlbGF0ZXMgdG8gcHJvYmluZyBhIGZpbGVzZXJ2ZXIgYW5kIHRoZW4gd2UgaGF2ZSB0aGUgYHJ4cnBjX3NlbmRtc2dfY21zZ2AsIHdoaWNoIGhhcHBlbnMgd2hlbiBzZW5kaW5nIG1lc3NhZ2VzIHdpdGggY29udHJvbCBtZXNzYWdlcy5cblxuUmVmaW5pbmcgdGhlIGxpc3QsIGl0IGxvb2tzIGxpa2UgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgLCBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gLCBgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZWAsIGByeHJwY19zZW5kbXNnX2Ntc2dgLCBhbmQgYHB1dF91c2VyX2tleV9wYXlsb2FkYCBhcmUgdGhlIG9uZXMgdG8gZm9jdXMgb24uXG5cbkkgYWxzbyBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgQUZTX0ZTYCwgYEFGX1JYUlBDYCwgYFJYS0FEYCwgYW5kIGBSWEdLYC5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHRoYXQgYFJYR0tgIGlzIGluZGVlZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBZZXMsIGEgcXVpY2sgY2hlY2sgaW4gYG5ldC9yeHJwYy9LY29uZmlnYCBjb25maXJtcyBgY29uZmlnIFJYR0tgLiBBbmQsIHdhaXQsIGl0J3MgYSAqYm9vbCogd2hpY2ggbWF5IGhhdmUgaW1wbGljYXRpb25zIGZvciBob3cgaXQncyBoYW5kbGVkLiBUaGVuIEknbSB0aGlua2luZyBhYm91dCBgS0VZU2AuIEkgdGhpbmsgYENPTkZJR19LRVlTYCBpcyB1c3VhbGx5IGVuYWJsZWQsIHNvIGxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGF0LlxuXG5BbHJpZ2h0LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgdGhpbmsgSSd2ZSBnb3QgYSBzb2xpZCBzZXQgb2YgdGFyZ2V0cyBhbmQgY29uZmlncyB0byBrZWVwIGluIG1pbmQgbW92aW5nIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzM0LCJPdXRwdXRUb2tlbnMiOjE5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1NTozOS4yNjM2MDE2OTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njk1ODczNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiUlhLQURcIixcbiAgICBcIlJYR0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhXCIsXG4gICAgXCJhZnNfY3JlYXRlX3lmc19jbV90b2tlblwiLFxuICAgIFwicnhna19yZXNwb25kX3RvX2NoYWxsZW5nZVwiLFxuICAgIFwicnhycGNfc2VuZG1zZ19jbXNnXCIsXG4gICAgXCJwdXRfdXNlcl9rZXlfcGF5bG9hZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRlMgYW5kIFJ4UlBDIHN1YnN5c3RlbXMgdG8gaGFuZGxlIFJ4R0sgYXBwbGljYXRpb24gZGF0YSBpbnRlcm5hbGx5IHJhdGhlciB0aGFuIHJlbHlpbmcgb24gdXNlcnNwYWNlIE9PQiBtZXNzYWdlcy4gSXQgaW50cm9kdWNlcyBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAgdG8gZ2VuZXJhdGUgdGhlIGFwcCBkYXRhIGFuZCBwYXNzZXMgaXQgdG8gYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29yayBhbmQgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IGFsdGVycyBleGVjdXRpb24gZmxvdyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRlNfRlNcIixcbiAgICBcIkFGX1JYUlBDXCIsXG4gICAgXCJSWEtBRFwiLFxuICAgIFwiUlhHS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFcIixcbiAgICBcImFmc19jcmVhdGVfeWZzX2NtX3Rva2VuXCIsXG4gICAgXCJyeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlXCIsXG4gICAgXCJyeHJwY19zZW5kbXNnX2Ntc2dcIixcbiAgICBcInB1dF91c2VyX2tleV9wYXlsb2FkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGUyBhbmQgUnhSUEMgc3Vic3lzdGVtcyB0byBoYW5kbGUgUnhHSyBhcHBsaWNhdGlvbiBkYXRhIGludGVybmFsbHkgcmF0aGVyIHRoYW4gcmVseWluZyBvbiB1c2Vyc3BhY2UgT09CIG1lc3NhZ2VzLiBJdCBpbnRyb2R1Y2VzIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCB0byBnZW5lcmF0ZSB0aGUgYXBwIGRhdGEgYW5kIHBhc3NlcyBpdCB0byBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JrIGFuZCBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93IGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4db4m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 17:33:04 +0000 UTC FinishedAt: 2026-07-02 17:55:42 +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": "d8e8b85a85fe21954d303db68034aac4639df88d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS", "AF_RXRPC", "RXKAD", "RXGK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d8e8b85a85fe21954d303db68034aac4639df88d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS", "AF_RXRPC", "RXKAD", "RXGK" ], "series_id": "4f7f8daa-a063-4165-89b2-c548f146aa15" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "afs_create_server_appdata", "afs_create_yfs_cm_token", "rxgk_respond_to_challenge", "rxrpc_sendmsg_cmsg", "put_user_key_payload" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtSWEtBRCYjMzQ7LAogICAgJiMzNDtSWEdLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YSYjMzQ7LAogICAgJiMzNDthZnNfY3JlYXRlX3lmc19jbV90b2tlbiYjMzQ7LAogICAgJiMzNDtyeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlJiMzNDssCiAgICAmIzM0O3J4cnBjX3NlbmRtc2dfY21zZyYjMzQ7LAogICAgJiMzNDtwdXRfdXNlcl9rZXlfcGF5bG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZTIGFuZCBSeFJQQyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBSeEdLIGFwcGxpY2F0aW9uIGRhdGEgaW50ZXJuYWxseSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHVzZXJzcGFjZSBPT0IgbWVzc2FnZXMuIEl0IGludHJvZHVjZXMgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIHRvIGdlbmVyYXRlIHRoZSBhcHAgZGF0YSBhbmQgcGFzc2VzIGl0IHRvIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNmIxZTJkOWUxMjM5OTRhYjJkN2FhODg4NGUzNmZlOGYzNDMwYzU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxNzo1Mzo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9hZnMvY21fc2VjdXJpdHkuYyBiL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXG5pbmRleCAxMDMxNjhjNzBkZDRkZi4uZGIyYTNiMzBmMDIwOTQgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvY21fc2VjdXJpdHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2NtX3NlY3VyaXR5LmNcbkBAIC02LDcgJiM0Mzs2LDkgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2V5LXR5cGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2NyeXB0by9rcmI1LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNja2V5cy91c2VyLXR5cGUuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDthZnNfY20uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2Fmc19mcy5oXCYjMzQ7XG5AQCAtMTksOTcgJiM0MzsyMSw2NiBAQFxuICNkZWZpbmUgeGRyX2xlbl9vYmplY3QoeCkgKDQgJiM0Mzsgcm91bmRfdXAoKHgpLCBzaXplb2YoX19iZTMyKSkpXG4gXG4gI2lmZGVmIENPTkZJR19SWEdLXG4tc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcik7XG4mIzQzO3N0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGtyYjVfZW5jdHlwZSk7XG4gI2VuZGlmXG4gXG4gLypcbi0gKiBSZXNwb25kIHRvIGFuIFJ4R0sgY2hhbGxlbmdlLCBhZGRpbmcgYXBwZGF0YS5cbiYjNDM7ICogQ3JlYXRlIHRoZSBhcHBsaWNhdGlvbiBkYXRhIHRvIGdvIGluIGEgUkVTUE9OU0UgcGFja2V0IGEgc2VydmVyJiMzOTtzIENIQUxMRU5HRVxuJiM0MzsgKiBmcm9tIHRoZSBwYXJhbWV0ZXJzIGNvbnRhaW5lZCBpbiBhIGtleS4gIFRoZSBrZXkgc3BlY2lmaWVzIHRoZSBzZWN1cml0eVxuJiM0MzsgKiBpbmRleCBhbmQgb3RoZXIgYXBwcm9wcmlhdGUgcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBlbmNvZGluZyB0eXBlIGZvciBSeEdLLlxuICAqL1xuLXN0YXRpYyBpbnQgYWZzX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4mIzQzO2ludCBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBrZXkgKmtleSlcbiB7XG4tI2lmZGVmIENPTkZJR19SWEdLXG4tXHRzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9O1xuLVx0c3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcjtcbi0jZW5kaWZcbi1cdHN0cnVjdCByeHJwY19wZWVyICpwZWVyO1xuLVx0dW5zaWduZWQgbG9uZyBwZWVyX2RhdGE7XG4tXHR1MTYgc2VydmljZV9pZDtcbiYjNDM7XHR1MzIga3JiNV9lbmN0eXBlO1xuJiM0MztcdGludCByZXQ7XG4gXHR1OCBzZWN1cml0eV9pbmRleDtcbiBcbi1cdHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UoY2hhbGxlbmdlLCBcdTAwMjZwZWVyLCBcdTAwMjZwZWVyX2RhdGEsXG4tXHRcdFx0XHQgICAgIFx1MDAyNnNlcnZpY2VfaWQsIFx1MDAyNnNlY3VyaXR5X2luZGV4KTtcbi1cbi1cdF9lbnRlcihcJiMzNDsldSwldVwmIzM0Oywgc2VydmljZV9pZCwgc2VjdXJpdHlfaW5kZXgpO1xuLVxuLVx0c3dpdGNoIChzZXJ2aWNlX2lkKSB7XG4tXHRcdC8qIFdlIGRvbiYjMzk7dCBzZW5kIENNX1NFUlZJQ0UgUlBDcywgc28gZG9uJiMzOTt0IGV4cGVjdCBhIGNoYWxsZW5nZVxuLVx0XHQgKiB0aGVyZWZyb20uXG4tXHRcdCAqL1xuLVx0Y2FzZSBGU19TRVJWSUNFOlxuLVx0Y2FzZSBWTF9TRVJWSUNFOlxuLVx0Y2FzZSBZRlNfRlNfU0VSVklDRTpcbi1cdGNhc2UgWUZTX1ZMX1NFUlZJQ0U6XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0cHJfd2FybihcJiMzNDtDYW4mIzM5O3QgcmVzcG9uZCB0byB1bmtub3duIGNoYWxsZW5nZSAldToldVwmIzM0Oyxcbi1cdFx0XHRzZXJ2aWNlX2lkLCBzZWN1cml0eV9pbmRleCk7XG4tXHRcdHJldHVybiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFJYX1VTRVJfQUJPUlQsIC1FUFJPVE8sXG4tXHRcdFx0XHRcdFx0ICAgICBhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzKTtcbi1cdH1cbiYjNDM7XHRpZiAoIWtleSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBSZWFkIEFQUERBVEEgZmxhZyBiZWZvcmUgY21fcnhna19hcHBkYXRhICovXG4mIzQzO1x0aWYgKHRlc3RfYml0X2FjcXVpcmUoQUZTX1NFUlZFUl9GTF9BUFBEQVRBLCBcdTAwMjZzZXJ2ZXItXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoa2V5LCBcdTAwMjZzZWN1cml0eV9pbmRleCwgXHUwMDI2a3JiNV9lbmN0eXBlKTtcbiYjNDM7XG4mIzQzO1x0X2VudGVyKFwmIzM0OyV1LCV1XCYjMzQ7LCBzZWN1cml0eV9pbmRleCwga3JiNV9lbmN0eXBlKTtcbiBcbi1cdHN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHtcbiYjNDM7XHRyZXQgPSAwO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2c2VydmVyLVx1MDAzZWNtX3Rva2VuX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBSZWFkIEFQUERBVEEgZmxhZyBiZWZvcmUgY21fcnhna19hcHBkYXRhICovXG4mIzQzO1x0aWYgKCF0ZXN0X2JpdF9hY3F1aXJlKEFGU19TRVJWRVJfRkxfQVBQREFUQSwgXHUwMDI2c2VydmVyLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xuJiM0MztcdFx0Y2FzZSAwOlxuJiM0MztcdFx0XHRicmVhaztcbiAjaWZkZWYgQ09ORklHX1JYS0FEXG4tXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOlxuLVx0XHRyZXR1cm4gcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSk7XG4mIzQzO1x0XHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOlxuJiM0MztcdFx0XHRzZXRfYml0KEFGU19TRVJWRVJfRkxfQVBQREFUQSwgXHUwMDI2c2VydmVyLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19SWEdLXG4tXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYR0s6XG4tXHRcdHJldHVybiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UsIFx1MDAyNmFwcGRhdGEpO1xuLVxuLVx0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbi1cdFx0c3dpdGNoIChzZXJ2aWNlX2lkKSB7XG4tXHRcdGNhc2UgRlNfU0VSVklDRTpcbi1cdFx0Y2FzZSBZRlNfRlNfU0VSVklDRTpcbi1cdFx0XHRzZXJ2ZXIgPSAoc3RydWN0IGFmc19zZXJ2ZXIgKilwZWVyX2RhdGE7XG4tXHRcdFx0aWYgKCFzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpIHtcbi1cdFx0XHRcdG11dGV4X2xvY2soXHUwMDI2c2VydmVyLVx1MDAzZWNtX3Rva2VuX2xvY2spO1xuLVx0XHRcdFx0aWYgKCFzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpXG4tXHRcdFx0XHRcdGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKGNoYWxsZW5nZSwgc2VydmVyKTtcbi1cdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZzZXJ2ZXItXHUwMDNlY21fdG9rZW5fbG9jayk7XG4tXHRcdFx0fVxuLVx0XHRcdGlmIChzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpXG4tXHRcdFx0XHRhcHBkYXRhID0gc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YTtcbiYjNDM7XHRcdGNhc2UgUlhSUENfU0VDVVJJVFlfUlhHSzpcbiYjNDM7XHRcdFx0c2V0X2JpdChBRlNfU0VSVkVSX0ZMX0FQUERBVEEsIFx1MDAyNnNlcnZlci1cdTAwM2VmbGFncyk7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0cmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgXHUwMDI2YXBwZGF0YSk7XG4tI2VuZGlmXG4gXG4tXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UoY2hhbGxlbmdlLCBSWF9VU0VSX0FCT1JULCAtRVBST1RPLFxuLVx0XHRcdFx0XHRcdCAgICAgYWZzX2Fib3J0X3Vuc3VwcG9ydGVkX3NlY19jbGFzcyk7XG4tXHR9XG4tfVxuJiM0MztcdFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbiYjNDM7XHRcdFx0cmV0ID0gYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc2VydmVyLCBrcmI1X2VuY3R5cGUpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRzZXRfYml0KEFGU19TRVJWRVJfRkxfQVBQREFUQSwgXHUwMDI2c2VydmVyLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuIFxuLS8qXG4tICogUHJvY2VzcyB0aGUgT09CIG1lc3NhZ2UgcXVldWUsIHByb2Nlc3NpbmcgY2hhbGxlbmdlIHBhY2tldHMuXG4tICovXG4tdm9pZCBhZnNfcHJvY2Vzc19vb2JfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLXtcbi1cdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFmc19uZXQsIHJ4X29vYl93b3JrKTtcbi1cdHN0cnVjdCBza19idWZmICpvb2I7XG4tXHRlbnVtIHJ4cnBjX29vYl90eXBlIHR5cGU7XG4tXG4tXHR3aGlsZSAoUkVBRF9PTkNFKG5ldC1cdTAwM2VsaXZlKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICAob29iID0gcnhycGNfa2VybmVsX2RlcXVldWVfb29iKG5ldC1cdTAwM2Vzb2NrZXQsIFx1MDAyNnR5cGUpKSkge1xuLVx0XHRzd2l0Y2ggKHR5cGUpIHtcbi1cdFx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxuLVx0XHRcdGFmc19yZXNwb25kX3RvX2NoYWxsZW5nZShvb2IpO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0V0FSTl9PTl9PTkNFKDEpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdHJ4cnBjX2tlcm5lbF9mcmVlX29vYihvb2IpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2c2VydmVyLVx1MDAzZWNtX3Rva2VuX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfUlhHS1xuQEAgLTE3NywzNyAmIzQzOzE0OCwzNCBAQCBpbnQgYWZzX2NyZWF0ZV90b2tlbl9rZXkoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29ja2V0KVxuIC8qXG4gICogQ3JlYXRlIGFuIFlGUyBSeEdLIEdTUyB0b2tlbiB0byB1c2UgYXMgYSB0aWNrZXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlc2VydmVyLlxuICAqL1xuLXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIpXG4mIzQzO3N0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGVuY3R5cGUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY29ubl9rcmI1LCAqdG9rZW5fa3JiNTtcbiBcdGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqdG9rZW5fa2V5O1xuIFx0c3RydWN0IGNyeXB0b19hZWFkICphZWFkO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IHNnO1xuIFx0c3RydWN0IGFmc19uZXQgKm5ldCA9IHNlcnZlci1cdTAwM2VjZWxsLVx1MDAzZW5ldDtcbi1cdGNvbnN0IHN0cnVjdCBrZXkgKmtleSA9IG5ldC1cdTAwM2Vmc19jbV90b2tlbl9rZXk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGtleSAqY21fa2V5ID0gbmV0LVx1MDAzZWZzX2NtX3Rva2VuX2tleTtcbiYjNDM7XHRzdHJ1Y3Qga2V5ICphcHBkYXRhX2tleSA9IE5VTEw7XG4gXHRzaXplX3Qga2V5c2l6ZSwgdXVpZHNpemUsIGF1dGhzaXplLCB0b2tzaXplLCBlbmNzaXplLCBjb250c2l6ZSwgYWRhdGFzaXplLCBvZmZzZXQ7XG4gXHRfX2JlMzIgY2Fwc1sxXSA9IHtcbiBcdFx0WzBdID0gaHRvbmwoQUZTX0NBUF9FUlJPUl9UUkFOU0xBVElPTiksXG4gXHR9O1xuIFx0X19iZTMyICp4ZHI7XG4gXHR2b2lkICphcHBkYXRhLCAqSzAsICplbmNiYXNlO1xuLVx0dTMyIGVuY3R5cGU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKCFrZXkpXG4mIzQzO1x0aWYgKCFjbV9rZXkpXG4gXHRcdHJldHVybiAtRU5PS0VZO1xuIFxuIFx0LyogQXNzdW1lIHRoYXQgdGhlIGZpbGVzZXJ2ZXIgaXMgaGFwcHkgdG8gdXNlIHRoZSBzYW1lIGVuY29kaW5nIHR5cGUgYXNcbiBcdCAqIHdlIHdlcmUgdG9sZCB0byB1c2UgYnkgdGhlIHRva2VuIG9idGFpbmVkIGJ5IHRoZSB1c2VyLlxuIFx0ICovXG4tXHRlbmN0eXBlID0gcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSk7XG4tXG4gXHRjb25uX2tyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZW5jdHlwZSk7XG4gXHRpZiAoIWNvbm5fa3JiNSlcbiBcdFx0cmV0dXJuIC1FTk9QS0c7XG4tXHR0b2tlbl9rcmI1ID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbi1cdHRva2VuX2tleSA9IChjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKilcdTAwMjZrZXktXHUwMDNlcGF5bG9hZC5kYXRhWzJdO1xuJiM0MztcdHRva2VuX2tyYjUgPSBjbV9rZXktXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xuJiM0MztcdHRva2VuX2tleSA9IChjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKilcdTAwMjZjbV9rZXktXHUwMDNlcGF5bG9hZC5kYXRhWzJdO1xuIFxuIFx0Lyogc3RydWN0IHJ4Z2tfa2V5IHtcbiBcdCAqXHRhZnNfdWludDMyXHRlbmN0eXBlO1xuQEAgLTMyNyw5ICYjNDM7Mjk1LDIyIEBAIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X2FlYWQ7XG4gXG4tXHRzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmxlbiAgPSBhZGF0YXNpemU7XG4tXHRzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEgPSBhcHBkYXRhO1xuLVx0YXBwZGF0YSA9IE5VTEw7XG4mIzQzO1x0YXBwZGF0YV9rZXkgPSBrZXlfYWxsb2MoXHUwMDI2a2V5X3R5cGVfdXNlciwgXCYjMzQ7cnhycGM6IGFmcyByeGdrIGFwcGRhdGFcJiMzNDssXG4mIzQzO1x0XHRcdFx0R0xPQkFMX1JPT1RfVUlELCBHTE9CQUxfUk9PVF9HSUQsIGN1cnJlbnRfY3JlZCgpLFxuJiM0MztcdFx0XHRcdEtFWV9QT1NfVklFVyB8IEtFWV9QT1NfU0VBUkNIIHwgS0VZX1VTUl9WSUVXLFxuJiM0MztcdFx0XHRcdEtFWV9BTExPQ19OT1RfSU5fUVVPVEEsIE5VTEwpO1xuJiM0MztcdGlmIChJU19FUlIoYXBwZGF0YV9rZXkpKSB7XG4mIzQzO1x0XHRyZXQgPSBQVFJfRVJSKGFwcGRhdGFfa2V5KTtcbiYjNDM7XHRcdGdvdG8gb3V0X2FlYWQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBrZXlfaW5zdGFudGlhdGVfYW5kX2xpbmsoYXBwZGF0YV9rZXksIGFwcGRhdGEsIGFkYXRhc2l6ZSwgTlVMTCwgTlVMTCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0a2V5X3B1dChhcHBkYXRhX2tleSk7XG4mIzQzO1x0XHRnb3RvIG91dF9hZWFkO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YSA9IGFwcGRhdGFfa2V5O1xuIFxuIG91dF9hZWFkOlxuIFx0Y3J5cHRvX2ZyZWVfYWVhZChhZWFkKTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvY21zZXJ2aWNlLmMgYi9mcy9hZnMvY21zZXJ2aWNlLmNcbmluZGV4IDU1NDBhZTFjYWQ1OTlhLi5kNTc5YTY2NWUzZGEwOSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9jbXNlcnZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Ntc2VydmljZS5jXG5AQCAtMzY0LDcgJiM0MzszNjQsOCBAQCBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlMyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4gXHRpZiAoIWFmc19jaGVja19jYWxsX3N0YXRlKGNhbGwsIEFGU19DQUxMX1NWX1JFUExZSU5HKSlcbiBcdFx0cmV0dXJuIGFmc19pb19lcnJvcihjYWxsLCBhZnNfaW9fZXJyb3JfY21fcmVwbHkpO1xuIFxuLVx0aWYgKG1lbWNtcChjYWxsLVx1MDAzZXJlcXVlc3QsIFx1MDAyNmNhbGwtXHUwMDNlc2VydmVyLVx1MDAzZV91dWlkLCBzaXplb2YoY2FsbC1cdTAwM2VzZXJ2ZXItXHUwMDNlX3V1aWQpKSAhPSAwKSB7XG4mIzQzO1x0aWYgKGNhbGwtXHUwMDNlc2VydmVyIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBtZW1jbXAoY2FsbC1cdTAwM2VyZXF1ZXN0LCBcdTAwMjZjYWxsLVx1MDAzZXNlcnZlci1cdTAwM2VfdXVpZCwgc2l6ZW9mKGNhbGwtXHUwMDNlc2VydmVyLVx1MDAzZV91dWlkKSkgIT0gMCkge1xuIFx0XHRwcl9ub3RpY2UoXCYjMzQ7Q2FsbGJhY2sgVVVJRCBkb2VzIG5vdCBtYXRjaCBmaWxlc2VydmVyIFVVSURcXG5cJiMzNDspO1xuIFx0XHR0cmFjZV9hZnNfY21fbm9fc2VydmVyX3UoY2FsbCwgY2FsbC1cdTAwM2VyZXF1ZXN0KTtcbiBcdFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZzX3Byb2JlLmMgYi9mcy9hZnMvZnNfcHJvYmUuY1xuaW5kZXggYTkxYWQxOTM4ZDA3ODguLmUyNmY3ZjFlMzBhMjNhIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ZzX3Byb2JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9mc19wcm9iZS5jXG5AQCAtMjQxLDkgJiM0MzsyNDEsMTQgQEAgaW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4gXHRzdHJ1Y3QgYWZzX2VuZHBvaW50X3N0YXRlICplc3RhdGUsICpvbGQ7XG4gXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0ID0gTlVMTCwgKmFsaXN0O1xuIFx0dW5zaWduZWQgbG9uZyB1bnByb2JlZDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0X2VudGVyKFwmIzM0OyVwVVwmIzM0OywgXHUwMDI2c2VydmVyLVx1MDAzZXV1aWQpO1xuIFxuJiM0MztcdHJldCA9IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc2VydmVyLCBrZXkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdGVzdGF0ZSA9IGt6YWxsb2Nfb2JqKCplc3RhdGUpO1xuIFx0aWYgKCFlc3RhdGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDBiNzJhODU2NjI5OTkyLi4zZTYxYzU0M2E1MGM0OCAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvaW50ZXJuYWwuaFxuQEAgLTI4Myw3ICYjNDM7MjgzLDYgQEAgc3RydWN0IGFmc19uZXQge1xuIFx0c3RydWN0IHNvY2tldFx0XHQqc29ja2V0O1xuIFx0c3RydWN0IGFmc19jYWxsXHRcdCpzcGFyZV9pbmNvbWluZ19jYWxsO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0XHRjaGFyZ2VfcHJlYWxsb2NhdGlvbl93b3JrO1xuLVx0c3RydWN0IHdvcmtfc3RydWN0XHRyeF9vb2Jfd29yaztcbiBcdHN0cnVjdCBtdXRleFx0XHRzb2NrZXRfbXV0ZXg7XG4gXHRhdG9taWNfdFx0XHRucl9vdXRzdGFuZGluZ19jYWxscztcbiBcdGF0b21pY190XHRcdG5yX3N1cGVyYmxvY2tzO1xuQEAgLTU0Nyw3ICYjNDM7NTQ2LDcgQEAgc3RydWN0IGFmc19zZXJ2ZXIge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0XHRkZXN0cm95ZXI7XHQvKiBXb3JrIGl0ZW0gdG8gdHJ5IGFuZCBkZXN0cm95IGEgc2VydmVyICovXG4gXHRzdHJ1Y3QgdGltZXJfbGlzdFx0dGltZXI7XHRcdC8qIE1hbmFnZW1lbnQgdGltZXIgKi9cbiBcdHN0cnVjdCBtdXRleFx0XHRjbV90b2tlbl9sb2NrO1x0LyogTG9jayBnb3Zlcm5pbmcgY3JlYXRpb24gb2YgYXBwZGF0YSAqL1xuLVx0c3RydWN0IGtyYjVfYnVmZmVyXHRjbV9yeGdrX2FwcGRhdGE7IC8qIEFwcGRhdGEgdG8gYmUgaW5jbHVkZWQgaW4gUkVTUE9OU0UgcGFja2V0ICovXG4mIzQzO1x0c3RydWN0IGtleVx0XHQqY21fcnhna19hcHBkYXRhOyAvKiBBcHBkYXRhIHRvIGJlIGluY2x1ZGVkIGluIFJFU1BPTlNFIHBhY2tldCAqL1xuIFx0dGltZTY0X3RcdFx0dW51c2VfdGltZTtcdC8qIFRpbWUgYXQgd2hpY2ggbGFzdCB1bnVzZWQgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX1JFU1BPTkRJTkcgMFx0XHQvKiBUaGUgc2VydmVyIGlzIHJlc3BvbmRpbmcgKi9cbkBAIC01NTksNiAmIzQzOzU1OCw3IEBAIHN0cnVjdCBhZnNfc2VydmVyIHtcbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfTk9UX0ZPVU5EXHQ2XHRcdC8qIFZMIHNlcnZlciBzYXlzIG5vIHN1Y2ggc2VydmVyICovXG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX1ZMX0ZBSUxcdDdcdFx0LyogRmFpbGVkIHRvIGFjY2VzcyBWTCBzZXJ2ZXIgKi9cbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfTUFZX0hBVkVfQ0IgOFx0XHQvKiBNYXkgaGF2ZSBjYWxsYmFja3Mgb24gdGhpcyBmaWxlc2VydmVyICovXG4mIzQzOyNkZWZpbmUgQUZTX1NFUlZFUl9GTF9BUFBEQVRBXHQ5XHRcdC8qIFNldCBpZiBhcHBkYXRhIGNyZWF0ZWQgKi9cbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfSVNfWUZTXHQxNlx0XHQvKiBTZXJ2ZXIgaXMgWUZTIG5vdCBBRlMgKi9cbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfTk9fSUJVTEtcdDE3XHRcdC8qIEZpbGVzZXJ2ZXIgZG9lc24mIzM5O3Qgc3VwcG9ydCBGUy5JbmxpbmVCdWxrU3RhdHVzICovXG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX05PX1JNMlx0MThcdFx0LyogRmlsZXNlcnZlciBkb2VzbiYjMzk7dCBzdXBwb3J0IFlGUy5SZW1vdmVGaWxlMiAqL1xuQEAgLTEwOTAsNyAmIzQzOzEwOTAsNyBAQCBleHRlcm4gYm9vbCBhZnNfY21faW5jb21pbmdfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKik7XG4gLypcbiAgKiBjbV9zZWN1cml0eS5jXG4gICovXG4tdm9pZCBhZnNfcHJvY2Vzc19vb2JfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiYjNDM7aW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KTtcbiAjaWZkZWYgQ09ORklHX1JYR0tcbiBpbnQgYWZzX2NyZWF0ZV90b2tlbl9rZXkoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29ja2V0KTtcbiAjZWxzZVxuQEAgLTE0MTcsMjEgJiM0MzsxNDE3LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19zZWVfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGVudW0gYWZzX2NhbGxfdHJhY2Ugd2h5KVxuIFx0XHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXG4tXHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuLXtcbi1cdHN0cnVjdCBhZnNfYWRkcl9saXN0ICphbGlzdCA9IG9wLVx1MDAzZWVzdGF0ZS1cdTAwM2VhZGRyZXNzZXM7XG4tXG4tXHRvcC1cdTAwM2VjYWxsXHQ9IGNhbGw7XG4tXHRvcC1cdTAwM2V0eXBlXHQ9IGNhbGwtXHUwMDNldHlwZTtcbi1cdGNhbGwtXHUwMDNlb3BcdD0gb3A7XG4tXHRjYWxsLVx1MDAzZWtleVx0PSBvcC1cdTAwM2VrZXk7XG4tXHRjYWxsLVx1MDAzZWludHJcdD0gIShvcC1cdTAwM2VmbGFncyBcdTAwMjYgQUZTX09QRVJBVElPTl9VTklOVFIpO1xuLVx0Y2FsbC1cdTAwM2VwZWVyXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cdTAwM2VhZGRyc1tvcC1cdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcbi1cdGNhbGwtXHUwMDNlc2VydmljZV9pZCA9IG9wLVx1MDAzZXNlcnZlci1cdTAwM2VzZXJ2aWNlX2lkO1xuLVx0YWZzX21ha2VfY2FsbChjYWxsLCBnZnApO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2V4dHJhY3RfYmVnaW4oc3RydWN0IGFmc19jYWxsICpjYWxsLCB2b2lkICpidWYsIHNpemVfdCBzaXplKVxuIHtcbiBcdGNhbGwtXHUwMDNlaW92X2xlbiA9IHNpemU7XG5AQCAtMTc2Myw2ICYjNDM7MTc0OCwyMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqQUZTX1ZOT0RFX1RPX0koc3RydWN0IGFmc192bm9kZSAqdm5vZGUpXG4gXHRyZXR1cm4gXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYWZzX21ha2Vfb3BfY2FsbChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsIHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcbiYjNDM7XHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtXHUwMDNlZXN0YXRlLVx1MDAzZWFkZHJlc3NlcztcbiYjNDM7XG4mIzQzO1x0b3AtXHUwMDNlY2FsbFx0PSBjYWxsO1xuJiM0MztcdG9wLVx1MDAzZXR5cGVcdD0gY2FsbC1cdTAwM2V0eXBlO1xuJiM0MztcdGNhbGwtXHUwMDNlb3BcdD0gb3A7XG4mIzQzO1x0Y2FsbC1cdTAwM2VzZXJ2ZXJcdD0gYWZzX3VzZV9zZXJ2ZXIob3AtXHUwMDNlc2VydmVyLCBmYWxzZSwgYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCk7XG4mIzQzO1x0Y2FsbC1cdTAwM2VrZXlcdD0gb3AtXHUwMDNla2V5O1xuJiM0MztcdGNhbGwtXHUwMDNlaW50clx0PSAhKG9wLVx1MDAzZWZsYWdzIFx1MDAyNiBBRlNfT1BFUkFUSU9OX1VOSU5UUik7XG4mIzQzO1x0Y2FsbC1cdTAwM2VwZWVyXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cdTAwM2VhZGRyc1tvcC1cdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcbiYjNDM7XHRjYWxsLVx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cdTAwM2VzZXJ2ZXItXHUwMDNlc2VydmljZV9pZDtcbiYjNDM7XHRhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBOb3RlIHRoYXQgYSBkZW50cnkgZ290IGNoYW5nZWQuICBXZSBuZWVkIHRvIHNldCBkX2ZzZGF0YSB0byB0aGUgZGF0YSB2ZXJzaW9uXG4gICogbnVtYmVyIGRlcml2ZWQgZnJvbSB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uICBJdCBkb2VzbiYjMzk7dCBtYXR0ZXIgaWZcbmRpZmYgLS1naXQgYS9mcy9hZnMvbWFpbi5jIGIvZnMvYWZzL21haW4uY1xuaW5kZXggN2E4ODNjNTk5NzZmZjIuLjYzNTNmZWFhNWZiNGI1IDEwMDY0NFxuLS0tIGEvZnMvYWZzL21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL21haW4uY1xuQEAgLTczLDcgJiM0Mzs3Myw2IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBhZnNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0X25zKVxuIFx0Z2VuZXJhdGVfcmFuZG9tX3V1aWQoKHVuc2lnbmVkIGNoYXIgKilcdTAwMjZuZXQtXHUwMDNldXVpZCk7XG4gXG4gXHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZWNoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcmssIGFmc19jaGFyZ2VfcHJlYWxsb2NhdGlvbik7XG4tXHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZXJ4X29vYl93b3JrLCBhZnNfcHJvY2Vzc19vb2JfcXVldWUpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZuZXQtXHUwMDNlc29ja2V0X211dGV4KTtcbiBcbiBcdG5ldC1cdTAwM2VjZWxscyA9IFJCX1JPT1Q7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3J4cnBjLmMgYi9mcy9hZnMvcnhycGMuY1xuaW5kZXggZDgyOTE2NjU3YTNkZGYuLmFlNDhjMTViM2RiOTQzIDEwMDY0NFxuLS0tIGEvZnMvYWZzL3J4cnBjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9yeHJwYy5jXG5AQCAtMjUsMTQgJiM0MzsyNSwxMiBAQCBzdGF0aWMgdm9pZCBhZnNfcHJvY2Vzc19hc3luY19jYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcbiBzdGF0aWMgdm9pZCBhZnNfcnhfbmV3X2NhbGwoc3RydWN0IHNvY2sgKiwgc3RydWN0IHJ4cnBjX2NhbGwgKiwgdW5zaWduZWQgbG9uZyk7XG4gc3RhdGljIHZvaWQgYWZzX3J4X2Rpc2NhcmRfbmV3X2NhbGwoc3RydWN0IHJ4cnBjX2NhbGwgKiwgdW5zaWduZWQgbG9uZyk7XG4gc3RhdGljIHZvaWQgYWZzX3J4X2F0dGFjaChzdHJ1Y3QgcnhycGNfY2FsbCAqcnhjYWxsLCB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCk7XG4tc3RhdGljIHZvaWQgYWZzX3J4X25vdGlmeV9vb2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb29iKTtcbiBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NtX29wX2lkKHN0cnVjdCBhZnNfY2FsbCAqKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ4cnBjX2tlcm5lbF9vcHMgYWZzX3J4cnBjX2NhbGxiYWNrX29wcyA9IHtcbiBcdC5ub3RpZnlfbmV3X2NhbGxcdD0gYWZzX3J4X25ld19jYWxsLFxuIFx0LmRpc2NhcmRfbmV3X2NhbGxcdD0gYWZzX3J4X2Rpc2NhcmRfbmV3X2NhbGwsXG4gXHQudXNlcl9hdHRhY2hfY2FsbFx0PSBhZnNfcnhfYXR0YWNoLFxuLVx0Lm5vdGlmeV9vb2JcdFx0PSBhZnNfcnhfbm90aWZ5X29vYixcbiB9O1xuIFxuIC8qIGFzeW5jaHJvbm91cyBpbmNvbWluZyBjYWxsIGluaXRpYWwgcHJvY2Vzc2luZyAqL1xuQEAgLTc0LDEwICYjNDM7NzIsNiBAQCBpbnQgYWZzX29wZW5fc29ja2V0KHN0cnVjdCBhZnNfbmV0ICpuZXQpXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycm9yXzI7XG4gXG4tXHRyZXQgPSByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2Uoc29ja2V0LVx1MDAzZXNrLCB0cnVlKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZXJyb3JfMjtcbi1cbiBcdHJldCA9IGFmc19jcmVhdGVfdG9rZW5fa2V5KG5ldCwgc29ja2V0KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHByX2VycihcJiMzNDtDb3VsZG4mIzM5O3QgY3JlYXRlIFJ4R0sgQ00ga2V5OiAlZFxcblwmIzM0OywgcmV0KTtcbkBAIC0xMjgsNyAmIzQzOzEyMiw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFx0X2VudGVyKFwmIzM0O1wmIzM0Oyk7XG4gXG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5ldC1cdTAwM2VjaGFyZ2VfcHJlYWxsb2NhdGlvbl93b3JrKTtcbi1cdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bmV0LVx1MDAzZXJ4X29vYl93b3JrKTtcbiBcdC8qIEZ1dHVyZSB3b3JrIGl0ZW1zIHNob3VsZCBub3cgc2VlIC1cdTAwM2VsaXZlIGlzIGZhbHNlLiAqL1xuIFxuIFx0a2VybmVsX2xpc3RlbihuZXQtXHUwMDNlc29ja2V0LCAwKTtcbkBAIC0xNDksNyAmIzQzOzE0Miw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFxuIFx0a2VybmVsX3NvY2tfc2h1dGRvd24obmV0LVx1MDAzZXNvY2tldCwgU0hVVF9SRFdSKTtcbiBcdGZsdXNoX3dvcmtxdWV1ZShhZnNfYXN5bmNfY2FsbHMpO1xuLVx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZuZXQtXHUwMDNlcnhfb29iX3dvcmspO1xuIFx0bmV0LVx1MDAzZXNvY2tldC1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgPSBOVUxMO1xuIFx0c29ja19yZWxlYXNlKG5ldC1cdTAwM2Vzb2NrZXQpO1xuIFx0a2V5X3B1dChuZXQtXHUwMDNlZnNfY21fdG9rZW5fa2V5KTtcbkBAIC0zNDcsNyAmIzQzOzMzOSwxMCBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRzdHJ1Y3QgcnhycGNfY2FsbCAqcnhjYWxsO1xuIFx0c3RydWN0IG1zZ2hkciBtc2c7XG4gXHRzdHJ1Y3Qga3ZlYyBpb3ZbMV07XG4mIzQzO1x0dW5zaWduZWQgaW50IGRlYnVnX2lkID0gY2FsbC1cdTAwM2VkZWJ1Z19pZDtcbiYjNDM7XHRzdHJ1Y3Qga2V5ICphcHBfZGF0YSA9IE5VTEw7XG4gXHRzaXplX3QgbGVuO1xuJiM0MztcdGJvb2wgd3JpdGVfaXRlciA9IGNhbGwtXHUwMDNld3JpdGVfaXRlcjtcbiBcdHM2NCB0eF90b3RhbF9sZW47XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTM3OCw4ICYjNDM7MzczLDI1IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdFx0Y2FsbC1cdTAwM2Vkcm9wX3JlZiA9IHRydWU7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKGNhbGwtXHUwMDNla2V5IFx1MDAyNlx1MDAyNiBjYWxsLVx1MDAzZXNlcnZlcikge1xuJiM0MztcdFx0dTMyIGtyYjVfZW5jdHlwZSA9IDA7XG4mIzQzO1x0XHR1OCBzZWN1cml0eV9pbmRleCA9IDA7XG4mIzQzO1xuJiM0MztcdFx0cnhycGNfa2VybmVsX3F1ZXJ5X2tleShjYWxsLVx1MDAzZWtleSwgXHUwMDI2c2VjdXJpdHlfaW5kZXgsIFx1MDAyNmtyYjVfZW5jdHlwZSk7XG4mIzQzO1x0XHRzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7XG4mIzQzOyNpZmRlZiBDT05GSUdfUlhHS1xuJiM0MztcdFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbiYjNDM7XHRcdFx0YXBwX2RhdGEgPSBjYWxsLVx1MDAzZXNlcnZlci1cdTAwM2VjbV9yeGdrX2FwcGRhdGE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBjcmVhdGUgYSBjYWxsICovXG4tXHRyeGNhbGwgPSByeHJwY19rZXJuZWxfYmVnaW5fY2FsbChjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcGVlciwgY2FsbC1cdTAwM2VrZXksXG4mIzQzO1x0cnhjYWxsID0gcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXBlZXIsXG4mIzQzO1x0XHRcdFx0XHQgY2FsbC1cdTAwM2VrZXksIGFwcF9kYXRhLFxuIFx0XHRcdFx0XHQgKHVuc2lnbmVkIGxvbmcpY2FsbCxcbiBcdFx0XHRcdFx0IHR4X3RvdGFsX2xlbixcbiBcdFx0XHRcdFx0IGNhbGwtXHUwMDNlbWF4X2xpZmVzcGFuLFxuQEAgLTQxMCw3ICYjNDM7NDIyLDcgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuIFx0aW92X2l0ZXJfa3ZlYyhcdTAwMjZtc2cubXNnX2l0ZXIsIElURVJfU09VUkNFLCBpb3YsIDEsIGNhbGwtXHUwMDNlcmVxdWVzdF9zaXplKTtcbiBcdG1zZy5tc2dfY29udHJvbFx0XHQ9IE5VTEw7XG4gXHRtc2cubXNnX2NvbnRyb2xsZW5cdD0gMDtcbi1cdG1zZy5tc2dfZmxhZ3NcdFx0PSBNU0dfV0FJVEFMTCB8IChjYWxsLVx1MDAzZXdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApO1xuJiM0MztcdG1zZy5tc2dfZmxhZ3NcdFx0PSBNU0dfV0FJVEFMTCB8ICh3cml0ZV9pdGVyID8gTVNHX01PUkUgOiAwKTtcbiBcbiBcdHJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LCByeGNhbGwsXG4gXHRcdFx0XHQgICAgIFx1MDAyNm1zZywgY2FsbC1cdTAwM2VyZXF1ZXN0X3NpemUsXG5AQCAtNDE4LDcgJiM0Mzs0MzAsOSBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycm9yX2RvX2Fib3J0O1xuIFxuLVx0aWYgKGNhbGwtXHUwMDNld3JpdGVfaXRlcikge1xuJiM0MztcdC8qIFdlIGxvc3Qgb3VyIHJlZiBvbiBjYWxsIGlmIE1TR19NT1JFIHdhcyBzZXQuICovXG4mIzQzO1xuJiM0MztcdGlmICh3cml0ZV9pdGVyKSB7XG4gXHRcdG1zZy5tc2dfaXRlciA9ICpjYWxsLVx1MDAzZXdyaXRlX2l0ZXI7XG4gXHRcdG1zZy5tc2dfZmxhZ3MgXHUwMDI2PSB+TVNHX01PUkU7XG4gXHRcdHRyYWNlX2Fmc19zZW5kX2RhdGEoY2FsbCwgXHUwMDI2bXNnKTtcbkBAIC00MjcsOSAmIzQzOzQ0MSw5IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdFx0XHRcdFx0ICAgICBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLFxuIFx0XHRcdFx0XHQgICAgIGlvdl9pdGVyX2NvdW50KFx1MDAyNm1zZy5tc2dfaXRlciksXG4gXHRcdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7XG4tXHRcdCpjYWxsLVx1MDAzZXdyaXRlX2l0ZXIgPSBtc2cubXNnX2l0ZXI7XG4mIzQzO1x0XHQvKiBXZSBsb3N0IG91ciByZWYgb24gY2FsbC4gKi9cbiBcbi1cdFx0dHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCBcdTAwMjZtc2csIHJldCk7XG4mIzQzO1x0XHR0cmFjZV9hZnNfc2VudF9kYXRhKGRlYnVnX2lkLCBcdTAwMjZtc2csIHJldCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0Z290byBlcnJvcl9kb19hYm9ydDtcbiBcdH1cbkBAIC05ODMsMTQgJiM0Mzs5OTcsMyBAQCBub2lubGluZSBpbnQgYWZzX3Byb3RvY29sX2Vycm9yKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcbiBcdFx0Y2FsbC1cdTAwM2V1bm1hcnNoYWxsaW5nX2Vycm9yID0gdHJ1ZTtcbiBcdHJldHVybiAtRUJBRE1TRztcbiB9XG4tXG4tLypcbi0gKiBXYWtlIHVwIE9PQiBub3RpZmljYXRpb24gcHJvY2Vzc2luZy5cbi0gKi9cbi1zdGF0aWMgdm9pZCBhZnNfcnhfbm90aWZ5X29vYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvb2IpXG4te1xuLVx0c3RydWN0IGFmc19uZXQgKm5ldCA9IHNrLVx1MDAzZXNrX3VzZXJfZGF0YTtcbi1cbi1cdGlmIChSRUFEX09OQ0UobmV0LVx1MDAzZWxpdmUpKVxuLVx0XHRxdWV1ZV93b3JrKGFmc193cSwgXHUwMDI2bmV0LVx1MDAzZXJ4X29vYl93b3JrKTtcbi19XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3NlcnZlci5jIGIvZnMvYWZzL3NlcnZlci5jXG5pbmRleCAwZmUxNjJlYTJhMzZkYi4uNzZhOWYyNWNlNDkwNTggMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc2VydmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9zZXJ2ZXIuY1xuQEAgLTM5OCw3ICYjNDM7Mzk4LDcgQEAgc3RhdGljIHZvaWQgYWZzX3NlcnZlcl9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4gXHRhZnNfcHV0X2VuZHBvaW50X3N0YXRlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItXHUwMDNlZW5kcG9pbnRfc3RhdGUpLFxuIFx0XHRcdCAgICAgICBhZnNfZXN0YXRlX3RyYWNlX3B1dF9zZXJ2ZXIpO1xuIFx0YWZzX3B1dF9jZWxsKHNlcnZlci1cdTAwM2VjZWxsLCBhZnNfY2VsbF90cmFjZV9wdXRfc2VydmVyKTtcbi1cdGtmcmVlKHNlcnZlci1cdTAwM2VjbV9yeGdrX2FwcGRhdGEuZGF0YSk7XG4mIzQzO1x0a2V5X3B1dChzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhKTtcbiBcdGtmcmVlKHNlcnZlcik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaCBiL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaFxuaW5kZXggMzg2YzMxNDMyNzg5OTUuLjcwMDJhOTkzYTQ3MjI4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2tleXMvdXNlci10eXBlLmhcbkBAIC0yNiw2ICYjNDM7MjYsNyBAQFxuICAqL1xuIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIHtcbiBcdHN0cnVjdCByY3VfaGVhZFx0cmN1O1x0XHQvKiBSQ1UgZGVzdHJ1Y3RvciAqL1xuJiM0MztcdHJlZmNvdW50X3RcdHJlZjtcbiBcdHVuc2lnbmVkIHNob3J0XHRkYXRhbGVuO1x0LyogbGVuZ3RoIG9mIHRoaXMgZGF0YSAqL1xuIFx0Y2hhclx0XHRkYXRhW10gX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpOyAvKiBhY3R1YWwgZGF0YSAqL1xuIH07XG5AQCAtMzcsNiAmIzQzOzM4LDcgQEAgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZDtcbiBcbiBleHRlcm4gaW50IHVzZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XG4gZXh0ZXJuIHZvaWQgdXNlcl9mcmVlX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xuJiM0Mzt2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKTtcbiBleHRlcm4gaW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XG4gZXh0ZXJuIHZvaWQgdXNlcl9yZXZva2Uoc3RydWN0IGtleSAqa2V5KTtcbiBleHRlcm4gdm9pZCB1c2VyX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl9yeHJwYy5oIGIvaW5jbHVkZS9uZXQvYWZfcnhycGMuaFxuaW5kZXggMGZiNGM0MWM5YmJmNTUuLjU2NTFhMTBiYTI2ZTYxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfcnhycGMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYWZfcnhycGMuaFxuQEAgLTU1LDYgJiM0Mzs1NSw3IEBAIHZvaWQgcnhycGNfa2VybmVsX3NldF9ub3RpZmljYXRpb25zKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCByeHJwY19wZWVyICpwZWVyLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qga2V5ICprZXksXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3Qga2V5ICphcHBfZGF0YSxcbiBcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyB1c2VyX2NhbGxfSUQsXG4gXHRcdFx0XHRcdCAgIHM2NCB0eF90b3RhbF9sZW4sXG4gXHRcdFx0XHRcdCAgIHUzMiBoYXJkX3RpbWVvdXQsXG5AQCAtOTEsMjQgJiM0Mzs5Miw3IEBAIGJvb2wgcnhycGNfa2VybmVsX2NoZWNrX2xpZmUoY29uc3Qgc3RydWN0IHNvY2tldCAqLCBjb25zdCBzdHJ1Y3QgcnhycGNfY2FsbCAqKTtcbiBcbiBpbnQgcnhycGNfc29ja19zZXRfbWluX3NlY3VyaXR5X2xldmVsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IHZhbCk7XG4gaW50IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc3RydWN0IHNvY2sgKiwgc3RydWN0IGtleSAqKTtcbi1pbnQgcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzZXQpO1xuLVxuLWVudW0gcnhycGNfb29iX3R5cGUgcnhycGNfa2VybmVsX3F1ZXJ5X29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iLFxuLVx0XHRcdFx0XHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxuLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhKTtcbi1zdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfa2VybmVsX2RlcXVldWVfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tXHRcdFx0XHRcdCBlbnVtIHJ4cnBjX29vYl90eXBlICpfdHlwZSk7XG4tdm9pZCByeHJwY19rZXJuZWxfZnJlZV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYik7XG4tdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXG4tXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsXG4tXHRcdFx0XHQgIHUxNiAqX3NlcnZpY2VfaWQsIHU4ICpfc2VjdXJpdHlfaW5kZXgpO1xuLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSxcbi1cdFx0XHRcdCAgaW50IGVycm9yLCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpO1xuLWludCByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSk7XG4tdTMyIHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKTtcbi1pbnQgcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhKTtcbiYjNDM7dm9pZCByeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgdTggKl9zZWN1cml0eV9pbmRleCwgdTMyICpfa3JiNV9lbmN0eXBlKTtcbiB1OCByeHJwY19rZXJuZWxfcXVlcnlfY2FsbF9zZWN1cml0eShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHRcdCAgICB1MTYgKl9zZXJ2aWNlX2lkLCB1MzIgKl9lbmN0eXBlKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXG5pbmRleCAxYjNjNDhiNTU5MWRmZC4uM2Q5NjA4MmU2ZWFjNzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcbkBAIC0xNDgsNiAmIzQzOzE0OCw3IEBAIGVudW0geWZzX2NtX29wZXJhdGlvbiB7XG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VudXNlX3NsaXN0X2lzb3J0LFx0XCYjMzQ7VU5VIGlzb3J0XCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91cGRhdGUsXHRcdFwmIzM0O1VQREFURSAgIFwmIzM0OykgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2J5X3V1aWQsXHRcJiMzNDtVU0UgdXVpZCBcJiMzNDspIFxcXG4mIzQzO1x0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCxcdFx0XCYjMzQ7VVNFIGNhbGwgXCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY21fY2FsbCxcdFwmIzM0O1VTRSBjbS1jbFwmIzM0OykgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dldF9jYXBzLFx0XCYjMzQ7VVNFIGdjYXBzXCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYixcdFwmIzM0O1VTRSBndnVwY1wmIzM0OykgXFxcbkBAIC05MzcsOSAmIzQzOzkzOCw5IEBAIFRSQUNFX0VWRU5UKGFmc19zZW5kX2RhdGEsXG4gXHQgICAgKTtcbiBcbiBUUkFDRV9FVkVOVChhZnNfc2VudF9kYXRhLFxuLVx0ICAgIFRQX1BST1RPKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgcmV0KSxcbiYjNDM7XHQgICAgVFBfUFJPVE8odW5zaWduZWQgaW50IGNhbGxfZGVidWdfaWQsIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHJldCksXG4gXG4tXHQgICAgVFBfQVJHUyhjYWxsLCBtc2csIHJldCksXG4mIzQzO1x0ICAgIFRQX0FSR1MoY2FsbF9kZWJ1Z19pZCwgbXNnLCByZXQpLFxuIFxuIFx0ICAgIFRQX1NUUlVDVF9fZW50cnkoXG4gXHRcdCAgICBfX2ZpZWxkKHVuc2lnbmVkIGludCxcdFx0Y2FsbClcbkBAIC05NDksNyAmIzQzOzk1MCw3IEBAIFRSQUNFX0VWRU5UKGFmc19zZW50X2RhdGEsXG4gXHRcdFx0ICAgICApLFxuIFxuIFx0ICAgIFRQX2Zhc3RfYXNzaWduKFxuLVx0XHQgICAgX19lbnRyeS1cdTAwM2VjYWxsID0gY2FsbC1cdTAwM2VkZWJ1Z19pZDtcbiYjNDM7XHRcdCAgICBfX2VudHJ5LVx1MDAzZWNhbGwgPSBjYWxsX2RlYnVnX2lkO1xuIFx0XHQgICAgX19lbnRyeS1cdTAwM2VyZXQgPSByZXQ7XG4gXHRcdCAgICBfX2VudHJ5LVx1MDAzZW9mZnNldCA9IG1zZy1cdTAwM2Vtc2dfaXRlci54YXJyYXlfc3RhcnQgJiM0MzsgbXNnLVx1MDAzZW1zZ19pdGVyLmlvdl9vZmZzZXQ7XG4gXHRcdCAgICBfX2VudHJ5LVx1MDAzZWNvdW50ID0gaW92X2l0ZXJfY291bnQoXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuaW5kZXggNzA0YTEwZGU2NjcwMDQuLjhmYzQxOTJlMDM5MmJmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuQEAgLTI2Miw3ICYjNDM7MjYyLDYgQEBcbiBcdEVNKHJ4cnBjX2Nvbm5fZnJlZSxcdFx0XHRcJiMzNDtGUkVFICAgICAgICBcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jb25uX2dldF9hY3RpdmF0ZV9jYWxsLFx0XCYjMzQ7R0VUIGFjdC1jYWxsXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY29ubl9nZXRfY2FsbF9pbnB1dCxcdFx0XCYjMzQ7R0VUIGlucC1jYWxsXCYjMzQ7KSBcXFxuLVx0RU0ocnhycGNfY29ubl9nZXRfY2hhbGxlbmdlX2lucHV0LFx0XCYjMzQ7R0VUIGlucC1jaGFsXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY29ubl9nZXRfY29ubl9pbnB1dCxcdFx0XCYjMzQ7R0VUIGlucC1jb25uXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY29ubl9nZXRfaWRsZSxcdFx0XHRcJiMzNDtHRVQgaWRsZSAgICBcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jb25uX2dldF9wb2tlX2Fib3J0LFx0XHRcJiMzNDtHRVQgcGstYWJvcnRcJiMzNDspIFxcXG5AQCAtMjc0LDcgJiM0MzsyNzMsNiBAQFxuIFx0RU0ocnhycGNfY29ubl9uZXdfc2VydmljZSxcdFx0XCYjMzQ7TkVXIHNlcnZpY2UgXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY29ubl9wdXRfY2FsbCxcdFx0XHRcJiMzNDtQVVQgY2FsbCAgICBcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jb25uX3B1dF9jYWxsX2lucHV0LFx0XHRcJiMzNDtQVVQgaW5wLWNhbGxcJiMzNDspIFxcXG4tXHRFTShyeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQsXHRcJiMzNDtQVVQgaW5wLWNoYWxcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jb25uX3B1dF9jb25uX2lucHV0LFx0XHRcJiMzNDtQVVQgaW5wLWNvbm5cJiMzNDspIFxcXG4gXHRFTShyeHJwY19jb25uX3B1dF9kaXNjYXJkX2lkbGUsXHRcdFwmIzM0O1BVVCBkaXNjLWlkbFwmIzM0OykgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fcHV0X2xvY2FsX2RlYWQsXHRcdFwmIzM0O1BVVCBsb2MtZGVhZFwmIzM0OykgXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oXG5pbmRleCBkOTczNWFiZDRjNzkxMC4uN2Q2YTUwMTUxOTMxMTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmhcbkBAIC01OCwxMSAmIzQzOzU4LDcgQEAgZW51bSByeHJwY19jbXNnX3R5cGUge1xuIFx0UlhSUENfVFhfTEVOR1RIXHRcdD0gMTIsXHQvKiAtcy06IFRvdGFsIGxlbmd0aCBvZiBUeCBkYXRhICovXG4gXHRSWFJQQ19TRVRfQ0FMTF9USU1FT1VUXHQ9IDEzLFx0LyogLXMtOiBTZXQgb25lIG9yIG1vcmUgY2FsbCB0aW1lb3V0cyAqL1xuIFx0UlhSUENfQ0hBUkdFX0FDQ0VQVFx0PSAxNCxcdC8qIFNzLTogQ2hhcmdlIHRoZSBhY2NlcHQgcG9vbCB3aXRoIGEgdXNlciBjYWxsIElEICovXG4tXHRSWFJQQ19PT0JfSURcdFx0PSAxNSxcdC8qIC1zcjogT09CIG1lc3NhZ2UgSUQgKi9cbi1cdFJYUlBDX0NIQUxMRU5HRURcdD0gMTYsXHQvKiBDLXI6IEluZm8gb24gYSByZWNlaXZlZCBDSEFMTEVOR0UgKi9cbi1cdFJYUlBDX1JFU1BPTkRcdFx0PSAxNyxcdC8qIENzLTogUmVzcG9uZCB0byBhIGNoYWxsZW5nZSAqL1xuLVx0UlhSUENfUkVTUE9OREVEXHRcdD0gMTgsXHQvKiBTLXI6IERhdGEgcmVjZWl2ZWQgaW4gUkVTUE9OU0UgKi9cbi1cdFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBXHQ9IDE5LFx0LyogQ3MtOiBSRVNQT05TRTogUnhHSyBhcHAgZGF0YSB0byBpbmNsdWRlICovXG4mIzQzO1x0UlhSUENfUkVTUE9OU0VfQVBQREFUQVx0PSAyMCxcdC8qIENzLTogVXNlciBrZXkgaG9sZGluZyBhcHAgZGF0YSBmb3IgUkVTUE9OU0UgKi9cbiBcdFJYUlBDX19TVVBQT1JURURcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcbmluZGV4IGMzYzhjMzI0MGVmOTQ2Li5hYTNjMDU4ZjQwOTU1OSAxMDA2NDRcbi0tLSBhL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xuQEAgLTIwOCw2ICYjNDM7MjA4LDcgQEAgZG5zX3Jlc29sdmVyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXG4gXHRcdGtsZWF2ZShcJiMzNDsgPSAtRU5PTUVNXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNnVwYXlsb2FkLVx1MDAzZXJlZiwgMSk7XG4gXG4gXHR1cGF5bG9hZC1cdTAwM2VkYXRhbGVuID0gcmVzdWx0X2xlbjtcbiBcdG1lbWNweSh1cGF5bG9hZC1cdTAwM2VkYXRhLCBkYXRhLCByZXN1bHRfbGVuKTtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvTWFrZWZpbGUgYi9uZXQvcnhycGMvTWFrZWZpbGVcbmluZGV4IGY5OTRmOWYzMGEyOWQ0Li5mN2E1ZTBhNTkyZWUxMyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL01ha2VmaWxlXG5AQCAtMjQsNyAmIzQzOzI0LDYgQEAgcnhycGMteSA6PSBcXFxuIFx0bG9jYWxfb2JqZWN0Lm8gXFxcbiBcdG1pc2MubyBcXFxuIFx0bmV0X25zLm8gXFxcbi1cdG9vYi5vIFxcXG4gXHRvdXRwdXQubyBcXFxuIFx0cGVlcl9ldmVudC5vIFxcXG4gXHRwZWVyX29iamVjdC5vIFxcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FmX3J4cnBjLmMgYi9uZXQvcnhycGMvYWZfcnhycGMuY1xuaW5kZXggOWFiMGYyMmM4ODFlYzUuLjlkNWNlMWM3YWQwZDIyIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2FmX3J4cnBjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9hZl9yeHJwYy5jXG5AQCAtMzE4LDYgJiM0MzszMTgsNyBAQCBFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9wdXRfcGVlcik7XG4gICogQHNvY2s6IFRoZSBzb2NrZXQgb24gd2hpY2ggdG8gbWFrZSB0aGUgY2FsbFxuICAqIEBwZWVyOiBUaGUgcGVlciB0byBjb250YWN0XG4gICogQGtleTogVGhlIHNlY3VyaXR5IGNvbnRleHQgdG8gdXNlIChkZWZhdWx0cyB0byBzb2NrZXQgc2V0dGluZylcbiYjNDM7ICogQGFwcF9kYXRhOiBUaGUgc2VjdXJpdHkgcmVzcG9uc2UgYXBwbGljYXRpb24gZGF0YSAob3IgTlVMTClcbiAgKiBAdXNlcl9jYWxsX0lEOiBUaGUgSUQgdG8gdXNlXG4gICogQHR4X3RvdGFsX2xlbjogVG90YWwgbGVuZ3RoIG9mIGRhdGEgdG8gdHJhbnNtaXQgZHVyaW5nIHRoZSBjYWxsIChvciAtMSlcbiAgKiBAaGFyZF90aW1lb3V0OiBUaGUgbWF4aW11bSBsaWZlc3BhbiBvZiB0aGUgY2FsbCBpbiBzZWNcbkBAIC0zNDAsNiAmIzQzOzM0MSw3IEBAIEVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3B1dF9wZWVyKTtcbiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBrZXkgKmtleSxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBrZXkgKmFwcF9kYXRhLFxuIFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCxcbiBcdFx0XHRcdFx0ICAgczY0IHR4X3RvdGFsX2xlbixcbiBcdFx0XHRcdFx0ICAgdTMyIGhhcmRfdGltZW91dCxcbkBAIC0zNjgsNiAmIzQzOzM3MCw3IEBAIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0XHRrZXkgPSBOVUxMOyAvKiBhIG5vLXNlY3VyaXR5IGtleSAqL1xuIFxuIFx0bWVtc2V0KFx1MDAyNnAsIDAsIHNpemVvZihwKSk7XG4mIzQzO1x0cC5hcHBfZGF0YVx0XHQ9IGFwcF9kYXRhO1xuIFx0cC51c2VyX2NhbGxfSURcdFx0PSB1c2VyX2NhbGxfSUQ7XG4gXHRwLnR4X3RvdGFsX2xlblx0XHQ9IHR4X3RvdGFsX2xlbjtcbiBcdHAuaW50ZXJydXB0aWJpbGl0eVx0PSBpbnRlcnJ1cHRpYmlsaXR5O1xuQEAgLTU5NSwxMCAmIzQzOzU5OCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuKVxuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGNhc2UgUlhSUENfU0VSVkVSX0JPVU5EOlxuIFx0Y2FzZSBSWFJQQ19TRVJWRVJfTElTVEVOSU5HOlxuLVx0XHRpZiAobS1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19PT0IpXG4tXHRcdFx0cmV0ID0gcnhycGNfc2VuZG1zZ19vb2IocngsIG0sIGxlbik7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSByeHJwY19kb19zZW5kbXNnKHJ4LCBtLCBsZW4pO1xuJiM0MztcdFx0cmV0ID0gcnhycGNfZG9fc2VuZG1zZyhyeCwgbSwgbGVuKTtcbiBcdFx0LyogVGhlIHNvY2tldCBoYXMgYmVlbiB1bmxvY2tlZCAqL1xuIFx0XHRnb3RvIG91dDtcbiBcdGRlZmF1bHQ6XG5AQCAtNjMzLDcgJiM0Mzs2MzMsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiB7XG4gXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbi1cdHVuc2lnbmVkIGludCBtaW5fc2VjX2xldmVsLCB2YWw7XG4mIzQzO1x0dW5zaWduZWQgaW50IG1pbl9zZWNfbGV2ZWw7XG4gXHR1MTYgc2VydmljZV91cGdyYWRlWzJdO1xuIFx0aW50IHJldDtcbiBcbkBAIC03MTAsMjMgJiM0Mzs3MTAsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcbiBcdFx0Y2FzZSBSWFJQQ19NQU5BR0VfUkVTUE9OU0U6XG4gXHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRpZiAob3B0bGVuICE9IHNpemVvZih1bnNpZ25lZCBpbnQpKVxuLVx0XHRcdFx0Z290byBlcnJvcjtcbi1cdFx0XHRyZXQgPSAtRUlTQ09OTjtcbi1cdFx0XHRpZiAocngtXHUwMDNlc2suc2tfc3RhdGUgIT0gUlhSUENfVU5CT1VORClcbi1cdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0cmV0ID0gY29weV9zYWZlX2Zyb21fc29ja3B0cihcdTAwMjZ2YWwsIHNpemVvZih2YWwpLFxuLVx0XHRcdFx0XHRcdCAgICAgb3B0dmFsLCBvcHRsZW4pO1xuLVx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRnb3RvIGVycm9yO1xuLVx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0aWYgKHZhbCBcdTAwM2UgMSlcbi1cdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0aWYgKHZhbClcbi1cdFx0XHRcdHNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRjbGVhcl9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRnb3RvIHN1Y2Nlc3M7XG4mIzQzO1x0XHRcdGdvdG8gZXJyb3I7XG4gXG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0YnJlYWs7XG5AQCAtODM1LDggJiM0Mzs4MTksNiBAQCBzdGF0aWMgaW50IHJ4cnBjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdHJ4LVx1MDAzZWNhbGxzID0gUkJfUk9PVDtcbiBcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnJ4LVx1MDAzZWluY29taW5nX2xvY2spO1xuLVx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpO1xuLVx0cngtXHUwMDNlcGVuZGluZ19vb2JxID0gUkJfUk9PVDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnJ4LVx1MDAzZXNvY2tfY2FsbHMpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cngtXHUwMDNldG9fYmVfYWNjZXB0ZWQpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKTtcbkBAIC04ODQsMjMgJiM0Mzs4NjYsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBmbGFncylcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qXG4tICogUHVyZ2UgdGhlIG91dC1vZi1iYW5kIHF1ZXVlLlxuLSAqL1xuLXN0YXRpYyB2b2lkIHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzdHJ1Y3Qgc29jayAqc2spXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc2spO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi1cbi1cdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkpXG4tXHRcdHJ4cnBjX2tlcm5lbF9mcmVlX29vYihza2IpO1xuLVx0d2hpbGUgKCFSQl9FTVBUWV9ST09UKFx1MDAyNnJ4LVx1MDAzZXBlbmRpbmdfb29icSkpIHtcbi1cdFx0c2tiID0gcmJfZW50cnkocngtXHUwMDNlcGVuZGluZ19vb2JxLnJiX25vZGUsIHN0cnVjdCBza19idWZmLCByYm5vZGUpO1xuLVx0XHRyYl9lcmFzZShcdTAwMjZza2ItXHUwMDNlcmJub2RlLCBcdTAwMjZyeC1cdTAwM2VwZW5kaW5nX29vYnEpO1xuLVx0XHRyeHJwY19rZXJuZWxfZnJlZV9vb2Ioc2tiKTtcbi1cdH1cbi19XG4tXG4gLypcbiAgKiBSeFJQQyBzb2NrZXQgZGVzdHJ1Y3RvclxuICAqL1xuQEAgLTkwOCw3ICYjNDM7ODczLDYgQEAgc3RhdGljIHZvaWQgcnhycGNfc29ja19kZXN0cnVjdG9yKHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRfZW50ZXIoXCYjMzQ7JXBcJiMzNDssIHNrKTtcbiBcbi1cdHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzayk7XG4gXHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbiBcbiBcdFdBUk5fT04ocmVmY291bnRfcmVhZChcdTAwMjZzay1cdTAwM2Vza193bWVtX2FsbG9jKSk7XG5AQCAtOTYxLDcgJiM0Mzs5MjUsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlbGVhc2Vfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4gXHRyeHJwY19kaXNjYXJkX3ByZWFsbG9jKHJ4KTtcbiBcdHJ4cnBjX3JlbGVhc2VfY2FsbHNfb25fc29ja2V0KHJ4KTtcbiBcdGZsdXNoX3dvcmtxdWV1ZShyeHJwY193b3JrcXVldWUpO1xuLVx0cnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTtcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuIFxuIFx0cnhycGNfdW51c2VfbG9jYWwocngtXHUwMDNlbG9jYWwsIHJ4cnBjX2xvY2FsX3VudXNlX3JlbGVhc2Vfc29jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmggYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxuaW5kZXggY2U5NDZiMGEwM2UyYjMuLjEwMWFjNzU0NDc1ODRkIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG5AQCAtMTcxLDkgJiM0MzsxNzEsNiBAQCBzdHJ1Y3QgcnhycGNfc29jayB7XG4gXHRjb25zdCBzdHJ1Y3QgcnhycGNfa2VybmVsX29wcyAqYXBwX29wcztcdC8qIFRhYmxlIG9mIGtlcm5lbCBhcHAgbm90aWZpY2F0aW9uIGZ1bmNzICovXG4gXHRzdHJ1Y3QgcnhycGNfbG9jYWxcdCpsb2NhbDtcdFx0LyogbG9jYWwgZW5kcG9pbnQgKi9cbiBcdHN0cnVjdCByeHJwY19iYWNrbG9nXHQqYmFja2xvZztcdC8qIFByZWFsbG9jYXRpb24gZm9yIHNlcnZpY2VzICovXG4tXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXHRyZWN2bXNnX29vYnE7XHQvKiBPT0IgbWVzc2FnZXMgZm9yIHJlY3Ztc2cgdG8gcGljayB1cCAqL1xuLVx0c3RydWN0IHJiX3Jvb3RcdFx0cGVuZGluZ19vb2JxO1x0LyogT09CIG1lc3NhZ2VzIGF3YWl0aW5nIHVzZXJzcGFjZSB0byByZXNwb25kIHRvICovXG4tXHR1NjRcdFx0XHRvb2JfaWRfY291bnRlcjtcdC8qIE9PQiBtZXNzYWdlIElEIGNvdW50ZXIgKi9cbiBcdHNwaW5sb2NrX3RcdFx0aW5jb21pbmdfbG9jaztcdC8qIEluY29taW5nIGNhbGwgdnMgc2VydmljZSBzaHV0ZG93biBsb2NrICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRzb2NrX2NhbGxzO1x0LyogTGlzdCBvZiBjYWxscyBvd25lZCBieSB0aGlzIHNvY2tldCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0dG9fYmVfYWNjZXB0ZWQ7XHQvKiBjYWxscyBhd2FpdGluZyBhY2NlcHRhbmNlICovXG5AQCAtMTg0LDcgJiM0MzsxODEsNiBAQCBzdHJ1Y3QgcnhycGNfc29jayB7XG4gXHRzdHJ1Y3QgcmJfcm9vdFx0XHRjYWxscztcdFx0LyogVXNlciBJRCAtXHUwMDNlIGNhbGwgbWFwcGluZyAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRmbGFncztcbiAjZGVmaW5lIFJYUlBDX1NPQ0tfQ09OTkVDVEVEXHRcdDBcdC8qIGNvbm5lY3Rfc3J4IGlzIHNldCAqL1xuLSNkZWZpbmUgUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0VcdDFcdC8qIFVzZXIgd2FudHMgdG8gbWFuYWdlIFJFU1BPTlNFIHBhY2tldHMgKi9cbiBcdHJ3bG9ja190XHRcdGNhbGxfbG9jaztcdC8qIGxvY2sgZm9yIGNhbGxzICovXG4gXHR1MzJcdFx0XHRtaW5fc2VjX2xldmVsO1x0LyogbWluaW11bSBzZWN1cml0eSBsZXZlbCAqL1xuICNkZWZpbmUgUlhSUENfU0VDVVJJVFlfTUFYXHRSWFJQQ19TRUNVUklUWV9FTkNSWVBUXG5AQCAtMjQxLDcgJiM0MzsyMzcsNiBAQCBzdHJ1Y3QgcnhycGNfc2tiX3ByaXYge1xuIFx0XHRcdHU4XHRcdHJlYXNvbjtcdFx0LyogUmVhc29uIGZvciBhY2sgKi9cbiBcdFx0fSBhY2s7XG4gXHRcdHN0cnVjdCB7XG4tXHRcdFx0c3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm47XHQvKiBDb25uZWN0aW9uIHJlZmVycmVkIHRvICovXG4gXHRcdFx0dW5pb24ge1xuIFx0XHRcdFx0dTMyIHJ4a2FkX25vbmNlO1xuIFx0XHRcdH07XG5AQCAtMzEwLDEzICYjNDM7MzA1LDYgQEAgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHtcbiBcdGJvb2wgKCp2YWxpZGF0ZV9jaGFsbGVuZ2UpKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4tXHQvKiBGaWxsIG91dCB0aGUgY21zZyBmb3IgcmVjdm1zZygpIHRvIHBhc3Mgb24gYSBjaGFsbGVuZ2UgdG8gdXNlcnNwYWNlLlxuLVx0ICogVGhlIHNlY3VyaXR5IGNsYXNzIGdldHMgdG8gYWRkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG4tXHQgKi9cbi1cdGludCAoKmNoYWxsZW5nZV90b19yZWN2bXNnKShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBtc2doZHIgKm1zZyk7XG4tXG4gXHQvKiBQYXJzZSBzZW5kbXNnKCkgY29udHJvbCBtZXNzYWdlIGFuZCByZXNwb25kIHRvIGNoYWxsZW5nZS4gKi9cbiBcdGludCAoKnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UpKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbXNnaGRyICptc2cpO1xuQEAgLTUxNiw2ICYjNDM7NTA0LDcgQEAgc3RydWN0IHJ4cnBjX2J1bmRsZSB7XG4gXHRzdHJ1Y3QgcnhycGNfbG9jYWxcdCpsb2NhbDtcdFx0LyogUmVwcmVzZW50YXRpb24gb2YgbG9jYWwgZW5kcG9pbnQgKi9cbiBcdHN0cnVjdCByeHJwY19wZWVyXHQqcGVlcjtcdFx0LyogUmVtb3RlIGVuZHBvaW50ICovXG4gXHRzdHJ1Y3Qga2V5XHRcdCprZXk7XHRcdC8qIFNlY3VyaXR5IGRldGFpbHMgKi9cbiYjNDM7XHRzdHJ1Y3Qga2V5XHRcdCphcHBfZGF0YTtcdC8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRwcm9jX2xpbms7XHQvKiBMaW5rIGluIG5ldC1cdTAwM2VidW5kbGVfcHJvY19saXN0ICovXG4gXHRjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5O1x0LyogYXBwbGllZCBzZWN1cml0eSBtb2R1bGUgKi9cbiBcdHJlZmNvdW50X3RcdFx0cmVmO1xuQEAgLTcxOSw2ICYjNDM7NzA4LDcgQEAgc3RydWN0IHJ4cnBjX2NhbGwge1xuIFx0c3RydWN0IHJ4cnBjX3NvY2sgX19yY3VcdCpzb2NrZXQ7XHQvKiBzb2NrZXQgcmVzcG9uc2libGUgKi9cbiBcdHN0cnVjdCByeHJwY19uZXRcdCpyeG5ldDtcdFx0LyogTmV0d29yayBuYW1lc3BhY2UgdG8gd2hpY2ggY2FsbCBiZWxvbmdzICovXG4gXHRzdHJ1Y3Qga2V5XHRcdCprZXk7XHRcdC8qIFNlY3VyaXR5IGRldGFpbHMgKi9cbiYjNDM7XHRzdHJ1Y3Qga2V5XHRcdCphcHBfZGF0YTtcdC8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovXG4gXHRjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5O1x0LyogYXBwbGllZCBzZWN1cml0eSBtb2R1bGUgKi9cbiBcdHN0cnVjdCBtdXRleFx0XHR1c2VyX211dGV4O1x0LyogVXNlciBhY2Nlc3MgbXV0ZXggKi9cbiBcdHN0cnVjdCBzb2NrYWRkcl9yeHJwY1x0ZGVzdF9zcng7XHQvKiBEZXN0aW5hdGlvbiBhZGRyZXNzICovXG5AQCAtOTEzLDYgJiM0Mzs5MDMsNyBAQCBlbnVtIHJ4cnBjX2NvbW1hbmQge1xuIH07XG4gXG4gc3RydWN0IHJ4cnBjX2NhbGxfcGFyYW1zIHtcbiYjNDM7XHRzdHJ1Y3Qga2V5XHRcdCphcHBfZGF0YTtcdC8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovXG4gXHRzNjRcdFx0XHR0eF90b3RhbF9sZW47XHQvKiBUb3RhbCBUeCBkYXRhIGxlbmd0aCAoaWYgc2VuZCBkYXRhKSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHR1c2VyX2NhbGxfSUQ7XHQvKiBVc2VyJiMzOTtzIGNhbGwgSUQgKi9cbiBcdHN0cnVjdCB7XG5AQCAtMTM3NSwxMyAmIzQzOzEzNjYsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCByeHJwY19uZXQgKnJ4cnBjX25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRyZXR1cm4gbmV0X2dlbmVyaWMobmV0LCByeHJwY19uZXRfaWQpO1xuIH1cbiBcbi0vKlxuLSAqIG9vYi5jXG4tICovXG4tYm9vbCByeHJwY19ub3RpZnlfc29ja2V0X29vYihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tdm9pZCByeHJwY19hZGRfcGVuZGluZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi1pbnQgcnhycGNfc2VuZG1zZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pO1xuLVxuIC8qXG4gICogb3V0cHV0LmNcbiAgKi9cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY2FsbF9vYmplY3QuYyBiL25ldC9yeHJwYy9jYWxsX29iamVjdC5jXG5pbmRleCA4MTdlZDlhY2I5MWU2MS4uMmRmM2QwMTkwYTg5MTggMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY2FsbF9vYmplY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmNcbkBAIC0xOTgsNyAmIzQzOzE5OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfYWxsb2NfY2xpZW50X2NhbGwoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0a3RpbWVfdCBub3c7XG4gXHRpbnQgcmV0O1xuIFxuLVx0X2VudGVyKFwmIzM0O1wmIzM0Oyk7XG4mIzQzO1x0X2VudGVyKFwmIzM0OyVwXCYjMzQ7LCBwLVx1MDAzZWFwcF9kYXRhKTtcbiBcbiBcdGNhbGwgPSByeHJwY19hbGxvY19jYWxsKHJ4LCBnZnAsIGRlYnVnX2lkKTtcbiBcdGlmICghY2FsbClcbkBAIC0yMTEsNiAmIzQzOzIxMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfYWxsb2NfY2xpZW50X2NhbGwoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0Y2FsbC1cdTAwM2VpbnRlcnJ1cHRpYmlsaXR5XHQ9IHAtXHUwMDNlaW50ZXJydXB0aWJpbGl0eTtcbiBcdGNhbGwtXHUwMDNldHhfdG90YWxfbGVuXHQ9IHAtXHUwMDNldHhfdG90YWxfbGVuO1xuIFx0Y2FsbC1cdTAwM2VrZXlcdFx0PSBrZXlfZ2V0KGNwLVx1MDAzZWtleSk7XG4mIzQzO1x0Y2FsbC1cdTAwM2VhcHBfZGF0YVx0XHQ9IGtleV9nZXQocC1cdTAwM2VhcHBfZGF0YSk7XG4gXHRjYWxsLVx1MDAzZXBlZXJcdFx0PSByeHJwY19nZXRfcGVlcihjcC1cdTAwM2VwZWVyLCByeHJwY19wZWVyX2dldF9jYWxsKTtcbiBcdGNhbGwtXHUwMDNlbG9jYWxcdFx0PSByeHJwY19nZXRfbG9jYWwoY3AtXHUwMDNlbG9jYWwsIHJ4cnBjX2xvY2FsX2dldF9jYWxsKTtcbiBcdGNhbGwtXHUwMDNlc2VjdXJpdHlfbGV2ZWxcdD0gY3AtXHUwMDNlc2VjdXJpdHlfbGV2ZWw7XG5AQCAtNjk3LDYgJiM0Mzs2OTgsNyBAQCBzdGF0aWMgdm9pZCByeHJwY19kZXN0cm95X2NhbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cnhycGNfcHV0X3BlZXIoY2FsbC1cdTAwM2VwZWVyLCByeHJwY19wZWVyX3B1dF9jYWxsKTtcbiBcdHJ4cnBjX3B1dF9sb2NhbChjYWxsLVx1MDAzZWxvY2FsLCByeHJwY19sb2NhbF9wdXRfY2FsbCk7XG4gXHRrZXlfcHV0KGNhbGwtXHUwMDNla2V5KTtcbiYjNDM7XHRrZXlfcHV0KGNhbGwtXHUwMDNlYXBwX2RhdGEpO1xuIFx0Y2FsbF9yY3UoXHUwMDI2Y2FsbC1cdTAwM2VyY3UsIHJ4cnBjX3JjdV9mcmVlX2NhbGwpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY29ubl9jbGllbnQuYyBiL25ldC9yeHJwYy9jb25uX2NsaWVudC5jXG5pbmRleCA0ODUxOWYwZGUxODUzOS4uNWNiZmE3YjIyM2UwMTEgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY29ubl9jbGllbnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2Nvbm5fY2xpZW50LmNcbkBAIC04MSw2ICYjNDM7ODEsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2J1bmRsZSAqcnhycGNfYWxsb2NfYnVuZGxlKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRidW5kbGUtXHUwMDNlbG9jYWxcdFx0PSBjYWxsLVx1MDAzZWxvY2FsO1xuIFx0XHRidW5kbGUtXHUwMDNlcGVlclx0XHQ9IHJ4cnBjX2dldF9wZWVyKGNhbGwtXHUwMDNlcGVlciwgcnhycGNfcGVlcl9nZXRfYnVuZGxlKTtcbiBcdFx0YnVuZGxlLVx1MDAzZWtleVx0XHQ9IGtleV9nZXQoY2FsbC1cdTAwM2VrZXkpO1xuJiM0MztcdFx0YnVuZGxlLVx1MDAzZWFwcF9kYXRhXHQ9IGtleV9nZXQoY2FsbC1cdTAwM2VhcHBfZGF0YSk7XG4gXHRcdGJ1bmRsZS1cdTAwM2VzZWN1cml0eVx0PSBjYWxsLVx1MDAzZXNlY3VyaXR5O1xuIFx0XHRidW5kbGUtXHUwMDNlZXhjbHVzaXZlXHQ9IHRlc3RfYml0KFJYUlBDX0NBTExfRVhDTFVTSVZFLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKTtcbiBcdFx0YnVuZGxlLVx1MDAzZXVwZ3JhZGVcdFx0PSB0ZXN0X2JpdChSWFJQQ19DQUxMX1VQR1JBREUsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpO1xuQEAgLTExOCw2ICYjNDM7MTE5LDcgQEAgc3RhdGljIHZvaWQgcnhycGNfZnJlZV9idW5kbGUoc3RydWN0IHJ4cnBjX2J1bmRsZSAqYnVuZGxlKVxuIFx0d3JpdGVfdW5sb2NrKFx1MDAyNmJ1bmRsZS1cdTAwM2Vsb2NhbC1cdTAwM2VyeG5ldC1cdTAwM2Vjb25uX2xvY2spO1xuIFx0cnhycGNfcHV0X3BlZXIoYnVuZGxlLVx1MDAzZXBlZXIsIHJ4cnBjX3BlZXJfcHV0X2J1bmRsZSk7XG4gXHRrZXlfcHV0KGJ1bmRsZS1cdTAwM2VrZXkpO1xuJiM0MztcdGtleV9wdXQoYnVuZGxlLVx1MDAzZWFwcF9kYXRhKTtcbiBcdGtmcmVlKGJ1bmRsZSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX2V2ZW50LmMgYi9uZXQvcnhycGMvY29ubl9ldmVudC5jXG5pbmRleCA2MTFjNzkwYmM2ZDBjZS4uOTE0NmI5ZDRjMmFjNTAgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY29ubl9ldmVudC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY29ubl9ldmVudC5jXG5AQCAtMjc5LDEwICYjNDM7Mjc5LDcgQEAgc3RhdGljIGludCByeHJwY19wcm9jZXNzX2V2ZW50KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFxuIFx0c3dpdGNoIChzcC1cdTAwM2VoZHIudHlwZSkge1xuIFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9DSEFMTEVOR0U6XG4tXHRcdHJldCA9IGNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlcmVzcG9uZF90b19jaGFsbGVuZ2UoY29ubiwgc2tiKTtcbi1cdFx0c3AtXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XG4tXHRcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VyZXNwb25kX3RvX2NoYWxsZW5nZShjb25uLCBza2IpO1xuIFxuIFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9SRVNQT05TRTpcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjb25uLVx1MDAzZXN0YXRlX2xvY2spO1xuQEAgLTQyNSw2NiAmIzQzOzQyMiw2IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRyeHJwY19xdWV1ZV9jb25uKGNvbm4sIHJ4cnBjX2Nvbm5fcXVldWVfcnhfd29yayk7XG4gfVxuIFxuLS8qXG4tICogUG9zdCBhIENIQUxMRU5HRSBwYWNrZXQgdG8gdGhlIHNvY2tldCBvZiBvbmUgb2YgYSBjb25uZWN0aW9uJiMzOTtzIGNhbGxzIHNvIHRoYXRcbi0gKiBpdCBjYW4gZ2V0IGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgcGFja2V0LCBwb3NzaWJseSBxdWVyeWluZ1xuLSAqIHVzZXJzcGFjZS5cbi0gKi9cbi1zdGF0aWMgYm9vbCByeHJwY19wb3N0X2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTtcbi1cdHN0cnVjdCByeHJwY19jYWxsICpjYWxsID0gTlVMTDtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbi1cdGJvb2wgcmVzcG9uZCA9IGZhbHNlLCBxdWV1ZWQgPSBmYWxzZTtcbi1cbi1cdHNwLVx1MDAzZWNoYWxsLmNvbm4gPVxuLVx0XHRyeHJwY19nZXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX2dldF9jaGFsbGVuZ2VfaW5wdXQpO1xuLVxuLVx0aWYgKCFjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZWNoYWxsZW5nZV90b19yZWN2bXNnKSB7XG4tXHRcdHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjb25uLVx1MDAzZWNoYW5uZWxzKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKGNvbm4tXHUwMDNlY2hhbm5lbHNbaV0uY2FsbCkge1xuLVx0XHRcdGNhbGwgPSBjb25uLVx1MDAzZWNoYW5uZWxzW2ldLmNhbGw7XG4tXHRcdFx0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cdTAwM2Vzb2NrZXQpO1xuLVx0XHRcdGlmICghcngpIHtcbi1cdFx0XHRcdGNhbGwgPSBOVUxMO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdHJlc3BvbmQgPSB0cnVlO1xuLVx0XHRcdGlmICh0ZXN0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXHUwMDI2cngtXHUwMDNlZmxhZ3MpKVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0Y2FsbCA9IE5VTEw7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdGlmICghcmVzcG9uZCkge1xuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTtcbi1cdFx0c3AtXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbi1cbi1cdGlmIChjYWxsKVxuLVx0XHRxdWV1ZWQgPSByeHJwY19ub3RpZnlfc29ja2V0X29vYihjYWxsLCBza2IpO1xuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRpZiAoY2FsbCBcdTAwMjZcdTAwMjYgIXF1ZXVlZCkge1xuLVx0XHRyeHJwY19wdXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQpO1xuLVx0XHRzcC1cdTAwM2VjaGFsbC5jb25uID0gTlVMTDtcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0fVxuLVxuLVx0aWYgKCFjYWxsKVxuLVx0XHRyeHJwY19wb3N0X3BhY2tldF90b19jb25uKGNvbm4sIHNrYik7XG4tXHRyZXR1cm4gdHJ1ZTtcbi19XG4tXG4gLypcbiAgKiBJbnB1dCBhIGNvbm5lY3Rpb24tbGV2ZWwgcGFja2V0LlxuICAqL1xuQEAgLTUxMyw3ICYjNDM7NDUwLDggQEAgYm9vbCByeHJwY19pbnB1dF9jb25uX3BhY2tldChzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0fVxuIFx0XHRpZiAoIWNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNldmFsaWRhdGVfY2hhbGxlbmdlKGNvbm4sIHNrYikpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHRyZXR1cm4gcnhycGNfcG9zdF9jaGFsbGVuZ2UoY29ubiwgc2tiKTtcbiYjNDM7XHRcdHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTtcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9SRVNQT05TRTpcbiBcdFx0aWYgKHJ4cnBjX2lzX2Nvbm5fYWJvcnRlZChjb25uKSkge1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9rZXkuYyBiL25ldC9yeHJwYy9rZXkuY1xuaW5kZXggYTBhYTc4ZDg5Mjg5N2YuLjJkZGRiZTNjYWQ1Y2ZjIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2tleS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMva2V5LmNcbkBAIC04OTMsMyAmIzQzOzg5MywzOSBAQCBzdGF0aWMgbG9uZyByeHJwY19yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSxcbiBcdF9sZWF2ZShcJiMzNDsgPSAlenVcJiMzNDssIHNpemUpO1xuIFx0cmV0dXJuIHNpemU7XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkgLSBRdWVyeSBwYXJhbWV0ZXJzIGZyb20gYW4gcnhycGMga2V5XG4mIzQzOyAqIEBrZXk6IFRoZSBrZXkgdG8gcXVlcnlcbiYjNDM7ICogQF9zZWN1cml0eV9pbmRleDogV2hlcmUgdG8gcmV0dXJuIHRoZSBzZWN1cml0eSBpbmRleFxuJiM0MzsgKiBAX2tyYjVfZW5jdHlwZTogV2hlcmUgdG8gcmV0dXJuIHRoZSBrcmI1IGVuY3J5cHRpb24gdHlwZSBpZiBhcHBsaWNhYmxlXG4mIzQzOyAqXG4mIzQzOyAqIFF1ZXJ5IGFuIHJ4cnBjIGF1dGhlbnRpY2F0aW9uIGtleSwgZXh0cmFjdGluZyB0aGUgc2VjdXJpdHkgaW5kZXggZnJvbSB0aGVcbiYjNDM7ICogZmlyc3QgdG9rZW4gdGhlcmVpbi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2tleShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHU4ICpfc2VjdXJpdHlfaW5kZXgsIHUzMiAqX2tyYjVfZW5jdHlwZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCByeHJwY19rZXlfdG9rZW4gKnRva2VuO1xuJiM0MztcbiYjNDM7XHR0b2tlbiA9IGtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF07XG4mIzQzO1x0aWYgKCF0b2tlbikge1xuJiM0MztcdFx0Kl9zZWN1cml0eV9pbmRleCA9IDA7XG4mIzQzO1x0XHQqX2tyYjVfZW5jdHlwZSA9IDA7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqX3NlY3VyaXR5X2luZGV4ID0gdG9rZW4tXHUwMDNlc2VjdXJpdHlfaW5kZXg7XG4mIzQzO1x0c3dpdGNoICh0b2tlbi1cdTAwM2VzZWN1cml0eV9pbmRleCkge1xuJiM0MztcdGNhc2UgUlhSUENfU0VDVVJJVFlfUlhLQUQ6XG4mIzQzO1x0XHQqX2tyYjVfZW5jdHlwZSA9IDA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxuJiM0MztcdFx0Kl9rcmI1X2VuY3R5cGUgPSB0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZWVuY3R5cGU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0V0FSTl9PTl9PTkNFKDEpO1xuJiM0MztcdFx0Kl9rcmI1X2VuY3R5cGUgPSAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3F1ZXJ5X2tleSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL29vYi5jIGIvbmV0L3J4cnBjL29vYi5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGM4MGVlMjQ4N2QwOTQxLi4wMDAwMDAwMDAwMDAwMFxuLS0tIGEvbmV0L3J4cnBjL29vYi5jXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSwzODcgJiM0MzswLDAgQEBcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuLS8qIE91dCBvZiBiYW5kIG1lc3NhZ2UgaGFuZGxpbmcgKGUuZy4gY2hhbGxlbmdlLXJlc3BvbnNlKVxuLSAqXG4tICogQ29weXJpZ2h0IChDKSAyMDI1IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pXG4tICovXG4tXG4tI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcJiMzNDs6IFwmIzM0OyBmbXRcbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY25ldC9hZl9yeHJwYy5oXHUwMDNlXG4tI2luY2x1ZGUgXCYjMzQ7YXItaW50ZXJuYWwuaFwmIzM0O1xuLVxuLWVudW0gcnhycGNfb29iX2NvbW1hbmQge1xuLVx0UlhSUENfT09CX0NNRF9VTlNFVCxcbi1cdFJYUlBDX09PQl9DTURfUkVTUE9ORCxcbi19IF9fbW9kZShieXRlKTtcbi1cbi1zdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyB7XG4tXHR1NjRcdFx0XHRvb2JfaWQ7XHRcdC8qIElEIG51bWJlciBvZiBtZXNzYWdlIGlmIHJlcGx5ICovXG4tXHRzMzJcdFx0XHRhYm9ydF9jb2RlO1xuLVx0ZW51bSByeHJwY19vb2JfY29tbWFuZFx0Y29tbWFuZDtcbi1cdGJvb2xcdFx0XHRoYXZlX29vYl9pZDoxO1xuLX07XG4tXG4tLypcbi0gKiBQb3N0IGFuIG91dC1vZi1iYW5kIG1lc3NhZ2UgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlXG4tICogYXNzb2NpYXRlZCB3aXRoIGEgcmVmZXJlbmNlIGNhbGwuXG4tICovXG4tYm9vbCByeHJwY19ub3RpZnlfc29ja2V0X29vYihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKHNrYik7XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcng7XG4tXHRzdHJ1Y3Qgc29jayAqc2s7XG4tXHRib29sIHF1ZXVlZCA9IGZhbHNlO1xuLVxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVxuLVx0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cdTAwM2Vzb2NrZXQpO1xuLVx0aWYgKHJ4KSB7XG4tXHRcdHNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4tXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbi1cbi1cdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlIFx1MDAzYyBSWFJQQ19DTE9TRSkge1xuLVx0XHRcdHNrYi1cdTAwM2Vza2JfbXN0YW1wX25zID0gcngtXHUwMDNlb29iX2lkX2NvdW50ZXImIzQzOyYjNDM7O1xuLVx0XHRcdHJ4cnBjX2dldF9za2Ioc2tiLCByeHJwY19za2JfZ2V0X3Bvc3Rfb29iKTtcbi1cdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEsIHNrYik7XG4tXHRcdFx0cXVldWVkID0gdHJ1ZTtcbi1cbi1cdFx0XHR0cmFjZV9yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwtXHUwMDNlZGVidWdfaWQsIHNwLVx1MDAzZWhkci5zZXJpYWwpO1xuLVx0XHRcdGlmIChyeC1cdTAwM2VhcHBfb3BzKVxuLVx0XHRcdFx0cngtXHUwMDNlYXBwX29wcy1cdTAwM2Vub3RpZnlfb29iKHNrLCBza2IpO1xuLVx0XHR9XG4tXG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuLVx0XHRpZiAocXVldWVkIFx1MDAyNlx1MDAyNiAhcngtXHUwMDNlYXBwX29wcyBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcbi1cdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbi1cdH1cbi1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0cmV0dXJuIHF1ZXVlZDtcbi19XG4tXG4tLypcbi0gKiBMb2NhdGUgdGhlIE9PQiBtZXNzYWdlIHRvIHJlc3BvbmQgdG8gYnkgaXRzIElELlxuLSAqL1xuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfZmluZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHU2NCBvb2JfaWQpXG4te1xuLVx0c3RydWN0IHJiX25vZGUgKnA7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLVxuLVx0cCA9IHJ4LVx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlO1xuLVx0d2hpbGUgKHApIHtcbi1cdFx0c2tiID0gcmJfZW50cnkocCwgc3RydWN0IHNrX2J1ZmYsIHJibm9kZSk7XG4tXG4tXHRcdGlmIChvb2JfaWQgXHUwMDNjIHNrYi1cdTAwM2Vza2JfbXN0YW1wX25zKVxuLVx0XHRcdHAgPSBwLVx1MDAzZXJiX2xlZnQ7XG4tXHRcdGVsc2UgaWYgKG9vYl9pZCBcdTAwM2Ugc2tiLVx1MDAzZXNrYl9tc3RhbXBfbnMpXG4tXHRcdFx0cCA9IHAtXHUwMDNlcmJfcmlnaHQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXR1cm4gc2tiO1xuLVx0fVxuLVxuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLVxuLS8qXG4tICogQWRkIGFuIE9PQiBtZXNzYWdlIGludG8gdGhlIHBlbmRpbmctcmVzcG9uc2Ugc2V0LiAgV2UgYWx3YXlzIGFzc2lnbiB0aGUgbmV4dFxuLSAqIHZhbHVlIGZyb20gYSA2NC1iaXQgY291bnRlciB0byB0aGUgb29iX2lkLCBzbyBqdXN0IGFzc3VtZSB3ZSYjMzk7cmUgYWx3YXlzIGdvaW5nXG4tICogdG8gYmUgb24gdGhlIHJpZ2h0LWhhbmQgZWRnZSBvZiB0aGUgdHJlZSBhbmQgdGhhdCB0aGUgY291bnRlciB3b24mIzM5O3Qgd3JhcC5cbi0gKiBUaGUgdHJlZSBpcyBhbHNvIGdpdmVuIGEgcmVmIHRvIHRoZSBtZXNzYWdlLlxuLSAqL1xuLXZvaWQgcnhycGNfYWRkX3BlbmRpbmdfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi17XG4tXHRzdHJ1Y3QgcmJfbm9kZSAqKnBwID0gXHUwMDI2cngtXHUwMDNlcGVuZGluZ19vb2JxLnJiX25vZGUsICpwID0gTlVMTDtcbi1cbi1cdHdoaWxlICgqcHApIHtcbi1cdFx0cCA9ICpwcDtcbi1cdFx0cHAgPSBcdTAwMjYoKnBwKS1cdTAwM2VyYl9yaWdodDtcbi1cdH1cbi1cbi1cdHJiX2xpbmtfbm9kZShcdTAwMjZza2ItXHUwMDNlcmJub2RlLCBwLCBwcCk7XG4tXHRyYl9pbnNlcnRfY29sb3IoXHUwMDI2c2tiLVx1MDAzZXJibm9kZSwgXHUwMDI2cngtXHUwMDNlcGVuZGluZ19vb2JxKTtcbi19XG4tXG4tLypcbi0gKiBFeHRyYWN0IGNvbnRyb2wgbWVzc2FnZXMgZnJvbSB0aGUgc2VuZG1zZygpIGNvbnRyb2wgYnVmZmVyLlxuLSAqL1xuLXN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19vb2JfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19vb2JfcGFyYW1zICpwKVxuLXtcbi1cdHN0cnVjdCBjbXNnaGRyICpjbXNnO1xuLVx0aW50IGxlbjtcbi1cbi1cdGlmIChtc2ctXHUwMDNlbXNnX2NvbnRyb2xsZW4gPT0gMClcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRmb3JfZWFjaF9jbXNnaGRyKGNtc2csIG1zZykge1xuLVx0XHRpZiAoIUNNU0dfT0sobXNnLCBjbXNnKSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdFx0bGVuID0gY21zZy1cdTAwM2VjbXNnX2xlbiAtIHNpemVvZihzdHJ1Y3QgY21zZ2hkcik7XG4tXHRcdF9kZWJ1ZyhcJiMzNDtDTVNHICVkLCAlZCwgJWRcJiMzNDssXG4tXHRcdCAgICAgICBjbXNnLVx1MDAzZWNtc2dfbGV2ZWwsIGNtc2ctXHUwMDNlY21zZ190eXBlLCBsZW4pO1xuLVxuLVx0XHRpZiAoY21zZy1cdTAwM2VjbXNnX2xldmVsICE9IFNPTF9SWFJQQylcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0c3dpdGNoIChjbXNnLVx1MDAzZWNtc2dfdHlwZSkge1xuLVx0XHRjYXNlIFJYUlBDX09PQl9JRDpcbi1cdFx0XHRpZiAobGVuICE9IHNpemVvZihwLVx1MDAzZW9vYl9pZCkgfHwgcC1cdTAwM2VoYXZlX29vYl9pZClcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdG1lbWNweShcdTAwMjZwLVx1MDAzZW9vYl9pZCwgQ01TR19EQVRBKGNtc2cpLCBzaXplb2YocC1cdTAwM2Vvb2JfaWQpKTtcbi1cdFx0XHRwLVx1MDAzZWhhdmVfb29iX2lkID0gdHJ1ZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBSWFJQQ19SRVNQT05EOlxuLVx0XHRcdGlmIChwLVx1MDAzZWNvbW1hbmQgIT0gUlhSUENfT09CX0NNRF9VTlNFVClcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdHAtXHUwMDNlY29tbWFuZCA9IFJYUlBDX09PQl9DTURfUkVTUE9ORDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBSWFJQQ19BQk9SVDpcbi1cdFx0XHRpZiAobGVuICE9IHNpemVvZihwLVx1MDAzZWFib3J0X2NvZGUpIHx8IHAtXHUwMDNlYWJvcnRfY29kZSlcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdG1lbWNweShcdTAwMjZwLVx1MDAzZWFib3J0X2NvZGUsIENNU0dfREFUQShjbXNnKSwgc2l6ZW9mKHAtXHUwMDNlYWJvcnRfY29kZSkpO1xuLVx0XHRcdGlmIChwLVx1MDAzZWFib3J0X2NvZGUgPT0gMClcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBOlxuLVx0XHRcdGlmIChwLVx1MDAzZWNvbW1hbmQgIT0gUlhSUENfT09CX0NNRF9SRVNQT05EKVxuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHN3aXRjaCAocC1cdTAwM2Vjb21tYW5kKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DTURfUkVTUE9ORDpcbi1cdFx0aWYgKCFwLVx1MDAzZWhhdmVfb29iX2lkKVxuLVx0XHRcdHJldHVybiAtRUJBRFNMVDtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi0vKlxuLSAqIEFsbG93IHVzZXJzcGFjZSB0byByZXNwb25kIHRvIGFuIE9PQiB1c2luZyBzZW5kbXNnKCkuXG4tICovXG4tc3RhdGljIGludCByeHJwY19yZXNwb25kX3RvX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4tXHRcdFx0XHRzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyAqcCxcbi1cdFx0XHRcdHN0cnVjdCBtc2doZHIgKm1zZylcbi17XG4tXHRzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubjtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3A7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLVx0aW50IHJldDtcbi1cbi1cdHNrYiA9IHJ4cnBjX2ZpbmRfcGVuZGluZ19vb2IocngsIHAtXHUwMDNlb29iX2lkKTtcbi1cdGlmIChza2IpXG4tXHRcdHJiX2VyYXNlKFx1MDAyNnNrYi1cdTAwM2VyYm5vZGUsIFx1MDAyNnJ4LVx1MDAzZXBlbmRpbmdfb29icSk7XG4tXHRyZWxlYXNlX3NvY2soXHUwMDI2cngtXHUwMDNlc2spO1xuLVx0aWYgKCFza2IpXG4tXHRcdHJldHVybiAtRUJBRFNMVDtcbi1cbi1cdHNwID0gcnhycGNfc2tiKHNrYik7XG4tXG4tXHRzd2l0Y2ggKHAtXHUwMDNlY29tbWFuZCkge1xuLVx0Y2FzZSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQ6XG4tXHRcdHJldCA9IC1FUFJPVE87XG4tXHRcdGlmIChza2ItXHUwMDNlbWFyayAhPSBSWFJQQ19PT0JfQ0hBTExFTkdFKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRjb25uID0gc3AtXHUwMDNlY2hhbGwuY29ubjtcbi1cdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4tXHRcdGlmICghY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VzZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAocC1cdTAwM2VhYm9ydF9jb2RlKSB7XG4tXHRcdFx0cnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBwLVx1MDAzZWFib3J0X2NvZGUsIC1FQ09OTkFCT1JURUQsXG4tXHRcdFx0XHRcdCByeHJwY19hYm9ydF9yZXNwb25zZV9zZW5kbXNnKTtcbi1cdFx0XHRyZXQgPSAwO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHJldCA9IGNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZShza2IsIG1zZyk7XG4tXHRcdH1cbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdHN3aXRjaCAoc2tiLVx1MDAzZW1hcmspIHtcbi1cdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcbi1cdFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtXHUwMDNlY2hhbGwuY29ubiwgcnhycGNfY29ubl9wdXRfb29iKTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXHRyeHJwY19mcmVlX3NrYihza2IsIHJ4cnBjX3NrYl9wdXRfb29iKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLS8qXG4tICogU2VuZCBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlIG9yIHJlc3BvbmQgdG8gYSByZWNlaXZlZCBvdXQtb2YtYmFuZCBtZXNzYWdlLlxuLSAqIC0gY2FsbGVyIGdpdmVzIHVzIHRoZSBzb2NrZXQgbG9ja1xuLSAqIC0gdGhlIHNvY2tldCBtYXkgYmUgZWl0aGVyIGEgY2xpZW50IHNvY2tldCBvciBhIHNlcnZlciBzb2NrZXRcbi0gKi9cbi1pbnQgcnhycGNfc2VuZG1zZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4te1xuLVx0c3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgcCA9IHt9O1xuLVx0aW50IHJldDtcbi1cbi1cdF9lbnRlcihcJiMzNDtcJiMzNDspO1xuLVxuLVx0cmV0ID0gcnhycGNfc2VuZG1zZ19vb2JfY21zZyhtc2csIFx1MDAyNnApO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJvcl9yZWxlYXNlX3NvY2s7XG4tXG4tXHRpZiAocC5oYXZlX29vYl9pZClcbi1cdFx0cmV0dXJuIHJ4cnBjX3Jlc3BvbmRfdG9fb29iKHJ4LCBcdTAwMjZwLCBtc2cpO1xuLVxuLVx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbi1cbi1cdHN3aXRjaCAocC5jb21tYW5kKSB7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbi1cdHJldHVybiByZXQ7XG4tXG4tZXJyb3JfcmVsZWFzZV9zb2NrOlxuLVx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLS8qKlxuLSAqIHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2IgLSBRdWVyeSB0aGUgcGFyYW1ldGVycyBvZiBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlXG4tICogQG9vYjogVGhlIG1lc3NhZ2UgdG8gcXVlcnlcbi0gKiBAX3BlZXI6IFdoZXJlIHRvIHJldHVybiB0aGUgcGVlciByZWNvcmRcbi0gKiBAX3BlZXJfYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgYXR0YWNoZWQgdG8gYSBwZWVyIHJlY29yZFxuLSAqXG4tICogRXh0cmFjdCB1c2VmdWwgcGFyYW1ldGVycyBmcm9tIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2UuICBUaGUgc291cmNlIHBlZXJcbi0gKiBwYXJhbWV0ZXJzIGFyZSByZXR1cm5lZCB0aHJvdWdoIHRoZSBhcmd1bWVudCBsaXN0IGFuZCB0aGUgbWVzc2FnZSB0eXBlIGlzXG4tICogcmV0dXJuZWQuXG4tICpcbi0gKiBSZXR1cm46XG4tICogKiAlUlhSUENfT09CX0NIQUxMRU5HRSAtIENoYWxsZW5nZSB3YW50aW5nIGEgcmVzcG9uc2UuXG4tICovXG4tZW51bSByeHJwY19vb2JfdHlwZSByeHJwY19rZXJuZWxfcXVlcnlfb29iKHN0cnVjdCBza19idWZmICpvb2IsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXG4tXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihvb2IpO1xuLVx0ZW51bSByeHJwY19vb2JfdHlwZSB0eXBlID0gb29iLVx1MDAzZW1hcms7XG4tXG4tXHRzd2l0Y2ggKHR5cGUpIHtcbi1cdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcbi1cdFx0Kl9wZWVyXHRcdD0gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VwZWVyO1xuLVx0XHQqX3BlZXJfYXBwZGF0YVx0PSBzcC1cdTAwM2VjaGFsbC5jb25uLVx1MDAzZXBlZXItXHUwMDNlYXBwX2RhdGE7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0V0FSTl9PTl9PTkNFKDEpO1xuLVx0XHQqX3BlZXJcdFx0PSBOVUxMO1xuLVx0XHQqX3BlZXJfYXBwZGF0YVx0PSAwO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdHJldHVybiB0eXBlO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2IpO1xuLVxuLS8qKlxuLSAqIHJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYiAtIERlcXVldWUgYW5kIHJldHVybiB0aGUgZnJvbnQgT09CIG1lc3NhZ2Vcbi0gKiBAc29jazogVGhlIHNvY2tldCB0byBxdWVyeVxuLSAqIEBfdHlwZTogV2hlcmUgdG8gcmV0dXJuIHRoZSBtZXNzYWdlIHR5cGVcbi0gKlxuLSAqIERlcXVldWUgdGhlIGZyb250IE9PQiBtZXNzYWdlLCBpZiB0aGVyZSBpcyBvbmUsIGFuZCByZXR1cm4gaXQgYW5kXG4tICogaXRzIHR5cGUuXG4tICpcbi0gKiBSZXR1cm46IFRoZSBza19idWZmIHJlcHJlc2VudGluZyB0aGUgT09CIG1lc3NhZ2Ugb3IgJU5VTEwgaWYgdGhlIHF1ZXVlIHdhc1xuLSAqIGVtcHR5LlxuLSAqL1xuLXN0cnVjdCBza19idWZmICpyeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2Ioc3RydWN0IHNvY2tldCAqc29jayxcbi1cdFx0XHRcdFx0IGVudW0gcnhycGNfb29iX3R5cGUgKl90eXBlKVxuLXtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stXHUwMDNlc2spO1xuLVx0c3RydWN0IHNrX2J1ZmYgKm9vYjtcbi1cbi1cdG9vYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSk7XG4tXHRpZiAob29iKVxuLVx0XHQqX3R5cGUgPSBvb2ItXHUwMDNlbWFyaztcbi1cdHJldHVybiBvb2I7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX2RlcXVldWVfb29iKTtcbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfZnJlZV9vb2IgLSBGcmVlIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2Vcbi0gKiBAb29iOiBUaGUgT09CIG1lc3NhZ2UgdG8gZnJlZVxuLSAqXG4tICogRnJlZSBhbiBPT0IgbWVzc2FnZSBhbG9uZyB3aXRoIGFueSByZXNvdXJjZXMgaXQgaG9sZHMuXG4tICovXG4tdm9pZCByeHJwY19rZXJuZWxfZnJlZV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYilcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKG9vYik7XG4tXG4tXHRzd2l0Y2ggKG9vYi1cdTAwM2VtYXJrKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XG4tXHRcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKHNwLVx1MDAzZWNoYWxsLmNvbm4sIHJ4cnBjX2Nvbm5fcHV0X29vYik7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0cnhycGNfZnJlZV9za2Iob29iLCByeHJwY19za2JfcHV0X3B1cmdlX29vYik7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX2ZyZWVfb29iKTtcbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlIC0gUXVlcnkgdGhlIHBhcmFtZXRlcnMgb2YgYSBjaGFsbGVuZ2Vcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHF1ZXJ5XG4tICogQF9wZWVyOiBXaGVyZSB0byByZXR1cm4gdGhlIHBlZXIgcmVjb3JkXG4tICogQF9wZWVyX2FwcGRhdGE6IFRoZSBhcHBsaWNhdGlvbiBkYXRhIGF0dGFjaGVkIHRvIGEgcGVlciByZWNvcmRcbi0gKiBAX3NlcnZpY2VfaWQ6IFdoZXJlIHRvIHJldHVybiB0aGUgY29ubmVjdGlvbiBzZXJ2aWNlIElEXG4tICogQF9zZWN1cml0eV9pbmRleDogV2hlcmUgdG8gcmV0dXJuIHRoZSBjb25uZWN0aW9uIHNlY3VyaXR5IGluZGV4XG4tICpcbi0gKiBFeHRyYWN0IHVzZWZ1bCBwYXJhbWV0ZXJzIGZyb20gYSBDSEFMTEVOR0UgbWVzc2FnZS5cbi0gKi9cbi12b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgc3RydWN0IHJ4cnBjX3BlZXIgKipfcGVlcixcbi1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyAqX3BlZXJfYXBwZGF0YSxcbi1cdFx0XHRcdCAgdTE2ICpfc2VydmljZV9pZCwgdTggKl9zZWN1cml0eV9pbmRleClcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XG4tXG4tXHQqX3BlZXJcdFx0PSBzcC1cdTAwM2VjaGFsbC5jb25uLVx1MDAzZXBlZXI7XG4tXHQqX3BlZXJfYXBwZGF0YVx0PSBzcC1cdTAwM2VjaGFsbC5jb25uLVx1MDAzZXBlZXItXHUwMDNlYXBwX2RhdGE7XG4tXHQqX3NlcnZpY2VfaWRcdD0gc3AtXHUwMDNlaGRyLnNlcnZpY2VJZDtcbi1cdCpfc2VjdXJpdHlfaW5kZXggPSBzcC1cdTAwM2VoZHIuc2VjdXJpdHlJbmRleDtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKTtcbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZSAtIEFsbG93IGEga2VybmVsIHNlcnZpY2UgdG8gcmVqZWN0IGEgY2hhbGxlbmdlXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byBiZSByZWplY3RlZFxuLSAqIEBhYm9ydF9jb2RlOiBUaGUgYWJvcnQgY29kZSB0byBzdGljayBpbnRvIHRoZSBBQk9SVCBwYWNrZXRcbi0gKiBAZXJyb3I6IExvY2FsIGVycm9yIHZhbHVlXG4tICogQHdoeTogSW5kaWNhdGlvbiBhcyB0byB3aHkuXG4tICpcbi0gKiBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHJlamVjdCBhIGNoYWxsZW5nZSBieSBhYm9ydGluZyB0aGUgY29ubmVjdGlvbiBpZlxuLSAqIGl0JiMzOTtzIHN0aWxsIGluIGFuIGFib3J0YWJsZSBzdGF0ZS4gIFRoZSBlcnJvciBpcyByZXR1cm5lZCBzbyB0aGlzIGZ1bmN0aW9uXG4tICogY2FuIGJlIHVzZWQgd2l0aCBhIHJldHVybiBzdGF0ZW1lbnQuXG4tICpcbi0gKiBSZXR1cm46IFRoZSAlZXJyb3IgcGFyYW1ldGVyLlxuLSAqL1xuLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSxcbi1cdFx0XHRcdCAgaW50IGVycm9yLCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0X2VudGVyKFwmIzM0O3sleH0sJWQsJWQsJXVcJiMzNDssIHNwLVx1MDAzZWhkci5zZXJpYWwsIGFib3J0X2NvZGUsIGVycm9yLCB3aHkpO1xuLVxuLVx0cnhycGNfYWJvcnRfY29ubihzcC1cdTAwM2VjaGFsbC5jb25uLCBOVUxMLCBhYm9ydF9jb2RlLCBlcnJvciwgd2h5KTtcbi1cdHJldHVybiBlcnJvcjtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3JlY3Ztc2cuYyBiL25ldC9yeHJwYy9yZWN2bXNnLmNcbmluZGV4IGVmY2JhNGIyZTc0ZjBjLi4yODU5YTgwZTE4NzY2MyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yZWN2bXNnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9yZWN2bXNnLmNcbkBAIC0yMTUsNjEgJiM0MzsyMTUsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfdXNlcl9pZChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IG1zZ2hkciAqbXNnLFxuIFx0fVxuIH1cbiBcbi0vKlxuLSAqIERlYWwgd2l0aCBhIENIQUxMRU5HRSBwYWNrZXQuXG4tICovXG4tc3RhdGljIGludCByeHJwY19yZWN2bXNnX2NoYWxsZW5nZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVx0c3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4gPSBzcC1cdTAwM2VjaGFsbC5jb25uO1xuLVxuLVx0cmV0dXJuIGNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlY2hhbGxlbmdlX3RvX3JlY3Ztc2coY29ubiwgY2hhbGxlbmdlLCBtc2cpO1xuLX1cbi1cbi0vKlxuLSAqIFByb2Nlc3MgT09CIHBhY2tldHMuICBDYWxsZWQgd2l0aCB0aGUgc29ja2V0IGxvY2tlZC5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi1cdFx0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncylcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXHRib29sIG5lZWRfcmVzcG9uc2UgPSBmYWxzZTtcbi1cdGludCByZXQ7XG4tXG4tXHRza2IgPSBza2JfcGVlayhcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpO1xuLVx0aWYgKCFza2IpXG4tXHRcdHJldHVybiAtRUFHQUlOO1xuLVx0cnhycGNfc2VlX3NrYihza2IsIHJ4cnBjX3NrYl9zZWVfcmVjdm1zZyk7XG4tXG4tXHRyZXQgPSBwdXRfY21zZyhtc2csIFNPTF9SWFJQQywgUlhSUENfT09CX0lELCBzaXplb2YodTY0KSxcbi1cdFx0ICAgICAgIFx1MDAyNnNrYi1cdTAwM2Vza2JfbXN0YW1wX25zKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHRzd2l0Y2ggKChlbnVtIHJ4cnBjX29vYl90eXBlKXNrYi1cdTAwM2VtYXJrKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XG4tXHRcdG5lZWRfcmVzcG9uc2UgPSB0cnVlO1xuLVx0XHRyZXQgPSByeHJwY19yZWN2bXNnX2NoYWxsZW5nZShzb2NrLCBtc2csIHNrYiwgZmxhZ3MpO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdFdBUk5fT05DRSgxLCBcJiMzNDtyZWN2bXNnKCkgY2FuJiMzOTt0IHByb2Nlc3MgdW5rbm93biBPT0IgdHlwZSAldVxcblwmIzM0Oyxcbi1cdFx0XHQgIHNrYi1cdTAwM2VtYXJrKTtcbi1cdFx0cmV0ID0gLUVJTztcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHRpZiAoIShmbGFncyBcdTAwMjYgTVNHX1BFRUspKSB7XG4tXHRcdHNrYl91bmxpbmsoc2tiLCBcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpO1xuLVx0XHRpZiAobmVlZF9yZXNwb25zZSlcbi1cdFx0XHRyeHJwY19hZGRfcGVuZGluZ19vb2IocngsIHNrYik7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyeHJwY19mcmVlX3NrYihza2IsIHJ4cnBjX3NrYl9wdXRfb29iKTtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuIC8qXG4gICogRGVsaXZlciBtZXNzYWdlcyB0byBhIGNhbGwuICBUaGlzIGtlZXBzIHByb2Nlc3NpbmcgcGFja2V0cyB1bnRpbCB0aGUgYnVmZmVyXG4gICogaXMgZmlsbGVkIGFuZCB3ZSBmaW5kIGVpdGhlciBtb3JlIERBVEEgKHJldHVybnMgMCkgb3IgdGhlIGVuZCBvZiB0aGUgREFUQVxuQEAgLTI4MSw3ICYjNDM7MjI2LDYgQEAgc3RhdGljIGludCByeHJwY19yZWN2bXNnX2RhdGEoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG4gXHRcdFx0ICAgICAgc2l6ZV90IGxlbiwgaW50IGZsYWdzLCBzaXplX3QgKl9vZmZzZXQpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcDtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stXHUwMDNlc2spO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHJ4cnBjX3NlcV90IHNlcSA9IDA7XG4gXHRzaXplX3QgcmVtYWluO1xuQEAgLTM3NiwxMyAmIzQzOzMyMCw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFxuIFx0XHRpZiAoIShmbGFncyBcdTAwMjYgTVNHX1BFRUspKVxuIFx0XHRcdHJ4cnBjX3JvdGF0ZV9yeF93aW5kb3coY2FsbCk7XG4tXG4tXHRcdGlmICghcngtXHUwMDNlYXBwX29wcyBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuLVx0XHRcdHRyYWNlX3J4cnBjX3JlY3ZkYXRhKGNhbGwsIHJ4cnBjX3JlY3Ztc2dfb29icSwgc2VxLFxuLVx0XHRcdFx0XHQgICAgIHJ4X3BrdF9vZmZzZXQsIHJ4X3BrdF9sZW4sIHJldCk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiBcdH1cbiBcbiBvdXQ6XG5AQCAtNDE5LDcgJiM0MzszNTYsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXG4gXHR0cmFjZV9yeHJwY19yZWN2bXNnKDAsIHJ4cnBjX3JlY3Ztc2dfZW50ZXIsIDApO1xuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoTVNHX09PQiB8IE1TR19UUlVOQykpXG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBNU0dfVFJVTkMpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhcdTAwMjZyeC1cdTAwM2VzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG5AQCAtNDMwLDE0ICYjNDM7MzY3LDEyIEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdC8qIFJldHVybiBpbW1lZGlhdGVseSBpZiBhIGNsaWVudCBzb2NrZXQgaGFzIG5vIG91dHN0YW5kaW5nIGNhbGxzICovXG4gXHRpZiAoUkJfRU1QVFlfUk9PVChcdTAwMjZyeC1cdTAwM2VjYWxscykgXHUwMDI2XHUwMDI2XG4gXHQgICAgbGlzdF9lbXB0eShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHJ4LVx1MDAzZXNrLnNrX3N0YXRlICE9IFJYUlBDX1NFUlZFUl9MSVNURU5JTkcpIHtcbiBcdFx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpKSB7XG4mIzQzO1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKSkge1xuIFx0XHRyZXQgPSAtRVdPVUxEQkxPQ0s7XG4gXHRcdGlmICh0aW1lbyA9PSAwKSB7XG4gXHRcdFx0Y2FsbCA9IE5VTEw7XG5AQCAtNDUzLDggJiM0MzszODgsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byB3YWl0X2Vycm9yO1xuIFxuLVx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpIHtcbiYjNDM7XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSkpIHtcbiBcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gXHRcdFx0XHRnb3RvIHdhaXRfaW50ZXJydXB0ZWQ7XG4gXHRcdFx0dHJhY2VfcnhycGNfcmVjdm1zZygwLCByeHJwY19yZWN2bXNnX3dhaXQsIDApO1xuQEAgLTQ2NCwxNSAmIzQzOzM5OCw2IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0Z290byB0cnlfYWdhaW47XG4gXHR9XG4gXG4tXHQvKiBEZWFsIHdpdGggT09CIG1lc3NhZ2VzIGJlZm9yZSB3ZSBjb25zaWRlciBnZXR0aW5nIG5vcm1hbCBkYXRhLiAqL1xuLVx0aWYgKCFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuLVx0XHRyZXQgPSByeHJwY19yZWN2bXNnX29vYihzb2NrLCBtc2csIGZsYWdzKTtcbi1cdFx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbi1cdFx0aWYgKHJldCA9PSAtRUFHQUlOKVxuLVx0XHRcdGdvdG8gdHJ5X2FnYWluO1xuLVx0XHRnb3RvIGVycm9yX3RyYWNlO1xuLVx0fVxuLVxuIFx0LyogRmluZCB0aGUgbmV4dCBjYWxsIGFuZCBkZXF1ZXVlIGl0IGlmIHdlJiMzOTtyZSBub3QganVzdCBwZWVraW5nLiAgSWYgd2VcbiBcdCAqIGRvIGRlcXVldWUgaXQsIHRoYXQgY29tZXMgd2l0aCBhIHJlZiB0aGF0IHdlIHdpbGwgbmVlZCB0byByZWxlYXNlLlxuIFx0ICogV2UgYWxzbyB3YW50IHRvIHdlZWQgb3V0IGNhbGxzIHRoYXQgZ290IHJlcXVldWVkIHdoaWxzdCB3ZSB3ZXJlXG5AQCAtNDgzLDggJiM0Mzs0MDgsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRjYWxsID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgcnhycGNfY2FsbCwgcmVjdm1zZ19saW5rKTtcbiBcbiBcdGlmICghcnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2JfcXVldWVfZW1wdHkoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX3F1ZXVlKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2JfcXVldWVfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuJiM0MztcdCAgICBza2JfcXVldWVfZW1wdHkoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX3F1ZXVlKSkge1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rKTtcbiBcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4gXHRcdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmNcbmluZGV4IDc3YTY3YWNlMWQyNDgxLi45YWI3NjZkNWYwYjZjOCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yeGdrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9yeGdrLmNcbkBAIC0xMSw2ICYjNDM7MTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2V5LXR5cGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NrZXlzL3VzZXItdHlwZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7YXItaW50ZXJuYWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3J4Z2tfY29tbW9uLmhcJiMzNDtcbiBcbkBAIC03MzQsMzcgJiM0Mzs3MzUsNiBAQCBzdGF0aWMgYm9vbCByeGdrX3ZhbGlkYXRlX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi0vKipcbi0gKiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UgLSBRdWVyeSBSeEdLLXNwZWNpZmljIGNoYWxsZW5nZSBwYXJhbWV0ZXJzXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSBwYWNrZXQgdG8gcXVlcnlcbi0gKlxuLSAqIFJldHVybjogVGhlIEtlcmJlcm9zIDUgZW5jb2RpbmcgdHlwZSBmb3IgdGhlIGNoYWxsZW5nZWQgY29ubmVjdGlvbi5cbi0gKi9cbi11MzIgcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0cmV0dXJuIHNwLVx1MDAzZWNoYWxsLmNvbm4tXHUwMDNlcnhnay5lbmN0eXBlO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSk7XG4tXG4tLypcbi0gKiBGaWxsIG91dCB0aGUgY29udHJvbCBtZXNzYWdlIHRvIHBhc3MgdG8gdXNlcnNwYWNlIHRvIGluZm9ybSBhYm91dCB0aGVcbi0gKiBjaGFsbGVuZ2UuXG4tICovXG4tc3RhdGljIGludCByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpXG4te1xuLVx0c3RydWN0IHJ4Z2tfY2hhbGxlbmdlIGNoYWxsO1xuLVxuLVx0Y2hhbGwuYmFzZS5zZXJ2aWNlX2lkXHRcdD0gY29ubi1cdTAwM2VzZXJ2aWNlX2lkO1xuLVx0Y2hhbGwuYmFzZS5zZWN1cml0eV9pbmRleFx0PSBjb25uLVx1MDAzZXNlY3VyaXR5X2l4O1xuLVx0Y2hhbGwuZW5jdHlwZVx0XHRcdD0gY29ubi1cdTAwM2VyeGdrLmVuY3R5cGU7XG4tXG4tXHRyZXR1cm4gcHV0X2Ntc2cobXNnLCBTT0xfUlhSUEMsIFJYUlBDX0NIQUxMRU5HRUQsIHNpemVvZihjaGFsbCksIFx1MDAyNmNoYWxsKTtcbi19XG4tXG4gLypcbiAgKiBJbnNlcnQgdGhlIHJlcXVpc2l0ZSBhbW91bnQgb2YgWERSIHBhZGRpbmcgZm9yIHRoZSBsZW5ndGggZ2l2ZW4uXG4gICovXG5AQCAtODM3LDcgJiM0Mzs4MDcsNyBAQCBzdGF0aWMgbm9pbmxpbmUgc3NpemVfdCByeGdrX2luc2VydF9yZXNwb25zZV9oZWFkZXIoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvblxuICAqL1xuIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhLFxuJiM0MztcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICphcHBkYXRhLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3BvbnNlLFxuIFx0XHRcdFx0XHQgICAgc2l6ZV90IG9mZnNldClcbiB7XG5AQCAtODU5LDIwICYjNDM7ODI5LDIwIEBAIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVQUk9UTztcbiBcbi1cdGEuYXBwZGF0YV9sZW4gPSBodG9ubChhcHBkYXRhLVx1MDAzZWxlbik7XG4mIzQzO1x0YS5hcHBkYXRhX2xlbiA9IGh0b25sKGFwcGRhdGEtXHUwMDNlZGF0YWxlbik7XG4gXG4gXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBcdTAwMjZhLCBzaXplb2YoYSkpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdG9mZnNldCAmIzQzOz0gc2l6ZW9mKGEpO1xuIFxuLVx0aWYgKGFwcGRhdGEtXHUwMDNlbGVuKSB7XG4tXHRcdHJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIGFwcGRhdGEtXHUwMDNlZGF0YSwgYXBwZGF0YS1cdTAwM2VsZW4pO1xuJiM0MztcdGlmIChhcHBkYXRhLVx1MDAzZWRhdGFsZW4pIHtcbiYjNDM7XHRcdHJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIGFwcGRhdGEtXHUwMDNlZGF0YSwgYXBwZGF0YS1cdTAwM2VkYXRhbGVuKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRvZmZzZXQgJiM0Mzs9IGFwcGRhdGEtXHUwMDNlbGVuO1xuJiM0MztcdFx0b2Zmc2V0ICYjNDM7PSBhcHBkYXRhLVx1MDAzZWRhdGFsZW47XG4gXG4tXHRcdHJldCA9IHJ4Z2tfcGFkX291dChyZXNwb25zZSwgYXBwZGF0YS1cdTAwM2VsZW4sIG9mZnNldCk7XG4mIzQzO1x0XHRyZXQgPSByeGdrX3BhZF9vdXQocmVzcG9uc2UsIGFwcGRhdGEtXHUwMDNlZGF0YWxlbiwgb2Zmc2V0KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRvZmZzZXQgJiM0Mzs9IHJldDtcbkBAIC04OTAsNyAmIzQzOzg2MCw3IEBAIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBcdTAwMjZiLCBzaXplb2YoYikpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbi1cdHJldHVybiBzaXplb2YoYSkgJiM0MzsgeGRyX3JvdW5kX3VwKGFwcGRhdGEtXHUwMDNlbGVuKSAmIzQzOyBzaXplb2YoYik7XG4mIzQzO1x0cmV0dXJuIHNpemVvZihhKSAmIzQzOyB4ZHJfcm91bmRfdXAoYXBwZGF0YS1cdTAwM2VkYXRhbGVuKSAmIzQzOyBzaXplb2YoYik7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfZW5jcnlwdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuQEAgLTkyMyw3ICYjNDM7ODkzLDcgQEAgc3RhdGljIHNzaXplX3Qgcnhna19lbmNyeXB0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gICovXG4gc3RhdGljIGludCByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKmFwcGRhdGEpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AsICpyc3A7XG4gXHRzdHJ1Y3Qgcnhna19jb250ZXh0ICpnaztcbkBAIC05MzYsNyAmIzQzOzkwNiw3IEBAIHN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRpZiAoSVNfRVJSKGdrKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZ2spO1xuIFxuLVx0YXV0aF9sZW4gPSAyMCAmIzQzOyAoNCAmIzQzOyBhcHBkYXRhLVx1MDAzZWxlbikgJiM0MzsgMTIgJiM0MzsgKDEgJiM0MzsgNCkgKiA0O1xuJiM0MztcdGF1dGhfbGVuID0gMjAgJiM0MzsgKDQgJiM0MzsgYXBwZGF0YS1cdTAwM2VkYXRhbGVuKSAmIzQzOyAxMiAmIzQzOyAoMSAmIzQzOyA0KSAqIDQ7XG4gXHRhdXRoeF9sZW4gPSBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIoZ2stXHUwMDNla3JiNSwgS1JCNV9FTkNSWVBUX01PREUsXG4gXHRcdFx0XHRcdFx0YXV0aF9sZW4sIFx1MDAyNmF1dGhfb2Zmc2V0KTtcbiBcdGxlbiA9IHNpemVvZihzdHJ1Y3QgcnhycGNfd2lyZV9oZWFkZXIpICYjNDM7XG5AQCAtMTAxMSw2NiAmIzQzOzk4MSwzNiBAQCBzdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuICAqIFJlc3BvbmQgdG8gYSBjaGFsbGVuZ2UgcGFja2V0LlxuICAqL1xuIHN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhKVxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcbiB7XG4tXHRfZW50ZXIoXCYjMzQ7eyVkLCV4fVwmIzM0OywgY29ubi1cdTAwM2VkZWJ1Z19pZCwga2V5X3NlcmlhbChjb25uLVx1MDAzZWtleSkpO1xuJiM0MztcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIGR1bW15ID0ge30sICphcHBkYXRhID0gXHUwMDI2ZHVtbXk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0X2VudGVyKFwmIzM0O3slZCwldSwleCwleH1cJiMzNDssXG4mIzQzO1x0ICAgICAgIGNvbm4tXHUwMDNlZGVidWdfaWQsIGNvbm4tXHUwMDNlc2VydmljZV9pZCxcbiYjNDM7XHQgICAgICAga2V5X3NlcmlhbChjb25uLVx1MDAzZWtleSksIGtleV9zZXJpYWwoY29ubi1cdTAwM2VidW5kbGUtXHUwMDNlYXBwX2RhdGEpKTtcbiBcbiBcdGlmIChrZXlfdmFsaWRhdGUoY29ubi1cdTAwM2VrZXkpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBSWEdLX0VYUElSRUQsIC1FUFJPVE8sXG4gXHRcdFx0XHRcdHJ4Z2tfYWJvcnRfY2hhbGxfa2V5X2V4cGlyZWQpO1xuIFxuLVx0cmV0dXJuIHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKGNvbm4sIGNoYWxsZW5nZSwgYXBwZGF0YSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZV9ub19hcHBkYXRhKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLVx0XHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4te1xuLVx0c3RydWN0IGtyYjVfYnVmZmVyIGFwcGRhdGEgPSB7fTtcbi1cbi1cdHJldHVybiByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNvbm4sIGNoYWxsZW5nZSwgXHUwMDI2YXBwZGF0YSk7XG4tfVxuLVxuLS8qKlxuLSAqIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlIC0gUmVzcG9uZCB0byBhIGNoYWxsZW5nZSB3aXRoIGFwcGRhdGFcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHJlc3BvbmQgdG9cbi0gKiBAYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgUkVTUE9OU0UgYXV0aGVudGljYXRvclxuLSAqXG4tICogQWxsb3cgYSBrZXJuZWwgYXBwbGljYXRpb24gdG8gcmVzcG9uZCB0byBhIENIQUxMRU5HRSB3aXRoIGFwcGxpY2F0aW9uIGRhdGFcbi0gKiB0byBiZSBpbmNsdWRlZCBpbiB0aGUgUnhHSyBSRVNQT05TRSBBdXRoZW50aWNhdG9yLlxuLSAqXG4tICogUmV0dXJuOiAlMCBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuLSAqL1xuLWludCByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTtcbi1cbi1cdHJldHVybiByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNzcC1cdTAwM2VjaGFsbC5jb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKTtcbi1cbi0vKlxuLSAqIFBhcnNlIHNlbmRtc2coKSBjb250cm9sIG1lc3NhZ2UgYW5kIHJlc3BvbmQgdG8gY2hhbGxlbmdlLiAgV2UgbmVlZCB0byBzZWUgaWZcbi0gKiB0aGVyZSYjMzk7cyBhbiBhcHBkYXRhIHRvIGZpc2ggb3V0LlxuLSAqL1xuLXN0YXRpYyBpbnQgcnhna19zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHRcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnKVxuLXtcbi1cdHN0cnVjdCBrcmI1X2J1ZmZlciBhcHBkYXRhID0ge307XG4tXHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcbi1cbi1cdGZvcl9lYWNoX2Ntc2doZHIoY21zZywgbXNnKSB7XG4tXHRcdGlmIChjbXNnLVx1MDAzZWNtc2dfbGV2ZWwgIT0gU09MX1JYUlBDIHx8XG4tXHRcdCAgICBjbXNnLVx1MDAzZWNtc2dfdHlwZSAhPSBSWFJQQ19SRVNQX1JYR0tfQVBQREFUQSlcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKGFwcGRhdGEuZGF0YSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0YXBwZGF0YS5kYXRhID0gQ01TR19EQVRBKGNtc2cpO1xuLVx0XHRhcHBkYXRhLmxlbiA9IGNtc2ctXHUwMDNlY21zZ19sZW4gLSBzaXplb2Yoc3RydWN0IGNtc2doZHIpO1xuJiM0MztcdGlmIChjb25uLVx1MDAzZWJ1bmRsZS1cdTAwM2VhcHBfZGF0YSkge1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0YXBwZGF0YSA9IChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKVxuJiM0MztcdFx0XHR1c2VyX2tleV9wYXlsb2FkX3JjdShjb25uLVx1MDAzZWJ1bmRsZS1cdTAwM2VhcHBfZGF0YSk7XG4mIzQzO1x0XHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZhcHBkYXRhLVx1MDAzZXJlZikpXG4mIzQzO1x0XHRcdGFwcGRhdGEgPSBOVUxMO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRpZiAoIWFwcGRhdGEpXG4mIzQzO1x0XHRcdHJldHVybiByeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIFJYR0tfRVhQSVJFRCwgLUVLRVlSRVZPS0VELFxuJiM0MztcdFx0XHRcdFx0XHRyeGdrX2Fib3J0X2NoYWxsX2tleV9leHBpcmVkKTtcbiBcdH1cbiBcbi1cdHJldHVybiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UsIFx1MDAyNmFwcGRhdGEpO1xuJiM0MztcdHJldCA9IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKGNvbm4sIGNoYWxsZW5nZSwgYXBwZGF0YSk7XG4mIzQzO1xuJiM0MztcdGlmIChhcHBkYXRhICE9IFx1MDAyNmR1bW15KVxuJiM0MztcdFx0cHV0X3VzZXJfa2V5X3BheWxvYWQoYXBwZGF0YSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLypcbkBAIC0xMzQ2LDkgJiM0MzsxMjg2LDcgQEAgY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHJ4Z2tfeWZzID0ge1xuIFx0LmZyZWVfY2FsbF9jcnlwdG9cdFx0PSByeGdrX2ZyZWVfY2FsbF9jcnlwdG8sXG4gXHQuaXNzdWVfY2hhbGxlbmdlXHRcdD0gcnhna19pc3N1ZV9jaGFsbGVuZ2UsXG4gXHQudmFsaWRhdGVfY2hhbGxlbmdlXHRcdD0gcnhna192YWxpZGF0ZV9jaGFsbGVuZ2UsXG4tXHQuY2hhbGxlbmdlX3RvX3JlY3Ztc2dcdFx0PSByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnLFxuLVx0LnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2VcdD0gcnhna19zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxuLVx0LnJlc3BvbmRfdG9fY2hhbGxlbmdlXHRcdD0gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZV9ub19hcHBkYXRhLFxuJiM0MztcdC5yZXNwb25kX3RvX2NoYWxsZW5nZVx0XHQ9IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UsXG4gXHQudmVyaWZ5X3Jlc3BvbnNlXHRcdD0gcnhna192ZXJpZnlfcmVzcG9uc2UsXG4gXHQuY2xlYXJcdFx0XHRcdD0gcnhna19jbGVhcixcbiBcdC5kZWZhdWx0X2RlY29kZV90aWNrZXRcdFx0PSByeGdrX3lmc19kZWNvZGVfdGlja2V0LFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeGthZC5jIGIvbmV0L3J4cnBjL3J4a2FkLmNcbmluZGV4IGNhOWYwZTgyY2I5YWM3Li5lNTViZmNhMTBlMWE5NCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yeGthZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcnhrYWQuY1xuQEAgLTc0OCwzMiAmIzQzOzc0OCw2IEBAIHN0YXRpYyBpbnQgcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIFJ4S0FEIGRvZXMgYXV0b21hdGljIHJlc3BvbnNlIG9ubHkgYXMgdGhlcmUmIzM5O3Mgbm90aGluZyB0byBtYW5hZ2UgdGhhdCBpc24mIzM5O3Rcbi0gKiBhbHJlYWR5IGluIHRoZSBrZXkuXG4tICovXG4tc3RhdGljIGludCByeGthZF9zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBtc2doZHIgKm1zZylcbi17XG4tXHRyZXR1cm4gLUVJTlZBTDtcbi19XG4tXG4tLyoqXG4tICogcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlIC0gUmVzcG9uZCB0byBhIGNoYWxsZW5nZSB3aXRoIGFwcGRhdGFcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHJlc3BvbmQgdG9cbi0gKlxuLSAqIEFsbG93IGEga2VybmVsIGFwcGxpY2F0aW9uIHRvIHJlc3BvbmQgdG8gYSBDSEFMTEVOR0UuXG4tICpcbi0gKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4tICovXG4taW50IHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqY3NwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XG4tXG4tXHRyZXR1cm4gcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2UoY3NwLVx1MDAzZWNoYWxsLmNvbm4sIGNoYWxsZW5nZSk7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKTtcbi1cbiAvKiBEZWNyeXB0IGRhdGEgaW4tcGxhY2UgdXNpbmcgREVTLVBDQkMuICBAbGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4LiAqL1xuIFZJU0lCTEVfSUZfS1VOSVQgdm9pZCBkZXNfcGNiY19kZWNyeXB0X2lucGxhY2UoY29uc3Qgc3RydWN0IGRlc19jdHggKmtleSxcbiBcdFx0XHRcdFx0ICAgICAgIF9fbGU2NCBpdiwgdTggKmRhdGEsIHNpemVfdCBsZW4pXG5AQCAtMTEzNCw3ICYjNDM7MTEwOCw2IEBAIGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGthZCA9IHtcbiBcdC5mcmVlX2NhbGxfY3J5cHRvXHRcdD0gcnhrYWRfZnJlZV9jYWxsX2NyeXB0byxcbiBcdC5pc3N1ZV9jaGFsbGVuZ2VcdFx0PSByeGthZF9pc3N1ZV9jaGFsbGVuZ2UsXG4gXHQudmFsaWRhdGVfY2hhbGxlbmdlXHRcdD0gcnhrYWRfdmFsaWRhdGVfY2hhbGxlbmdlLFxuLVx0LnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2VcdD0gcnhrYWRfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSxcbiBcdC5yZXNwb25kX3RvX2NoYWxsZW5nZVx0XHQ9IHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxuIFx0LnZlcmlmeV9yZXNwb25zZVx0XHQ9IHJ4a2FkX3ZlcmlmeV9yZXNwb25zZSxcbiBcdC5jbGVhclx0XHRcdFx0PSByeGthZF9jbGVhcixcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvc2VuZG1zZy5jIGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xuaW5kZXggZWQyYzlhNTEwMDVhZGUuLjIyNWVlYzQxMGJlZGM4IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL3NlbmRtc2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xuQEAgLTQ1Myw5ICYjNDM7NDUzLDYgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFxuIHN1Y2Nlc3M6XG4gXHRyZXQgPSBjb3BpZWQ7XG4tXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBjYWxsLVx1MDAzZWVycm9yIFx1MDAzYyAwKVxuLVx0XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuIG91dDpcbiBcdGNhbGwtXHUwMDNldHhfcGVuZGluZyA9IHR4YjtcbiBcdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbkBAIC00NjcsOCAmIzQzOzQ2NCwxNCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRyZXR1cm4gY2FsbC1cdTAwM2VlcnJvcjtcbiBcbiBtYXliZV9lcnJvcjpcbi1cdGlmIChjb3BpZWQpXG4mIzQzO1x0aWYgKGNvcGllZCkge1xuJiM0MztcdFx0aWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgY2FsbC1cdTAwM2VlcnJvciBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiBcdFx0Z290byBzdWNjZXNzO1xuJiM0MztcdH1cbiBcdGdvdG8gb3V0O1xuIFxuIGVmYXVsdDpcbkBAIC01MDMsNiAmIzQzOzUwNiw4IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBzdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyAqcClcbiB7XG4gXHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcbiYjNDM7XHRrZXlfc2VyaWFsX3Qga2V5X2lkO1xuJiM0MztcdGtleV9yZWZfdCBrZXk7XG4gXHRib29sIGdvdF91c2VyX0lEID0gZmFsc2U7XG4gXHRpbnQgbGVuO1xuIFxuQEAgLTU4Nyw2ICYjNDM7NTkyLDE4IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zICpwKVxuIFx0XHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXHRcdFx0YnJlYWs7XG4gXG4mIzQzO1x0XHRjYXNlIFJYUlBDX1JFU1BPTlNFX0FQUERBVEE6XG4mIzQzO1x0XHRcdGlmIChsZW4gIT0gc2l6ZW9mKGtleV9zZXJpYWxfdCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdGlmIChwLVx1MDAzZWNhbGwuYXBwX2RhdGEpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdGtleV9pZCA9ICooa2V5X3NlcmlhbF90ICopQ01TR19EQVRBKGNtc2cpO1xuJiM0MztcdFx0XHRrZXkgPSBsb29rdXBfdXNlcl9rZXkoa2V5X2lkLCAwLCBLRVlfTkVFRF9TRUFSQ0gpO1xuJiM0MztcdFx0XHRpZiAoSVNfRVJSKGtleSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIFBUUl9FUlIoa2V5KTtcbiYjNDM7XHRcdFx0cC1cdTAwM2VjYWxsLmFwcF9kYXRhID0ga2V5X3JlZl90b19wdHIoa2V5KTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG5AQCAtNzg2LDYgJiM0Mzs4MDMsNyBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcbiBlcnJvcl9yZWxlYXNlX3NvY2s6XG4gXHRyZWxlYXNlX3NvY2soXHUwMDI2cngtXHUwMDNlc2spO1xuJiM0MztcdGtleV9wdXQocC5jYWxsLmFwcF9kYXRhKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmMgYi9uZXQvcnhycGMvc2VydmVyX2tleS5jXG5pbmRleCAzZWZlMTA0YjE5MzBjYi4uZmM2ZjQ3OGUxNzYyYTcgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvc2VydmVyX2tleS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvc2VydmVyX2tleS5jXG5AQCAtMTczLDQzICYjNDM7MTczLDMgQEAgaW50IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qga2V5ICprZXlyaW5nKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTChyeHJwY19zb2NrX3NldF9zZWN1cml0eV9rZXlyaW5nKTtcbi1cbi0vKipcbi0gKiByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2UgLSBTZXQgdGhlIG1hbmFnZS1yZXNwb25zZSBmbGFnIGZvciBhIGtlcm5lbCBzZXJ2aWNlXG4tICogQHNrOiBUaGUgc29ja2V0IHRvIHNldCB0aGUga2V5cmluZyBvblxuLSAqIEBzZXQ6IFRydWUgdG8gc2V0LCBmYWxzZSB0byBjbGVhciB0aGUgZmxhZ1xuLSAqXG4tICogU2V0IHRoZSBmbGFnIG9uIGFuIHJ4cnBjIHNvY2tldCB0byBzYXkgdGhhdCB0aGUgY2FsbGVyIHdhbnRzIHRvIG1hbmFnZSB0aGVcbi0gKiBSRVNQT05TRSBwYWNrZXQgYW5kIHRoZSB1c2VyLWRlZmluZWQgZGF0YSBpdCBtYXkgY29udGFpbi4gIFNldHRpbmcgdGhpc1xuLSAqIG1lYW5zIHRoYXQgcmVjdm1zZygpIHdpbGwgcmV0dXJuIG1lc3NhZ2VzIHdpdGggUlhSUENfQ0hBTExFTkdFRCBpbiB0aGVcbi0gKiBjb250cm9sIG1lc3NhZ2UgYnVmZmVyIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNoYWxsZW5nZS5cbi0gKlxuLSAqIFRoZSB1c2VyIHNob3VsZCByZXNwb25kIHRvIHRoZSBjaGFsbGVuZ2UgYnkgcGFzc2luZyBSWFJQQ19SRVNQT05EIG9yXG4tICogUlhSUENfUkVTUE9ORF9BQk9SVCBjb250cm9sIG1lc3NhZ2VzIHdpdGggc2VuZG1zZygpIHRvIHRoZSBzYW1lIGNhbGwuXG4tICogU3VwcGxlbWVudGFyeSBjb250cm9sIG1lc3NhZ2VzLCBzdWNoIGFzIFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBLCBtYXkgYmVcbi0gKiBpbmNsdWRlZCB0byBpbmRpY2F0ZSB0aGUgcGFydHMgdGhlIHVzZXIgd2FudHMgdG8gc3VwcGx5LlxuLSAqXG4tICogVGhlIHNlcnZlciB3aWxsIGJlIHBhc3NlZCB0aGUgcmVzcG9uc2UgZGF0YSB3aXRoIGEgUlhSUENfUkVTUE9OREVEIGNvbnRyb2xcbi0gKiBtZXNzYWdlIHdoZW4gaXQgZ2V0cyB0aGUgZmlyc3QgZGF0YSBmcm9tIGVhY2ggY2FsbC5cbi0gKlxuLSAqIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgaG9ub3VyZWQgYnkgc2VjdXJpdHkgY2xhc3NlcyB0aGF0IG5lZWQgYXV4aWxpYXJ5IGRhdGFcbi0gKiAoZS5nLiBSeEdLKS4gIFRob3NlIHRoYXQgZG9uJiMzOTt0IG9mZmVyIHRoZSBmYWNpbGl0eSAoZS5nLiBSeEtBRCkgcmVzcG9uZFxuLSAqIHdpdGhvdXQgY29uc3VsdGluZyB1c2Vyc3BhY2UuXG4tICpcbi0gKiBSZXR1cm46IFRoZSBwcmV2aW91cyBzZXR0aW5nLlxuLSAqL1xuLWludCByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2Uoc3RydWN0IHNvY2sgKnNrLCBib29sIHNldClcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzayk7XG4tXHRpbnQgcmV0O1xuLVxuLVx0bG9ja19zb2NrKHNrKTtcbi1cdHJldCA9ICEhdGVzdF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdGlmIChzZXQpXG4tXHRcdHNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdGVsc2Vcbi1cdFx0Y2xlYXJfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcdTAwMjZyeC1cdTAwM2VmbGFncyk7XG4tXHRyZWxlYXNlX3NvY2soc2spO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2UpO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG5pbmRleCA2Zjg4YjUwN2Y5Mjc5MS4uOTBjMWJkNWQ3ZGZlY2YgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG5AQCAtNjcsNiAmIzQzOzY3LDcgQEAgaW50IHVzZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbiBcdHVwYXlsb2FkID0ga21hbGxvY19mbGV4KCp1cGF5bG9hZCwgZGF0YSwgZGF0YWxlbik7XG4gXHRpZiAoIXVwYXlsb2FkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRyZWZjb3VudF9zZXQoXHUwMDI2dXBheWxvYWQtXHUwMDNlcmVmLCAxKTtcbiBcbiBcdC8qIGF0dGFjaCB0aGUgZGF0YSAqL1xuIFx0cHJlcC1cdTAwM2VxdW90YWxlbiA9IGRhdGFsZW47XG5AQCAtODgsMTIgJiM0Mzs4OSwyMiBAQCBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2ZyZWVfcHJlcGFyc2UpO1xuIFxuIHN0YXRpYyB2b2lkIHVzZXJfZnJlZV9wYXlsb2FkX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4ge1xuLVx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQ7XG4mIzQzO1x0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkLCByY3UpO1xuIFxuLVx0cGF5bG9hZCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCwgcmN1KTtcbiBcdGtmcmVlX3NlbnNpdGl2ZShwYXlsb2FkKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEZyZWUgYSB1c2VyIGRlZmluZWQga2V5IHBheWxvYWQuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHBheWxvYWQgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZwYXlsb2FkLVx1MDAzZXJlZikpXG4mIzQzO1x0XHRjYWxsX3JjdShcdTAwMjZwYXlsb2FkLVx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwdXRfdXNlcl9rZXlfcGF5bG9hZCk7XG4mIzQzO1xuIC8qXG4gICogdXBkYXRlIGEgdXNlciBkZWZpbmVkIGtleVxuICAqIC0gdGhlIGtleSYjMzk7cyBzZW1hcGhvcmUgaXMgd3JpdGUtbG9ja2VkXG5AQCAtMTE1LDggJiM0MzsxMjYsNyBAQCBpbnQgdXNlcl91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIFx0cmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgcHJlcC1cdTAwM2VwYXlsb2FkLmRhdGFbMF0pO1xuIFx0cHJlcC1cdTAwM2VwYXlsb2FkLmRhdGFbMF0gPSBOVUxMO1xuIFxuLVx0aWYgKHphcClcbi1cdFx0Y2FsbF9yY3UoXHUwMDI2emFwLVx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcbiYjNDM7XHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh6YXApO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodXNlcl91cGRhdGUpO1xuQEAgLTEzNCw3ICYjNDM7MTQ0LDcgQEAgdm9pZCB1c2VyX3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpXG4gXG4gXHRpZiAodXBheWxvYWQpIHtcbiBcdFx0cmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgTlVMTCk7XG4tXHRcdGNhbGxfcmN1KFx1MDAyNnVwYXlsb2FkLVx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcbiYjNDM7XHRcdHB1dF91c2VyX2tleV9wYXlsb2FkKHVwYXlsb2FkKTtcbiBcdH1cbiB9XG4gXG5AQCAtMTQ3LDkgJiM0MzsxNTcsOCBAQCB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXG4ge1xuIFx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbiBcbi1cdGtmcmVlX3NlbnNpdGl2ZSh1cGF5bG9hZCk7XG4mIzQzO1x0cHV0X3VzZXJfa2V5X3BheWxvYWQodXBheWxvYWQpO1xuIH1cbi1cbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2Rlc3Ryb3kpO1xuIFxuIC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZTX0ZTJiMzNDssCiAgICAmIzM0O0FGX1JYUlBDJiMzNDssCiAgICAmIzM0O1JYS0FEJiMzNDssCiAgICAmIzM0O1JYR0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhJiMzNDssCiAgICAmIzM0O2Fmc19jcmVhdGVfeWZzX2NtX3Rva2VuJiMzNDssCiAgICAmIzM0O3J4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UmIzM0OywKICAgICYjMzQ7cnhycGNfc2VuZG1zZ19jbXNnJiMzNDssCiAgICAmIzM0O3B1dF91c2VyX2tleV9wYXlsb2FkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRlMgYW5kIFJ4UlBDIHN1YnN5c3RlbXMgdG8gaGFuZGxlIFJ4R0sgYXBwbGljYXRpb24gZGF0YSBpbnRlcm5hbGx5IHJhdGhlciB0aGFuIHJlbHlpbmcgb24gdXNlcnNwYWNlIE9PQiBtZXNzYWdlcy4gSXQgaW50cm9kdWNlcyBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAgdG8gZ2VuZXJhdGUgdGhlIGFwcCBkYXRhIGFuZCBwYXNzZXMgaXQgdG8gYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29yayBhbmQgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IGFsdGVycyBleGVjdXRpb24gZmxvdyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzZiMWUyZDllMTIzOTk0YWIyZDdhYTg4ODRlMzZmZThmMzQzMGM1NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMTc6NTM6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9hZnMvY21fc2VjdXJpdHkuYyBiL2ZzL2Fmcy9jbV9zZWN1cml0eS5jCmluZGV4IDEwMzE2OGM3MGRkNGRmLi5kYjJhM2IzMGYwMjA5NCAxMDA2NDQKLS0tIGEvZnMvYWZzL2NtX3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2NtX3NlY3VyaXR5LmMKQEAgLTYsNyAmIzQzOzYsOSBAQAogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tleS10eXBlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7Y3J5cHRvL2tyYjUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7a2V5cy91c2VyLXR5cGUuaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2Fmc19jbS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YWZzX2ZzLmgmIzM0OwpAQCAtMTksOTcgJiM0MzsyMSw2NiBAQAogI2RlZmluZSB4ZHJfbGVuX29iamVjdCh4KSAoNCAmIzQzOyByb3VuZF91cCgoeCksIHNpemVvZihfX2JlMzIpKSkKIAogI2lmZGVmIENPTkZJR19SWEdLCi1zdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICAgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcik7CiYjNDM7c3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCB1MzIga3JiNV9lbmN0eXBlKTsKICNlbmRpZgogCiAvKgotICogUmVzcG9uZCB0byBhbiBSeEdLIGNoYWxsZW5nZSwgYWRkaW5nIGFwcGRhdGEuCiYjNDM7ICogQ3JlYXRlIHRoZSBhcHBsaWNhdGlvbiBkYXRhIHRvIGdvIGluIGEgUkVTUE9OU0UgcGFja2V0IGEgc2VydmVyJiMzOTtzIENIQUxMRU5HRQomIzQzOyAqIGZyb20gdGhlIHBhcmFtZXRlcnMgY29udGFpbmVkIGluIGEga2V5LiAgVGhlIGtleSBzcGVjaWZpZXMgdGhlIHNlY3VyaXR5CiYjNDM7ICogaW5kZXggYW5kIG90aGVyIGFwcHJvcHJpYXRlIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZW5jb2RpbmcgdHlwZSBmb3IgUnhHSy4KICAqLwotc3RhdGljIGludCBhZnNfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSkKJiM0MztpbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpCiB7Ci0jaWZkZWYgQ09ORklHX1JYR0sKLQlzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9OwotCXN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXI7Ci0jZW5kaWYKLQlzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcjsKLQl1bnNpZ25lZCBsb25nIHBlZXJfZGF0YTsKLQl1MTYgc2VydmljZV9pZDsKJiM0MzsJdTMyIGtyYjVfZW5jdHlwZTsKJiM0MzsJaW50IHJldDsKIAl1OCBzZWN1cml0eV9pbmRleDsKIAotCXJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UoY2hhbGxlbmdlLCAmYW1wO3BlZXIsICZhbXA7cGVlcl9kYXRhLAotCQkJCSAgICAgJmFtcDtzZXJ2aWNlX2lkLCAmYW1wO3NlY3VyaXR5X2luZGV4KTsKLQotCV9lbnRlcigmIzM0OyV1LCV1JiMzNDssIHNlcnZpY2VfaWQsIHNlY3VyaXR5X2luZGV4KTsKLQotCXN3aXRjaCAoc2VydmljZV9pZCkgewotCQkvKiBXZSBkb24mIzM5O3Qgc2VuZCBDTV9TRVJWSUNFIFJQQ3MsIHNvIGRvbiYjMzk7dCBleHBlY3QgYSBjaGFsbGVuZ2UKLQkJICogdGhlcmVmcm9tLgotCQkgKi8KLQljYXNlIEZTX1NFUlZJQ0U6Ci0JY2FzZSBWTF9TRVJWSUNFOgotCWNhc2UgWUZTX0ZTX1NFUlZJQ0U6Ci0JY2FzZSBZRlNfVkxfU0VSVklDRToKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfd2FybigmIzM0O0NhbiYjMzk7dCByZXNwb25kIHRvIHVua25vd24gY2hhbGxlbmdlICV1OiV1JiMzNDssCi0JCQlzZXJ2aWNlX2lkLCBzZWN1cml0eV9pbmRleCk7Ci0JCXJldHVybiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFJYX1VTRVJfQUJPUlQsIC1FUFJPVE8sCi0JCQkJCQkgICAgIGFmc19hYm9ydF91bnN1cHBvcnRlZF9zZWNfY2xhc3MpOwotCX0KJiM0MzsJaWYgKCFrZXkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogUmVhZCBBUFBEQVRBIGZsYWcgYmVmb3JlIGNtX3J4Z2tfYXBwZGF0YSAqLwomIzQzOwlpZiAodGVzdF9iaXRfYWNxdWlyZShBRlNfU0VSVkVSX0ZMX0FQUERBVEEsICZhbXA7c2VydmVyLSZndDtmbGFncykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcnhycGNfa2VybmVsX3F1ZXJ5X2tleShrZXksICZhbXA7c2VjdXJpdHlfaW5kZXgsICZhbXA7a3JiNV9lbmN0eXBlKTsKJiM0MzsKJiM0MzsJX2VudGVyKCYjMzQ7JXUsJXUmIzM0Oywgc2VjdXJpdHlfaW5kZXgsIGtyYjVfZW5jdHlwZSk7CiAKLQlzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7CiYjNDM7CXJldCA9IDA7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtzZXJ2ZXItJmd0O2NtX3Rva2VuX2xvY2spOwomIzQzOwomIzQzOwkvKiBSZWFkIEFQUERBVEEgZmxhZyBiZWZvcmUgY21fcnhna19hcHBkYXRhICovCiYjNDM7CWlmICghdGVzdF9iaXRfYWNxdWlyZShBRlNfU0VSVkVSX0ZMX0FQUERBVEEsICZhbXA7c2VydmVyLSZndDtmbGFncykpIHsKJiM0MzsJCXN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHsKJiM0MzsJCWNhc2UgMDoKJiM0MzsJCQlicmVhazsKICNpZmRlZiBDT05GSUdfUlhLQUQKLQljYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOgotCQlyZXR1cm4gcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSk7CiYjNDM7CQljYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOgomIzQzOwkJCXNldF9iaXQoQUZTX1NFUlZFUl9GTF9BUFBEQVRBLCAmYW1wO3NlcnZlci0mZ3Q7ZmxhZ3MpOwomIzQzOwkJCWJyZWFrOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUlhHSwotCWNhc2UgUlhSUENfU0VDVVJJVFlfUlhHSzoKLQkJcmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgJmFtcDthcHBkYXRhKTsKLQotCWNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6Ci0JCXN3aXRjaCAoc2VydmljZV9pZCkgewotCQljYXNlIEZTX1NFUlZJQ0U6Ci0JCWNhc2UgWUZTX0ZTX1NFUlZJQ0U6Ci0JCQlzZXJ2ZXIgPSAoc3RydWN0IGFmc19zZXJ2ZXIgKilwZWVyX2RhdGE7Ci0JCQlpZiAoIXNlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhLmRhdGEpIHsKLQkJCQltdXRleF9sb2NrKCZhbXA7c2VydmVyLSZndDtjbV90b2tlbl9sb2NrKTsKLQkJCQlpZiAoIXNlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhLmRhdGEpCi0JCQkJCWFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKGNoYWxsZW5nZSwgc2VydmVyKTsKLQkJCQltdXRleF91bmxvY2soJmFtcDtzZXJ2ZXItJmd0O2NtX3Rva2VuX2xvY2spOwotCQkJfQotCQkJaWYgKHNlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhLmRhdGEpCi0JCQkJYXBwZGF0YSA9IHNlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhOwomIzQzOwkJY2FzZSBSWFJQQ19TRUNVUklUWV9SWEdLOgomIzQzOwkJCXNldF9iaXQoQUZTX1NFUlZFUl9GTF9BUFBEQVRBLCAmYW1wO3NlcnZlci0mZ3Q7ZmxhZ3MpOwogCQkJYnJlYWs7Ci0JCX0KLQkJcmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgJmFtcDthcHBkYXRhKTsKLSNlbmRpZgogCi0JZGVmYXVsdDoKLQkJcmV0dXJuIHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKGNoYWxsZW5nZSwgUlhfVVNFUl9BQk9SVCwgLUVQUk9UTywKLQkJCQkJCSAgICAgYWZzX2Fib3J0X3Vuc3VwcG9ydGVkX3NlY19jbGFzcyk7Ci0JfQotfQomIzQzOwkJY2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzoKJiM0MzsJCQlyZXQgPSBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzZXJ2ZXIsIGtyYjVfZW5jdHlwZSk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCXNldF9iaXQoQUZTX1NFUlZFUl9GTF9BUFBEQVRBLCAmYW1wO3NlcnZlci0mZ3Q7ZmxhZ3MpOwomIzQzOwkJCWJyZWFrOwomIzQzOyNlbmRpZgogCi0vKgotICogUHJvY2VzcyB0aGUgT09CIG1lc3NhZ2UgcXVldWUsIHByb2Nlc3NpbmcgY2hhbGxlbmdlIHBhY2tldHMuCi0gKi8KLXZvaWQgYWZzX3Byb2Nlc3Nfb29iX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZnNfbmV0LCByeF9vb2Jfd29yayk7Ci0Jc3RydWN0IHNrX2J1ZmYgKm9vYjsKLQllbnVtIHJ4cnBjX29vYl90eXBlIHR5cGU7Ci0KLQl3aGlsZSAoUkVBRF9PTkNFKG5ldC0mZ3Q7bGl2ZSkgJmFtcDsmYW1wOwotCSAgICAgICAob29iID0gcnhycGNfa2VybmVsX2RlcXVldWVfb29iKG5ldC0mZ3Q7c29ja2V0LCAmYW1wO3R5cGUpKSkgewotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOgotCQkJYWZzX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKG9vYik7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCVdBUk5fT05fT05DRSgxKTsKIAkJCWJyZWFrOwogCQl9Ci0JCXJ4cnBjX2tlcm5lbF9mcmVlX29vYihvb2IpOwogCX0KJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c2VydmVyLSZndDtjbV90b2tlbl9sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogI2lmZGVmIENPTkZJR19SWEdLCkBAIC0xNzcsMzcgJiM0MzsxNDgsMzQgQEAgaW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldCkKIC8qCiAgKiBDcmVhdGUgYW4gWUZTIFJ4R0sgR1NTIHRva2VuIHRvIHVzZSBhcyBhIHRpY2tldCB0byB0aGUgc3BlY2lmaWVkIGZpbGVzZXJ2ZXIuCiAgKi8KLXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkgICBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyKQomIzQzO3N0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGVuY3R5cGUpCiB7CiAJY29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY29ubl9rcmI1LCAqdG9rZW5fa3JiNTsKIAljb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKnRva2VuX2tleTsKIAlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQ7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwogCXN0cnVjdCBhZnNfbmV0ICpuZXQgPSBzZXJ2ZXItJmd0O2NlbGwtJmd0O25ldDsKLQljb25zdCBzdHJ1Y3Qga2V5ICprZXkgPSBuZXQtJmd0O2ZzX2NtX3Rva2VuX2tleTsKJiM0MzsJY29uc3Qgc3RydWN0IGtleSAqY21fa2V5ID0gbmV0LSZndDtmc19jbV90b2tlbl9rZXk7CiYjNDM7CXN0cnVjdCBrZXkgKmFwcGRhdGFfa2V5ID0gTlVMTDsKIAlzaXplX3Qga2V5c2l6ZSwgdXVpZHNpemUsIGF1dGhzaXplLCB0b2tzaXplLCBlbmNzaXplLCBjb250c2l6ZSwgYWRhdGFzaXplLCBvZmZzZXQ7CiAJX19iZTMyIGNhcHNbMV0gPSB7CiAJCVswXSA9IGh0b25sKEFGU19DQVBfRVJST1JfVFJBTlNMQVRJT04pLAogCX07CiAJX19iZTMyICp4ZHI7CiAJdm9pZCAqYXBwZGF0YSwgKkswLCAqZW5jYmFzZTsKLQl1MzIgZW5jdHlwZTsKIAlpbnQgcmV0OwogCi0JaWYgKCFrZXkpCiYjNDM7CWlmICghY21fa2V5KQogCQlyZXR1cm4gLUVOT0tFWTsKIAogCS8qIEFzc3VtZSB0aGF0IHRoZSBmaWxlc2VydmVyIGlzIGhhcHB5IHRvIHVzZSB0aGUgc2FtZSBlbmNvZGluZyB0eXBlIGFzCiAJICogd2Ugd2VyZSB0b2xkIHRvIHVzZSBieSB0aGUgdG9rZW4gb2J0YWluZWQgYnkgdGhlIHVzZXIuCiAJICovCi0JZW5jdHlwZSA9IHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShjaGFsbGVuZ2UpOwotCiAJY29ubl9rcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKGVuY3R5cGUpOwogCWlmICghY29ubl9rcmI1KQogCQlyZXR1cm4gLUVOT1BLRzsKLQl0b2tlbl9rcmI1ID0ga2V5LSZndDtwYXlsb2FkLmRhdGFbMF07Ci0JdG9rZW5fa2V5ID0gKGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqKSZhbXA7a2V5LSZndDtwYXlsb2FkLmRhdGFbMl07CiYjNDM7CXRva2VuX2tyYjUgPSBjbV9rZXktJmd0O3BheWxvYWQuZGF0YVswXTsKJiM0MzsJdG9rZW5fa2V5ID0gKGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqKSZhbXA7Y21fa2V5LSZndDtwYXlsb2FkLmRhdGFbMl07CiAKIAkvKiBzdHJ1Y3Qgcnhna19rZXkgewogCSAqCWFmc191aW50MzIJZW5jdHlwZTsKQEAgLTMyNyw5ICYjNDM7Mjk1LDIyIEBAIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBvdXRfYWVhZDsKIAotCXNlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhLmxlbiAgPSBhZGF0YXNpemU7Ci0Jc2VydmVyLSZndDtjbV9yeGdrX2FwcGRhdGEuZGF0YSA9IGFwcGRhdGE7Ci0JYXBwZGF0YSA9IE5VTEw7CiYjNDM7CWFwcGRhdGFfa2V5ID0ga2V5X2FsbG9jKCZhbXA7a2V5X3R5cGVfdXNlciwgJiMzNDtyeHJwYzogYWZzIHJ4Z2sgYXBwZGF0YSYjMzQ7LAomIzQzOwkJCQlHTE9CQUxfUk9PVF9VSUQsIEdMT0JBTF9ST09UX0dJRCwgY3VycmVudF9jcmVkKCksCiYjNDM7CQkJCUtFWV9QT1NfVklFVyB8IEtFWV9QT1NfU0VBUkNIIHwgS0VZX1VTUl9WSUVXLAomIzQzOwkJCQlLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLCBOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihhcHBkYXRhX2tleSkpIHsKJiM0MzsJCXJldCA9IFBUUl9FUlIoYXBwZGF0YV9rZXkpOwomIzQzOwkJZ290byBvdXRfYWVhZDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBrZXlfaW5zdGFudGlhdGVfYW5kX2xpbmsoYXBwZGF0YV9rZXksIGFwcGRhdGEsIGFkYXRhc2l6ZSwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlrZXlfcHV0KGFwcGRhdGFfa2V5KTsKJiM0MzsJCWdvdG8gb3V0X2FlYWQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VydmVyLSZndDtjbV9yeGdrX2FwcGRhdGEgPSBhcHBkYXRhX2tleTsKIAogb3V0X2FlYWQ6CiAJY3J5cHRvX2ZyZWVfYWVhZChhZWFkKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jbXNlcnZpY2UuYyBiL2ZzL2Fmcy9jbXNlcnZpY2UuYwppbmRleCA1NTQwYWUxY2FkNTk5YS4uZDU3OWE2NjVlM2RhMDkgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9jbXNlcnZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvY21zZXJ2aWNlLmMKQEAgLTM2NCw3ICYjNDM7MzY0LDggQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTMoc3RydWN0IGFmc19jYWxsICpjYWxsKQogCWlmICghYWZzX2NoZWNrX2NhbGxfc3RhdGUoY2FsbCwgQUZTX0NBTExfU1ZfUkVQTFlJTkcpKQogCQlyZXR1cm4gYWZzX2lvX2Vycm9yKGNhbGwsIGFmc19pb19lcnJvcl9jbV9yZXBseSk7CiAKLQlpZiAobWVtY21wKGNhbGwtJmd0O3JlcXVlc3QsICZhbXA7Y2FsbC0mZ3Q7c2VydmVyLSZndDtfdXVpZCwgc2l6ZW9mKGNhbGwtJmd0O3NlcnZlci0mZ3Q7X3V1aWQpKSAhPSAwKSB7CiYjNDM7CWlmIChjYWxsLSZndDtzZXJ2ZXIgJmFtcDsmYW1wOwomIzQzOwkgICAgbWVtY21wKGNhbGwtJmd0O3JlcXVlc3QsICZhbXA7Y2FsbC0mZ3Q7c2VydmVyLSZndDtfdXVpZCwgc2l6ZW9mKGNhbGwtJmd0O3NlcnZlci0mZ3Q7X3V1aWQpKSAhPSAwKSB7CiAJCXByX25vdGljZSgmIzM0O0NhbGxiYWNrIFVVSUQgZG9lcyBub3QgbWF0Y2ggZmlsZXNlcnZlciBVVUlEXG4mIzM0Oyk7CiAJCXRyYWNlX2Fmc19jbV9ub19zZXJ2ZXJfdShjYWxsLCBjYWxsLSZndDtyZXF1ZXN0KTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9hZnMvZnNfcHJvYmUuYyBiL2ZzL2Fmcy9mc19wcm9iZS5jCmluZGV4IGE5MWFkMTkzOGQwNzg4Li5lMjZmN2YxZTMwYTIzYSAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZzX3Byb2JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ZzX3Byb2JlLmMKQEAgLTI0MSw5ICYjNDM7MjQxLDE0IEBAIGludCBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLAogCXN0cnVjdCBhZnNfZW5kcG9pbnRfc3RhdGUgKmVzdGF0ZSwgKm9sZDsKIAlzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0ID0gTlVMTCwgKmFsaXN0OwogCXVuc2lnbmVkIGxvbmcgdW5wcm9iZWQ7CiYjNDM7CWludCByZXQ7CiAKIAlfZW50ZXIoJiMzNDslcFUmIzM0OywgJmFtcDtzZXJ2ZXItJmd0O3V1aWQpOwogCiYjNDM7CXJldCA9IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc2VydmVyLCBrZXkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiAJZXN0YXRlID0ga3phbGxvY19vYmooKmVzdGF0ZSk7CiAJaWYgKCFlc3RhdGUpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaAppbmRleCAwYjcyYTg1NjYyOTk5Mi4uM2U2MWM1NDNhNTBjNDggMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbnRlcm5hbC5oCkBAIC0yODMsNyAmIzQzOzI4Myw2IEBAIHN0cnVjdCBhZnNfbmV0IHsKIAlzdHJ1Y3Qgc29ja2V0CQkqc29ja2V0OwogCXN0cnVjdCBhZnNfY2FsbAkJKnNwYXJlX2luY29taW5nX2NhbGw7CiAJc3RydWN0IHdvcmtfc3RydWN0CWNoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcms7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CXJ4X29vYl93b3JrOwogCXN0cnVjdCBtdXRleAkJc29ja2V0X211dGV4OwogCWF0b21pY190CQlucl9vdXRzdGFuZGluZ19jYWxsczsKIAlhdG9taWNfdAkJbnJfc3VwZXJibG9ja3M7CkBAIC01NDcsNyAmIzQzOzU0Niw3IEBAIHN0cnVjdCBhZnNfc2VydmVyIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJZGVzdHJveWVyOwkvKiBXb3JrIGl0ZW0gdG8gdHJ5IGFuZCBkZXN0cm95IGEgc2VydmVyICovCiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CQkvKiBNYW5hZ2VtZW50IHRpbWVyICovCiAJc3RydWN0IG11dGV4CQljbV90b2tlbl9sb2NrOwkvKiBMb2NrIGdvdmVybmluZyBjcmVhdGlvbiBvZiBhcHBkYXRhICovCi0Jc3RydWN0IGtyYjVfYnVmZmVyCWNtX3J4Z2tfYXBwZGF0YTsgLyogQXBwZGF0YSB0byBiZSBpbmNsdWRlZCBpbiBSRVNQT05TRSBwYWNrZXQgKi8KJiM0MzsJc3RydWN0IGtleQkJKmNtX3J4Z2tfYXBwZGF0YTsgLyogQXBwZGF0YSB0byBiZSBpbmNsdWRlZCBpbiBSRVNQT05TRSBwYWNrZXQgKi8KIAl0aW1lNjRfdAkJdW51c2VfdGltZTsJLyogVGltZSBhdCB3aGljaCBsYXN0IHVudXNlZCAqLwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogI2RlZmluZSBBRlNfU0VSVkVSX0ZMX1JFU1BPTkRJTkcgMAkJLyogVGhlIHNlcnZlciBpcyByZXNwb25kaW5nICovCkBAIC01NTksNiAmIzQzOzU1OCw3IEBAIHN0cnVjdCBhZnNfc2VydmVyIHsKICNkZWZpbmUgQUZTX1NFUlZFUl9GTF9OT1RfRk9VTkQJNgkJLyogVkwgc2VydmVyIHNheXMgbm8gc3VjaCBzZXJ2ZXIgKi8KICNkZWZpbmUgQUZTX1NFUlZFUl9GTF9WTF9GQUlMCTcJCS8qIEZhaWxlZCB0byBhY2Nlc3MgVkwgc2VydmVyICovCiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfTUFZX0hBVkVfQ0IgOAkJLyogTWF5IGhhdmUgY2FsbGJhY2tzIG9uIHRoaXMgZmlsZXNlcnZlciAqLwomIzQzOyNkZWZpbmUgQUZTX1NFUlZFUl9GTF9BUFBEQVRBCTkJCS8qIFNldCBpZiBhcHBkYXRhIGNyZWF0ZWQgKi8KICNkZWZpbmUgQUZTX1NFUlZFUl9GTF9JU19ZRlMJMTYJCS8qIFNlcnZlciBpcyBZRlMgbm90IEFGUyAqLwogI2RlZmluZSBBRlNfU0VSVkVSX0ZMX05PX0lCVUxLCTE3CQkvKiBGaWxlc2VydmVyIGRvZXNuJiMzOTt0IHN1cHBvcnQgRlMuSW5saW5lQnVsa1N0YXR1cyAqLwogI2RlZmluZSBBRlNfU0VSVkVSX0ZMX05PX1JNMgkxOAkJLyogRmlsZXNlcnZlciBkb2VzbiYjMzk7dCBzdXBwb3J0IFlGUy5SZW1vdmVGaWxlMiAqLwpAQCAtMTA5MCw3ICYjNDM7MTA5MCw3IEBAIGV4dGVybiBib29sIGFmc19jbV9pbmNvbWluZ19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqKTsKIC8qCiAgKiBjbV9zZWN1cml0eS5jCiAgKi8KLXZvaWQgYWZzX3Byb2Nlc3Nfb29iX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiYjNDM7aW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KTsKICNpZmRlZiBDT05GSUdfUlhHSwogaW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldCk7CiAjZWxzZQpAQCAtMTQxNywyMSAmIzQzOzE0MTcsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX3NlZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZW51bSBhZnNfY2FsbF90cmFjZSB3aHkpCiAJCSAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWZzX21ha2Vfb3BfY2FsbChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsIHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwKLQkJCQkgICAgZ2ZwX3QgZ2ZwKQotewotCXN0cnVjdCBhZnNfYWRkcl9saXN0ICphbGlzdCA9IG9wLSZndDtlc3RhdGUtJmd0O2FkZHJlc3NlczsKLQotCW9wLSZndDtjYWxsCT0gY2FsbDsKLQlvcC0mZ3Q7dHlwZQk9IGNhbGwtJmd0O3R5cGU7Ci0JY2FsbC0mZ3Q7b3AJPSBvcDsKLQljYWxsLSZndDtrZXkJPSBvcC0mZ3Q7a2V5OwotCWNhbGwtJmd0O2ludHIJPSAhKG9wLSZndDtmbGFncyAmYW1wOyBBRlNfT1BFUkFUSU9OX1VOSU5UUik7Ci0JY2FsbC0mZ3Q7cGVlcgk9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC0mZ3Q7YWRkcnNbb3AtJmd0O2FkZHJfaW5kZXhdLnBlZXIpOwotCWNhbGwtJmd0O3NlcnZpY2VfaWQgPSBvcC0mZ3Q7c2VydmVyLSZndDtzZXJ2aWNlX2lkOwotCWFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKIAljYWxsLSZndDtpb3ZfbGVuID0gc2l6ZTsKQEAgLTE3NjMsNiAmIzQzOzE3NDgsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKkFGU19WTk9ERV9UT19JKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlKQogCXJldHVybiAmYW1wO3Zub2RlLSZndDtuZXRmcy5pbm9kZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLAomIzQzOwkJCQkgICAgZ2ZwX3QgZ2ZwKQomIzQzO3sKJiM0MzsJc3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtJmd0O2VzdGF0ZS0mZ3Q7YWRkcmVzc2VzOwomIzQzOwomIzQzOwlvcC0mZ3Q7Y2FsbAk9IGNhbGw7CiYjNDM7CW9wLSZndDt0eXBlCT0gY2FsbC0mZ3Q7dHlwZTsKJiM0MzsJY2FsbC0mZ3Q7b3AJPSBvcDsKJiM0MzsJY2FsbC0mZ3Q7c2VydmVyCT0gYWZzX3VzZV9zZXJ2ZXIob3AtJmd0O3NlcnZlciwgZmFsc2UsIGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NhbGwpOwomIzQzOwljYWxsLSZndDtrZXkJPSBvcC0mZ3Q7a2V5OwomIzQzOwljYWxsLSZndDtpbnRyCT0gIShvcC0mZ3Q7ZmxhZ3MgJmFtcDsgQUZTX09QRVJBVElPTl9VTklOVFIpOwomIzQzOwljYWxsLSZndDtwZWVyCT0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LSZndDthZGRyc1tvcC0mZ3Q7YWRkcl9pbmRleF0ucGVlcik7CiYjNDM7CWNhbGwtJmd0O3NlcnZpY2VfaWQgPSBvcC0mZ3Q7c2VydmVyLSZndDtzZXJ2aWNlX2lkOwomIzQzOwlhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7CiYjNDM7fQomIzQzOwogLyoKICAqIE5vdGUgdGhhdCBhIGRlbnRyeSBnb3QgY2hhbmdlZC4gIFdlIG5lZWQgdG8gc2V0IGRfZnNkYXRhIHRvIHRoZSBkYXRhIHZlcnNpb24KICAqIG51bWJlciBkZXJpdmVkIGZyb20gdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLiAgSXQgZG9lc24mIzM5O3QgbWF0dGVyIGlmCmRpZmYgLS1naXQgYS9mcy9hZnMvbWFpbi5jIGIvZnMvYWZzL21haW4uYwppbmRleCA3YTg4M2M1OTk3NmZmMi4uNjM1M2ZlYWE1ZmI0YjUgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL21haW4uYwpAQCAtNzMsNyAmIzQzOzczLDYgQEAgc3RhdGljIGludCBfX25ldF9pbml0IGFmc19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXRfbnMpCiAJZ2VuZXJhdGVfcmFuZG9tX3V1aWQoKHVuc2lnbmVkIGNoYXIgKikmYW1wO25ldC0mZ3Q7dXVpZCk7CiAKIAlJTklUX1dPUksoJmFtcDtuZXQtJmd0O2NoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcmssIGFmc19jaGFyZ2VfcHJlYWxsb2NhdGlvbik7Ci0JSU5JVF9XT1JLKCZhbXA7bmV0LSZndDtyeF9vb2Jfd29yaywgYWZzX3Byb2Nlc3Nfb29iX3F1ZXVlKTsKIAltdXRleF9pbml0KCZhbXA7bmV0LSZndDtzb2NrZXRfbXV0ZXgpOwogCiAJbmV0LSZndDtjZWxscyA9IFJCX1JPT1Q7CmRpZmYgLS1naXQgYS9mcy9hZnMvcnhycGMuYyBiL2ZzL2Fmcy9yeHJwYy5jCmluZGV4IGQ4MjkxNjY1N2EzZGRmLi5hZTQ4YzE1YjNkYjk0MyAxMDA2NDQKLS0tIGEvZnMvYWZzL3J4cnBjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL3J4cnBjLmMKQEAgLTI1LDE0ICYjNDM7MjUsMTIgQEAgc3RhdGljIHZvaWQgYWZzX3Byb2Nlc3NfYXN5bmNfY2FsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiBzdGF0aWMgdm9pZCBhZnNfcnhfbmV3X2NhbGwoc3RydWN0IHNvY2sgKiwgc3RydWN0IHJ4cnBjX2NhbGwgKiwgdW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbChzdHJ1Y3QgcnhycGNfY2FsbCAqLCB1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyB2b2lkIGFmc19yeF9hdHRhY2goc3RydWN0IHJ4cnBjX2NhbGwgKnJ4Y2FsbCwgdW5zaWduZWQgbG9uZyB1c2VyX2NhbGxfSUQpOwotc3RhdGljIHZvaWQgYWZzX3J4X25vdGlmeV9vb2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb29iKTsKIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY21fb3BfaWQoc3RydWN0IGFmc19jYWxsICopOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ4cnBjX2tlcm5lbF9vcHMgYWZzX3J4cnBjX2NhbGxiYWNrX29wcyA9IHsKIAkubm90aWZ5X25ld19jYWxsCT0gYWZzX3J4X25ld19jYWxsLAogCS5kaXNjYXJkX25ld19jYWxsCT0gYWZzX3J4X2Rpc2NhcmRfbmV3X2NhbGwsCiAJLnVzZXJfYXR0YWNoX2NhbGwJPSBhZnNfcnhfYXR0YWNoLAotCS5ub3RpZnlfb29iCQk9IGFmc19yeF9ub3RpZnlfb29iLAogfTsKIAogLyogYXN5bmNocm9ub3VzIGluY29taW5nIGNhbGwgaW5pdGlhbCBwcm9jZXNzaW5nICovCkBAIC03NCwxMCAmIzQzOzcyLDYgQEAgaW50IGFmc19vcGVuX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KQogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycm9yXzI7CiAKLQlyZXQgPSByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2Uoc29ja2V0LSZndDtzaywgdHJ1ZSk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gZXJyb3JfMjsKLQogCXJldCA9IGFmc19jcmVhdGVfdG9rZW5fa2V5KG5ldCwgc29ja2V0KTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcHJfZXJyKCYjMzQ7Q291bGRuJiMzOTt0IGNyZWF0ZSBSeEdLIENNIGtleTogJWRcbiYjMzQ7LCByZXQpOwpAQCAtMTI4LDcgJiM0MzsxMjIsNiBAQCB2b2lkIGFmc19jbG9zZV9zb2NrZXQoc3RydWN0IGFmc19uZXQgKm5ldCkKIAlfZW50ZXIoJiMzNDsmIzM0Oyk7CiAKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7bmV0LSZndDtjaGFyZ2VfcHJlYWxsb2NhdGlvbl93b3JrKTsKLQljYW5jZWxfd29ya19zeW5jKCZhbXA7bmV0LSZndDtyeF9vb2Jfd29yayk7CiAJLyogRnV0dXJlIHdvcmsgaXRlbXMgc2hvdWxkIG5vdyBzZWUgLSZndDtsaXZlIGlzIGZhbHNlLiAqLwogCiAJa2VybmVsX2xpc3RlbihuZXQtJmd0O3NvY2tldCwgMCk7CkBAIC0xNDksNyAmIzQzOzE0Miw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KQogCiAJa2VybmVsX3NvY2tfc2h1dGRvd24obmV0LSZndDtzb2NrZXQsIFNIVVRfUkRXUik7CiAJZmx1c2hfd29ya3F1ZXVlKGFmc19hc3luY19jYWxscyk7Ci0JY2FuY2VsX3dvcmtfc3luYygmYW1wO25ldC0mZ3Q7cnhfb29iX3dvcmspOwogCW5ldC0mZ3Q7c29ja2V0LSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhID0gTlVMTDsKIAlzb2NrX3JlbGVhc2UobmV0LSZndDtzb2NrZXQpOwogCWtleV9wdXQobmV0LSZndDtmc19jbV90b2tlbl9rZXkpOwpAQCAtMzQ3LDcgJiM0MzszMzksMTAgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCXN0cnVjdCByeHJwY19jYWxsICpyeGNhbGw7CiAJc3RydWN0IG1zZ2hkciBtc2c7CiAJc3RydWN0IGt2ZWMgaW92WzFdOwomIzQzOwl1bnNpZ25lZCBpbnQgZGVidWdfaWQgPSBjYWxsLSZndDtkZWJ1Z19pZDsKJiM0MzsJc3RydWN0IGtleSAqYXBwX2RhdGEgPSBOVUxMOwogCXNpemVfdCBsZW47CiYjNDM7CWJvb2wgd3JpdGVfaXRlciA9IGNhbGwtJmd0O3dyaXRlX2l0ZXI7CiAJczY0IHR4X3RvdGFsX2xlbjsKIAlpbnQgcmV0OwogCkBAIC0zNzgsOCAmIzQzOzM3MywyNSBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApCiAJCWNhbGwtJmd0O2Ryb3BfcmVmID0gdHJ1ZTsKIAl9CiAKJiM0MzsJaWYgKGNhbGwtJmd0O2tleSAmYW1wOyZhbXA7IGNhbGwtJmd0O3NlcnZlcikgewomIzQzOwkJdTMyIGtyYjVfZW5jdHlwZSA9IDA7CiYjNDM7CQl1OCBzZWN1cml0eV9pbmRleCA9IDA7CiYjNDM7CiYjNDM7CQlyeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNhbGwtJmd0O2tleSwgJmFtcDtzZWN1cml0eV9pbmRleCwgJmFtcDtrcmI1X2VuY3R5cGUpOwomIzQzOwkJc3dpdGNoIChzZWN1cml0eV9pbmRleCkgewomIzQzOyNpZmRlZiBDT05GSUdfUlhHSwomIzQzOwkJY2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzoKJiM0MzsJCQlhcHBfZGF0YSA9IGNhbGwtJmd0O3NlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhOwomIzQzOwkJCWJyZWFrOwomIzQzOyNlbmRpZgomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCS8qIGNyZWF0ZSBhIGNhbGwgKi8KLQlyeGNhbGwgPSByeHJwY19rZXJuZWxfYmVnaW5fY2FsbChjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cGVlciwgY2FsbC0mZ3Q7a2V5LAomIzQzOwlyeGNhbGwgPSByeHJwY19rZXJuZWxfYmVnaW5fY2FsbChjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cGVlciwKJiM0MzsJCQkJCSBjYWxsLSZndDtrZXksIGFwcF9kYXRhLAogCQkJCQkgKHVuc2lnbmVkIGxvbmcpY2FsbCwKIAkJCQkJIHR4X3RvdGFsX2xlbiwKIAkJCQkJIGNhbGwtJmd0O21heF9saWZlc3BhbiwKQEAgLTQxMCw3ICYjNDM7NDIyLDcgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCWlvdl9pdGVyX2t2ZWMoJmFtcDttc2cubXNnX2l0ZXIsIElURVJfU09VUkNFLCBpb3YsIDEsIGNhbGwtJmd0O3JlcXVlc3Rfc2l6ZSk7CiAJbXNnLm1zZ19jb250cm9sCQk9IE5VTEw7CiAJbXNnLm1zZ19jb250cm9sbGVuCT0gMDsKLQltc2cubXNnX2ZsYWdzCQk9IE1TR19XQUlUQUxMIHwgKGNhbGwtJmd0O3dyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApOwomIzQzOwltc2cubXNnX2ZsYWdzCQk9IE1TR19XQUlUQUxMIHwgKHdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApOwogCiAJcmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgcnhjYWxsLAogCQkJCSAgICAgJmFtcDttc2csIGNhbGwtJmd0O3JlcXVlc3Rfc2l6ZSwKQEAgLTQxOCw3ICYjNDM7NDMwLDkgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycm9yX2RvX2Fib3J0OwogCi0JaWYgKGNhbGwtJmd0O3dyaXRlX2l0ZXIpIHsKJiM0MzsJLyogV2UgbG9zdCBvdXIgcmVmIG9uIGNhbGwgaWYgTVNHX01PUkUgd2FzIHNldC4gKi8KJiM0MzsKJiM0MzsJaWYgKHdyaXRlX2l0ZXIpIHsKIAkJbXNnLm1zZ19pdGVyID0gKmNhbGwtJmd0O3dyaXRlX2l0ZXI7CiAJCW1zZy5tc2dfZmxhZ3MgJmFtcDs9IH5NU0dfTU9SRTsKIAkJdHJhY2VfYWZzX3NlbmRfZGF0YShjYWxsLCAmYW1wO21zZyk7CkBAIC00MjcsOSAmIzQzOzQ0MSw5IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcCkKIAkJCQkJICAgICBjYWxsLSZndDtyeGNhbGwsICZhbXA7bXNnLAogCQkJCQkgICAgIGlvdl9pdGVyX2NvdW50KCZhbXA7bXNnLm1zZ19pdGVyKSwKIAkJCQkJICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTsKLQkJKmNhbGwtJmd0O3dyaXRlX2l0ZXIgPSBtc2cubXNnX2l0ZXI7CiYjNDM7CQkvKiBXZSBsb3N0IG91ciByZWYgb24gY2FsbC4gKi8KIAotCQl0cmFjZV9hZnNfc2VudF9kYXRhKGNhbGwsICZhbXA7bXNnLCByZXQpOwomIzQzOwkJdHJhY2VfYWZzX3NlbnRfZGF0YShkZWJ1Z19pZCwgJmFtcDttc2csIHJldCk7CiAJCWlmIChyZXQgJmx0OyAwKQogCQkJZ290byBlcnJvcl9kb19hYm9ydDsKIAl9CkBAIC05ODMsMTQgJiM0Mzs5OTcsMyBAQCBub2lubGluZSBpbnQgYWZzX3Byb3RvY29sX2Vycm9yKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwKIAkJY2FsbC0mZ3Q7dW5tYXJzaGFsbGluZ19lcnJvciA9IHRydWU7CiAJcmV0dXJuIC1FQkFETVNHOwogfQotCi0vKgotICogV2FrZSB1cCBPT0Igbm90aWZpY2F0aW9uIHByb2Nlc3NpbmcuCi0gKi8KLXN0YXRpYyB2b2lkIGFmc19yeF9ub3RpZnlfb29iKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9vYikKLXsKLQlzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gc2stJmd0O3NrX3VzZXJfZGF0YTsKLQotCWlmIChSRUFEX09OQ0UobmV0LSZndDtsaXZlKSkKLQkJcXVldWVfd29yayhhZnNfd3EsICZhbXA7bmV0LSZndDtyeF9vb2Jfd29yayk7Ci19CmRpZmYgLS1naXQgYS9mcy9hZnMvc2VydmVyLmMgYi9mcy9hZnMvc2VydmVyLmMKaW5kZXggMGZlMTYyZWEyYTM2ZGIuLjc2YTlmMjVjZTQ5MDU4IDEwMDY0NAotLS0gYS9mcy9hZnMvc2VydmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL3NlcnZlci5jCkBAIC0zOTgsNyAmIzQzOzM5OCw3IEBAIHN0YXRpYyB2b2lkIGFmc19zZXJ2ZXJfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KQogCWFmc19wdXRfZW5kcG9pbnRfc3RhdGUocmN1X2FjY2Vzc19wb2ludGVyKHNlcnZlci0mZ3Q7ZW5kcG9pbnRfc3RhdGUpLAogCQkJICAgICAgIGFmc19lc3RhdGVfdHJhY2VfcHV0X3NlcnZlcik7CiAJYWZzX3B1dF9jZWxsKHNlcnZlci0mZ3Q7Y2VsbCwgYWZzX2NlbGxfdHJhY2VfcHV0X3NlcnZlcik7Ci0Ja2ZyZWUoc2VydmVyLSZndDtjbV9yeGdrX2FwcGRhdGEuZGF0YSk7CiYjNDM7CWtleV9wdXQoc2VydmVyLSZndDtjbV9yeGdrX2FwcGRhdGEpOwogCWtmcmVlKHNlcnZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaCBiL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaAppbmRleCAzODZjMzE0MzI3ODk5NS4uNzAwMmE5OTNhNDcyMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2tleXMvdXNlci10eXBlLmgKQEAgLTI2LDYgJiM0MzsyNiw3IEBACiAgKi8KIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIHsKIAlzdHJ1Y3QgcmN1X2hlYWQJcmN1OwkJLyogUkNVIGRlc3RydWN0b3IgKi8KJiM0MzsJcmVmY291bnRfdAlyZWY7CiAJdW5zaWduZWQgc2hvcnQJZGF0YWxlbjsJLyogbGVuZ3RoIG9mIHRoaXMgZGF0YSAqLwogCWNoYXIJCWRhdGFbXSBfX2FsaWduZWQoX19hbGlnbm9mX18odTY0KSk7IC8qIGFjdHVhbCBkYXRhICovCiB9OwpAQCAtMzcsNiAmIzQzOzM4LDcgQEAgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZDsKIAogZXh0ZXJuIGludCB1c2VyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApOwogZXh0ZXJuIHZvaWQgdXNlcl9mcmVlX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApOwomIzQzO3ZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpOwogZXh0ZXJuIGludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApOwogZXh0ZXJuIHZvaWQgdXNlcl9yZXZva2Uoc3RydWN0IGtleSAqa2V5KTsKIGV4dGVybiB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfcnhycGMuaCBiL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmgKaW5kZXggMGZiNGM0MWM5YmJmNTUuLjU2NTFhMTBiYTI2ZTYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZl9yeHJwYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmgKQEAgLTU1LDYgJiM0Mzs1NSw3IEBAIHZvaWQgcnhycGNfa2VybmVsX3NldF9ub3RpZmljYXRpb25zKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywKIAkJCQkJICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsCiAJCQkJCSAgIHN0cnVjdCBrZXkgKmtleSwKJiM0MzsJCQkJCSAgIHN0cnVjdCBrZXkgKmFwcF9kYXRhLAogCQkJCQkgICB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCwKIAkJCQkJICAgczY0IHR4X3RvdGFsX2xlbiwKIAkJCQkJICAgdTMyIGhhcmRfdGltZW91dCwKQEAgLTkxLDI0ICYjNDM7OTIsNyBAQCBib29sIHJ4cnBjX2tlcm5lbF9jaGVja19saWZlKGNvbnN0IHN0cnVjdCBzb2NrZXQgKiwgY29uc3Qgc3RydWN0IHJ4cnBjX2NhbGwgKik7CiAKIGludCByeHJwY19zb2NrX3NldF9taW5fc2VjdXJpdHlfbGV2ZWwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgdmFsKTsKIGludCByeHJwY19zb2NrX3NldF9zZWN1cml0eV9rZXlyaW5nKHN0cnVjdCBzb2NrICosIHN0cnVjdCBrZXkgKik7Ci1pbnQgcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzZXQpOwotCi1lbnVtIHJ4cnBjX29vYl90eXBlIHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYiwKLQkJCQkJICAgc3RydWN0IHJ4cnBjX3BlZXIgKipfcGVlciwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyAqX3BlZXJfYXBwZGF0YSk7Ci1zdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfa2VybmVsX2RlcXVldWVfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0JCQkJCSBlbnVtIHJ4cnBjX29vYl90eXBlICpfdHlwZSk7Ci12b2lkIHJ4cnBjX2tlcm5lbF9mcmVlX29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iKTsKLXZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLAotCQkJCSAgc3RydWN0IHJ4cnBjX3BlZXIgKipfcGVlciwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsCi0JCQkJICB1MTYgKl9zZXJ2aWNlX2lkLCB1OCAqX3NlY3VyaXR5X2luZGV4KTsKLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSwKLQkJCQkgIGludCBlcnJvciwgZW51bSByeHJwY19hYm9ydF9yZWFzb24gd2h5KTsKLWludCByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSk7Ci11MzIgcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpOwotaW50IHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICAgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpOwomIzQzO3ZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2tleShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHU4ICpfc2VjdXJpdHlfaW5kZXgsIHUzMiAqX2tyYjVfZW5jdHlwZSk7CiB1OCByeHJwY19rZXJuZWxfcXVlcnlfY2FsbF9zZWN1cml0eShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwKIAkJCQkgICAgdTE2ICpfc2VydmljZV9pZCwgdTMyICpfZW5jdHlwZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmgKaW5kZXggMWIzYzQ4YjU1OTFkZmQuLjNkOTYwODJlNmVhYzc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaApAQCAtMTQ4LDYgJiM0MzsxNDgsNyBAQCBlbnVtIHlmc19jbV9vcGVyYXRpb24gewogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfdW51c2Vfc2xpc3RfaXNvcnQsCSYjMzQ7VU5VIGlzb3J0JiMzNDspIFwKIAlFTShhZnNfc2VydmVyX3RyYWNlX3VwZGF0ZSwJCSYjMzQ7VVBEQVRFICAgJiMzNDspIFwKIAlFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9ieV91dWlkLAkmIzM0O1VTRSB1dWlkICYjMzQ7KSBcCiYjNDM7CUVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NhbGwsCQkmIzM0O1VTRSBjYWxsICYjMzQ7KSBcCiAJRU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY21fY2FsbCwJJiMzNDtVU0UgY20tY2wmIzM0OykgXAogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dldF9jYXBzLAkmIzM0O1VTRSBnY2FwcyYjMzQ7KSBcCiAJRU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYiwJJiMzNDtVU0UgZ3Z1cGMmIzM0OykgXApAQCAtOTM3LDkgJiM0Mzs5MzgsOSBAQCBUUkFDRV9FVkVOVChhZnNfc2VuZF9kYXRhLAogCSAgICApOwogCiBUUkFDRV9FVkVOVChhZnNfc2VudF9kYXRhLAotCSAgICBUUF9QUk9UTyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHJldCksCiYjNDM7CSAgICBUUF9QUk9UTyh1bnNpZ25lZCBpbnQgY2FsbF9kZWJ1Z19pZCwgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgcmV0KSwKIAotCSAgICBUUF9BUkdTKGNhbGwsIG1zZywgcmV0KSwKJiM0MzsJICAgIFRQX0FSR1MoY2FsbF9kZWJ1Z19pZCwgbXNnLCByZXQpLAogCiAJICAgIFRQX1NUUlVDVF9fZW50cnkoCiAJCSAgICBfX2ZpZWxkKHVuc2lnbmVkIGludCwJCWNhbGwpCkBAIC05NDksNyAmIzQzOzk1MCw3IEBAIFRSQUNFX0VWRU5UKGFmc19zZW50X2RhdGEsCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCSAgICBfX2VudHJ5LSZndDtjYWxsID0gY2FsbC0mZ3Q7ZGVidWdfaWQ7CiYjNDM7CQkgICAgX19lbnRyeS0mZ3Q7Y2FsbCA9IGNhbGxfZGVidWdfaWQ7CiAJCSAgICBfX2VudHJ5LSZndDtyZXQgPSByZXQ7CiAJCSAgICBfX2VudHJ5LSZndDtvZmZzZXQgPSBtc2ctJmd0O21zZ19pdGVyLnhhcnJheV9zdGFydCAmIzQzOyBtc2ctJmd0O21zZ19pdGVyLmlvdl9vZmZzZXQ7CiAJCSAgICBfX2VudHJ5LSZndDtjb3VudCA9IGlvdl9pdGVyX2NvdW50KCZhbXA7bXNnLSZndDttc2dfaXRlcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaAppbmRleCA3MDRhMTBkZTY2NzAwNC4uOGZjNDE5MmUwMzkyYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaApAQCAtMjYyLDcgJiM0MzsyNjIsNiBAQAogCUVNKHJ4cnBjX2Nvbm5fZnJlZSwJCQkmIzM0O0ZSRUUgICAgICAgICYjMzQ7KSBcCiAJRU0ocnhycGNfY29ubl9nZXRfYWN0aXZhdGVfY2FsbCwJJiMzNDtHRVQgYWN0LWNhbGwmIzM0OykgXAogCUVNKHJ4cnBjX2Nvbm5fZ2V0X2NhbGxfaW5wdXQsCQkmIzM0O0dFVCBpbnAtY2FsbCYjMzQ7KSBcCi0JRU0ocnhycGNfY29ubl9nZXRfY2hhbGxlbmdlX2lucHV0LAkmIzM0O0dFVCBpbnAtY2hhbCYjMzQ7KSBcCiAJRU0ocnhycGNfY29ubl9nZXRfY29ubl9pbnB1dCwJCSYjMzQ7R0VUIGlucC1jb25uJiMzNDspIFwKIAlFTShyeHJwY19jb25uX2dldF9pZGxlLAkJCSYjMzQ7R0VUIGlkbGUgICAgJiMzNDspIFwKIAlFTShyeHJwY19jb25uX2dldF9wb2tlX2Fib3J0LAkJJiMzNDtHRVQgcGstYWJvcnQmIzM0OykgXApAQCAtMjc0LDcgJiM0MzsyNzMsNiBAQAogCUVNKHJ4cnBjX2Nvbm5fbmV3X3NlcnZpY2UsCQkmIzM0O05FVyBzZXJ2aWNlICYjMzQ7KSBcCiAJRU0ocnhycGNfY29ubl9wdXRfY2FsbCwJCQkmIzM0O1BVVCBjYWxsICAgICYjMzQ7KSBcCiAJRU0ocnhycGNfY29ubl9wdXRfY2FsbF9pbnB1dCwJCSYjMzQ7UFVUIGlucC1jYWxsJiMzNDspIFwKLQlFTShyeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQsCSYjMzQ7UFVUIGlucC1jaGFsJiMzNDspIFwKIAlFTShyeHJwY19jb25uX3B1dF9jb25uX2lucHV0LAkJJiMzNDtQVVQgaW5wLWNvbm4mIzM0OykgXAogCUVNKHJ4cnBjX2Nvbm5fcHV0X2Rpc2NhcmRfaWRsZSwJCSYjMzQ7UFVUIGRpc2MtaWRsJiMzNDspIFwKIAlFTShyeHJwY19jb25uX3B1dF9sb2NhbF9kZWFkLAkJJiMzNDtQVVQgbG9jLWRlYWQmIzM0OykgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaAppbmRleCBkOTczNWFiZDRjNzkxMC4uN2Q2YTUwMTUxOTMxMTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oCkBAIC01OCwxMSAmIzQzOzU4LDcgQEAgZW51bSByeHJwY19jbXNnX3R5cGUgewogCVJYUlBDX1RYX0xFTkdUSAkJPSAxMiwJLyogLXMtOiBUb3RhbCBsZW5ndGggb2YgVHggZGF0YSAqLwogCVJYUlBDX1NFVF9DQUxMX1RJTUVPVVQJPSAxMywJLyogLXMtOiBTZXQgb25lIG9yIG1vcmUgY2FsbCB0aW1lb3V0cyAqLwogCVJYUlBDX0NIQVJHRV9BQ0NFUFQJPSAxNCwJLyogU3MtOiBDaGFyZ2UgdGhlIGFjY2VwdCBwb29sIHdpdGggYSB1c2VyIGNhbGwgSUQgKi8KLQlSWFJQQ19PT0JfSUQJCT0gMTUsCS8qIC1zcjogT09CIG1lc3NhZ2UgSUQgKi8KLQlSWFJQQ19DSEFMTEVOR0VECT0gMTYsCS8qIEMtcjogSW5mbyBvbiBhIHJlY2VpdmVkIENIQUxMRU5HRSAqLwotCVJYUlBDX1JFU1BPTkQJCT0gMTcsCS8qIENzLTogUmVzcG9uZCB0byBhIGNoYWxsZW5nZSAqLwotCVJYUlBDX1JFU1BPTkRFRAkJPSAxOCwJLyogUy1yOiBEYXRhIHJlY2VpdmVkIGluIFJFU1BPTlNFICovCi0JUlhSUENfUkVTUF9SWEdLX0FQUERBVEEJPSAxOSwJLyogQ3MtOiBSRVNQT05TRTogUnhHSyBhcHAgZGF0YSB0byBpbmNsdWRlICovCiYjNDM7CVJYUlBDX1JFU1BPTlNFX0FQUERBVEEJPSAyMCwJLyogQ3MtOiBVc2VyIGtleSBob2xkaW5nIGFwcCBkYXRhIGZvciBSRVNQT05TRSAqLwogCVJYUlBDX19TVVBQT1JURUQKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMKaW5kZXggYzNjOGMzMjQwZWY5NDYuLmFhM2MwNThmNDA5NTU5IDEwMDY0NAotLS0gYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYwpAQCAtMjA4LDYgJiM0MzsyMDgsNyBAQCBkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCkKIAkJa2xlYXZlKCYjMzQ7ID0gLUVOT01FTSYjMzQ7KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDt1cGF5bG9hZC0mZ3Q7cmVmLCAxKTsKIAogCXVwYXlsb2FkLSZndDtkYXRhbGVuID0gcmVzdWx0X2xlbjsKIAltZW1jcHkodXBheWxvYWQtJmd0O2RhdGEsIGRhdGEsIHJlc3VsdF9sZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL01ha2VmaWxlIGIvbmV0L3J4cnBjL01ha2VmaWxlCmluZGV4IGY5OTRmOWYzMGEyOWQ0Li5mN2E1ZTBhNTkyZWUxMyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9NYWtlZmlsZQpAQCAtMjQsNyAmIzQzOzI0LDYgQEAgcnhycGMteSA6PSBcCiAJbG9jYWxfb2JqZWN0Lm8gXAogCW1pc2MubyBcCiAJbmV0X25zLm8gXAotCW9vYi5vIFwKIAlvdXRwdXQubyBcCiAJcGVlcl9ldmVudC5vIFwKIAlwZWVyX29iamVjdC5vIFwKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hZl9yeHJwYy5jIGIvbmV0L3J4cnBjL2FmX3J4cnBjLmMKaW5kZXggOWFiMGYyMmM4ODFlYzUuLjlkNWNlMWM3YWQwZDIyIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYWZfcnhycGMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvYWZfcnhycGMuYwpAQCAtMzE4LDYgJiM0MzszMTgsNyBAQCBFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9wdXRfcGVlcik7CiAgKiBAc29jazogVGhlIHNvY2tldCBvbiB3aGljaCB0byBtYWtlIHRoZSBjYWxsCiAgKiBAcGVlcjogVGhlIHBlZXIgdG8gY29udGFjdAogICogQGtleTogVGhlIHNlY3VyaXR5IGNvbnRleHQgdG8gdXNlIChkZWZhdWx0cyB0byBzb2NrZXQgc2V0dGluZykKJiM0MzsgKiBAYXBwX2RhdGE6IFRoZSBzZWN1cml0eSByZXNwb25zZSBhcHBsaWNhdGlvbiBkYXRhIChvciBOVUxMKQogICogQHVzZXJfY2FsbF9JRDogVGhlIElEIHRvIHVzZQogICogQHR4X3RvdGFsX2xlbjogVG90YWwgbGVuZ3RoIG9mIGRhdGEgdG8gdHJhbnNtaXQgZHVyaW5nIHRoZSBjYWxsIChvciAtMSkKICAqIEBoYXJkX3RpbWVvdXQ6IFRoZSBtYXhpbXVtIGxpZmVzcGFuIG9mIHRoZSBjYWxsIGluIHNlYwpAQCAtMzQwLDYgJiM0MzszNDEsNyBAQCBFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9wdXRfcGVlcik7CiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywKIAkJCQkJICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsCiAJCQkJCSAgIHN0cnVjdCBrZXkgKmtleSwKJiM0MzsJCQkJCSAgIHN0cnVjdCBrZXkgKmFwcF9kYXRhLAogCQkJCQkgICB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCwKIAkJCQkJICAgczY0IHR4X3RvdGFsX2xlbiwKIAkJCQkJICAgdTMyIGhhcmRfdGltZW91dCwKQEAgLTM2OCw2ICYjNDM7MzcwLDcgQEAgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCWtleSA9IE5VTEw7IC8qIGEgbm8tc2VjdXJpdHkga2V5ICovCiAKIAltZW1zZXQoJmFtcDtwLCAwLCBzaXplb2YocCkpOwomIzQzOwlwLmFwcF9kYXRhCQk9IGFwcF9kYXRhOwogCXAudXNlcl9jYWxsX0lECQk9IHVzZXJfY2FsbF9JRDsKIAlwLnR4X3RvdGFsX2xlbgkJPSB0eF90b3RhbF9sZW47CiAJcC5pbnRlcnJ1cHRpYmlsaXR5CT0gaW50ZXJydXB0aWJpbGl0eTsKQEAgLTU5NSwxMCAmIzQzOzU5OCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuKQogCQlmYWxsdGhyb3VnaDsKIAljYXNlIFJYUlBDX1NFUlZFUl9CT1VORDoKIAljYXNlIFJYUlBDX1NFUlZFUl9MSVNURU5JTkc6Ci0JCWlmIChtLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX09PQikKLQkJCXJldCA9IHJ4cnBjX3NlbmRtc2dfb29iKHJ4LCBtLCBsZW4pOwotCQllbHNlCi0JCQlyZXQgPSByeHJwY19kb19zZW5kbXNnKHJ4LCBtLCBsZW4pOwomIzQzOwkJcmV0ID0gcnhycGNfZG9fc2VuZG1zZyhyeCwgbSwgbGVuKTsKIAkJLyogVGhlIHNvY2tldCBoYXMgYmVlbiB1bmxvY2tlZCAqLwogCQlnb3RvIG91dDsKIAlkZWZhdWx0OgpAQCAtNjMzLDcgJiM0Mzs2MzMsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCSAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKQogewogCXN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stJmd0O3NrKTsKLQl1bnNpZ25lZCBpbnQgbWluX3NlY19sZXZlbCwgdmFsOwomIzQzOwl1bnNpZ25lZCBpbnQgbWluX3NlY19sZXZlbDsKIAl1MTYgc2VydmljZV91cGdyYWRlWzJdOwogCWludCByZXQ7CiAKQEAgLTcxMCwyMyAmIzQzOzcxMCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCiAJCWNhc2UgUlhSUENfTUFOQUdFX1JFU1BPTlNFOgogCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHVuc2lnbmVkIGludCkpCi0JCQkJZ290byBlcnJvcjsKLQkJCXJldCA9IC1FSVNDT05OOwotCQkJaWYgKHJ4LSZndDtzay5za19zdGF0ZSAhPSBSWFJQQ19VTkJPVU5EKQotCQkJCWdvdG8gZXJyb3I7Ci0JCQlyZXQgPSBjb3B5X3NhZmVfZnJvbV9zb2NrcHRyKCZhbXA7dmFsLCBzaXplb2YodmFsKSwKLQkJCQkJCSAgICAgb3B0dmFsLCBvcHRsZW4pOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIGVycm9yOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWlmICh2YWwgJmd0OyAxKQotCQkJCWdvdG8gZXJyb3I7Ci0JCQlpZiAodmFsKQotCQkJCXNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsICZhbXA7cngtJmd0O2ZsYWdzKTsKLQkJCWVsc2UKLQkJCQljbGVhcl9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsICZhbXA7cngtJmd0O2ZsYWdzKTsKLQkJCWdvdG8gc3VjY2VzczsKJiM0MzsJCQlnb3RvIGVycm9yOwogCiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKQEAgLTgzNSw4ICYjNDM7ODE5LDYgQEAgc3RhdGljIGludCByeHJwY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJcngtJmd0O2NhbGxzID0gUkJfUk9PVDsKIAogCXNwaW5fbG9ja19pbml0KCZhbXA7cngtJmd0O2luY29taW5nX2xvY2spOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19vb2JxKTsKLQlyeC0mZ3Q7cGVuZGluZ19vb2JxID0gUkJfUk9PVDsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3J4LSZndDtzb2NrX2NhbGxzKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3J4LSZndDt0b19iZV9hY2NlcHRlZCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKTsKQEAgLTg4NCwyMyAmIzQzOzg2Niw2IEBAIHN0YXRpYyBpbnQgcnhycGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGZsYWdzKQogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBQdXJnZSB0aGUgb3V0LW9mLWJhbmQgcXVldWUuCi0gKi8KLXN0YXRpYyB2b2lkIHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzdHJ1Y3Qgc29jayAqc2spCi17Ci0Jc3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc2spOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7cngtJmd0O3JlY3Ztc2dfb29icSkpKQotCQlyeHJwY19rZXJuZWxfZnJlZV9vb2Ioc2tiKTsKLQl3aGlsZSAoIVJCX0VNUFRZX1JPT1QoJmFtcDtyeC0mZ3Q7cGVuZGluZ19vb2JxKSkgewotCQlza2IgPSByYl9lbnRyeShyeC0mZ3Q7cGVuZGluZ19vb2JxLnJiX25vZGUsIHN0cnVjdCBza19idWZmLCByYm5vZGUpOwotCQlyYl9lcmFzZSgmYW1wO3NrYi0mZ3Q7cmJub2RlLCAmYW1wO3J4LSZndDtwZW5kaW5nX29vYnEpOwotCQlyeHJwY19rZXJuZWxfZnJlZV9vb2Ioc2tiKTsKLQl9Ci19Ci0KIC8qCiAgKiBSeFJQQyBzb2NrZXQgZGVzdHJ1Y3RvcgogICovCkBAIC05MDgsNyAmIzQzOzg3Myw2IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX3NvY2tfZGVzdHJ1Y3RvcihzdHJ1Y3Qgc29jayAqc2spCiB7CiAJX2VudGVyKCYjMzQ7JXAmIzM0Oywgc2spOwogCi0JcnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTsKIAlyeHJwY19wdXJnZV9xdWV1ZSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKTsKIAogCVdBUk5fT04ocmVmY291bnRfcmVhZCgmYW1wO3NrLSZndDtza193bWVtX2FsbG9jKSk7CkBAIC05NjEsNyAmIzQzOzkyNSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVsZWFzZV9zb2NrKHN0cnVjdCBzb2NrICpzaykKIAlyeHJwY19kaXNjYXJkX3ByZWFsbG9jKHJ4KTsKIAlyeHJwY19yZWxlYXNlX2NhbGxzX29uX3NvY2tldChyeCk7CiAJZmx1c2hfd29ya3F1ZXVlKHJ4cnBjX3dvcmtxdWV1ZSk7Ci0JcnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTsKIAlyeHJwY19wdXJnZV9xdWV1ZSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKTsKIAogCXJ4cnBjX3VudXNlX2xvY2FsKHJ4LSZndDtsb2NhbCwgcnhycGNfbG9jYWxfdW51c2VfcmVsZWFzZV9zb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oIGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKaW5kZXggY2U5NDZiMGEwM2UyYjMuLjEwMWFjNzU0NDc1ODRkIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXItaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaApAQCAtMTcxLDkgJiM0MzsxNzEsNiBAQCBzdHJ1Y3QgcnhycGNfc29jayB7CiAJY29uc3Qgc3RydWN0IHJ4cnBjX2tlcm5lbF9vcHMgKmFwcF9vcHM7CS8qIFRhYmxlIG9mIGtlcm5lbCBhcHAgbm90aWZpY2F0aW9uIGZ1bmNzICovCiAJc3RydWN0IHJ4cnBjX2xvY2FsCSpsb2NhbDsJCS8qIGxvY2FsIGVuZHBvaW50ICovCiAJc3RydWN0IHJ4cnBjX2JhY2tsb2cJKmJhY2tsb2c7CS8qIFByZWFsbG9jYXRpb24gZm9yIHNlcnZpY2VzICovCi0Jc3RydWN0IHNrX2J1ZmZfaGVhZAlyZWN2bXNnX29vYnE7CS8qIE9PQiBtZXNzYWdlcyBmb3IgcmVjdm1zZyB0byBwaWNrIHVwICovCi0Jc3RydWN0IHJiX3Jvb3QJCXBlbmRpbmdfb29icTsJLyogT09CIG1lc3NhZ2VzIGF3YWl0aW5nIHVzZXJzcGFjZSB0byByZXNwb25kIHRvICovCi0JdTY0CQkJb29iX2lkX2NvdW50ZXI7CS8qIE9PQiBtZXNzYWdlIElEIGNvdW50ZXIgKi8KIAlzcGlubG9ja190CQlpbmNvbWluZ19sb2NrOwkvKiBJbmNvbWluZyBjYWxsIHZzIHNlcnZpY2Ugc2h1dGRvd24gbG9jayAqLwogCXN0cnVjdCBsaXN0X2hlYWQJc29ja19jYWxsczsJLyogTGlzdCBvZiBjYWxscyBvd25lZCBieSB0aGlzIHNvY2tldCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJdG9fYmVfYWNjZXB0ZWQ7CS8qIGNhbGxzIGF3YWl0aW5nIGFjY2VwdGFuY2UgKi8KQEAgLTE4NCw3ICYjNDM7MTgxLDYgQEAgc3RydWN0IHJ4cnBjX3NvY2sgewogCXN0cnVjdCByYl9yb290CQljYWxsczsJCS8qIFVzZXIgSUQgLSZndDsgY2FsbCBtYXBwaW5nICovCiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAjZGVmaW5lIFJYUlBDX1NPQ0tfQ09OTkVDVEVECQkwCS8qIGNvbm5lY3Rfc3J4IGlzIHNldCAqLwotI2RlZmluZSBSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRQkxCS8qIFVzZXIgd2FudHMgdG8gbWFuYWdlIFJFU1BPTlNFIHBhY2tldHMgKi8KIAlyd2xvY2tfdAkJY2FsbF9sb2NrOwkvKiBsb2NrIGZvciBjYWxscyAqLwogCXUzMgkJCW1pbl9zZWNfbGV2ZWw7CS8qIG1pbmltdW0gc2VjdXJpdHkgbGV2ZWwgKi8KICNkZWZpbmUgUlhSUENfU0VDVVJJVFlfTUFYCVJYUlBDX1NFQ1VSSVRZX0VOQ1JZUFQKQEAgLTI0MSw3ICYjNDM7MjM3LDYgQEAgc3RydWN0IHJ4cnBjX3NrYl9wcml2IHsKIAkJCXU4CQlyZWFzb247CQkvKiBSZWFzb24gZm9yIGFjayAqLwogCQl9IGFjazsKIAkJc3RydWN0IHsKLQkJCXN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uOwkvKiBDb25uZWN0aW9uIHJlZmVycmVkIHRvICovCiAJCQl1bmlvbiB7CiAJCQkJdTMyIHJ4a2FkX25vbmNlOwogCQkJfTsKQEAgLTMxMCwxMyAmIzQzOzMwNSw2IEBAIHN0cnVjdCByeHJwY19zZWN1cml0eSB7CiAJYm9vbCAoKnZhbGlkYXRlX2NoYWxsZW5nZSkoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKLQkvKiBGaWxsIG91dCB0aGUgY21zZyBmb3IgcmVjdm1zZygpIHRvIHBhc3Mgb24gYSBjaGFsbGVuZ2UgdG8gdXNlcnNwYWNlLgotCSAqIFRoZSBzZWN1cml0eSBjbGFzcyBnZXRzIHRvIGFkZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgotCSAqLwotCWludCAoKmNoYWxsZW5nZV90b19yZWN2bXNnKShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKLQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkgICAgc3RydWN0IG1zZ2hkciAqbXNnKTsKLQogCS8qIFBhcnNlIHNlbmRtc2coKSBjb250cm9sIG1lc3NhZ2UgYW5kIHJlc3BvbmQgdG8gY2hhbGxlbmdlLiAqLwogCWludCAoKnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UpKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCiAJCQkJCSAgICBzdHJ1Y3QgbXNnaGRyICptc2cpOwpAQCAtNTE2LDYgJiM0Mzs1MDQsNyBAQCBzdHJ1Y3QgcnhycGNfYnVuZGxlIHsKIAlzdHJ1Y3QgcnhycGNfbG9jYWwJKmxvY2FsOwkJLyogUmVwcmVzZW50YXRpb24gb2YgbG9jYWwgZW5kcG9pbnQgKi8KIAlzdHJ1Y3QgcnhycGNfcGVlcgkqcGVlcjsJCS8qIFJlbW90ZSBlbmRwb2ludCAqLwogCXN0cnVjdCBrZXkJCSprZXk7CQkvKiBTZWN1cml0eSBkZXRhaWxzICovCiYjNDM7CXN0cnVjdCBrZXkJCSphcHBfZGF0YTsJLyogU2VjdXJpdHkgcmVzcG9uc2UgYXBwIGRhdGEgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXByb2NfbGluazsJLyogTGluayBpbiBuZXQtJmd0O2J1bmRsZV9wcm9jX2xpc3QgKi8KIAljb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5OwkvKiBhcHBsaWVkIHNlY3VyaXR5IG1vZHVsZSAqLwogCXJlZmNvdW50X3QJCXJlZjsKQEAgLTcxOSw2ICYjNDM7NzA4LDcgQEAgc3RydWN0IHJ4cnBjX2NhbGwgewogCXN0cnVjdCByeHJwY19zb2NrIF9fcmN1CSpzb2NrZXQ7CS8qIHNvY2tldCByZXNwb25zaWJsZSAqLwogCXN0cnVjdCByeHJwY19uZXQJKnJ4bmV0OwkJLyogTmV0d29yayBuYW1lc3BhY2UgdG8gd2hpY2ggY2FsbCBiZWxvbmdzICovCiAJc3RydWN0IGtleQkJKmtleTsJCS8qIFNlY3VyaXR5IGRldGFpbHMgKi8KJiM0MzsJc3RydWN0IGtleQkJKmFwcF9kYXRhOwkvKiBTZWN1cml0eSByZXNwb25zZSBhcHAgZGF0YSAqLwogCWNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSAqc2VjdXJpdHk7CS8qIGFwcGxpZWQgc2VjdXJpdHkgbW9kdWxlICovCiAJc3RydWN0IG11dGV4CQl1c2VyX211dGV4OwkvKiBVc2VyIGFjY2VzcyBtdXRleCAqLwogCXN0cnVjdCBzb2NrYWRkcl9yeHJwYwlkZXN0X3NyeDsJLyogRGVzdGluYXRpb24gYWRkcmVzcyAqLwpAQCAtOTEzLDYgJiM0Mzs5MDMsNyBAQCBlbnVtIHJ4cnBjX2NvbW1hbmQgewogfTsKIAogc3RydWN0IHJ4cnBjX2NhbGxfcGFyYW1zIHsKJiM0MzsJc3RydWN0IGtleQkJKmFwcF9kYXRhOwkvKiBTZWN1cml0eSByZXNwb25zZSBhcHAgZGF0YSAqLwogCXM2NAkJCXR4X3RvdGFsX2xlbjsJLyogVG90YWwgVHggZGF0YSBsZW5ndGggKGlmIHNlbmQgZGF0YSkgKi8KIAl1bnNpZ25lZCBsb25nCQl1c2VyX2NhbGxfSUQ7CS8qIFVzZXImIzM5O3MgY2FsbCBJRCAqLwogCXN0cnVjdCB7CkBAIC0xMzc1LDEzICYjNDM7MTM2Niw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJ4cnBjX25ldCAqcnhycGNfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAlyZXR1cm4gbmV0X2dlbmVyaWMobmV0LCByeHJwY19uZXRfaWQpOwogfQogCi0vKgotICogb29iLmMKLSAqLwotYm9vbCByeHJwY19ub3RpZnlfc29ja2V0X29vYihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkIHJ4cnBjX2FkZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBza19idWZmICpza2IpOwotaW50IHJ4cnBjX3NlbmRtc2dfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTsKLQogLyoKICAqIG91dHB1dC5jCiAgKi8KZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jYWxsX29iamVjdC5jIGIvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmMKaW5kZXggODE3ZWQ5YWNiOTFlNjEuLjJkZjNkMDE5MGE4OTE4IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvY2FsbF9vYmplY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY2FsbF9vYmplY3QuYwpAQCAtMTk4LDcgJiM0MzsxOTgsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2FsbG9jX2NsaWVudF9jYWxsKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAlrdGltZV90IG5vdzsKIAlpbnQgcmV0OwogCi0JX2VudGVyKCYjMzQ7JiMzNDspOwomIzQzOwlfZW50ZXIoJiMzNDslcCYjMzQ7LCBwLSZndDthcHBfZGF0YSk7CiAKIAljYWxsID0gcnhycGNfYWxsb2NfY2FsbChyeCwgZ2ZwLCBkZWJ1Z19pZCk7CiAJaWYgKCFjYWxsKQpAQCAtMjExLDYgJiM0MzsyMTEsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2FsbG9jX2NsaWVudF9jYWxsKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAljYWxsLSZndDtpbnRlcnJ1cHRpYmlsaXR5CT0gcC0mZ3Q7aW50ZXJydXB0aWJpbGl0eTsKIAljYWxsLSZndDt0eF90b3RhbF9sZW4JPSBwLSZndDt0eF90b3RhbF9sZW47CiAJY2FsbC0mZ3Q7a2V5CQk9IGtleV9nZXQoY3AtJmd0O2tleSk7CiYjNDM7CWNhbGwtJmd0O2FwcF9kYXRhCQk9IGtleV9nZXQocC0mZ3Q7YXBwX2RhdGEpOwogCWNhbGwtJmd0O3BlZXIJCT0gcnhycGNfZ2V0X3BlZXIoY3AtJmd0O3BlZXIsIHJ4cnBjX3BlZXJfZ2V0X2NhbGwpOwogCWNhbGwtJmd0O2xvY2FsCQk9IHJ4cnBjX2dldF9sb2NhbChjcC0mZ3Q7bG9jYWwsIHJ4cnBjX2xvY2FsX2dldF9jYWxsKTsKIAljYWxsLSZndDtzZWN1cml0eV9sZXZlbAk9IGNwLSZndDtzZWN1cml0eV9sZXZlbDsKQEAgLTY5Nyw2ICYjNDM7Njk4LDcgQEAgc3RhdGljIHZvaWQgcnhycGNfZGVzdHJveV9jYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlyeHJwY19wdXRfcGVlcihjYWxsLSZndDtwZWVyLCByeHJwY19wZWVyX3B1dF9jYWxsKTsKIAlyeHJwY19wdXRfbG9jYWwoY2FsbC0mZ3Q7bG9jYWwsIHJ4cnBjX2xvY2FsX3B1dF9jYWxsKTsKIAlrZXlfcHV0KGNhbGwtJmd0O2tleSk7CiYjNDM7CWtleV9wdXQoY2FsbC0mZ3Q7YXBwX2RhdGEpOwogCWNhbGxfcmN1KCZhbXA7Y2FsbC0mZ3Q7cmN1LCByeHJwY19yY3VfZnJlZV9jYWxsKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2Nvbm5fY2xpZW50LmMgYi9uZXQvcnhycGMvY29ubl9jbGllbnQuYwppbmRleCA0ODUxOWYwZGUxODUzOS4uNWNiZmE3YjIyM2UwMTEgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9jb25uX2NsaWVudC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9jb25uX2NsaWVudC5jCkBAIC04MSw2ICYjNDM7ODEsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2J1bmRsZSAqcnhycGNfYWxsb2NfYnVuZGxlKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCQlidW5kbGUtJmd0O2xvY2FsCQk9IGNhbGwtJmd0O2xvY2FsOwogCQlidW5kbGUtJmd0O3BlZXIJCT0gcnhycGNfZ2V0X3BlZXIoY2FsbC0mZ3Q7cGVlciwgcnhycGNfcGVlcl9nZXRfYnVuZGxlKTsKIAkJYnVuZGxlLSZndDtrZXkJCT0ga2V5X2dldChjYWxsLSZndDtrZXkpOwomIzQzOwkJYnVuZGxlLSZndDthcHBfZGF0YQk9IGtleV9nZXQoY2FsbC0mZ3Q7YXBwX2RhdGEpOwogCQlidW5kbGUtJmd0O3NlY3VyaXR5CT0gY2FsbC0mZ3Q7c2VjdXJpdHk7CiAJCWJ1bmRsZS0mZ3Q7ZXhjbHVzaXZlCT0gdGVzdF9iaXQoUlhSUENfQ0FMTF9FWENMVVNJVkUsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpOwogCQlidW5kbGUtJmd0O3VwZ3JhZGUJCT0gdGVzdF9iaXQoUlhSUENfQ0FMTF9VUEdSQURFLCAmYW1wO2NhbGwtJmd0O2ZsYWdzKTsKQEAgLTExOCw2ICYjNDM7MTE5LDcgQEAgc3RhdGljIHZvaWQgcnhycGNfZnJlZV9idW5kbGUoc3RydWN0IHJ4cnBjX2J1bmRsZSAqYnVuZGxlKQogCXdyaXRlX3VubG9jaygmYW1wO2J1bmRsZS0mZ3Q7bG9jYWwtJmd0O3J4bmV0LSZndDtjb25uX2xvY2spOwogCXJ4cnBjX3B1dF9wZWVyKGJ1bmRsZS0mZ3Q7cGVlciwgcnhycGNfcGVlcl9wdXRfYnVuZGxlKTsKIAlrZXlfcHV0KGJ1bmRsZS0mZ3Q7a2V5KTsKJiM0MzsJa2V5X3B1dChidW5kbGUtJmd0O2FwcF9kYXRhKTsKIAlrZnJlZShidW5kbGUpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY29ubl9ldmVudC5jIGIvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuYwppbmRleCA2MTFjNzkwYmM2ZDBjZS4uOTE0NmI5ZDRjMmFjNTAgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9jb25uX2V2ZW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuYwpAQCAtMjc5LDEwICYjNDM7Mjc5LDcgQEAgc3RhdGljIGludCByeHJwY19wcm9jZXNzX2V2ZW50KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogCiAJc3dpdGNoIChzcC0mZ3Q7aGRyLnR5cGUpIHsKIAljYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX0NIQUxMRU5HRToKLQkJcmV0ID0gY29ubi0mZ3Q7c2VjdXJpdHktJmd0O3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNvbm4sIHNrYik7Ci0JCXNwLSZndDtjaGFsbC5jb25uID0gTlVMTDsKLQkJcnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTsKLQkJcmV0dXJuIHJldDsKJiM0MzsJCXJldHVybiBjb25uLSZndDtzZWN1cml0eS0mZ3Q7cmVzcG9uZF90b19jaGFsbGVuZ2UoY29ubiwgc2tiKTsKIAogCWNhc2UgUlhSUENfUEFDS0VUX1RZUEVfUkVTUE9OU0U6CiAJCXNwaW5fbG9ja19pcnEoJmFtcDtjb25uLSZndDtzdGF0ZV9sb2NrKTsKQEAgLTQyNSw2NiAmIzQzOzQyMiw2IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJcnhycGNfcXVldWVfY29ubihjb25uLCByeHJwY19jb25uX3F1ZXVlX3J4X3dvcmspOwogfQogCi0vKgotICogUG9zdCBhIENIQUxMRU5HRSBwYWNrZXQgdG8gdGhlIHNvY2tldCBvZiBvbmUgb2YgYSBjb25uZWN0aW9uJiMzOTtzIGNhbGxzIHNvIHRoYXQKLSAqIGl0IGNhbiBnZXQgYXBwbGljYXRpb24gZGF0YSB0byBpbmNsdWRlIGluIHRoZSBwYWNrZXQsIHBvc3NpYmx5IHF1ZXJ5aW5nCi0gKiB1c2Vyc3BhY2UuCi0gKi8KLXN0YXRpYyBib29sIHJ4cnBjX3Bvc3RfY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAotCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTsKLQlzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCA9IE5VTEw7Ci0Jc3RydWN0IHJ4cnBjX3NvY2sgKnJ4OwotCWJvb2wgcmVzcG9uZCA9IGZhbHNlLCBxdWV1ZWQgPSBmYWxzZTsKLQotCXNwLSZndDtjaGFsbC5jb25uID0KLQkJcnhycGNfZ2V0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9nZXRfY2hhbGxlbmdlX2lucHV0KTsKLQotCWlmICghY29ubi0mZ3Q7c2VjdXJpdHktJmd0O2NoYWxsZW5nZV90b19yZWN2bXNnKSB7Ci0JCXJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGNvbm4tJmd0O2NoYW5uZWxzKTsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKGNvbm4tJmd0O2NoYW5uZWxzW2ldLmNhbGwpIHsKLQkJCWNhbGwgPSBjb25uLSZndDtjaGFubmVsc1tpXS5jYWxsOwotCQkJcnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC0mZ3Q7c29ja2V0KTsKLQkJCWlmICghcngpIHsKLQkJCQljYWxsID0gTlVMTDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJcmVzcG9uZCA9IHRydWU7Ci0JCQlpZiAodGVzdF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsICZhbXA7cngtJmd0O2ZsYWdzKSkKLQkJCQlicmVhazsKLQkJCWNhbGwgPSBOVUxMOwotCQl9Ci0JfQotCi0JaWYgKCFyZXNwb25kKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyeHJwY19wdXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQpOwotCQlzcC0mZ3Q7Y2hhbGwuY29ubiA9IE5VTEw7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoY2FsbCkKLQkJcXVldWVkID0gcnhycGNfbm90aWZ5X3NvY2tldF9vb2IoY2FsbCwgc2tiKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQlpZiAoY2FsbCAmYW1wOyZhbXA7ICFxdWV1ZWQpIHsKLQkJcnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTsKLQkJc3AtJmd0O2NoYWxsLmNvbm4gPSBOVUxMOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKCFjYWxsKQotCQlyeHJwY19wb3N0X3BhY2tldF90b19jb25uKGNvbm4sIHNrYik7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KIC8qCiAgKiBJbnB1dCBhIGNvbm5lY3Rpb24tbGV2ZWwgcGFja2V0LgogICovCkBAIC01MTMsNyAmIzQzOzQ1MCw4IEBAIGJvb2wgcnhycGNfaW5wdXRfY29ubl9wYWNrZXQoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpCiAJCX0KIAkJaWYgKCFjb25uLSZndDtzZWN1cml0eS0mZ3Q7dmFsaWRhdGVfY2hhbGxlbmdlKGNvbm4sIHNrYikpCiAJCQlyZXR1cm4gZmFsc2U7Ci0JCXJldHVybiByeHJwY19wb3N0X2NoYWxsZW5nZShjb25uLCBza2IpOwomIzQzOwkJcnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihjb25uLCBza2IpOwomIzQzOwkJcmV0dXJuIHRydWU7CiAKIAljYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX1JFU1BPTlNFOgogCQlpZiAocnhycGNfaXNfY29ubl9hYm9ydGVkKGNvbm4pKSB7CmRpZmYgLS1naXQgYS9uZXQvcnhycGMva2V5LmMgYi9uZXQvcnhycGMva2V5LmMKaW5kZXggYTBhYTc4ZDg5Mjg5N2YuLjJkZGRiZTNjYWQ1Y2ZjIDEwMDY0NAotLS0gYS9uZXQvcnhycGMva2V5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2tleS5jCkBAIC04OTMsMyAmIzQzOzg5MywzOSBAQCBzdGF0aWMgbG9uZyByeHJwY19yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwKIAlfbGVhdmUoJiMzNDsgPSAlenUmIzM0Oywgc2l6ZSk7CiAJcmV0dXJuIHNpemU7CiB9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcnhycGNfa2VybmVsX3F1ZXJ5X2tleSAtIFF1ZXJ5IHBhcmFtZXRlcnMgZnJvbSBhbiByeHJwYyBrZXkKJiM0MzsgKiBAa2V5OiBUaGUga2V5IHRvIHF1ZXJ5CiYjNDM7ICogQF9zZWN1cml0eV9pbmRleDogV2hlcmUgdG8gcmV0dXJuIHRoZSBzZWN1cml0eSBpbmRleAomIzQzOyAqIEBfa3JiNV9lbmN0eXBlOiBXaGVyZSB0byByZXR1cm4gdGhlIGtyYjUgZW5jcnlwdGlvbiB0eXBlIGlmIGFwcGxpY2FibGUKJiM0MzsgKgomIzQzOyAqIFF1ZXJ5IGFuIHJ4cnBjIGF1dGhlbnRpY2F0aW9uIGtleSwgZXh0cmFjdGluZyB0aGUgc2VjdXJpdHkgaW5kZXggZnJvbSB0aGUKJiM0MzsgKiBmaXJzdCB0b2tlbiB0aGVyZWluLgomIzQzOyAqLwomIzQzO3ZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2tleShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHU4ICpfc2VjdXJpdHlfaW5kZXgsIHUzMiAqX2tyYjVfZW5jdHlwZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCByeHJwY19rZXlfdG9rZW4gKnRva2VuOwomIzQzOwomIzQzOwl0b2tlbiA9IGtleS0mZ3Q7cGF5bG9hZC5kYXRhWzBdOwomIzQzOwlpZiAoIXRva2VuKSB7CiYjNDM7CQkqX3NlY3VyaXR5X2luZGV4ID0gMDsKJiM0MzsJCSpfa3JiNV9lbmN0eXBlID0gMDsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkqX3NlY3VyaXR5X2luZGV4ID0gdG9rZW4tJmd0O3NlY3VyaXR5X2luZGV4OwomIzQzOwlzd2l0Y2ggKHRva2VuLSZndDtzZWN1cml0eV9pbmRleCkgewomIzQzOwljYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOgomIzQzOwkJKl9rcmI1X2VuY3R5cGUgPSAwOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6CiYjNDM7CQkqX2tyYjVfZW5jdHlwZSA9IHRva2VuLSZndDtyeGdrLSZndDtlbmN0eXBlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlXQVJOX09OX09OQ0UoMSk7CiYjNDM7CQkqX2tyYjVfZW5jdHlwZSA9IDA7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkpOwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL29vYi5jIGIvbmV0L3J4cnBjL29vYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODBlZTI0ODdkMDk0MS4uMDAwMDAwMDAwMDAwMDAKLS0tIGEvbmV0L3J4cnBjL29vYi5jCiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGwKQEAgLTEsMzg3ICYjNDM7MCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgotLyogT3V0IG9mIGJhbmQgbWVzc2FnZSBoYW5kbGluZyAoZS5nLiBjaGFsbGVuZ2UtcmVzcG9uc2UpCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDI1IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICYjMzQ7OiAmIzM0OyBmbXQKLQotI2luY2x1ZGUgJmx0O2xpbnV4L25ldC5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2dmcC5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwotI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bmV0L2FmX3J4cnBjLmgmZ3Q7Ci0jaW5jbHVkZSAmIzM0O2FyLWludGVybmFsLmgmIzM0OwotCi1lbnVtIHJ4cnBjX29vYl9jb21tYW5kIHsKLQlSWFJQQ19PT0JfQ01EX1VOU0VULAotCVJYUlBDX09PQl9DTURfUkVTUE9ORCwKLX0gX19tb2RlKGJ5dGUpOwotCi1zdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyB7Ci0JdTY0CQkJb29iX2lkOwkJLyogSUQgbnVtYmVyIG9mIG1lc3NhZ2UgaWYgcmVwbHkgKi8KLQlzMzIJCQlhYm9ydF9jb2RlOwotCWVudW0gcnhycGNfb29iX2NvbW1hbmQJY29tbWFuZDsKLQlib29sCQkJaGF2ZV9vb2JfaWQ6MTsKLX07Ci0KLS8qCi0gKiBQb3N0IGFuIG91dC1vZi1iYW5kIG1lc3NhZ2UgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlCi0gKiBhc3NvY2lhdGVkIHdpdGggYSByZWZlcmVuY2UgY2FsbC4KLSAqLwotYm9vbCByeHJwY19ub3RpZnlfc29ja2V0X29vYihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKHNrYik7Ci0Jc3RydWN0IHJ4cnBjX3NvY2sgKnJ4OwotCXN0cnVjdCBzb2NrICpzazsKLQlib29sIHF1ZXVlZCA9IGZhbHNlOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JcnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC0mZ3Q7c29ja2V0KTsKLQlpZiAocngpIHsKLQkJc2sgPSAmYW1wO3J4LSZndDtzazsKLQkJc3Bpbl9sb2NrX2lycSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2spOwotCi0JCWlmIChzay0mZ3Q7c2tfc3RhdGUgJmx0OyBSWFJQQ19DTE9TRSkgewotCQkJc2tiLSZndDtza2JfbXN0YW1wX25zID0gcngtJmd0O29vYl9pZF9jb3VudGVyJiM0MzsmIzQzOzsKLQkJCXJ4cnBjX2dldF9za2Ioc2tiLCByeHJwY19za2JfZ2V0X3Bvc3Rfb29iKTsKLQkJCXNrYl9xdWV1ZV90YWlsKCZhbXA7cngtJmd0O3JlY3Ztc2dfb29icSwgc2tiKTsKLQkJCXF1ZXVlZCA9IHRydWU7Ci0KLQkJCXRyYWNlX3J4cnBjX25vdGlmeV9zb2NrZXQoY2FsbC0mZ3Q7ZGVidWdfaWQsIHNwLSZndDtoZHIuc2VyaWFsKTsKLQkJCWlmIChyeC0mZ3Q7YXBwX29wcykKLQkJCQlyeC0mZ3Q7YXBwX29wcy0mZ3Q7bm90aWZ5X29vYihzaywgc2tiKTsKLQkJfQotCi0JCXNwaW5fdW5sb2NrX2lycSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2spOwotCQlpZiAocXVldWVkICZhbXA7JmFtcDsgIXJ4LSZndDthcHBfb3BzICZhbXA7JmFtcDsgIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkKLQkJCXNrLSZndDtza19kYXRhX3JlYWR5KHNrKTsKLQl9Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gcXVldWVkOwotfQotCi0vKgotICogTG9jYXRlIHRoZSBPT0IgbWVzc2FnZSB0byByZXNwb25kIHRvIGJ5IGl0cyBJRC4KLSAqLwotc3RhdGljIHN0cnVjdCBza19idWZmICpyeHJwY19maW5kX3BlbmRpbmdfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgdTY0IG9vYl9pZCkKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqcDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JcCA9IHJ4LSZndDtwZW5kaW5nX29vYnEucmJfbm9kZTsKLQl3aGlsZSAocCkgewotCQlza2IgPSByYl9lbnRyeShwLCBzdHJ1Y3Qgc2tfYnVmZiwgcmJub2RlKTsKLQotCQlpZiAob29iX2lkICZsdDsgc2tiLSZndDtza2JfbXN0YW1wX25zKQotCQkJcCA9IHAtJmd0O3JiX2xlZnQ7Ci0JCWVsc2UgaWYgKG9vYl9pZCAmZ3Q7IHNrYi0mZ3Q7c2tiX21zdGFtcF9ucykKLQkJCXAgPSBwLSZndDtyYl9yaWdodDsKLQkJZWxzZQotCQkJcmV0dXJuIHNrYjsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIEFkZCBhbiBPT0IgbWVzc2FnZSBpbnRvIHRoZSBwZW5kaW5nLXJlc3BvbnNlIHNldC4gIFdlIGFsd2F5cyBhc3NpZ24gdGhlIG5leHQKLSAqIHZhbHVlIGZyb20gYSA2NC1iaXQgY291bnRlciB0byB0aGUgb29iX2lkLCBzbyBqdXN0IGFzc3VtZSB3ZSYjMzk7cmUgYWx3YXlzIGdvaW5nCi0gKiB0byBiZSBvbiB0aGUgcmlnaHQtaGFuZCBlZGdlIG9mIHRoZSB0cmVlIGFuZCB0aGF0IHRoZSBjb3VudGVyIHdvbiYjMzk7dCB3cmFwLgotICogVGhlIHRyZWUgaXMgYWxzbyBnaXZlbiBhIHJlZiB0byB0aGUgbWVzc2FnZS4KLSAqLwotdm9pZCByeHJwY19hZGRfcGVuZGluZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCByYl9ub2RlICoqcHAgPSAmYW1wO3J4LSZndDtwZW5kaW5nX29vYnEucmJfbm9kZSwgKnAgPSBOVUxMOwotCi0Jd2hpbGUgKCpwcCkgewotCQlwID0gKnBwOwotCQlwcCA9ICZhbXA7KCpwcCktJmd0O3JiX3JpZ2h0OwotCX0KLQotCXJiX2xpbmtfbm9kZSgmYW1wO3NrYi0mZ3Q7cmJub2RlLCBwLCBwcCk7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZhbXA7c2tiLSZndDtyYm5vZGUsICZhbXA7cngtJmd0O3BlbmRpbmdfb29icSk7Ci19Ci0KLS8qCi0gKiBFeHRyYWN0IGNvbnRyb2wgbWVzc2FnZXMgZnJvbSB0aGUgc2VuZG1zZygpIGNvbnRyb2wgYnVmZmVyLgotICovCi1zdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfb29iX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyAqcCkKLXsKLQlzdHJ1Y3QgY21zZ2hkciAqY21zZzsKLQlpbnQgbGVuOwotCi0JaWYgKG1zZy0mZ3Q7bXNnX2NvbnRyb2xsZW4gPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmb3JfZWFjaF9jbXNnaGRyKGNtc2csIG1zZykgewotCQlpZiAoIUNNU0dfT0sobXNnLCBjbXNnKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWxlbiA9IGNtc2ctJmd0O2Ntc2dfbGVuIC0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKTsKLQkJX2RlYnVnKCYjMzQ7Q01TRyAlZCwgJWQsICVkJiMzNDssCi0JCSAgICAgICBjbXNnLSZndDtjbXNnX2xldmVsLCBjbXNnLSZndDtjbXNnX3R5cGUsIGxlbik7Ci0KLQkJaWYgKGNtc2ctJmd0O2Ntc2dfbGV2ZWwgIT0gU09MX1JYUlBDKQotCQkJY29udGludWU7Ci0KLQkJc3dpdGNoIChjbXNnLSZndDtjbXNnX3R5cGUpIHsKLQkJY2FzZSBSWFJQQ19PT0JfSUQ6Ci0JCQlpZiAobGVuICE9IHNpemVvZihwLSZndDtvb2JfaWQpIHx8IHAtJmd0O2hhdmVfb29iX2lkKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJbWVtY3B5KCZhbXA7cC0mZ3Q7b29iX2lkLCBDTVNHX0RBVEEoY21zZyksIHNpemVvZihwLSZndDtvb2JfaWQpKTsKLQkJCXAtJmd0O2hhdmVfb29iX2lkID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQljYXNlIFJYUlBDX1JFU1BPTkQ6Ci0JCQlpZiAocC0mZ3Q7Y29tbWFuZCAhPSBSWFJQQ19PT0JfQ01EX1VOU0VUKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJcC0mZ3Q7Y29tbWFuZCA9IFJYUlBDX09PQl9DTURfUkVTUE9ORDsKLQkJCWJyZWFrOwotCQljYXNlIFJYUlBDX0FCT1JUOgotCQkJaWYgKGxlbiAhPSBzaXplb2YocC0mZ3Q7YWJvcnRfY29kZSkgfHwgcC0mZ3Q7YWJvcnRfY29kZSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCW1lbWNweSgmYW1wO3AtJmd0O2Fib3J0X2NvZGUsIENNU0dfREFUQShjbXNnKSwgc2l6ZW9mKHAtJmd0O2Fib3J0X2NvZGUpKTsKLQkJCWlmIChwLSZndDthYm9ydF9jb2RlID09IDApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJY2FzZSBSWFJQQ19SRVNQX1JYR0tfQVBQREFUQToKLQkJCWlmIChwLSZndDtjb21tYW5kICE9IFJYUlBDX09PQl9DTURfUkVTUE9ORCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQlzd2l0Y2ggKHAtJmd0O2NvbW1hbmQpIHsKLQljYXNlIFJYUlBDX09PQl9DTURfUkVTUE9ORDoKLQkJaWYgKCFwLSZndDtoYXZlX29vYl9pZCkKLQkJCXJldHVybiAtRUJBRFNMVDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBBbGxvdyB1c2Vyc3BhY2UgdG8gcmVzcG9uZCB0byBhbiBPT0IgdXNpbmcgc2VuZG1zZygpLgotICovCi1zdGF0aWMgaW50IHJ4cnBjX3Jlc3BvbmRfdG9fb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwKLQkJCQlzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyAqcCwKLQkJCQlzdHJ1Y3QgbXNnaGRyICptc2cpCi17Ci0Jc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm47Ci0Jc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCByZXQ7Ci0KLQlza2IgPSByeHJwY19maW5kX3BlbmRpbmdfb29iKHJ4LCBwLSZndDtvb2JfaWQpOwotCWlmIChza2IpCi0JCXJiX2VyYXNlKCZhbXA7c2tiLSZndDtyYm5vZGUsICZhbXA7cngtJmd0O3BlbmRpbmdfb29icSk7Ci0JcmVsZWFzZV9zb2NrKCZhbXA7cngtJmd0O3NrKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FQkFEU0xUOwotCi0Jc3AgPSByeHJwY19za2Ioc2tiKTsKLQotCXN3aXRjaCAocC0mZ3Q7Y29tbWFuZCkgewotCWNhc2UgUlhSUENfT09CX0NNRF9SRVNQT05EOgotCQlyZXQgPSAtRVBST1RPOwotCQlpZiAoc2tiLSZndDttYXJrICE9IFJYUlBDX09PQl9DSEFMTEVOR0UpCi0JCQlicmVhazsKLQkJY29ubiA9IHNwLSZndDtjaGFsbC5jb25uOwotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJaWYgKCFjb25uLSZndDtzZWN1cml0eS0mZ3Q7c2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSkKLQkJCWJyZWFrOwotCQlpZiAocC0mZ3Q7YWJvcnRfY29kZSkgewotCQkJcnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBwLSZndDthYm9ydF9jb2RlLCAtRUNPTk5BQk9SVEVELAotCQkJCQkgcnhycGNfYWJvcnRfcmVzcG9uc2Vfc2VuZG1zZyk7Ci0JCQlyZXQgPSAwOwotCQl9IGVsc2UgewotCQkJcmV0ID0gY29ubi0mZ3Q7c2VjdXJpdHktJmd0O3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc2tiLCBtc2cpOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQotCXN3aXRjaCAoc2tiLSZndDttYXJrKSB7Ci0JY2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOgotCQlyeHJwY19wdXRfY29ubmVjdGlvbihzcC0mZ3Q7Y2hhbGwuY29ubiwgcnhycGNfY29ubl9wdXRfb29iKTsKLQkJYnJlYWs7Ci0JfQotCXJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9vb2IpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBTZW5kIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2Ugb3IgcmVzcG9uZCB0byBhIHJlY2VpdmVkIG91dC1vZi1iYW5kIG1lc3NhZ2UuCi0gKiAtIGNhbGxlciBnaXZlcyB1cyB0aGUgc29ja2V0IGxvY2sKLSAqIC0gdGhlIHNvY2tldCBtYXkgYmUgZWl0aGVyIGEgY2xpZW50IHNvY2tldCBvciBhIHNlcnZlciBzb2NrZXQKLSAqLwotaW50IHJ4cnBjX3NlbmRtc2dfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCByeHJwY19vb2JfcGFyYW1zIHAgPSB7fTsKLQlpbnQgcmV0OwotCi0JX2VudGVyKCYjMzQ7JiMzNDspOwotCi0JcmV0ID0gcnhycGNfc2VuZG1zZ19vb2JfY21zZyhtc2csICZhbXA7cCk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gZXJyb3JfcmVsZWFzZV9zb2NrOwotCi0JaWYgKHAuaGF2ZV9vb2JfaWQpCi0JCXJldHVybiByeHJwY19yZXNwb25kX3RvX29vYihyeCwgJmFtcDtwLCBtc2cpOwotCi0JcmVsZWFzZV9zb2NrKCZhbXA7cngtJmd0O3NrKTsKLQotCXN3aXRjaCAocC5jb21tYW5kKSB7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCi0JX2xlYXZlKCYjMzQ7ID0gJWQmIzM0OywgcmV0KTsKLQlyZXR1cm4gcmV0OwotCi1lcnJvcl9yZWxlYXNlX3NvY2s6Ci0JcmVsZWFzZV9zb2NrKCZhbXA7cngtJmd0O3NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2IgLSBRdWVyeSB0aGUgcGFyYW1ldGVycyBvZiBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlCi0gKiBAb29iOiBUaGUgbWVzc2FnZSB0byBxdWVyeQotICogQF9wZWVyOiBXaGVyZSB0byByZXR1cm4gdGhlIHBlZXIgcmVjb3JkCi0gKiBAX3BlZXJfYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgYXR0YWNoZWQgdG8gYSBwZWVyIHJlY29yZAotICoKLSAqIEV4dHJhY3QgdXNlZnVsIHBhcmFtZXRlcnMgZnJvbSBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlLiAgVGhlIHNvdXJjZSBwZWVyCi0gKiBwYXJhbWV0ZXJzIGFyZSByZXR1cm5lZCB0aHJvdWdoIHRoZSBhcmd1bWVudCBsaXN0IGFuZCB0aGUgbWVzc2FnZSB0eXBlIGlzCi0gKiByZXR1cm5lZC4KLSAqCi0gKiBSZXR1cm46Ci0gKiAqICVSWFJQQ19PT0JfQ0hBTExFTkdFIC0gQ2hhbGxlbmdlIHdhbnRpbmcgYSByZXNwb25zZS4KLSAqLwotZW51bSByeHJwY19vb2JfdHlwZSByeHJwY19rZXJuZWxfcXVlcnlfb29iKHN0cnVjdCBza19idWZmICpvb2IsCi0JCQkJCSAgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEpCi17Ci0Jc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihvb2IpOwotCWVudW0gcnhycGNfb29iX3R5cGUgdHlwZSA9IG9vYi0mZ3Q7bWFyazsKLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgUlhSUENfT09CX0NIQUxMRU5HRToKLQkJKl9wZWVyCQk9IHNwLSZndDtjaGFsbC5jb25uLSZndDtwZWVyOwotCQkqX3BlZXJfYXBwZGF0YQk9IHNwLSZndDtjaGFsbC5jb25uLSZndDtwZWVyLSZndDthcHBfZGF0YTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJV0FSTl9PTl9PTkNFKDEpOwotCQkqX3BlZXIJCT0gTlVMTDsKLQkJKl9wZWVyX2FwcGRhdGEJPSAwOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gdHlwZTsKLX0KLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3F1ZXJ5X29vYik7Ci0KLS8qKgotICogcnhycGNfa2VybmVsX2RlcXVldWVfb29iIC0gRGVxdWV1ZSBhbmQgcmV0dXJuIHRoZSBmcm9udCBPT0IgbWVzc2FnZQotICogQHNvY2s6IFRoZSBzb2NrZXQgdG8gcXVlcnkKLSAqIEBfdHlwZTogV2hlcmUgdG8gcmV0dXJuIHRoZSBtZXNzYWdlIHR5cGUKLSAqCi0gKiBEZXF1ZXVlIHRoZSBmcm9udCBPT0IgbWVzc2FnZSwgaWYgdGhlcmUgaXMgb25lLCBhbmQgcmV0dXJuIGl0IGFuZAotICogaXRzIHR5cGUuCi0gKgotICogUmV0dXJuOiBUaGUgc2tfYnVmZiByZXByZXNlbnRpbmcgdGhlIE9PQiBtZXNzYWdlIG9yICVOVUxMIGlmIHRoZSBxdWV1ZSB3YXMKLSAqIGVtcHR5LgotICovCi1zdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfa2VybmVsX2RlcXVldWVfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0JCQkJCSBlbnVtIHJ4cnBjX29vYl90eXBlICpfdHlwZSkKLXsKLQlzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLSZndDtzayk7Ci0Jc3RydWN0IHNrX2J1ZmYgKm9vYjsKLQotCW9vYiA9IHNrYl9kZXF1ZXVlKCZhbXA7cngtJmd0O3JlY3Ztc2dfb29icSk7Ci0JaWYgKG9vYikKLQkJKl90eXBlID0gb29iLSZndDttYXJrOwotCXJldHVybiBvb2I7Ci19Ci1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYik7Ci0KLS8qKgotICogcnhycGNfa2VybmVsX2ZyZWVfb29iIC0gRnJlZSBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlCi0gKiBAb29iOiBUaGUgT09CIG1lc3NhZ2UgdG8gZnJlZQotICoKLSAqIEZyZWUgYW4gT09CIG1lc3NhZ2UgYWxvbmcgd2l0aCBhbnkgcmVzb3VyY2VzIGl0IGhvbGRzLgotICovCi12b2lkIHJ4cnBjX2tlcm5lbF9mcmVlX29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iKQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Iob29iKTsKLQotCXN3aXRjaCAob29iLSZndDttYXJrKSB7Ci0JY2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOgotCQlyeHJwY19wdXRfY29ubmVjdGlvbihzcC0mZ3Q7Y2hhbGwuY29ubiwgcnhycGNfY29ubl9wdXRfb29iKTsKLQkJYnJlYWs7Ci0JfQotCi0JcnhycGNfZnJlZV9za2Iob29iLCByeHJwY19za2JfcHV0X3B1cmdlX29vYik7Ci19Ci1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9mcmVlX29vYik7Ci0KLS8qKgotICogcnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSAtIFF1ZXJ5IHRoZSBwYXJhbWV0ZXJzIG9mIGEgY2hhbGxlbmdlCi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHF1ZXJ5Ci0gKiBAX3BlZXI6IFdoZXJlIHRvIHJldHVybiB0aGUgcGVlciByZWNvcmQKLSAqIEBfcGVlcl9hcHBkYXRhOiBUaGUgYXBwbGljYXRpb24gZGF0YSBhdHRhY2hlZCB0byBhIHBlZXIgcmVjb3JkCi0gKiBAX3NlcnZpY2VfaWQ6IFdoZXJlIHRvIHJldHVybiB0aGUgY29ubmVjdGlvbiBzZXJ2aWNlIElECi0gKiBAX3NlY3VyaXR5X2luZGV4OiBXaGVyZSB0byByZXR1cm4gdGhlIGNvbm5lY3Rpb24gc2VjdXJpdHkgaW5kZXgKLSAqCi0gKiBFeHRyYWN0IHVzZWZ1bCBwYXJhbWV0ZXJzIGZyb20gYSBDSEFMTEVOR0UgbWVzc2FnZS4KLSAqLwotdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLAotCQkJCSAgdW5zaWduZWQgbG9uZyAqX3BlZXJfYXBwZGF0YSwKLQkJCQkgIHUxNiAqX3NlcnZpY2VfaWQsIHU4ICpfc2VjdXJpdHlfaW5kZXgpCi17Ci0Jc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpOwotCi0JKl9wZWVyCQk9IHNwLSZndDtjaGFsbC5jb25uLSZndDtwZWVyOwotCSpfcGVlcl9hcHBkYXRhCT0gc3AtJmd0O2NoYWxsLmNvbm4tJmd0O3BlZXItJmd0O2FwcF9kYXRhOwotCSpfc2VydmljZV9pZAk9IHNwLSZndDtoZHIuc2VydmljZUlkOwotCSpfc2VjdXJpdHlfaW5kZXggPSBzcC0mZ3Q7aGRyLnNlY3VyaXR5SW5kZXg7Ci19Ci1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UpOwotCi0vKioKLSAqIHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlIC0gQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byByZWplY3QgYSBjaGFsbGVuZ2UKLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgdG8gYmUgcmVqZWN0ZWQKLSAqIEBhYm9ydF9jb2RlOiBUaGUgYWJvcnQgY29kZSB0byBzdGljayBpbnRvIHRoZSBBQk9SVCBwYWNrZXQKLSAqIEBlcnJvcjogTG9jYWwgZXJyb3IgdmFsdWUKLSAqIEB3aHk6IEluZGljYXRpb24gYXMgdG8gd2h5LgotICoKLSAqIEFsbG93IGEga2VybmVsIHNlcnZpY2UgdG8gcmVqZWN0IGEgY2hhbGxlbmdlIGJ5IGFib3J0aW5nIHRoZSBjb25uZWN0aW9uIGlmCi0gKiBpdCYjMzk7cyBzdGlsbCBpbiBhbiBhYm9ydGFibGUgc3RhdGUuICBUaGUgZXJyb3IgaXMgcmV0dXJuZWQgc28gdGhpcyBmdW5jdGlvbgotICogY2FuIGJlIHVzZWQgd2l0aCBhIHJldHVybiBzdGF0ZW1lbnQuCi0gKgotICogUmV0dXJuOiBUaGUgJWVycm9yIHBhcmFtZXRlci4KLSAqLwotaW50IHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsIHUzMiBhYm9ydF9jb2RlLAotCQkJCSAgaW50IGVycm9yLCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpCi17Ci0Jc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpOwotCi0JX2VudGVyKCYjMzQ7eyV4fSwlZCwlZCwldSYjMzQ7LCBzcC0mZ3Q7aGRyLnNlcmlhbCwgYWJvcnRfY29kZSwgZXJyb3IsIHdoeSk7Ci0KLQlyeHJwY19hYm9ydF9jb25uKHNwLSZndDtjaGFsbC5jb25uLCBOVUxMLCBhYm9ydF9jb2RlLCBlcnJvciwgd2h5KTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jCmluZGV4IGVmY2JhNGIyZTc0ZjBjLi4yODU5YTgwZTE4NzY2MyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3JlY3Ztc2cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcmVjdm1zZy5jCkBAIC0yMTUsNjEgJiM0MzsyMTUsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfdXNlcl9pZChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IG1zZ2hkciAqbXNnLAogCX0KIH0KIAotLyoKLSAqIERlYWwgd2l0aCBhIENIQUxMRU5HRSBwYWNrZXQuCi0gKi8KLXN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19jaGFsbGVuZ2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAotCQkJCSAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsIHVuc2lnbmVkIGludCBmbGFncykKLXsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7Ci0Jc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4gPSBzcC0mZ3Q7Y2hhbGwuY29ubjsKLQotCXJldHVybiBjb25uLSZndDtzZWN1cml0eS0mZ3Q7Y2hhbGxlbmdlX3RvX3JlY3Ztc2coY29ubiwgY2hhbGxlbmdlLCBtc2cpOwotfQotCi0vKgotICogUHJvY2VzcyBPT0IgcGFja2V0cy4gIENhbGxlZCB3aXRoIHRoZSBzb2NrZXQgbG9ja2VkLgotICovCi1zdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKLQkJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKQotewotCXN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stJmd0O3NrKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWJvb2wgbmVlZF9yZXNwb25zZSA9IGZhbHNlOwotCWludCByZXQ7Ci0KLQlza2IgPSBza2JfcGVlaygmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpOwotCWlmICghc2tiKQotCQlyZXR1cm4gLUVBR0FJTjsKLQlyeHJwY19zZWVfc2tiKHNrYiwgcnhycGNfc2tiX3NlZV9yZWN2bXNnKTsKLQotCXJldCA9IHB1dF9jbXNnKG1zZywgU09MX1JYUlBDLCBSWFJQQ19PT0JfSUQsIHNpemVvZih1NjQpLAotCQkgICAgICAgJmFtcDtza2ItJmd0O3NrYl9tc3RhbXBfbnMpOwotCWlmIChyZXQgJmx0OyAwKQotCQlyZXR1cm4gcmV0OwotCi0Jc3dpdGNoICgoZW51bSByeHJwY19vb2JfdHlwZSlza2ItJmd0O21hcmspIHsKLQljYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6Ci0JCW5lZWRfcmVzcG9uc2UgPSB0cnVlOwotCQlyZXQgPSByeHJwY19yZWN2bXNnX2NoYWxsZW5nZShzb2NrLCBtc2csIHNrYiwgZmxhZ3MpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlXQVJOX09OQ0UoMSwgJiMzNDtyZWN2bXNnKCkgY2FuJiMzOTt0IHByb2Nlc3MgdW5rbm93biBPT0IgdHlwZSAldVxuJiMzNDssCi0JCQkgIHNrYi0mZ3Q7bWFyayk7Ci0JCXJldCA9IC1FSU87Ci0JCWJyZWFrOwotCX0KLQotCWlmICghKGZsYWdzICZhbXA7IE1TR19QRUVLKSkgewotCQlza2JfdW5saW5rKHNrYiwgJmFtcDtyeC0mZ3Q7cmVjdm1zZ19vb2JxKTsKLQkJaWYgKG5lZWRfcmVzcG9uc2UpCi0JCQlyeHJwY19hZGRfcGVuZGluZ19vb2IocngsIHNrYik7Ci0JCWVsc2UKLQkJCXJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9vb2IpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCiAvKgogICogRGVsaXZlciBtZXNzYWdlcyB0byBhIGNhbGwuICBUaGlzIGtlZXBzIHByb2Nlc3NpbmcgcGFja2V0cyB1bnRpbCB0aGUgYnVmZmVyCiAgKiBpcyBmaWxsZWQgYW5kIHdlIGZpbmQgZWl0aGVyIG1vcmUgREFUQSAocmV0dXJucyAwKSBvciB0aGUgZW5kIG9mIHRoZSBEQVRBCkBAIC0yODEsNyAmIzQzOzIyNiw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCQkJICAgICAgc2l6ZV90IGxlbiwgaW50IGZsYWdzLCBzaXplX3QgKl9vZmZzZXQpCiB7CiAJc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcDsKLQlzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLSZndDtzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlyeHJwY19zZXFfdCBzZXEgPSAwOwogCXNpemVfdCByZW1haW47CkBAIC0zNzYsMTMgJiM0MzszMjAsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwKIAogCQlpZiAoIShmbGFncyAmYW1wOyBNU0dfUEVFSykpCiAJCQlyeHJwY19yb3RhdGVfcnhfd2luZG93KGNhbGwpOwotCi0JCWlmICghcngtJmd0O2FwcF9vcHMgJmFtcDsmYW1wOwotCQkgICAgIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpKSB7Ci0JCQl0cmFjZV9yeHJwY19yZWN2ZGF0YShjYWxsLCByeHJwY19yZWN2bXNnX29vYnEsIHNlcSwKLQkJCQkJICAgICByeF9wa3Rfb2Zmc2V0LCByeF9wa3RfbGVuLCByZXQpOwotCQkJYnJlYWs7Ci0JCX0KIAl9CiAKIG91dDoKQEAgLTQxOSw3ICYjNDM7MzU2LDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCiAJdHJhY2VfcnhycGNfcmVjdm1zZygwLCByeHJwY19yZWN2bXNnX2VudGVyLCAwKTsKIAotCWlmIChmbGFncyAmYW1wOyAoTVNHX09PQiB8IE1TR19UUlVOQykpCiYjNDM7CWlmIChmbGFncyAmYW1wOyBNU0dfVFJVTkMpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXRpbWVvID0gc29ja19yY3Z0aW1lbygmYW1wO3J4LSZndDtzaywgZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUKTsKQEAgLTQzMCwxNCAmIzQzOzM2NywxMiBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJLyogUmV0dXJuIGltbWVkaWF0ZWx5IGlmIGEgY2xpZW50IHNvY2tldCBoYXMgbm8gb3V0c3RhbmRpbmcgY2FsbHMgKi8KIAlpZiAoUkJfRU1QVFlfUk9PVCgmYW1wO3J4LSZndDtjYWxscykgJmFtcDsmYW1wOwogCSAgICBsaXN0X2VtcHR5KCZhbXA7cngtJmd0O3JlY3Ztc2dfcSkgJmFtcDsmYW1wOwotCSAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19vb2JxKSAmYW1wOyZhbXA7CiAJICAgIHJ4LSZndDtzay5za19zdGF0ZSAhPSBSWFJQQ19TRVJWRVJfTElTVEVOSU5HKSB7CiAJCXJlbGVhc2Vfc29jaygmYW1wO3J4LSZndDtzayk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlmIChsaXN0X2VtcHR5KCZhbXA7cngtJmd0O3JlY3Ztc2dfcSkgJmFtcDsmYW1wOwotCSAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19vb2JxKSkgewomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO3J4LSZndDtyZWN2bXNnX3EpKSB7CiAJCXJldCA9IC1FV09VTERCTE9DSzsKIAkJaWYgKHRpbWVvID09IDApIHsKIAkJCWNhbGwgPSBOVUxMOwpAQCAtNDUzLDggJiM0MzszODgsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCWlmIChyZXQpCiAJCQlnb3RvIHdhaXRfZXJyb3I7CiAKLQkJaWYgKGxpc3RfZW1wdHkoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKSAmYW1wOyZhbXA7Ci0JCSAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19vb2JxKSkgewomIzQzOwkJaWYgKGxpc3RfZW1wdHkoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKSkgewogCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJCWdvdG8gd2FpdF9pbnRlcnJ1cHRlZDsKIAkJCXRyYWNlX3J4cnBjX3JlY3Ztc2coMCwgcnhycGNfcmVjdm1zZ193YWl0LCAwKTsKQEAgLTQ2NCwxNSAmIzQzOzM5OCw2IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAkJZ290byB0cnlfYWdhaW47CiAJfQogCi0JLyogRGVhbCB3aXRoIE9PQiBtZXNzYWdlcyBiZWZvcmUgd2UgY29uc2lkZXIgZ2V0dGluZyBub3JtYWwgZGF0YS4gKi8KLQlpZiAoIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpKSB7Ci0JCXJldCA9IHJ4cnBjX3JlY3Ztc2dfb29iKHNvY2ssIG1zZywgZmxhZ3MpOwotCQlyZWxlYXNlX3NvY2soJmFtcDtyeC0mZ3Q7c2spOwotCQlpZiAocmV0ID09IC1FQUdBSU4pCi0JCQlnb3RvIHRyeV9hZ2FpbjsKLQkJZ290byBlcnJvcl90cmFjZTsKLQl9Ci0KIAkvKiBGaW5kIHRoZSBuZXh0IGNhbGwgYW5kIGRlcXVldWUgaXQgaWYgd2UmIzM5O3JlIG5vdCBqdXN0IHBlZWtpbmcuICBJZiB3ZQogCSAqIGRvIGRlcXVldWUgaXQsIHRoYXQgY29tZXMgd2l0aCBhIHJlZiB0aGF0IHdlIHdpbGwgbmVlZCB0byByZWxlYXNlLgogCSAqIFdlIGFsc28gd2FudCB0byB3ZWVkIG91dCBjYWxscyB0aGF0IGdvdCByZXF1ZXVlZCB3aGlsc3Qgd2Ugd2VyZQpAQCAtNDgzLDggJiM0Mzs0MDgsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJY2FsbCA9IGxpc3RfZW50cnkobCwgc3RydWN0IHJ4cnBjX2NhbGwsIHJlY3Ztc2dfbGluayk7CiAKIAlpZiAoIXJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgJmFtcDsmYW1wOwotCSAgICBza2JfcXVldWVfZW1wdHkoJmFtcDtjYWxsLSZndDtyZWN2bXNnX3F1ZXVlKSAmYW1wOyZhbXA7Ci0JICAgIHNrYl9xdWV1ZV9lbXB0eSgmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpKSB7CiYjNDM7CSAgICBza2JfcXVldWVfZW1wdHkoJmFtcDtjYWxsLSZndDtyZWN2bXNnX3F1ZXVlKSkgewogCQlsaXN0X2RlbF9pbml0KCZhbXA7Y2FsbC0mZ3Q7cmVjdm1zZ19saW5rKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cngtJmd0O3JlY3Ztc2dfbG9jayk7CiAJCXJlbGVhc2Vfc29jaygmYW1wO3J4LSZndDtzayk7CmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcnhnay5jIGIvbmV0L3J4cnBjL3J4Z2suYwppbmRleCA3N2E2N2FjZTFkMjQ4MS4uOWFiNzY2ZDVmMGI2YzggMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9yeGdrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3J4Z2suYwpAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2V5LXR5cGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7a2V5cy91c2VyLXR5cGUuaCZndDsKICNpbmNsdWRlICYjMzQ7YXItaW50ZXJuYWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3J4Z2tfY29tbW9uLmgmIzM0OwogCkBAIC03MzQsMzcgJiM0Mzs3MzUsNiBAQCBzdGF0aWMgYm9vbCByeGdrX3ZhbGlkYXRlX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyoqCi0gKiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UgLSBRdWVyeSBSeEdLLXNwZWNpZmljIGNoYWxsZW5nZSBwYXJhbWV0ZXJzCi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHBhY2tldCB0byBxdWVyeQotICoKLSAqIFJldHVybjogVGhlIEtlcmJlcm9zIDUgZW5jb2RpbmcgdHlwZSBmb3IgdGhlIGNoYWxsZW5nZWQgY29ubmVjdGlvbi4KLSAqLwotdTMyIHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTsKLQotCXJldHVybiBzcC0mZ3Q7Y2hhbGwuY29ubi0mZ3Q7cnhnay5lbmN0eXBlOwotfQotRVhQT1JUX1NZTUJPTChyeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UpOwotCi0vKgotICogRmlsbCBvdXQgdGhlIGNvbnRyb2wgbWVzc2FnZSB0byBwYXNzIHRvIHVzZXJzcGFjZSB0byBpbmZvcm0gYWJvdXQgdGhlCi0gKiBjaGFsbGVuZ2UuCi0gKi8KLXN0YXRpYyBpbnQgcnhna19jaGFsbGVuZ2VfdG9fcmVjdm1zZyhzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKLQkJCQkgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpCi17Ci0Jc3RydWN0IHJ4Z2tfY2hhbGxlbmdlIGNoYWxsOwotCi0JY2hhbGwuYmFzZS5zZXJ2aWNlX2lkCQk9IGNvbm4tJmd0O3NlcnZpY2VfaWQ7Ci0JY2hhbGwuYmFzZS5zZWN1cml0eV9pbmRleAk9IGNvbm4tJmd0O3NlY3VyaXR5X2l4OwotCWNoYWxsLmVuY3R5cGUJCQk9IGNvbm4tJmd0O3J4Z2suZW5jdHlwZTsKLQotCXJldHVybiBwdXRfY21zZyhtc2csIFNPTF9SWFJQQywgUlhSUENfQ0hBTExFTkdFRCwgc2l6ZW9mKGNoYWxsKSwgJmFtcDtjaGFsbCk7Ci19Ci0KIC8qCiAgKiBJbnNlcnQgdGhlIHJlcXVpc2l0ZSBhbW91bnQgb2YgWERSIHBhZGRpbmcgZm9yIHRoZSBsZW5ndGggZ2l2ZW4uCiAgKi8KQEAgLTgzNyw3ICYjNDM7ODA3LDcgQEAgc3RhdGljIG5vaW5saW5lIHNzaXplX3Qgcnhna19pbnNlcnRfcmVzcG9uc2VfaGVhZGVyKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb24KICAqLwogc3RhdGljIHNzaXplX3Qgcnhna19jb25zdHJ1Y3RfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKIAkJCQkJICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJCSAgICBjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEsCiYjNDM7CQkJCQkgICAgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKmFwcGRhdGEsCiAJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcG9uc2UsCiAJCQkJCSAgICBzaXplX3Qgb2Zmc2V0KQogewpAQCAtODU5LDIwICYjNDM7ODI5LDIwIEBAIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiAtRVBST1RPOwogCi0JYS5hcHBkYXRhX2xlbiA9IGh0b25sKGFwcGRhdGEtJmd0O2xlbik7CiYjNDM7CWEuYXBwZGF0YV9sZW4gPSBodG9ubChhcHBkYXRhLSZndDtkYXRhbGVuKTsKIAogCXJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsICZhbXA7YSwgc2l6ZW9mKGEpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAlvZmZzZXQgJiM0Mzs9IHNpemVvZihhKTsKIAotCWlmIChhcHBkYXRhLSZndDtsZW4pIHsKLQkJcmV0ID0gc2tiX3N0b3JlX2JpdHMocmVzcG9uc2UsIG9mZnNldCwgYXBwZGF0YS0mZ3Q7ZGF0YSwgYXBwZGF0YS0mZ3Q7bGVuKTsKJiM0MzsJaWYgKGFwcGRhdGEtJmd0O2RhdGFsZW4pIHsKJiM0MzsJCXJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIGFwcGRhdGEtJmd0O2RhdGEsIGFwcGRhdGEtJmd0O2RhdGFsZW4pOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7Ci0JCW9mZnNldCAmIzQzOz0gYXBwZGF0YS0mZ3Q7bGVuOwomIzQzOwkJb2Zmc2V0ICYjNDM7PSBhcHBkYXRhLSZndDtkYXRhbGVuOwogCi0JCXJldCA9IHJ4Z2tfcGFkX291dChyZXNwb25zZSwgYXBwZGF0YS0mZ3Q7bGVuLCBvZmZzZXQpOwomIzQzOwkJcmV0ID0gcnhna19wYWRfb3V0KHJlc3BvbnNlLCBhcHBkYXRhLSZndDtkYXRhbGVuLCBvZmZzZXQpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7CiAJCW9mZnNldCAmIzQzOz0gcmV0OwpAQCAtODkwLDcgJiM0Mzs4NjAsNyBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogCXJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsICZhbXA7Yiwgc2l6ZW9mKGIpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKLQlyZXR1cm4gc2l6ZW9mKGEpICYjNDM7IHhkcl9yb3VuZF91cChhcHBkYXRhLSZndDtsZW4pICYjNDM7IHNpemVvZihiKTsKJiM0MzsJcmV0dXJuIHNpemVvZihhKSAmIzQzOyB4ZHJfcm91bmRfdXAoYXBwZGF0YS0mZ3Q7ZGF0YWxlbikgJiM0Mzsgc2l6ZW9mKGIpOwogfQogCiBzdGF0aWMgc3NpemVfdCByeGdrX2VuY3J5cHRfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKQEAgLTkyMyw3ICYjNDM7ODkzLDcgQEAgc3RhdGljIHNzaXplX3Qgcnhna19lbmNyeXB0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAgKi8KIHN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQkJICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpCiYjNDM7CQkJCSAgIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICphcHBkYXRhKQogewogCXN0cnVjdCByeHJwY19za2JfcHJpdiAqY3NwLCAqcnNwOwogCXN0cnVjdCByeGdrX2NvbnRleHQgKmdrOwpAQCAtOTM2LDcgJiM0Mzs5MDYsNyBAQCBzdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogCWlmIChJU19FUlIoZ2spKQogCQlyZXR1cm4gUFRSX0VSUihnayk7CiAKLQlhdXRoX2xlbiA9IDIwICYjNDM7ICg0ICYjNDM7IGFwcGRhdGEtJmd0O2xlbikgJiM0MzsgMTIgJiM0MzsgKDEgJiM0MzsgNCkgKiA0OwomIzQzOwlhdXRoX2xlbiA9IDIwICYjNDM7ICg0ICYjNDM7IGFwcGRhdGEtJmd0O2RhdGFsZW4pICYjNDM7IDEyICYjNDM7ICgxICYjNDM7IDQpICogNDsKIAlhdXRoeF9sZW4gPSBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIoZ2stJmd0O2tyYjUsIEtSQjVfRU5DUllQVF9NT0RFLAogCQkJCQkJYXV0aF9sZW4sICZhbXA7YXV0aF9vZmZzZXQpOwogCWxlbiA9IHNpemVvZihzdHJ1Y3QgcnhycGNfd2lyZV9oZWFkZXIpICYjNDM7CkBAIC0xMDExLDY2ICYjNDM7OTgxLDM2IEBAIHN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAgKiBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHBhY2tldC4KICAqLwogc3RhdGljIGludCByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAotCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSkKJiM0MzsJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKQogewotCV9lbnRlcigmIzM0O3slZCwleH0mIzM0OywgY29ubi0mZ3Q7ZGVidWdfaWQsIGtleV9zZXJpYWwoY29ubi0mZ3Q7a2V5KSk7CiYjNDM7CXN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIGR1bW15ID0ge30sICphcHBkYXRhID0gJmFtcDtkdW1teTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJX2VudGVyKCYjMzQ7eyVkLCV1LCV4LCV4fSYjMzQ7LAomIzQzOwkgICAgICAgY29ubi0mZ3Q7ZGVidWdfaWQsIGNvbm4tJmd0O3NlcnZpY2VfaWQsCiYjNDM7CSAgICAgICBrZXlfc2VyaWFsKGNvbm4tJmd0O2tleSksIGtleV9zZXJpYWwoY29ubi0mZ3Q7YnVuZGxlLSZndDthcHBfZGF0YSkpOwogCiAJaWYgKGtleV92YWxpZGF0ZShjb25uLSZndDtrZXkpICZsdDsgMCkKIAkJcmV0dXJuIHJ4cnBjX2Fib3J0X2Nvbm4oY29ubiwgTlVMTCwgUlhHS19FWFBJUkVELCAtRVBST1RPLAogCQkJCQlyeGdrX2Fib3J0X2NoYWxsX2tleV9leHBpcmVkKTsKIAotCXJldHVybiByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShjb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpOwotfQotCi1zdGF0aWMgaW50IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2Vfbm9fYXBwZGF0YShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKLQkJCQkJCXN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpCi17Ci0Jc3RydWN0IGtyYjVfYnVmZmVyIGFwcGRhdGEgPSB7fTsKLQotCXJldHVybiByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNvbm4sIGNoYWxsZW5nZSwgJmFtcDthcHBkYXRhKTsKLX0KLQotLyoqCi0gKiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZSAtIFJlc3BvbmQgdG8gYSBjaGFsbGVuZ2Ugd2l0aCBhcHBkYXRhCi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHJlc3BvbmQgdG8KLSAqIEBhcHBkYXRhOiBUaGUgYXBwbGljYXRpb24gZGF0YSB0byBpbmNsdWRlIGluIHRoZSBSRVNQT05TRSBhdXRoZW50aWNhdG9yCi0gKgotICogQWxsb3cgYSBrZXJuZWwgYXBwbGljYXRpb24gdG8gcmVzcG9uZCB0byBhIENIQUxMRU5HRSB3aXRoIGFwcGxpY2F0aW9uIGRhdGEKLSAqIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBSeEdLIFJFU1BPTlNFIEF1dGhlbnRpY2F0b3IuCi0gKgotICogUmV0dXJuOiAlMCBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgotICovCi1pbnQgcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSkKLXsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKmNzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpOwotCi0JcmV0dXJuIHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UoY3NwLSZndDtjaGFsbC5jb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpOwotfQotRVhQT1JUX1NZTUJPTChyeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZSk7Ci0KLS8qCi0gKiBQYXJzZSBzZW5kbXNnKCkgY29udHJvbCBtZXNzYWdlIGFuZCByZXNwb25kIHRvIGNoYWxsZW5nZS4gIFdlIG5lZWQgdG8gc2VlIGlmCi0gKiB0aGVyZSYjMzk7cyBhbiBhcHBkYXRhIHRvIGZpc2ggb3V0LgotICovCi1zdGF0aWMgaW50IHJ4Z2tfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLAotCQkJCQkgICAgIHN0cnVjdCBtc2doZHIgKm1zZykKLXsKLQlzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9OwotCXN0cnVjdCBjbXNnaGRyICpjbXNnOwotCi0JZm9yX2VhY2hfY21zZ2hkcihjbXNnLCBtc2cpIHsKLQkJaWYgKGNtc2ctJmd0O2Ntc2dfbGV2ZWwgIT0gU09MX1JYUlBDIHx8Ci0JCSAgICBjbXNnLSZndDtjbXNnX3R5cGUgIT0gUlhSUENfUkVTUF9SWEdLX0FQUERBVEEpCi0JCQljb250aW51ZTsKLQkJaWYgKGFwcGRhdGEuZGF0YSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlhcHBkYXRhLmRhdGEgPSBDTVNHX0RBVEEoY21zZyk7Ci0JCWFwcGRhdGEubGVuID0gY21zZy0mZ3Q7Y21zZ19sZW4gLSBzaXplb2Yoc3RydWN0IGNtc2doZHIpOwomIzQzOwlpZiAoY29ubi0mZ3Q7YnVuZGxlLSZndDthcHBfZGF0YSkgewomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJYXBwZGF0YSA9IChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKQomIzQzOwkJCXVzZXJfa2V5X3BheWxvYWRfcmN1KGNvbm4tJmd0O2J1bmRsZS0mZ3Q7YXBwX2RhdGEpOwomIzQzOwkJaWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oJmFtcDthcHBkYXRhLSZndDtyZWYpKQomIzQzOwkJCWFwcGRhdGEgPSBOVUxMOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlpZiAoIWFwcGRhdGEpCiYjNDM7CQkJcmV0dXJuIHJ4cnBjX2Fib3J0X2Nvbm4oY29ubiwgTlVMTCwgUlhHS19FWFBJUkVELCAtRUtFWVJFVk9LRUQsCiYjNDM7CQkJCQkJcnhna19hYm9ydF9jaGFsbF9rZXlfZXhwaXJlZCk7CiAJfQogCi0JcmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgJmFtcDthcHBkYXRhKTsKJiM0MzsJcmV0ID0gcnhna19jb25zdHJ1Y3RfcmVzcG9uc2UoY29ubiwgY2hhbGxlbmdlLCBhcHBkYXRhKTsKJiM0MzsKJiM0MzsJaWYgKGFwcGRhdGEgIT0gJmFtcDtkdW1teSkKJiM0MzsJCXB1dF91c2VyX2tleV9wYXlsb2FkKGFwcGRhdGEpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtMTM0Niw5ICYjNDM7MTI4Niw3IEBAIGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGdrX3lmcyA9IHsKIAkuZnJlZV9jYWxsX2NyeXB0bwkJPSByeGdrX2ZyZWVfY2FsbF9jcnlwdG8sCiAJLmlzc3VlX2NoYWxsZW5nZQkJPSByeGdrX2lzc3VlX2NoYWxsZW5nZSwKIAkudmFsaWRhdGVfY2hhbGxlbmdlCQk9IHJ4Z2tfdmFsaWRhdGVfY2hhbGxlbmdlLAotCS5jaGFsbGVuZ2VfdG9fcmVjdm1zZwkJPSByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnLAotCS5zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlCT0gcnhna19zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLAotCS5yZXNwb25kX3RvX2NoYWxsZW5nZQkJPSByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlX25vX2FwcGRhdGEsCiYjNDM7CS5yZXNwb25kX3RvX2NoYWxsZW5nZQkJPSByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLAogCS52ZXJpZnlfcmVzcG9uc2UJCT0gcnhna192ZXJpZnlfcmVzcG9uc2UsCiAJLmNsZWFyCQkJCT0gcnhna19jbGVhciwKIAkuZGVmYXVsdF9kZWNvZGVfdGlja2V0CQk9IHJ4Z2tfeWZzX2RlY29kZV90aWNrZXQsCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcnhrYWQuYyBiL25ldC9yeHJwYy9yeGthZC5jCmluZGV4IGNhOWYwZTgyY2I5YWM3Li5lNTViZmNhMTBlMWE5NCAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3J4a2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3J4a2FkLmMKQEAgLTc0OCwzMiAmIzQzOzc0OCw2IEBAIHN0YXRpYyBpbnQgcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIFJ4S0FEIGRvZXMgYXV0b21hdGljIHJlc3BvbnNlIG9ubHkgYXMgdGhlcmUmIzM5O3Mgbm90aGluZyB0byBtYW5hZ2UgdGhhdCBpc24mIzM5O3QKLSAqIGFscmVhZHkgaW4gdGhlIGtleS4KLSAqLwotc3RhdGljIGludCByeGthZF9zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJCSAgICAgIHN0cnVjdCBtc2doZHIgKm1zZykKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotLyoqCi0gKiByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UgLSBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHdpdGggYXBwZGF0YQotICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byByZXNwb25kIHRvCi0gKgotICogQWxsb3cgYSBrZXJuZWwgYXBwbGljYXRpb24gdG8gcmVzcG9uZCB0byBhIENIQUxMRU5HRS4KLSAqCi0gKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCi0gKi8KLWludCByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSkKLXsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKmNzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpOwotCi0JcmV0dXJuIHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNzcC0mZ3Q7Y2hhbGwuY29ubiwgY2hhbGxlbmdlKTsKLX0KLUVYUE9SVF9TWU1CT0wocnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKTsKLQogLyogRGVjcnlwdCBkYXRhIGluLXBsYWNlIHVzaW5nIERFUy1QQ0JDLiAgQGxlbiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOC4gKi8KIFZJU0lCTEVfSUZfS1VOSVQgdm9pZCBkZXNfcGNiY19kZWNyeXB0X2lucGxhY2UoY29uc3Qgc3RydWN0IGRlc19jdHggKmtleSwKIAkJCQkJICAgICAgIF9fbGU2NCBpdiwgdTggKmRhdGEsIHNpemVfdCBsZW4pCkBAIC0xMTM0LDcgJiM0MzsxMTA4LDYgQEAgY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHJ4a2FkID0gewogCS5mcmVlX2NhbGxfY3J5cHRvCQk9IHJ4a2FkX2ZyZWVfY2FsbF9jcnlwdG8sCiAJLmlzc3VlX2NoYWxsZW5nZQkJPSByeGthZF9pc3N1ZV9jaGFsbGVuZ2UsCiAJLnZhbGlkYXRlX2NoYWxsZW5nZQkJPSByeGthZF92YWxpZGF0ZV9jaGFsbGVuZ2UsCi0JLnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UJPSByeGthZF9zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLAogCS5yZXNwb25kX3RvX2NoYWxsZW5nZQkJPSByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZSwKIAkudmVyaWZ5X3Jlc3BvbnNlCQk9IHJ4a2FkX3ZlcmlmeV9yZXNwb25zZSwKIAkuY2xlYXIJCQkJPSByeGthZF9jbGVhciwKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZW5kbXNnLmMgYi9uZXQvcnhycGMvc2VuZG1zZy5jCmluZGV4IGVkMmM5YTUxMDA1YWRlLi4yMjVlZWM0MTBiZWRjOCAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3NlbmRtc2cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvc2VuZG1zZy5jCkBAIC00NTMsOSAmIzQzOzQ1Myw2IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAogc3VjY2VzczoKIAlyZXQgPSBjb3BpZWQ7Ci0JaWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgJmFtcDsmYW1wOwotCSAgICBjYWxsLSZndDtlcnJvciAmbHQ7IDApCi0JCXJldCA9IGNhbGwtJmd0O2Vycm9yOwogb3V0OgogCWNhbGwtJmd0O3R4X3BlbmRpbmcgPSB0eGI7CiAJX2xlYXZlKCYjMzQ7ID0gJWQmIzM0OywgcmV0KTsKQEAgLTQ2Nyw4ICYjNDM7NDY0LDE0IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAlyZXR1cm4gY2FsbC0mZ3Q7ZXJyb3I7CiAKIG1heWJlX2Vycm9yOgotCWlmIChjb3BpZWQpCiYjNDM7CWlmIChjb3BpZWQpIHsKJiM0MzsJCWlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBjYWxsLSZndDtlcnJvciAmbHQ7IDApIHsKJiM0MzsJCQlyZXQgPSBjYWxsLSZndDtlcnJvcjsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KIAkJZ290byBzdWNjZXNzOwomIzQzOwl9CiAJZ290byBvdXQ7CiAKIGVmYXVsdDoKQEAgLTUwMyw2ICYjNDM7NTA2LDggQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LAogc3RhdGljIGludCByeHJwY19zZW5kbXNnX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfc2VuZF9wYXJhbXMgKnApCiB7CiAJc3RydWN0IGNtc2doZHIgKmNtc2c7CiYjNDM7CWtleV9zZXJpYWxfdCBrZXlfaWQ7CiYjNDM7CWtleV9yZWZfdCBrZXk7CiAJYm9vbCBnb3RfdXNlcl9JRCA9IGZhbHNlOwogCWludCBsZW47CiAKQEAgLTU4Nyw2ICYjNDM7NTkyLDE4IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zICpwKQogCQkJCXJldHVybiAtRVJBTkdFOwogCQkJYnJlYWs7CiAKJiM0MzsJCWNhc2UgUlhSUENfUkVTUE9OU0VfQVBQREFUQToKJiM0MzsJCQlpZiAobGVuICE9IHNpemVvZihrZXlfc2VyaWFsX3QpKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQlpZiAocC0mZ3Q7Y2FsbC5hcHBfZGF0YSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJa2V5X2lkID0gKihrZXlfc2VyaWFsX3QgKilDTVNHX0RBVEEoY21zZyk7CiYjNDM7CQkJa2V5ID0gbG9va3VwX3VzZXJfa2V5KGtleV9pZCwgMCwgS0VZX05FRURfU0VBUkNIKTsKJiM0MzsJCQlpZiAoSVNfRVJSKGtleSkpCiYjNDM7CQkJCXJldHVybiBQVFJfRVJSKGtleSk7CiYjNDM7CQkJcC0mZ3Q7Y2FsbC5hcHBfZGF0YSA9IGtleV9yZWZfdG9fcHRyKGtleSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtNzg2LDYgJiM0Mzs4MDMsNyBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIAogZXJyb3JfcmVsZWFzZV9zb2NrOgogCXJlbGVhc2Vfc29jaygmYW1wO3J4LSZndDtzayk7CiYjNDM7CWtleV9wdXQocC5jYWxsLmFwcF9kYXRhKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvc2VydmVyX2tleS5jIGIvbmV0L3J4cnBjL3NlcnZlcl9rZXkuYwppbmRleCAzZWZlMTA0YjE5MzBjYi4uZmM2ZjQ3OGUxNzYyYTcgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3NlcnZlcl9rZXkuYwpAQCAtMTczLDQzICYjNDM7MTczLDMgQEAgaW50IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qga2V5ICprZXlyaW5nKQogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcpOwotCi0vKioKLSAqIHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZSAtIFNldCB0aGUgbWFuYWdlLXJlc3BvbnNlIGZsYWcgZm9yIGEga2VybmVsIHNlcnZpY2UKLSAqIEBzazogVGhlIHNvY2tldCB0byBzZXQgdGhlIGtleXJpbmcgb24KLSAqIEBzZXQ6IFRydWUgdG8gc2V0LCBmYWxzZSB0byBjbGVhciB0aGUgZmxhZwotICoKLSAqIFNldCB0aGUgZmxhZyBvbiBhbiByeHJwYyBzb2NrZXQgdG8gc2F5IHRoYXQgdGhlIGNhbGxlciB3YW50cyB0byBtYW5hZ2UgdGhlCi0gKiBSRVNQT05TRSBwYWNrZXQgYW5kIHRoZSB1c2VyLWRlZmluZWQgZGF0YSBpdCBtYXkgY29udGFpbi4gIFNldHRpbmcgdGhpcwotICogbWVhbnMgdGhhdCByZWN2bXNnKCkgd2lsbCByZXR1cm4gbWVzc2FnZXMgd2l0aCBSWFJQQ19DSEFMTEVOR0VEIGluIHRoZQotICogY29udHJvbCBtZXNzYWdlIGJ1ZmZlciBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFsbGVuZ2UuCi0gKgotICogVGhlIHVzZXIgc2hvdWxkIHJlc3BvbmQgdG8gdGhlIGNoYWxsZW5nZSBieSBwYXNzaW5nIFJYUlBDX1JFU1BPTkQgb3IKLSAqIFJYUlBDX1JFU1BPTkRfQUJPUlQgY29udHJvbCBtZXNzYWdlcyB3aXRoIHNlbmRtc2coKSB0byB0aGUgc2FtZSBjYWxsLgotICogU3VwcGxlbWVudGFyeSBjb250cm9sIG1lc3NhZ2VzLCBzdWNoIGFzIFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBLCBtYXkgYmUKLSAqIGluY2x1ZGVkIHRvIGluZGljYXRlIHRoZSBwYXJ0cyB0aGUgdXNlciB3YW50cyB0byBzdXBwbHkuCi0gKgotICogVGhlIHNlcnZlciB3aWxsIGJlIHBhc3NlZCB0aGUgcmVzcG9uc2UgZGF0YSB3aXRoIGEgUlhSUENfUkVTUE9OREVEIGNvbnRyb2wKLSAqIG1lc3NhZ2Ugd2hlbiBpdCBnZXRzIHRoZSBmaXJzdCBkYXRhIGZyb20gZWFjaCBjYWxsLgotICoKLSAqIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgaG9ub3VyZWQgYnkgc2VjdXJpdHkgY2xhc3NlcyB0aGF0IG5lZWQgYXV4aWxpYXJ5IGRhdGEKLSAqIChlLmcuIFJ4R0spLiAgVGhvc2UgdGhhdCBkb24mIzM5O3Qgb2ZmZXIgdGhlIGZhY2lsaXR5IChlLmcuIFJ4S0FEKSByZXNwb25kCi0gKiB3aXRob3V0IGNvbnN1bHRpbmcgdXNlcnNwYWNlLgotICoKLSAqIFJldHVybjogVGhlIHByZXZpb3VzIHNldHRpbmcuCi0gKi8KLWludCByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2Uoc3RydWN0IHNvY2sgKnNrLCBib29sIHNldCkKLXsKLQlzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzayk7Ci0JaW50IHJldDsKLQotCWxvY2tfc29jayhzayk7Ci0JcmV0ID0gISF0ZXN0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgJmFtcDtyeC0mZ3Q7ZmxhZ3MpOwotCWlmIChzZXQpCi0JCXNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsICZhbXA7cngtJmd0O2ZsYWdzKTsKLQllbHNlCi0JCWNsZWFyX2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgJmFtcDtyeC0mZ3Q7ZmxhZ3MpOwotCXJlbGVhc2Vfc29jayhzayk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wocnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jCmluZGV4IDZmODhiNTA3ZjkyNzkxLi45MGMxYmQ1ZDdkZmVjZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jCkBAIC02Nyw2ICYjNDM7NjcsNyBAQCBpbnQgdXNlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKQogCXVwYXlsb2FkID0ga21hbGxvY19mbGV4KCp1cGF5bG9hZCwgZGF0YSwgZGF0YWxlbik7CiAJaWYgKCF1cGF5bG9hZCkKIAkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO3VwYXlsb2FkLSZndDtyZWYsIDEpOwogCiAJLyogYXR0YWNoIHRoZSBkYXRhICovCiAJcHJlcC0mZ3Q7cXVvdGFsZW4gPSBkYXRhbGVuOwpAQCAtODgsMTIgJiM0Mzs4OSwyMiBAQCBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2ZyZWVfcHJlcGFyc2UpOwogCiBzdGF0aWMgdm9pZCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQogewotCXN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkOwomIzQzOwlzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZCA9CiYjNDM7CQljb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQsIHJjdSk7CiAKLQlwYXlsb2FkID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkLCByY3UpOwogCWtmcmVlX3NlbnNpdGl2ZShwYXlsb2FkKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogRnJlZSBhIHVzZXIgZGVmaW5lZCBrZXkgcGF5bG9hZC4KJiM0MzsgKi8KJiM0Mzt2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKQomIzQzO3sKJiM0MzsJaWYgKHBheWxvYWQgJmFtcDsmYW1wOyByZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtwYXlsb2FkLSZndDtyZWYpKQomIzQzOwkJY2FsbF9yY3UoJmFtcDtwYXlsb2FkLSZndDtyY3UsIHVzZXJfZnJlZV9wYXlsb2FkX3JjdSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHB1dF91c2VyX2tleV9wYXlsb2FkKTsKJiM0MzsKIC8qCiAgKiB1cGRhdGUgYSB1c2VyIGRlZmluZWQga2V5CiAgKiAtIHRoZSBrZXkmIzM5O3Mgc2VtYXBob3JlIGlzIHdyaXRlLWxvY2tlZApAQCAtMTE1LDggJiM0MzsxMjYsNyBAQCBpbnQgdXNlcl91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKQogCXJjdV9hc3NpZ25fa2V5cG9pbnRlcihrZXksIHByZXAtJmd0O3BheWxvYWQuZGF0YVswXSk7CiAJcHJlcC0mZ3Q7cGF5bG9hZC5kYXRhWzBdID0gTlVMTDsKIAotCWlmICh6YXApCi0JCWNhbGxfcmN1KCZhbXA7emFwLSZndDtyY3UsIHVzZXJfZnJlZV9wYXlsb2FkX3JjdSk7CiYjNDM7CXB1dF91c2VyX2tleV9wYXlsb2FkKHphcCk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfdXBkYXRlKTsKQEAgLTEzNCw3ICYjNDM7MTQ0LDcgQEAgdm9pZCB1c2VyX3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpCiAKIAlpZiAodXBheWxvYWQpIHsKIAkJcmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgTlVMTCk7Ci0JCWNhbGxfcmN1KCZhbXA7dXBheWxvYWQtJmd0O3JjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTsKJiM0MzsJCXB1dF91c2VyX2tleV9wYXlsb2FkKHVwYXlsb2FkKTsKIAl9CiB9CiAKQEAgLTE0Nyw5ICYjNDM7MTU3LDggQEAgdm9pZCB1c2VyX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KQogewogCXN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1cGF5bG9hZCA9IGtleS0mZ3Q7cGF5bG9hZC5kYXRhWzBdOwogCi0Ja2ZyZWVfc2Vuc2l0aXZlKHVwYXlsb2FkKTsKJiM0MzsJcHV0X3VzZXJfa2V5X3BheWxvYWQodXBheWxvYWQpOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2Rlc3Ryb3kpOwogCiAvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQwNQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBRlMvUnhSUEMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIGl0IGxvb2tzIGxpa2UgYSBmYWlybHkgc2lnbmlmaWNhbnQgcmVmYWN0b3Igb2YgdGhlIEFGUyBhbmQgUnhSUEMgc3Vic3lzdGVtcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIG1pbm9yIHR3ZWFrOyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBjb3JlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gaW50ZXJhY3Rpb24uIEl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGxvdy1sZXZlbCBzdHVmZiwgc3BlY2lmaWNhbGx5IHRoZSB3YXkgdGhlIGtlcm5lbCBoYW5kbGVzIFJ4UlBDIHJlc3BvbnNlcyBhbmQgb3V0LW9mLWJhbmQgbWVzc2FnZXMsIGFuZCBob3cgQUZTIGludGVyYWN0cyB3aXRoIFJ4UlBDLgoKRXNzZW50aWFsbHksIHRoZXkmIzM5O3JlIHJlbW92aW5nIHRoZSBgcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlYCBsb2dpYyBhbmQgZ2V0dGluZyByaWQgb2YgdGhlIE9PQiBtZXNzYWdlIGhhbmRsaW5nIGluIFJ4UlBDIGVudGlyZWx5LiBJbnN0ZWFkLCB0aGV5JiMzOTtyZSBjcmVhdGluZyBhcHBsaWNhdGlvbiBkYXRhIGZvciBSeEdLIHJlc3BvbnNlcyB3aXRoIHRoaXMgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIGZ1bmN0aW9uIGFuZCBzdG9yaW5nIGl0IGluIGEga2V5LiBUaGF0IGtleSBpcyB0aGVuIGZlZCBpbnRvIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAsIHdoaWNoIGlzIGFsc28gYmVpbmcgbW9kaWZpZWQgdG8gYWNjZXB0IHRoaXMgbmV3IGBhcHBfZGF0YWAgcGFyYW1ldGVyLiBUaGUgY3JpdGljYWwgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYCBmdW5jdGlvbiBpcyBnZXR0aW5nIHVwZGF0ZWQgdG8gY2FsbCBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAuIEFuZCwgb2YgY291cnNlLCB0aGV5JiMzOTtyZSBkZWxldGluZyBgb29iLmNgIGZyb20gdGhlIGBuZXQvcnhycGMvYCBkaXJlY3RvcnkuCgpHaXZlbiB0aGlzLCB0aGlzIHdpbGwgZGVmaW5pdGVseSBjaGFuZ2UgZXhlY3V0aW9uIGZsb3csIHNvIGZ1enppbmcgaXMgYSBtdXN0LiBXZSBuZWVkIHRvIGV4cG9zZSB0aGlzIHBhdGNoIHRvIGEgYmF0dGVyeSBvZiB0ZXN0cy4KClRvIHZlcmlmeSB0aGUgc2V0dXAsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBrZXJuZWwgY29uZmlncy4gV2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGFyZSBlbmFibGVkOiBgQ09ORklHX0FGU19GU2AsIGBDT05GSUdfQUZfUlhSUENgLCBgQ09ORklHX1JYS0FEYCwgYW5kIGBDT05GSUdfUlhHS2AgKHRoYXQgbGFzdCBvbmUsIGl0JiMzOTtzIG1lbnRpb25lZCBleHBsaWNpdGx5IGluIHRoZSBwYXRjaCwgc28gd2Ugc2hvdWxkIGRvdWJsZS1jaGVjaykuIFdlIHNob3VsZCBjaGVjayBgZnMvYWZzL0tjb25maWdgIGFuZCBgbmV0L3J4cnBjL0tjb25maWdgIGZvciB0aGUgY29uZmlnIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJYR0smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL0tjb25maWc9NTg9Y29uZmlnIFJYS0FEXG4tLVxubmV0L3J4cnBjL0tjb25maWctNjUtXG5uZXQvcnhycGMvS2NvbmZpZzo2Njpjb25maWcgUlhHS1xubmV0L3J4cnBjL0tjb25maWctNjctXHRib29sIFwmIzM0O1J4UlBDIEdTU0FQSSBzZWN1cml0eVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTc3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb24gTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBDT05GSUdfUlhHS2AgYW5kIGBDT05GSUdfUlhLQURgIGFyZSBkZWZpbml0ZWx5IGVuYWJsZWQsIGFuZCB3ZSBhbHNvIGhhdmUgYENPTkZJR19BRlNfRlNgIGFuZCBgQ09ORklHX0FGX1JYUlBDYC4gR29vZCwgdGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duIGEgYml0LiBOb3csIGxldCYjMzk7cyBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcyBhbmQgZmluZCB0aGUgZm9jdXMgc3ltYm9scy4KClJpZ2h0LCB0aGUgbW9kaWZpZWQgb3IgbmV3bHkgYWRkZWQgZnVuY3Rpb25zIGFyZTogYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgLCBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gLCBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgLCBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLCBgcnhycGNfa2VybmVsX3F1ZXJ5X2tleWAsIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCwgYHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlYCwgYHJ4cnBjX3NlbmRtc2dfY21zZ2AsIGFuZCBgcHV0X3VzZXJfa2V5X3BheWxvYWRgLiBUaGF0JiMzOTtzIGEgZGVjZW50LXNpemVkIGNodW5rIG9mIGNvZGUgdG8gcmV2aWV3LCBpbmRpY2F0aW5nIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzIHJlbGF0ZWQgdG8gQUZTIGFuZCBSeFJQQywgcG90ZW50aWFsbHkgaW52b2x2aW5nIGtleSBtYW5hZ2VtZW50IGFuZCBjb21tdW5pY2F0aW9uIHByb3RvY29scy4KCkkgdGhpbmsgSSYjMzk7bGwgc3RhcnQgYnkgZm9jdXNpbmcgb24gYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIGRhdGEgc3RydWN0dXJlIGlzIGJlaW5nIGNyZWF0ZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9jbV9zZWN1cml0eS5jPTI0PXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGtyYjVfZW5jdHlwZSk7XG4tLVxuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMzEtICovXG5mcy9hZnMvY21fc2VjdXJpdHkuYzozMjppbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0zMy17XG4tLVxuZnMvYWZzL2ZzX3Byb2JlLmM9MjM4PWludCBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxuLS1cbmZzL2Fmcy9mc19wcm9iZS5jLTI0Ny1cbmZzL2Fmcy9mc19wcm9iZS5jOjI0ODpcdHJldCA9IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc2VydmVyLCBrZXkpO1xuZnMvYWZzL2ZzX3Byb2JlLmMtMjQ5LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5mcy9hZnMvaW50ZXJuYWwuaD0xMDg4PWV4dGVybiBib29sIGFmc19jbV9pbmNvbWluZ19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqKTtcbi0tXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDkyLSAqL1xuZnMvYWZzL2ludGVybmFsLmg6MTA5MzppbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpO1xuZnMvYWZzL2ludGVybmFsLmgtMTA5NC0jaWZkZWYgQ09ORklHX1JYR0tcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk3NwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIHdob2xlIHRoaW5nLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgZmxvdywgdGhlIHVuZGVybHlpbmcgbG9naWMsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6YXRpb25zIHdlIGNhbiBleHBsb3JlIGluIHRoaXMgYXJlYS4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIG9yIG1heWJlIGV2ZW4gdGhlIGhhcmR3YXJlLCBiZWdpbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBpdCYjMzk7cyBkb2luZyBpbiBkZXRhaWwuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgcmVhZGluZyB0aGUgY29kZTsgaXQmIzM5O3MgYWJvdXQgY29ubmVjdGluZyBpdCB0byBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgdGhlIFJYUlBDIHByb3RvY29sLCB0aGUga2VybmVsJiMzOTtzIGFyY2hpdGVjdHVyZSwgYW5kIGFsbCB0aGUgcmVsZXZhbnQgaGFyZHdhcmUgYW5kIGhvdyBpdCBmaXRzLiBJIG5lZWQgdG8gZm9ybSBhIG1lbnRhbCBtb2RlbCBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyeHJwY19rZXJuZWxfYmVnaW5fY2FsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0PTc5NT1UaGUga2VybmVsIGludGVyZmFjZSBmdW5jdGlvbnMgYXJlIGFzIGZvbGxvd3M6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC03OTktXHRzdHJ1Y3QgcnhycGNfY2FsbCAqXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0OjgwMDpcdHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0LTgwMS1cdFx0XHRcdHN0cnVjdCBzb2NrYWRkcl9yeHJwYyAqc3J4LFxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QtOTg5LSAgICAgVGhpcyBpcyB1c2VkIHRvIGFjY2VwdCBhbiBpbmNvbWluZyBjYWxsIGFuZCB0byBhc3NpZ24gaXQgYSBjYWxsIElELiAgVGhpc1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdDo5OTA6ICAgICBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKCkgYW5kIGNhbGxzIGFjY2VwdGVkIG11c3RcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QtOTkxLSAgICAgYmUgZW5kZWQgaW4gdGhlIHNhbWUgd2F5LlxuLS1cbmZzL2Fmcy9yeHJwYy5jPTMzNz12b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4tLVxuZnMvYWZzL3J4cnBjLmMtMzkyLVx0LyogY3JlYXRlIGEgY2FsbCAqL1xuZnMvYWZzL3J4cnBjLmM6MzkzOlx0cnhjYWxsID0gcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXBlZXIsXG5mcy9hZnMvcnhycGMuYy0zOTQtXHRcdFx0XHRcdCBjYWxsLVx1MDAzZWtleSwgYXBwX2RhdGEsXG4tLVxuaW5jbHVkZS9uZXQvYWZfcnhycGMuaD01Mz12b2lkIHJ4cnBjX2tlcm5lbF9zZXRfbm90aWZpY2F0aW9ucyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuaW5jbHVkZS9uZXQvYWZfcnhycGMuaC01NC1cdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcnhycGNfa2VybmVsX29wcyAqYXBwX29wcyk7XG5pbmNsdWRlL25ldC9hZl9yeHJwYy5oOjU1OnN0cnVjdCByeHJwY19jYWxsICpyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuaW5jbHVkZS9uZXQvYWZfcnhycGMuaC01Ni1cdFx0XHRcdFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4tLVxubmV0L3J4cnBjL2FmX3J4cnBjLmM9MzE0PUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3B1dF9wZWVyKTtcbi0tXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zMTYtLyoqXG5uZXQvcnhycGMvYWZfcnhycGMuYzozMTc6ICogcnhycGNfa2VybmVsX2JlZ2luX2NhbGwgLSBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIGJlZ2luIGEgY2FsbFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtMzE4LSAqIEBzb2NrOiBUaGUgc29ja2V0IG9uIHdoaWNoIHRvIG1ha2UgdGhlIGNhbGxcbi0tXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zNDAtICovXG5uZXQvcnhycGMvYWZfcnhycGMuYzozNDE6c3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zNDItXHRcdFx0XHRcdCAgIHN0cnVjdCByeHJwY19wZWVyICpwZWVyLFxuLS1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTM5Ny19XG5uZXQvcnhycGMvYWZfcnhycGMuYzozOTg6RVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfYmVnaW5fY2FsbCk7XG5uZXQvcnhycGMvYWZfcnhycGMuYy0zOTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MzMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBDYWxsIHRvIEFjdGlvbjogYHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2VgKioKClJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzLiAmIzM0O0NoZWNrIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYC4mIzM0OyBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgaW50ZXJlc3RpbmcuIFRoZSBuYW1pbmcgY29udmVudGlvbiwgd2l0aCB0aGF0IHVuZGVyc2NvcmUsIHN1Z2dlc3RzIGl0JiMzOTtzIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3IgbW9kdWxlIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0g4oCTIGxpa2VseSBvbmUgdGhhdCYjMzk7cyBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aCBzb21lIGZvcm0gb2YgZXh0ZXJuYWwgaW5wdXQsIHBvdGVudGlhbGx5IGFzeW5jaHJvbm91cy4gVGhlIHRlcm0gJiMzNDtjaGFsbGVuZ2UmIzM0OyBpcyBjcml0aWNhbCBoZXJlLiBJdCBpbXBsaWVzIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBzeXN0ZW0sIG9yIGEgY29tcG9uZW50LCBpcyBiZWluZyB0ZXN0ZWQsIHByb2JlZCwgb3IgcG9zc2libHkgZXZlbiBleHBsb2l0ZWQuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBhIHNpbXBsZSB2YWxpZGF0aW9uIGNoZWNrIHRvIGEgbW9yZSBjb21wbGV4IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgc2NlbmFyaW8uCgpNeSBpbW1lZGlhdGUgY29uc2lkZXJhdGlvbnMgYXJlIGZvY3VzZWQgb24gaXRzIGRlc2lnbi4gSXMgaXQgcHJvcGVybHkgc2FuZGJveGVkPyBBcmUgdGhlcmUgYWRlcXVhdGUgaW5wdXQgdmFsaWRhdGlvbiBjaGVja3MgaW4gcGxhY2UgdG8gcHJldmVudCBjb21tb24gYXR0YWNrcyBsaWtlIGluamVjdGlvbiBvciBidWZmZXIgb3ZlcmZsb3dzPyBXaGF0IGFyZSB0aGUgYWNjZXNzIGNvbnRyb2wgbWVjaGFuaXNtcyBhcm91bmQgdGhpcyBmdW5jdGlvbiDigJMgd2hvIG9yIHdoYXQgaXMgYWxsb3dlZCB0byB0cmlnZ2VyIGl0LCBhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzPyBEb2VzIGl0IGV4aGliaXQgYW55IGluaGVyZW50IHZ1bG5lcmFiaWxpdHkgZHVlIHRvIHRpbWluZyBvciByZXNvdXJjZSBleGhhdXN0aW9uPyBUaGUgJiMzNDtyZXNwb25kJiMzNDsgcGFydCBzdWdnZXN0cyB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIGFjdGl2ZWx5IGRvIHNvbWV0aGluZywgd2hpY2ggcmF0Y2hldHMgdXAgdGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYW5kIHRoZSBwb3RlbnRpYWwgcmVzcG9uc2Ugb3B0aW9ucyBpcyBrZXkuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb24mIzM5O3MgYXJjaGl0ZWN0dXJlIOKAkyBpdHMgaW50ZXJuYWwgbG9naWMsIGFueSBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG1vZHVsZXMgdG8gZm9ybXVsYXRlIGFuIGluZm9ybWVkIGp1ZGdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhna19yZXNwb25kX3RvX2NoYWxsZW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvcnhnay5jPTg5ND1zdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9yeHJwYy9yeGdrLmMtOTgyLSAqL1xubmV0L3J4cnBjL3J4Z2suYzo5ODM6c3RhdGljIGludCByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxubmV0L3J4cnBjL3J4Z2suYy05ODQtXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4tLVxubmV0L3J4cnBjL3J4Z2suYz0xMjcyPWNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGdrX3lmcyA9IHtcbi0tXG5uZXQvcnhycGMvcnhnay5jLTEyODgtXHQudmFsaWRhdGVfY2hhbGxlbmdlXHRcdD0gcnhna192YWxpZGF0ZV9jaGFsbGVuZ2UsXG5uZXQvcnhycGMvcnhnay5jOjEyODk6XHQucmVzcG9uZF90b19jaGFsbGVuZ2VcdFx0PSByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxubmV0L3J4cnBjL3J4Z2suYy0xMjkwLVx0LnZlcmlmeV9yZXNwb25zZVx0XHQ9IHJ4Z2tfdmVyaWZ5X3Jlc3BvbnNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU0NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGlzIGNvZGUgYW5kIGl0cyBjb250ZXh0OgoKKipBbmFseXppbmcgYHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCoqCgpSaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0JiMzOTtzIGNsZWFybHkgYSBmdW5jdGlvbiwgbGlrZWx5IGludm9sdmVkIGluIGEgY2hhbGxlbmdlLXJlc3BvbnNlIGF1dGhlbnRpY2F0aW9uIHNjaGVtZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgS0FEIChvciBzaW1pbGFyKSBhdXRoZW50aWNhdGlvbiBmbG93LiBJcyB0aGlzIG9uIHRoZSBjbGllbnQtc2lkZSwgdGhlIHNlcnZlci1zaWRlLCBvciBib3RoPyBXaGF0IGFyZSB0aGUgaW5wdXRzPyBXaGF0IGFyZSB0aGUgZXhwZWN0ZWQgb3V0cHV0cz8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0eXBpY2FsIHN0ZXBzIGludm9sdmVkOiBjaGFsbGVuZ2UgZ2VuZXJhdGlvbiwgcmVzcG9uc2UgY2FsY3VsYXRpb24sIHZlcmlmaWNhdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoYXQgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgbWlnaHQgYmUgaGVyZS4gSXMgdGhpcyB3aGVyZSB3ZSYjMzk7cmUgaGFuZGxpbmcga2V5IGRlcml2YXRpb24sIGNyeXB0bywgb3Igbm9uY2UgaGFuZGxpbmc/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3IgdGltaW5nIGF0dGFja3MsIG9yIHBvdGVudGlhbCBvdmVyZmxvdyBpc3N1ZXM/IEkgbmVlZCB0byBhbmFseXplIGhvdyBpdCBoYW5kbGVzIGVycm9ycyBhbmQgcG90ZW50aWFsIHByb3RvY29sIHZpb2xhdGlvbnMuIElzIHRoZXJlIGFueSBvYnZpb3VzIGxvZ2dpbmcgdGhhdCBjb3VsZCBleHBvc2Ugc2Vuc2l0aXZlIGluZm9ybWF0aW9uLCBvciBpcyB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUgYnJvYWRlciB0aGFuIEkgaW5pdGlhbGx5IGFzc3VtZT8gVGltZSB0byBzdGFydCBkcmlsbGluZyBpbnRvIHRoZSBjb2RlLCBidXQgYmVmb3JlIEkgZG8sIEkgbmVlZCBhIHF1aWNrIG1lbnRhbCBjaGVja2xpc3Q6IHdoYXQmIzM5O3MgdGhlIGVudmlyb25tZW50IGl0JiMzOTtzIHJ1bm5pbmcgaW4/IFdoYXQgZGVwZW5kZW5jaWVzIGRvZXMgaXQgaGF2ZT8gQXJlIHRoZXJlIGFueSByZWNlbnQgYnVnIHJlcG9ydHMgb3IgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbiB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQW5kIG1vc3QgaW1wb3J0YW50bHksIHdoYXQmIzM5O3MgdGhlICpwdXJwb3NlKiBvZiB0aGlzIGludmVzdGlnYXRpb24/IFZ1bG5lcmFiaWxpdHkgYXNzZXNzbWVudD8gQ29kZSByZXZpZXc/IERlYnVnZ2luZz8gS25vd2luZyB0aGF0IHdpbGwgZGV0ZXJtaW5lIHdoZXJlIG15IGZvY3VzIGdvZXMgZmlyc3QuIEFscmlnaHQsIGxldCYjMzk7cyBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL3J4a2FkLmM9NjQyPWludCByeGthZF9pbnNlcnRfcmVzcG9uc2VfaGVhZGVyKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9yeHJwYy9yeGthZC5jLTY5Ni0gKi9cbm5ldC9yeHJwYy9yeGthZC5jOjY5NzpzdGF0aWMgaW50IHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxubmV0L3J4cnBjL3J4a2FkLmMtNjk4LVx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcbi0tXG5uZXQvcnhycGMvcnhrYWQuYz0xMDk1PWNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGthZCA9IHtcbi0tXG5uZXQvcnhycGMvcnhrYWQuYy0xMTEwLVx0LnZhbGlkYXRlX2NoYWxsZW5nZVx0XHQ9IHJ4a2FkX3ZhbGlkYXRlX2NoYWxsZW5nZSxcbm5ldC9yeHJwYy9yeGthZC5jOjExMTE6XHQucmVzcG9uZF90b19jaGFsbGVuZ2VcdFx0PSByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZSxcbm5ldC9yeHJwYy9yeGthZC5jLTExMTItXHQudmVyaWZ5X3Jlc3BvbnNlXHRcdD0gcnhrYWRfdmVyaWZ5X3Jlc3BvbnNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjE2NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHN1cHBvc2VkIHRvIHNvdW5kIGxpa2UgYW4gZXhwZXJ0OgoKKipEZWVwIERpdmU6IGBhZnNfY3JlYXRlX3lmc19jbV90b2tlbmAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiAmIzM0O2Fmc19jcmVhdGVfeWZzX2NtX3Rva2VuJiMzNDsuLi4gdGhhdCBpbW1lZGlhdGVseSBzaWduYWxzIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBBRlMgKEFuZHJldyBGaWxlIFN5c3RlbSkgaW50ZWdyYXRpb24sIGxpa2VseSB3aXRoaW4gYSBZRlMgKGxpa2VseSByZWZlcnJpbmcgdG8gdGhlIElCTSBTdGVybGluZyBPcmRlciBNYW5hZ2VtZW50IFN5c3RlbSwgYmFzZWQgb24gY29udGV4dCkgY29udGV4dCwgYW5kIHRoZSBjcmVhdGlvbiBvZiBhIHRva2VuIHNwZWNpZmljYWxseSBmb3IgQ2xvdWQgTWFuYWdlbWVudC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IG1lbnRhbGx5IHJlY29uc3RydWN0IHRoZSB0eXBpY2FsIGZsb3cgaGVyZS4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgdXNlciBhdXRoZW50aWNhdGlvbiwgYXV0aG9yaXphdGlvbiBjaGVja3Mgd2l0aGluIFlGUywgYW5kIHRoZW4gdGhlIGdlbmVyYXRpb24gb2YgYSB0ZW1wb3JhcnkgY3JlZGVudGlhbCBvciB0b2tlbiB0aGF0IEFGUyBjYW4gdXNlIHRvIGFjY2VzcyByZXNvdXJjZXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIElzIHRoaXMgYSBzaGFyZWQgdG9rZW4sIG9yIHNvbWV0aGluZyB0aWVkIHNwZWNpZmljYWxseSB0byBhIHVzZXIgc2Vzc2lvbiBvciBwcm9jZXNzPyBUaGUgc2Vuc2l0aXZpdHkgaGVyZSBpcyBoaWdoOiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBwcm9wZXIgcGVybWlzc2lvbnMgYW5kIGNvbnRyb2xzIGFyZSBpbiBwbGFjZS4gV2hhdCBhcmUgdGhlIGV4cGlyYXRpb24gcG9saWNpZXMgYW5kIHJldm9jYXRpb24gbWVjaGFuaXNtcz8KCkkmIzM5O20gaW5zdGFudGx5IHRoaW5raW5nIGFib3V0IHRoZSBkaWZmZXJlbnQgbGF5ZXJzIG9mIGFic3RyYWN0aW9uLiBJcyB0aGlzIHRva2VuIGNyZWF0aW9uIGhhcHBlbmluZyBkaXJlY3RseSB3aXRoaW4gdGhlIGNvcmUgWUZTIGNvZGUsIG9yIGlzIHRoZXJlIGFuIEFQSSBhYnN0cmFjdGlvbiBvciBtaWRkbGV3YXJlIGludm9sdmVkPyBJZiBpdCYjMzk7cyB0aGUgbGF0dGVyLCB0aGVuIHRoZSBhcmNoaXRlY3R1cmUgd2lsbCBiZSBzbGlnaHRseSBtb3JlIHJvYnVzdC4gVGhpcyBhbHNvIGluZmx1ZW5jZXMgbXkgaW1tZWRpYXRlIG5lZWQgdG8gY2hlY2sgbG9nZ2luZy4gV2hhdCBsb2dzIGFyZSBhdmFpbGFibGU/IEkgbmVlZCB0byByZXZpZXcgdG8gdW5kZXJzdGFuZCB0aGUgaW5wdXQgcGFyYW1ldGVycyB0byB0aGlzIGZ1bmN0aW9uIC0gdGhlIGNvbnRleHQgZnJvbSB3aGljaCBpdCBpcyBjYWxsZWQsIHdobyBpcyBjYWxsaW5nIGl0LCBhbmQgdGhlIGRhdGEgYmVpbmcgdXNlZCB0byBlc3RhYmxpc2ggdGhpcyBBRlMgdG9rZW4uCgpGdXJ0aGVybW9yZSwgSSBoYXZlIHRvIGJlIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBmYWlsdXJlIHNjZW5hcmlvcy4gV2hhdCBoYXBwZW5zIGlmIEFGUyBpcyBkb3duLCBvciBpZiBuZXR3b3JrIGNvbm5lY3Rpdml0eSBpcyBkaXNydXB0ZWQ/IEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaGFuZGxlIGVycm9ycywgdGltZW91dHMsIGFuZCBleGNlcHRpb24gaGFuZGxpbmc/IERvZXMgaXQgZ3JhY2VmdWxseSBkZWdyYWRlIG9yIGNyZWF0ZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaW4gaXRzIGZhaWx1cmUgc3RhdGVzPyBJIGFtIGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBlZGdlIGNhc2Ugc2NlbmFyaW9zLgoKTGFzdGx5LCBJIGhhdmUgdG8gY29tcGFyZSB0aGlzIGltcGxlbWVudGF0aW9uIGFnYWluc3Qgc3RhbmRhcmQgcHJhY3RpY2VzLiBTZWN1cml0eSwgcGVyZm9ybWFuY2UsIGFuZCBiZXN0IHByYWN0aWNlcyBhcmUgcGFyYW1vdW50IGluIHRva2VuIGNyZWF0aW9uIC0gdGhlIGxldmVsIG9mIHNlbnNpdGl2aXR5IGlzIGNyaXRpY2FsIGhlcmUsIGFuZCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFyZWFzIHRoYXQgZGV2aWF0ZSBmcm9tIGluZHVzdHJ5IHN0YW5kYXJkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2NtX3NlY3VyaXR5LmMtMjMtI2lmZGVmIENPTkZJR19SWEdLXG5mcy9hZnMvY21fc2VjdXJpdHkuYzoyNDpzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHUzMiBrcmI1X2VuY3R5cGUpO1xuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMjUtI2VuZGlmXG4tLVxuZnMvYWZzL2NtX3NlY3VyaXR5LmM9MzI9aW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KVxuLS1cbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTY4LVx0XHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxuZnMvYWZzL2NtX3NlY3VyaXR5LmM6Njk6XHRcdFx0cmV0ID0gYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc2VydmVyLCBrcmI1X2VuY3R5cGUpO1xuZnMvYWZzL2NtX3NlY3VyaXR5LmMtNzAtXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5mcy9hZnMvY21fc2VjdXJpdHkuYz05Mj1pbnQgYWZzX2NyZWF0ZV90b2tlbl9rZXkoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29ja2V0KVxuLS1cbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTE1MC0gKi9cbmZzL2Fmcy9jbV9zZWN1cml0eS5jOjE1MTpzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHUzMiBlbmN0eXBlKVxuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMTUyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5NzgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGByeHJwY19zZW5kbXNnX2Ntc2dgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgcmlnaHQgdG8gaXQuIFRoZSBmb2N1cyBoZXJlIGlzIGNsZWFybHkgb24gYHJ4cnBjX3NlbmRtc2dfY21zZ2AuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhhdCBmdW5jdGlvbiwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgbG93LWxldmVsIGRldGFpbHMgb2Ygc2VuZGluZyBtZXNzYWdlcyB3aXRoIGNvbnRyb2wgbWVzc2FnZXMgaW4gdGhlIFJYUlBDIHByb3RvY29sLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBpdCBoYW5kbGVzIHRoZSBjb25zdHJ1Y3Rpb24gYW5kIHRyYW5zbWlzc2lvbiBvZiB0aG9zZSBhbmNpbGxhcnkgZGF0YSBidWZmZXJzLiBJcyBpdCB0aGUgbWFpbiB3b3JraG9yc2UsIG9yIGEgaGVscGVyIGZ1bmN0aW9uPyBXaGF0JiMzOTtzIHRoZSByZWxhdGlvbnNoaXAgd2l0aCB0aGUgdW5kZXJseWluZyBzb2NrZXQgYW5kIG5ldHdvcmsgc3RhY2s/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IHdpdGggbGFyZ2VyIGNvbnRyb2wgbWVzc2FnZXMgb3IgZnJhZ21lbnRlZCBwYXlsb2Fkcz8gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBuZWVkIHRvIGdvIGRlZXAuLi4gbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J4cnBjX3NlbmRtc2dfY21zZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvc2VuZG1zZy5jPTMyMD1zdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4tLVxubmV0L3J4cnBjL3NlbmRtc2cuYy01MDUtICovXG5uZXQvcnhycGMvc2VuZG1zZy5jOjUwNjpzdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyAqcClcbm5ldC9yeHJwYy9zZW5kbXNnLmMtNTA3LXtcbi0tXG5uZXQvcnhycGMvc2VuZG1zZy5jPTY3Nz1pbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcnhycGMvc2VuZG1zZy5jLTY5NS1cbm5ldC9yeHJwYy9zZW5kbXNnLmM6Njk2Olx0cmV0ID0gcnhycGNfc2VuZG1zZ19jbXNnKG1zZywgXHUwMDI2cCk7XG5uZXQvcnhycGMvc2VuZG1zZy5jLTY5Ny1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDM1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBwdXRfdXNlcl9rZXlfcGF5bG9hZGAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcHV0X3VzZXJfa2V5X3BheWxvYWRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGl0cyBpbnB1dHMsIGFuZCB3aGF0IGl0JiMzOTtzIHVsdGltYXRlbHkgZG9pbmcgd2l0aCB1c2VyIGtleXMuIFRoZXJlJiMzOTtzIGEgc3VidGxlIG51YW5jZSBoZXJlIEkgc2hvdWxkIG5vdCBvdmVybG9vay4gSXTigJlzIGxpa2VseSBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3Iga2V5IG1hbmFnZW1lbnQgYW5kIGFueSB2dWxuZXJhYmlsaXR5IGhlcmUgaXMgYSBzaWduaWZpY2FudCByaXNrLiBJIHdvbmRlciBhYm91dCB0aGUgdHlwZS1zYWZldHkgY2hlY2tzPyBBcmUgdGhlcmUgcHJvcGVyIGlucHV0IHZhbGlkYXRpb25zLCBsaWtlIHNhbml0aXppbmcgaW5wdXRzIGFuZCBib3VuZGFyeSBjb25kaXRpb25zPyBJIG5lZWQgdG8gZm9jdXMgb24gcG90ZW50aWFsIHdlYWtuZXNzZXMgbGlrZSBidWZmZXIgb3ZlcmZsb3dzIG9yIGluamVjdGlvbiB2dWxuZXJhYmlsaXRpZXMuIFdlIHNob3VsZCBhbHNvIGNoZWNrIGZvciBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzPyBXaGF0IGlmIHRoZSBzdG9yYWdlIHN5c3RlbSBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZT8gQW5kLCBpcyB0aGVyZSBhbnkgbG9nZ2luZyB0byB0cmFjayB0aGUgb3BlcmF0aW9ucz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHV0X3VzZXJfa2V5X3BheWxvYWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oPTQwPWV4dGVybiB2b2lkIHVzZXJfZnJlZV9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaDo0MTp2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKTtcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC00Mi1leHRlcm4gaW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XG4tLVxubmV0L3J4cnBjL3J4Z2suYz05ODM9c3RhdGljIGludCByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9yeHJwYy9yeGdrLmMtMTAxMS1cdGlmIChhcHBkYXRhICE9IFx1MDAyNmR1bW15KVxubmV0L3J4cnBjL3J4Z2suYzoxMDEyOlx0XHRwdXRfdXNlcl9rZXlfcGF5bG9hZChhcHBkYXRhKTtcbm5ldC9yeHJwYy9yeGdrLmMtMTAxMy1cdHJldHVybiByZXQ7XG4tLVxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYz05MD1zdGF0aWMgdm9pZCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTAwLSAqL1xuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzoxMDE6dm9pZCBwdXRfdXNlcl9rZXlfcGF5bG9hZChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZClcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTAyLXtcbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEwNS19XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjEwNjpFWFBPUlRfU1lNQk9MX0dQTChwdXRfdXNlcl9rZXlfcGF5bG9hZCk7XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEwNy1cbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTExMj1pbnQgdXNlcl91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuLS1cbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTI4LVxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzoxMjk6XHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh6YXApO1xuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xMzAtXHRyZXR1cm4gcmV0O1xuLS1cbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM9MTM4PXZvaWQgdXNlcl9yZXZva2Uoc3RydWN0IGtleSAqa2V5KVxuLS1cbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTQ2LVx0XHRyY3VfYXNzaWduX2tleXBvaW50ZXIoa2V5LCBOVUxMKTtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTQ3Olx0XHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh1cGF5bG9hZCk7XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE0OC1cdH1cbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTE1Nj12b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXG4tLVxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xNTktXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjE2MDpcdHB1dF91c2VyX2tleV9wYXlsb2FkKHVwYXlsb2FkKTtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzMzQKCQkJCQkJCW91dHB1dDogMTkxCgkJCQkJCQl0aG91Z2h0czogMzU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgb3B0aW1pemF0aW9uIGFuZCB3aGVyZSB3ZSBzaG91bGQgZm9jdXMgb3VyIGVmZm9ydHMuIEluaXRpYWxseSwgSSBpZGVudGlmaWVkIHRoZXNlIHN5bWJvbHMgYXMgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0OiBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAsIGBhZnNfY3JlYXRlX3lmc19jbV90b2tlbmAsIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAsIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCwgYHJ4cnBjX3NlbmRtc2dfY21zZ2AsIGFuZCBgcHV0X3VzZXJfa2V5X3BheWxvYWRgLgoKTm93LCBsZXQmIzM5O3MgcmVmaW5lIHRoaXMgYSBiaXQuIEkgbmVlZCB0byBjb25zaWRlciBmcmVxdWVuY3kgYW5kIGltcGFjdC4gYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCBpcyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGNhbGwgd2hpY2ggc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IG5vdCB0aGUgYmlnZ2VzdCBib3R0bGVuZWNrLiBgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZWAgc291bmRzIGluZnJlcXVlbnQsIGl0IGlzIGNhbGxlZCB3aGVuIHJlc3BvbmRpbmcgdG8gYSBjaGFsbGVuZ2Ugd2hpY2ggaXMgbGVzcyBjb21tb24uIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCByZWxhdGVzIHRvIHByb2JpbmcgYSBmaWxlc2VydmVyIGFuZCB0aGVuIHdlIGhhdmUgdGhlIGByeHJwY19zZW5kbXNnX2Ntc2dgLCB3aGljaCBoYXBwZW5zIHdoZW4gc2VuZGluZyBtZXNzYWdlcyB3aXRoIGNvbnRyb2wgbWVzc2FnZXMuCgpSZWZpbmluZyB0aGUgbGlzdCwgaXQgbG9va3MgbGlrZSBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAsIGBhZnNfY3JlYXRlX3lmc19jbV90b2tlbmAsIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCwgYHJ4cnBjX3NlbmRtc2dfY21zZ2AsIGFuZCBgcHV0X3VzZXJfa2V5X3BheWxvYWRgIGFyZSB0aGUgb25lcyB0byBmb2N1cyBvbi4KCkkgYWxzbyBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgQUZTX0ZTYCwgYEFGX1JYUlBDYCwgYFJYS0FEYCwgYW5kIGBSWEdLYC4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gdGhhdCBgUlhHS2AgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIFllcywgYSBxdWljayBjaGVjayBpbiBgbmV0L3J4cnBjL0tjb25maWdgIGNvbmZpcm1zIGBjb25maWcgUlhHS2AuIEFuZCwgd2FpdCwgaXQmIzM5O3MgYSAqYm9vbCogd2hpY2ggbWF5IGhhdmUgaW1wbGljYXRpb25zIGZvciBob3cgaXQmIzM5O3MgaGFuZGxlZC4gVGhlbiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBLRVlTYC4gSSB0aGluayBgQ09ORklHX0tFWVNgIGlzIHVzdWFsbHkgZW5hYmxlZCwgc28gbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLiBJIHRoaW5rIEkmIzM5O3ZlIGdvdCBhIHNvbGlkIHNldCBvZiB0YXJnZXRzIGFuZCBjb25maWdzIHRvIGtlZXAgaW4gbWluZCBtb3ZpbmcgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtSWEtBRCYjMzQ7LAogICAgJiMzNDtSWEdLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YSYjMzQ7LAogICAgJiMzNDthZnNfY3JlYXRlX3lmc19jbV90b2tlbiYjMzQ7LAogICAgJiMzNDtyeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlJiMzNDssCiAgICAmIzM0O3J4cnBjX3NlbmRtc2dfY21zZyYjMzQ7LAogICAgJiMzNDtwdXRfdXNlcl9rZXlfcGF5bG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZTIGFuZCBSeFJQQyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBSeEdLIGFwcGxpY2F0aW9uIGRhdGEgaW50ZXJuYWxseSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHVzZXJzcGFjZSBPT0IgbWVzc2FnZXMuIEl0IGludHJvZHVjZXMgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIHRvIGdlbmVyYXRlIHRoZSBhcHAgZGF0YSBhbmQgcGFzc2VzIGl0IHRvIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtSWEtBRCYjMzQ7LAogICAgJiMzNDtSWEdLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YSYjMzQ7LAogICAgJiMzNDthZnNfY3JlYXRlX3lmc19jbV90b2tlbiYjMzQ7LAogICAgJiMzNDtyeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlJiMzNDssCiAgICAmIzM0O3J4cnBjX3NlbmRtc2dfY21zZyYjMzQ7LAogICAgJiMzNDtwdXRfdXNlcl9rZXlfcGF5bG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZTIGFuZCBSeFJQQyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBSeEdLIGFwcGxpY2F0aW9uIGRhdGEgaW50ZXJuYWxseSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHVzZXJzcGFjZSBPT0IgbWVzc2FnZXMuIEl0IGludHJvZHVjZXMgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIHRvIGdlbmVyYXRlIHRoZSBhcHAgZGF0YSBhbmQgcGFzc2VzIGl0IHRvIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1Mzo1Mi4yODE1NzYzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MDU4OTk3MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiLFxuICAgIFwiQUZfUlhSUENcIixcbiAgICBcIlJYS0FEXCIsXG4gICAgXCJSWEdLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YVwiLFxuICAgIFwiYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5cIixcbiAgICBcInJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2VcIixcbiAgICBcInJ4cnBjX3NlbmRtc2dfY21zZ1wiLFxuICAgIFwicHV0X3VzZXJfa2V5X3BheWxvYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZTIGFuZCBSeFJQQyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBSeEdLIGFwcGxpY2F0aW9uIGRhdGEgaW50ZXJuYWxseSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHVzZXJzcGFjZSBPT0IgbWVzc2FnZXMuIEl0IGludHJvZHVjZXMgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIHRvIGdlbmVyYXRlIHRoZSBhcHAgZGF0YSBhbmQgcGFzc2VzIGl0IHRvIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjUzOjUyLjI4MTU4MjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTc4NjM5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjNmIxZTJkOWUxMjM5OTRhYjJkN2FhODg4NGUzNmZlOGYzNDMwYzU3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMTc6NTM6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2NtX3NlY3VyaXR5LmMgYi9mcy9hZnMvY21fc2VjdXJpdHkuY1xcbmluZGV4IDEwMzE2OGM3MGRkNGRmLi5kYjJhM2IzMGYwMjA5NCAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvY21fc2VjdXJpdHkuY1xcbisrKyBiL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXFxuQEAgLTYsNyArNiw5IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tleS10eXBlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NjcnlwdG8va3JiNS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNja2V5cy91c2VyLXR5cGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJhZnNfY20uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImFmc19mcy5oXFxcIlxcbkBAIC0xOSw5NyArMjEsNjYgQEBcXG4gI2RlZmluZSB4ZHJfbGVuX29iamVjdCh4KSAoNCArIHJvdW5kX3VwKCh4KSwgc2l6ZW9mKF9fYmUzMikpKVxcbiBcXG4gI2lmZGVmIENPTkZJR19SWEdLXFxuLXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcik7XFxuK3N0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGtyYjVfZW5jdHlwZSk7XFxuICNlbmRpZlxcbiBcXG4gLypcXG4tICogUmVzcG9uZCB0byBhbiBSeEdLIGNoYWxsZW5nZSwgYWRkaW5nIGFwcGRhdGEuXFxuKyAqIENyZWF0ZSB0aGUgYXBwbGljYXRpb24gZGF0YSB0byBnbyBpbiBhIFJFU1BPTlNFIHBhY2tldCBhIHNlcnZlcidzIENIQUxMRU5HRVxcbisgKiBmcm9tIHRoZSBwYXJhbWV0ZXJzIGNvbnRhaW5lZCBpbiBhIGtleS4gIFRoZSBrZXkgc3BlY2lmaWVzIHRoZSBzZWN1cml0eVxcbisgKiBpbmRleCBhbmQgb3RoZXIgYXBwcm9wcmlhdGUgcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBlbmNvZGluZyB0eXBlIGZvciBSeEdLLlxcbiAgKi9cXG4tc3RhdGljIGludCBhZnNfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcXG4raW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KVxcbiB7XFxuLSNpZmRlZiBDT05GSUdfUlhHS1xcbi1cXHRzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9O1xcbi1cXHRzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyO1xcbi0jZW5kaWZcXG4tXFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBlZXI7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcGVlcl9kYXRhO1xcbi1cXHR1MTYgc2VydmljZV9pZDtcXG4rXFx0dTMyIGtyYjVfZW5jdHlwZTtcXG4rXFx0aW50IHJldDtcXG4gXFx0dTggc2VjdXJpdHlfaW5kZXg7XFxuIFxcbi1cXHRyeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSwgXFx1MDAyNnBlZXIsIFxcdTAwMjZwZWVyX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnNlcnZpY2VfaWQsIFxcdTAwMjZzZWN1cml0eV9pbmRleCk7XFxuLVxcbi1cXHRfZW50ZXIoXFxcIiV1LCV1XFxcIiwgc2VydmljZV9pZCwgc2VjdXJpdHlfaW5kZXgpO1xcbi1cXG4tXFx0c3dpdGNoIChzZXJ2aWNlX2lkKSB7XFxuLVxcdFxcdC8qIFdlIGRvbid0IHNlbmQgQ01fU0VSVklDRSBSUENzLCBzbyBkb24ndCBleHBlY3QgYSBjaGFsbGVuZ2VcXG4tXFx0XFx0ICogdGhlcmVmcm9tLlxcbi1cXHRcXHQgKi9cXG4tXFx0Y2FzZSBGU19TRVJWSUNFOlxcbi1cXHRjYXNlIFZMX1NFUlZJQ0U6XFxuLVxcdGNhc2UgWUZTX0ZTX1NFUlZJQ0U6XFxuLVxcdGNhc2UgWUZTX1ZMX1NFUlZJQ0U6XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRwcl93YXJuKFxcXCJDYW4ndCByZXNwb25kIHRvIHVua25vd24gY2hhbGxlbmdlICV1OiV1XFxcIixcXG4tXFx0XFx0XFx0c2VydmljZV9pZCwgc2VjdXJpdHlfaW5kZXgpO1xcbi1cXHRcXHRyZXR1cm4gcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UoY2hhbGxlbmdlLCBSWF9VU0VSX0FCT1JULCAtRVBST1RPLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGFmc19hYm9ydF91bnN1cHBvcnRlZF9zZWNfY2xhc3MpO1xcbi1cXHR9XFxuK1xcdGlmICgha2V5KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFJlYWQgQVBQREFUQSBmbGFnIGJlZm9yZSBjbV9yeGdrX2FwcGRhdGEgKi9cXG4rXFx0aWYgKHRlc3RfYml0X2FjcXVpcmUoQUZTX1NFUlZFUl9GTF9BUFBEQVRBLCBcXHUwMDI2c2VydmVyLVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cnhycGNfa2VybmVsX3F1ZXJ5X2tleShrZXksIFxcdTAwMjZzZWN1cml0eV9pbmRleCwgXFx1MDAyNmtyYjVfZW5jdHlwZSk7XFxuK1xcbitcXHRfZW50ZXIoXFxcIiV1LCV1XFxcIiwgc2VjdXJpdHlfaW5kZXgsIGtyYjVfZW5jdHlwZSk7XFxuIFxcbi1cXHRzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7XFxuK1xcdHJldCA9IDA7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnNlcnZlci1cXHUwMDNlY21fdG9rZW5fbG9jayk7XFxuK1xcbitcXHQvKiBSZWFkIEFQUERBVEEgZmxhZyBiZWZvcmUgY21fcnhna19hcHBkYXRhICovXFxuK1xcdGlmICghdGVzdF9iaXRfYWNxdWlyZShBRlNfU0VSVkVSX0ZMX0FQUERBVEEsIFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7XFxuK1xcdFxcdGNhc2UgMDpcXG4rXFx0XFx0XFx0YnJlYWs7XFxuICNpZmRlZiBDT05GSUdfUlhLQURcXG4tXFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9SWEtBRDpcXG4tXFx0XFx0cmV0dXJuIHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UpO1xcbitcXHRcXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOlxcbitcXHRcXHRcXHRzZXRfYml0KEFGU19TRVJWRVJfRkxfQVBQREFUQSwgXFx1MDAyNnNlcnZlci1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHRicmVhaztcXG4gI2VuZGlmXFxuIFxcbiAjaWZkZWYgQ09ORklHX1JYR0tcXG4tXFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9SWEdLOlxcbi1cXHRcXHRyZXR1cm4gcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlLCBcXHUwMDI2YXBwZGF0YSk7XFxuLVxcbi1cXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxcbi1cXHRcXHRzd2l0Y2ggKHNlcnZpY2VfaWQpIHtcXG4tXFx0XFx0Y2FzZSBGU19TRVJWSUNFOlxcbi1cXHRcXHRjYXNlIFlGU19GU19TRVJWSUNFOlxcbi1cXHRcXHRcXHRzZXJ2ZXIgPSAoc3RydWN0IGFmc19zZXJ2ZXIgKilwZWVyX2RhdGE7XFxuLVxcdFxcdFxcdGlmICghc2VydmVyLVxcdTAwM2VjbV9yeGdrX2FwcGRhdGEuZGF0YSkge1xcbi1cXHRcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWNtX3Rva2VuX2xvY2spO1xcbi1cXHRcXHRcXHRcXHRpZiAoIXNlcnZlci1cXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpXFxuLVxcdFxcdFxcdFxcdFxcdGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKGNoYWxsZW5nZSwgc2VydmVyKTtcXG4tXFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWNtX3Rva2VuX2xvY2spO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmIChzZXJ2ZXItXFx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKVxcbi1cXHRcXHRcXHRcXHRhcHBkYXRhID0gc2VydmVyLVxcdTAwM2VjbV9yeGdrX2FwcGRhdGE7XFxuK1xcdFxcdGNhc2UgUlhSUENfU0VDVVJJVFlfUlhHSzpcXG4rXFx0XFx0XFx0c2V0X2JpdChBRlNfU0VSVkVSX0ZMX0FQUERBVEEsIFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFx0XFx0cmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgXFx1MDAyNmFwcGRhdGEpO1xcbi0jZW5kaWZcXG4gXFxuLVxcdGRlZmF1bHQ6XFxuLVxcdFxcdHJldHVybiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFJYX1VTRVJfQUJPUlQsIC1FUFJPVE8sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYWZzX2Fib3J0X3Vuc3VwcG9ydGVkX3NlY19jbGFzcyk7XFxuLVxcdH1cXG4tfVxcbitcXHRcXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxcbitcXHRcXHRcXHRyZXQgPSBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzZXJ2ZXIsIGtyYjVfZW5jdHlwZSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0c2V0X2JpdChBRlNfU0VSVkVSX0ZMX0FQUERBVEEsIFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbiBcXG4tLypcXG4tICogUHJvY2VzcyB0aGUgT09CIG1lc3NhZ2UgcXVldWUsIHByb2Nlc3NpbmcgY2hhbGxlbmdlIHBhY2tldHMuXFxuLSAqL1xcbi12b2lkIGFmc19wcm9jZXNzX29vYl9xdWV1ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLXtcXG4tXFx0c3RydWN0IGFmc19uZXQgKm5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWZzX25ldCwgcnhfb29iX3dvcmspO1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqb29iO1xcbi1cXHRlbnVtIHJ4cnBjX29vYl90eXBlIHR5cGU7XFxuLVxcbi1cXHR3aGlsZSAoUkVBRF9PTkNFKG5ldC1cXHUwMDNlbGl2ZSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICAgIChvb2IgPSByeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2IobmV0LVxcdTAwM2Vzb2NrZXQsIFxcdTAwMjZ0eXBlKSkpIHtcXG4tXFx0XFx0c3dpdGNoICh0eXBlKSB7XFxuLVxcdFxcdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcXG4tXFx0XFx0XFx0YWZzX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKG9vYik7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4tXFx0XFx0cnhycGNfa2VybmVsX2ZyZWVfb29iKG9vYik7XFxuIFxcdH1cXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2c2VydmVyLVxcdTAwM2VjbV90b2tlbl9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19SWEdLXFxuQEAgLTE3NywzNyArMTQ4LDM0IEBAIGludCBhZnNfY3JlYXRlX3Rva2VuX2tleShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpXFxuIC8qXFxuICAqIENyZWF0ZSBhbiBZRlMgUnhHSyBHU1MgdG9rZW4gdG8gdXNlIGFzIGEgdGlja2V0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZXNlcnZlci5cXG4gICovXFxuLXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcilcXG4rc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCB1MzIgZW5jdHlwZSlcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICpjb25uX2tyYjUsICp0b2tlbl9rcmI1O1xcbiBcXHRjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKnRva2VuX2tleTtcXG4gXFx0c3RydWN0IGNyeXB0b19hZWFkICphZWFkO1xcbiBcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7XFxuIFxcdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBzZXJ2ZXItXFx1MDAzZWNlbGwtXFx1MDAzZW5ldDtcXG4tXFx0Y29uc3Qgc3RydWN0IGtleSAqa2V5ID0gbmV0LVxcdTAwM2Vmc19jbV90b2tlbl9rZXk7XFxuK1xcdGNvbnN0IHN0cnVjdCBrZXkgKmNtX2tleSA9IG5ldC1cXHUwMDNlZnNfY21fdG9rZW5fa2V5O1xcbitcXHRzdHJ1Y3Qga2V5ICphcHBkYXRhX2tleSA9IE5VTEw7XFxuIFxcdHNpemVfdCBrZXlzaXplLCB1dWlkc2l6ZSwgYXV0aHNpemUsIHRva3NpemUsIGVuY3NpemUsIGNvbnRzaXplLCBhZGF0YXNpemUsIG9mZnNldDtcXG4gXFx0X19iZTMyIGNhcHNbMV0gPSB7XFxuIFxcdFxcdFswXSA9IGh0b25sKEFGU19DQVBfRVJST1JfVFJBTlNMQVRJT04pLFxcbiBcXHR9O1xcbiBcXHRfX2JlMzIgKnhkcjtcXG4gXFx0dm9pZCAqYXBwZGF0YSwgKkswLCAqZW5jYmFzZTtcXG4tXFx0dTMyIGVuY3R5cGU7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAoIWtleSlcXG4rXFx0aWYgKCFjbV9rZXkpXFxuIFxcdFxcdHJldHVybiAtRU5PS0VZO1xcbiBcXG4gXFx0LyogQXNzdW1lIHRoYXQgdGhlIGZpbGVzZXJ2ZXIgaXMgaGFwcHkgdG8gdXNlIHRoZSBzYW1lIGVuY29kaW5nIHR5cGUgYXNcXG4gXFx0ICogd2Ugd2VyZSB0b2xkIHRvIHVzZSBieSB0aGUgdG9rZW4gb2J0YWluZWQgYnkgdGhlIHVzZXIuXFxuIFxcdCAqL1xcbi1cXHRlbmN0eXBlID0gcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSk7XFxuLVxcbiBcXHRjb25uX2tyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZW5jdHlwZSk7XFxuIFxcdGlmICghY29ubl9rcmI1KVxcbiBcXHRcXHRyZXR1cm4gLUVOT1BLRztcXG4tXFx0dG9rZW5fa3JiNSA9IGtleS1cXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xcbi1cXHR0b2tlbl9rZXkgPSAoY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICopXFx1MDAyNmtleS1cXHUwMDNlcGF5bG9hZC5kYXRhWzJdO1xcbitcXHR0b2tlbl9rcmI1ID0gY21fa2V5LVxcdTAwM2VwYXlsb2FkLmRhdGFbMF07XFxuK1xcdHRva2VuX2tleSA9IChjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKilcXHUwMDI2Y21fa2V5LVxcdTAwM2VwYXlsb2FkLmRhdGFbMl07XFxuIFxcbiBcXHQvKiBzdHJ1Y3Qgcnhna19rZXkge1xcbiBcXHQgKlxcdGFmc191aW50MzJcXHRlbmN0eXBlO1xcbkBAIC0zMjcsOSArMjk1LDIyIEBAIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gb3V0X2FlYWQ7XFxuIFxcbi1cXHRzZXJ2ZXItXFx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5sZW4gID0gYWRhdGFzaXplO1xcbi1cXHRzZXJ2ZXItXFx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhID0gYXBwZGF0YTtcXG4tXFx0YXBwZGF0YSA9IE5VTEw7XFxuK1xcdGFwcGRhdGFfa2V5ID0ga2V5X2FsbG9jKFxcdTAwMjZrZXlfdHlwZV91c2VyLCBcXFwicnhycGM6IGFmcyByeGdrIGFwcGRhdGFcXFwiLFxcbitcXHRcXHRcXHRcXHRHTE9CQUxfUk9PVF9VSUQsIEdMT0JBTF9ST09UX0dJRCwgY3VycmVudF9jcmVkKCksXFxuK1xcdFxcdFxcdFxcdEtFWV9QT1NfVklFVyB8IEtFWV9QT1NfU0VBUkNIIHwgS0VZX1VTUl9WSUVXLFxcbitcXHRcXHRcXHRcXHRLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihhcHBkYXRhX2tleSkpIHtcXG4rXFx0XFx0cmV0ID0gUFRSX0VSUihhcHBkYXRhX2tleSk7XFxuK1xcdFxcdGdvdG8gb3V0X2FlYWQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGtleV9pbnN0YW50aWF0ZV9hbmRfbGluayhhcHBkYXRhX2tleSwgYXBwZGF0YSwgYWRhdGFzaXplLCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a2V5X3B1dChhcHBkYXRhX2tleSk7XFxuK1xcdFxcdGdvdG8gb3V0X2FlYWQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNlcnZlci1cXHUwMDNlY21fcnhna19hcHBkYXRhID0gYXBwZGF0YV9rZXk7XFxuIFxcbiBvdXRfYWVhZDpcXG4gXFx0Y3J5cHRvX2ZyZWVfYWVhZChhZWFkKTtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Ntc2VydmljZS5jIGIvZnMvYWZzL2Ntc2VydmljZS5jXFxuaW5kZXggNTU0MGFlMWNhZDU5OWEuLmQ1NzlhNjY1ZTNkYTA5IDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9jbXNlcnZpY2UuY1xcbisrKyBiL2ZzL2Fmcy9jbXNlcnZpY2UuY1xcbkBAIC0zNjQsNyArMzY0LDggQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTMoc3RydWN0IGFmc19jYWxsICpjYWxsKVxcbiBcXHRpZiAoIWFmc19jaGVja19jYWxsX3N0YXRlKGNhbGwsIEFGU19DQUxMX1NWX1JFUExZSU5HKSlcXG4gXFx0XFx0cmV0dXJuIGFmc19pb19lcnJvcihjYWxsLCBhZnNfaW9fZXJyb3JfY21fcmVwbHkpO1xcbiBcXG4tXFx0aWYgKG1lbWNtcChjYWxsLVxcdTAwM2VyZXF1ZXN0LCBcXHUwMDI2Y2FsbC1cXHUwMDNlc2VydmVyLVxcdTAwM2VfdXVpZCwgc2l6ZW9mKGNhbGwtXFx1MDAzZXNlcnZlci1cXHUwMDNlX3V1aWQpKSAhPSAwKSB7XFxuK1xcdGlmIChjYWxsLVxcdTAwM2VzZXJ2ZXIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG1lbWNtcChjYWxsLVxcdTAwM2VyZXF1ZXN0LCBcXHUwMDI2Y2FsbC1cXHUwMDNlc2VydmVyLVxcdTAwM2VfdXVpZCwgc2l6ZW9mKGNhbGwtXFx1MDAzZXNlcnZlci1cXHUwMDNlX3V1aWQpKSAhPSAwKSB7XFxuIFxcdFxcdHByX25vdGljZShcXFwiQ2FsbGJhY2sgVVVJRCBkb2VzIG5vdCBtYXRjaCBmaWxlc2VydmVyIFVVSURcXFxcblxcXCIpO1xcbiBcXHRcXHR0cmFjZV9hZnNfY21fbm9fc2VydmVyX3UoY2FsbCwgY2FsbC1cXHUwMDNlcmVxdWVzdCk7XFxuIFxcdFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZnNfcHJvYmUuYyBiL2ZzL2Fmcy9mc19wcm9iZS5jXFxuaW5kZXggYTkxYWQxOTM4ZDA3ODguLmUyNmY3ZjFlMzBhMjNhIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9mc19wcm9iZS5jXFxuKysrIGIvZnMvYWZzL2ZzX3Byb2JlLmNcXG5AQCAtMjQxLDkgKzI0MSwxNCBAQCBpbnQgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcXG4gXFx0c3RydWN0IGFmc19lbmRwb2ludF9zdGF0ZSAqZXN0YXRlLCAqb2xkO1xcbiBcXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0ID0gTlVMTCwgKmFsaXN0O1xcbiBcXHR1bnNpZ25lZCBsb25nIHVucHJvYmVkO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0X2VudGVyKFxcXCIlcFVcXFwiLCBcXHUwMDI2c2VydmVyLVxcdTAwM2V1dWlkKTtcXG4gXFxuK1xcdHJldCA9IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc2VydmVyLCBrZXkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdGVzdGF0ZSA9IGt6YWxsb2Nfb2JqKCplc3RhdGUpO1xcbiBcXHRpZiAoIWVzdGF0ZSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcXG5pbmRleCAwYjcyYTg1NjYyOTk5Mi4uM2U2MWM1NDNhNTBjNDggMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9hZnMvaW50ZXJuYWwuaFxcbkBAIC0yODMsNyArMjgzLDYgQEAgc3RydWN0IGFmc19uZXQge1xcbiBcXHRzdHJ1Y3Qgc29ja2V0XFx0XFx0KnNvY2tldDtcXG4gXFx0c3RydWN0IGFmc19jYWxsXFx0XFx0KnNwYXJlX2luY29taW5nX2NhbGw7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdGNoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcms7XFxuLVxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdHJ4X29vYl93b3JrO1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRzb2NrZXRfbXV0ZXg7XFxuIFxcdGF0b21pY190XFx0XFx0bnJfb3V0c3RhbmRpbmdfY2FsbHM7XFxuIFxcdGF0b21pY190XFx0XFx0bnJfc3VwZXJibG9ja3M7XFxuQEAgLTU0Nyw3ICs1NDYsNyBAQCBzdHJ1Y3QgYWZzX3NlcnZlciB7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdGRlc3Ryb3llcjtcXHQvKiBXb3JrIGl0ZW0gdG8gdHJ5IGFuZCBkZXN0cm95IGEgc2VydmVyICovXFxuIFxcdHN0cnVjdCB0aW1lcl9saXN0XFx0dGltZXI7XFx0XFx0LyogTWFuYWdlbWVudCB0aW1lciAqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRjbV90b2tlbl9sb2NrO1xcdC8qIExvY2sgZ292ZXJuaW5nIGNyZWF0aW9uIG9mIGFwcGRhdGEgKi9cXG4tXFx0c3RydWN0IGtyYjVfYnVmZmVyXFx0Y21fcnhna19hcHBkYXRhOyAvKiBBcHBkYXRhIHRvIGJlIGluY2x1ZGVkIGluIFJFU1BPTlNFIHBhY2tldCAqL1xcbitcXHRzdHJ1Y3Qga2V5XFx0XFx0KmNtX3J4Z2tfYXBwZGF0YTsgLyogQXBwZGF0YSB0byBiZSBpbmNsdWRlZCBpbiBSRVNQT05TRSBwYWNrZXQgKi9cXG4gXFx0dGltZTY0X3RcXHRcXHR1bnVzZV90aW1lO1xcdC8qIFRpbWUgYXQgd2hpY2ggbGFzdCB1bnVzZWQgKi9cXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGZsYWdzO1xcbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfUkVTUE9ORElORyAwXFx0XFx0LyogVGhlIHNlcnZlciBpcyByZXNwb25kaW5nICovXFxuQEAgLTU1OSw2ICs1NTgsNyBAQCBzdHJ1Y3QgYWZzX3NlcnZlciB7XFxuICNkZWZpbmUgQUZTX1NFUlZFUl9GTF9OT1RfRk9VTkRcXHQ2XFx0XFx0LyogVkwgc2VydmVyIHNheXMgbm8gc3VjaCBzZXJ2ZXIgKi9cXG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX1ZMX0ZBSUxcXHQ3XFx0XFx0LyogRmFpbGVkIHRvIGFjY2VzcyBWTCBzZXJ2ZXIgKi9cXG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX01BWV9IQVZFX0NCIDhcXHRcXHQvKiBNYXkgaGF2ZSBjYWxsYmFja3Mgb24gdGhpcyBmaWxlc2VydmVyICovXFxuKyNkZWZpbmUgQUZTX1NFUlZFUl9GTF9BUFBEQVRBXFx0OVxcdFxcdC8qIFNldCBpZiBhcHBkYXRhIGNyZWF0ZWQgKi9cXG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX0lTX1lGU1xcdDE2XFx0XFx0LyogU2VydmVyIGlzIFlGUyBub3QgQUZTICovXFxuICNkZWZpbmUgQUZTX1NFUlZFUl9GTF9OT19JQlVMS1xcdDE3XFx0XFx0LyogRmlsZXNlcnZlciBkb2Vzbid0IHN1cHBvcnQgRlMuSW5saW5lQnVsa1N0YXR1cyAqL1xcbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfTk9fUk0yXFx0MThcXHRcXHQvKiBGaWxlc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBZRlMuUmVtb3ZlRmlsZTIgKi9cXG5AQCAtMTA5MCw3ICsxMDkwLDcgQEAgZXh0ZXJuIGJvb2wgYWZzX2NtX2luY29taW5nX2NhbGwoc3RydWN0IGFmc19jYWxsICopO1xcbiAvKlxcbiAgKiBjbV9zZWN1cml0eS5jXFxuICAqL1xcbi12b2lkIGFmc19wcm9jZXNzX29vYl9xdWV1ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbitpbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpO1xcbiAjaWZkZWYgQ09ORklHX1JYR0tcXG4gaW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldCk7XFxuICNlbHNlXFxuQEAgLTE0MTcsMjEgKzE0MTcsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX3NlZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZW51bSBhZnNfY2FsbF90cmFjZSB3aHkpXFxuIFxcdFxcdCAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgYWZzX21ha2Vfb3BfY2FsbChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsIHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcXG4tXFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4te1xcbi1cXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cXHUwMDNlZXN0YXRlLVxcdTAwM2VhZGRyZXNzZXM7XFxuLVxcbi1cXHRvcC1cXHUwMDNlY2FsbFxcdD0gY2FsbDtcXG4tXFx0b3AtXFx1MDAzZXR5cGVcXHQ9IGNhbGwtXFx1MDAzZXR5cGU7XFxuLVxcdGNhbGwtXFx1MDAzZW9wXFx0PSBvcDtcXG4tXFx0Y2FsbC1cXHUwMDNla2V5XFx0PSBvcC1cXHUwMDNla2V5O1xcbi1cXHRjYWxsLVxcdTAwM2VpbnRyXFx0PSAhKG9wLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFGU19PUEVSQVRJT05fVU5JTlRSKTtcXG4tXFx0Y2FsbC1cXHUwMDNlcGVlclxcdD0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LVxcdTAwM2VhZGRyc1tvcC1cXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XFxuLVxcdGNhbGwtXFx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cXHUwMDNlc2VydmVyLVxcdTAwM2VzZXJ2aWNlX2lkO1xcbi1cXHRhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZXh0cmFjdF9iZWdpbihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXFxuIHtcXG4gXFx0Y2FsbC1cXHUwMDNlaW92X2xlbiA9IHNpemU7XFxuQEAgLTE3NjMsNiArMTc0OCwyMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqQUZTX1ZOT0RFX1RPX0koc3RydWN0IGFmc192bm9kZSAqdm5vZGUpXFxuIFxcdHJldHVybiBcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzLmlub2RlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgYWZzX21ha2Vfb3BfY2FsbChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsIHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcXG4rXFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4re1xcbitcXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cXHUwMDNlZXN0YXRlLVxcdTAwM2VhZGRyZXNzZXM7XFxuK1xcbitcXHRvcC1cXHUwMDNlY2FsbFxcdD0gY2FsbDtcXG4rXFx0b3AtXFx1MDAzZXR5cGVcXHQ9IGNhbGwtXFx1MDAzZXR5cGU7XFxuK1xcdGNhbGwtXFx1MDAzZW9wXFx0PSBvcDtcXG4rXFx0Y2FsbC1cXHUwMDNlc2VydmVyXFx0PSBhZnNfdXNlX3NlcnZlcihvcC1cXHUwMDNlc2VydmVyLCBmYWxzZSwgYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCk7XFxuK1xcdGNhbGwtXFx1MDAzZWtleVxcdD0gb3AtXFx1MDAzZWtleTtcXG4rXFx0Y2FsbC1cXHUwMDNlaW50clxcdD0gIShvcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBRlNfT1BFUkFUSU9OX1VOSU5UUik7XFxuK1xcdGNhbGwtXFx1MDAzZXBlZXJcXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cXHUwMDNlYWRkcnNbb3AtXFx1MDAzZWFkZHJfaW5kZXhdLnBlZXIpO1xcbitcXHRjYWxsLVxcdTAwM2VzZXJ2aWNlX2lkID0gb3AtXFx1MDAzZXNlcnZlci1cXHUwMDNlc2VydmljZV9pZDtcXG4rXFx0YWZzX21ha2VfY2FsbChjYWxsLCBnZnApO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBOb3RlIHRoYXQgYSBkZW50cnkgZ290IGNoYW5nZWQuICBXZSBuZWVkIHRvIHNldCBkX2ZzZGF0YSB0byB0aGUgZGF0YSB2ZXJzaW9uXFxuICAqIG51bWJlciBkZXJpdmVkIGZyb20gdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLiAgSXQgZG9lc24ndCBtYXR0ZXIgaWZcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL21haW4uYyBiL2ZzL2Fmcy9tYWluLmNcXG5pbmRleCA3YTg4M2M1OTk3NmZmMi4uNjM1M2ZlYWE1ZmI0YjUgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL21haW4uY1xcbisrKyBiL2ZzL2Fmcy9tYWluLmNcXG5AQCAtNzMsNyArNzMsNiBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgYWZzX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldF9ucylcXG4gXFx0Z2VuZXJhdGVfcmFuZG9tX3V1aWQoKHVuc2lnbmVkIGNoYXIgKilcXHUwMDI2bmV0LVxcdTAwM2V1dWlkKTtcXG4gXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2bmV0LVxcdTAwM2VjaGFyZ2VfcHJlYWxsb2NhdGlvbl93b3JrLCBhZnNfY2hhcmdlX3ByZWFsbG9jYXRpb24pO1xcbi1cXHRJTklUX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNlcnhfb29iX3dvcmssIGFmc19wcm9jZXNzX29vYl9xdWV1ZSk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNm5ldC1cXHUwMDNlc29ja2V0X211dGV4KTtcXG4gXFxuIFxcdG5ldC1cXHUwMDNlY2VsbHMgPSBSQl9ST09UO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvcnhycGMuYyBiL2ZzL2Fmcy9yeHJwYy5jXFxuaW5kZXggZDgyOTE2NjU3YTNkZGYuLmFlNDhjMTViM2RiOTQzIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9yeHJwYy5jXFxuKysrIGIvZnMvYWZzL3J4cnBjLmNcXG5AQCAtMjUsMTQgKzI1LDEyIEBAIHN0YXRpYyB2b2lkIGFmc19wcm9jZXNzX2FzeW5jX2NhbGwoc3RydWN0IHdvcmtfc3RydWN0ICopO1xcbiBzdGF0aWMgdm9pZCBhZnNfcnhfbmV3X2NhbGwoc3RydWN0IHNvY2sgKiwgc3RydWN0IHJ4cnBjX2NhbGwgKiwgdW5zaWduZWQgbG9uZyk7XFxuIHN0YXRpYyB2b2lkIGFmc19yeF9kaXNjYXJkX25ld19jYWxsKHN0cnVjdCByeHJwY19jYWxsICosIHVuc2lnbmVkIGxvbmcpO1xcbiBzdGF0aWMgdm9pZCBhZnNfcnhfYXR0YWNoKHN0cnVjdCByeHJwY19jYWxsICpyeGNhbGwsIHVuc2lnbmVkIGxvbmcgdXNlcl9jYWxsX0lEKTtcXG4tc3RhdGljIHZvaWQgYWZzX3J4X25vdGlmeV9vb2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb29iKTtcXG4gc3RhdGljIGludCBhZnNfZGVsaXZlcl9jbV9vcF9pZChzdHJ1Y3QgYWZzX2NhbGwgKik7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ4cnBjX2tlcm5lbF9vcHMgYWZzX3J4cnBjX2NhbGxiYWNrX29wcyA9IHtcXG4gXFx0Lm5vdGlmeV9uZXdfY2FsbFxcdD0gYWZzX3J4X25ld19jYWxsLFxcbiBcXHQuZGlzY2FyZF9uZXdfY2FsbFxcdD0gYWZzX3J4X2Rpc2NhcmRfbmV3X2NhbGwsXFxuIFxcdC51c2VyX2F0dGFjaF9jYWxsXFx0PSBhZnNfcnhfYXR0YWNoLFxcbi1cXHQubm90aWZ5X29vYlxcdFxcdD0gYWZzX3J4X25vdGlmeV9vb2IsXFxuIH07XFxuIFxcbiAvKiBhc3luY2hyb25vdXMgaW5jb21pbmcgY2FsbCBpbml0aWFsIHByb2Nlc3NpbmcgKi9cXG5AQCAtNzQsMTAgKzcyLDYgQEAgaW50IGFmc19vcGVuX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJvcl8yO1xcbiBcXG4tXFx0cmV0ID0gcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHNvY2tldC1cXHUwMDNlc2ssIHRydWUpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlcnJvcl8yO1xcbi1cXG4gXFx0cmV0ID0gYWZzX2NyZWF0ZV90b2tlbl9rZXkobmV0LCBzb2NrZXQpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cHJfZXJyKFxcXCJDb3VsZG4ndCBjcmVhdGUgUnhHSyBDTSBrZXk6ICVkXFxcXG5cXFwiLCByZXQpO1xcbkBAIC0xMjgsNyArMTIyLDYgQEAgdm9pZCBhZnNfY2xvc2Vfc29ja2V0KHN0cnVjdCBhZnNfbmV0ICpuZXQpXFxuIFxcdF9lbnRlcihcXFwiXFxcIik7XFxuIFxcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZuZXQtXFx1MDAzZWNoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcmspO1xcbi1cXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZuZXQtXFx1MDAzZXJ4X29vYl93b3JrKTtcXG4gXFx0LyogRnV0dXJlIHdvcmsgaXRlbXMgc2hvdWxkIG5vdyBzZWUgLVxcdTAwM2VsaXZlIGlzIGZhbHNlLiAqL1xcbiBcXG4gXFx0a2VybmVsX2xpc3RlbihuZXQtXFx1MDAzZXNvY2tldCwgMCk7XFxuQEAgLTE0OSw3ICsxNDIsNiBAQCB2b2lkIGFmc19jbG9zZV9zb2NrZXQoc3RydWN0IGFmc19uZXQgKm5ldClcXG4gXFxuIFxcdGtlcm5lbF9zb2NrX3NodXRkb3duKG5ldC1cXHUwMDNlc29ja2V0LCBTSFVUX1JEV1IpO1xcbiBcXHRmbHVzaF93b3JrcXVldWUoYWZzX2FzeW5jX2NhbGxzKTtcXG4tXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bmV0LVxcdTAwM2VyeF9vb2Jfd29yayk7XFxuIFxcdG5ldC1cXHUwMDNlc29ja2V0LVxcdTAwM2Vzay1cXHUwMDNlc2tfdXNlcl9kYXRhID0gTlVMTDtcXG4gXFx0c29ja19yZWxlYXNlKG5ldC1cXHUwMDNlc29ja2V0KTtcXG4gXFx0a2V5X3B1dChuZXQtXFx1MDAzZWZzX2NtX3Rva2VuX2tleSk7XFxuQEAgLTM0Nyw3ICszMzksMTAgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxcbiBcXHRzdHJ1Y3QgcnhycGNfY2FsbCAqcnhjYWxsO1xcbiBcXHRzdHJ1Y3QgbXNnaGRyIG1zZztcXG4gXFx0c3RydWN0IGt2ZWMgaW92WzFdO1xcbitcXHR1bnNpZ25lZCBpbnQgZGVidWdfaWQgPSBjYWxsLVxcdTAwM2VkZWJ1Z19pZDtcXG4rXFx0c3RydWN0IGtleSAqYXBwX2RhdGEgPSBOVUxMO1xcbiBcXHRzaXplX3QgbGVuO1xcbitcXHRib29sIHdyaXRlX2l0ZXIgPSBjYWxsLVxcdTAwM2V3cml0ZV9pdGVyO1xcbiBcXHRzNjQgdHhfdG90YWxfbGVuO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5AQCAtMzc4LDggKzM3MywyNSBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXFxuIFxcdFxcdGNhbGwtXFx1MDAzZWRyb3BfcmVmID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKGNhbGwtXFx1MDAzZWtleSBcXHUwMDI2XFx1MDAyNiBjYWxsLVxcdTAwM2VzZXJ2ZXIpIHtcXG4rXFx0XFx0dTMyIGtyYjVfZW5jdHlwZSA9IDA7XFxuK1xcdFxcdHU4IHNlY3VyaXR5X2luZGV4ID0gMDtcXG4rXFxuK1xcdFxcdHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoY2FsbC1cXHUwMDNla2V5LCBcXHUwMDI2c2VjdXJpdHlfaW5kZXgsIFxcdTAwMjZrcmI1X2VuY3R5cGUpO1xcbitcXHRcXHRzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7XFxuKyNpZmRlZiBDT05GSUdfUlhHS1xcbitcXHRcXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxcbitcXHRcXHRcXHRhcHBfZGF0YSA9IGNhbGwtXFx1MDAzZXNlcnZlci1cXHUwMDNlY21fcnhna19hcHBkYXRhO1xcbitcXHRcXHRcXHRicmVhaztcXG4rI2VuZGlmXFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdC8qIGNyZWF0ZSBhIGNhbGwgKi9cXG4tXFx0cnhjYWxsID0gcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoY2FsbC1cXHUwMDNlbmV0LVxcdTAwM2Vzb2NrZXQsIGNhbGwtXFx1MDAzZXBlZXIsIGNhbGwtXFx1MDAzZWtleSxcXG4rXFx0cnhjYWxsID0gcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoY2FsbC1cXHUwMDNlbmV0LVxcdTAwM2Vzb2NrZXQsIGNhbGwtXFx1MDAzZXBlZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCBjYWxsLVxcdTAwM2VrZXksIGFwcF9kYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgKHVuc2lnbmVkIGxvbmcpY2FsbCxcXG4gXFx0XFx0XFx0XFx0XFx0IHR4X3RvdGFsX2xlbixcXG4gXFx0XFx0XFx0XFx0XFx0IGNhbGwtXFx1MDAzZW1heF9saWZlc3BhbixcXG5AQCAtNDEwLDcgKzQyMiw3IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcXG4gXFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2bXNnLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgaW92LCAxLCBjYWxsLVxcdTAwM2VyZXF1ZXN0X3NpemUpO1xcbiBcXHRtc2cubXNnX2NvbnRyb2xcXHRcXHQ9IE5VTEw7XFxuIFxcdG1zZy5tc2dfY29udHJvbGxlblxcdD0gMDtcXG4tXFx0bXNnLm1zZ19mbGFnc1xcdFxcdD0gTVNHX1dBSVRBTEwgfCAoY2FsbC1cXHUwMDNld3JpdGVfaXRlciA/IE1TR19NT1JFIDogMCk7XFxuK1xcdG1zZy5tc2dfZmxhZ3NcXHRcXHQ9IE1TR19XQUlUQUxMIHwgKHdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApO1xcbiBcXG4gXFx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVxcdTAwM2VuZXQtXFx1MDAzZXNvY2tldCwgcnhjYWxsLFxcbiBcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZtc2csIGNhbGwtXFx1MDAzZXJlcXVlc3Rfc2l6ZSxcXG5AQCAtNDE4LDcgKzQzMCw5IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XFxuIFxcbi1cXHRpZiAoY2FsbC1cXHUwMDNld3JpdGVfaXRlcikge1xcbitcXHQvKiBXZSBsb3N0IG91ciByZWYgb24gY2FsbCBpZiBNU0dfTU9SRSB3YXMgc2V0LiAqL1xcbitcXG4rXFx0aWYgKHdyaXRlX2l0ZXIpIHtcXG4gXFx0XFx0bXNnLm1zZ19pdGVyID0gKmNhbGwtXFx1MDAzZXdyaXRlX2l0ZXI7XFxuIFxcdFxcdG1zZy5tc2dfZmxhZ3MgXFx1MDAyNj0gfk1TR19NT1JFO1xcbiBcXHRcXHR0cmFjZV9hZnNfc2VuZF9kYXRhKGNhbGwsIFxcdTAwMjZtc2cpO1xcbkBAIC00MjcsOSArNDQxLDkgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGNhbGwtXFx1MDAzZXJ4Y2FsbCwgXFx1MDAyNm1zZyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBpb3ZfaXRlcl9jb3VudChcXHUwMDI2bXNnLm1zZ19pdGVyKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTtcXG4tXFx0XFx0KmNhbGwtXFx1MDAzZXdyaXRlX2l0ZXIgPSBtc2cubXNnX2l0ZXI7XFxuK1xcdFxcdC8qIFdlIGxvc3Qgb3VyIHJlZiBvbiBjYWxsLiAqL1xcbiBcXG4tXFx0XFx0dHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCBcXHUwMDI2bXNnLCByZXQpO1xcbitcXHRcXHR0cmFjZV9hZnNfc2VudF9kYXRhKGRlYnVnX2lkLCBcXHUwMDI2bXNnLCByZXQpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0Z290byBlcnJvcl9kb19hYm9ydDtcXG4gXFx0fVxcbkBAIC05ODMsMTQgKzk5NywzIEBAIG5vaW5saW5lIGludCBhZnNfcHJvdG9jb2xfZXJyb3Ioc3RydWN0IGFmc19jYWxsICpjYWxsLFxcbiBcXHRcXHRjYWxsLVxcdTAwM2V1bm1hcnNoYWxsaW5nX2Vycm9yID0gdHJ1ZTtcXG4gXFx0cmV0dXJuIC1FQkFETVNHO1xcbiB9XFxuLVxcbi0vKlxcbi0gKiBXYWtlIHVwIE9PQiBub3RpZmljYXRpb24gcHJvY2Vzc2luZy5cXG4tICovXFxuLXN0YXRpYyB2b2lkIGFmc19yeF9ub3RpZnlfb29iKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9vYilcXG4te1xcbi1cXHRzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gc2stXFx1MDAzZXNrX3VzZXJfZGF0YTtcXG4tXFxuLVxcdGlmIChSRUFEX09OQ0UobmV0LVxcdTAwM2VsaXZlKSlcXG4tXFx0XFx0cXVldWVfd29yayhhZnNfd3EsIFxcdTAwMjZuZXQtXFx1MDAzZXJ4X29vYl93b3JrKTtcXG4tfVxcbmRpZmYgLS1naXQgYS9mcy9hZnMvc2VydmVyLmMgYi9mcy9hZnMvc2VydmVyLmNcXG5pbmRleCAwZmUxNjJlYTJhMzZkYi4uNzZhOWYyNWNlNDkwNTggMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL3NlcnZlci5jXFxuKysrIGIvZnMvYWZzL3NlcnZlci5jXFxuQEAgLTM5OCw3ICszOTgsNyBAQCBzdGF0aWMgdm9pZCBhZnNfc2VydmVyX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4gXFx0YWZzX3B1dF9lbmRwb2ludF9zdGF0ZShyY3VfYWNjZXNzX3BvaW50ZXIoc2VydmVyLVxcdTAwM2VlbmRwb2ludF9zdGF0ZSksXFxuIFxcdFxcdFxcdCAgICAgICBhZnNfZXN0YXRlX3RyYWNlX3B1dF9zZXJ2ZXIpO1xcbiBcXHRhZnNfcHV0X2NlbGwoc2VydmVyLVxcdTAwM2VjZWxsLCBhZnNfY2VsbF90cmFjZV9wdXRfc2VydmVyKTtcXG4tXFx0a2ZyZWUoc2VydmVyLVxcdTAwM2VjbV9yeGdrX2FwcGRhdGEuZGF0YSk7XFxuK1xcdGtleV9wdXQoc2VydmVyLVxcdTAwM2VjbV9yeGdrX2FwcGRhdGEpO1xcbiBcXHRrZnJlZShzZXJ2ZXIpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2tleXMvdXNlci10eXBlLmggYi9pbmNsdWRlL2tleXMvdXNlci10eXBlLmhcXG5pbmRleCAzODZjMzE0MzI3ODk5NS4uNzAwMmE5OTNhNDcyMjggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oXFxuKysrIGIvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oXFxuQEAgLTI2LDYgKzI2LDcgQEBcXG4gICovXFxuIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIHtcXG4gXFx0c3RydWN0IHJjdV9oZWFkXFx0cmN1O1xcdFxcdC8qIFJDVSBkZXN0cnVjdG9yICovXFxuK1xcdHJlZmNvdW50X3RcXHRyZWY7XFxuIFxcdHVuc2lnbmVkIHNob3J0XFx0ZGF0YWxlbjtcXHQvKiBsZW5ndGggb2YgdGhpcyBkYXRhICovXFxuIFxcdGNoYXJcXHRcXHRkYXRhW10gX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpOyAvKiBhY3R1YWwgZGF0YSAqL1xcbiB9O1xcbkBAIC0zNyw2ICszOCw3IEBAIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQ7XFxuIFxcbiBleHRlcm4gaW50IHVzZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XFxuIGV4dGVybiB2b2lkIHVzZXJfZnJlZV9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcXG4rdm9pZCBwdXRfdXNlcl9rZXlfcGF5bG9hZChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZCk7XFxuIGV4dGVybiBpbnQgdXNlcl91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcXG4gZXh0ZXJuIHZvaWQgdXNlcl9yZXZva2Uoc3RydWN0IGtleSAqa2V5KTtcXG4gZXh0ZXJuIHZvaWQgdXNlcl9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmggYi9pbmNsdWRlL25ldC9hZl9yeHJwYy5oXFxuaW5kZXggMGZiNGM0MWM5YmJmNTUuLjU2NTFhMTBiYTI2ZTYxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmhcXG4rKysgYi9pbmNsdWRlL25ldC9hZl9yeHJwYy5oXFxuQEAgLTU1LDYgKzU1LDcgQEAgdm9pZCByeHJwY19rZXJuZWxfc2V0X25vdGlmaWNhdGlvbnMoc3RydWN0IHNvY2tldCAqc29jayxcXG4gc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByeHJwY19wZWVyICpwZWVyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2V5ICprZXksXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrZXkgKmFwcF9kYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgczY0IHR4X3RvdGFsX2xlbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgdTMyIGhhcmRfdGltZW91dCxcXG5AQCAtOTEsMjQgKzkyLDcgQEAgYm9vbCByeHJwY19rZXJuZWxfY2hlY2tfbGlmZShjb25zdCBzdHJ1Y3Qgc29ja2V0ICosIGNvbnN0IHN0cnVjdCByeHJwY19jYWxsICopO1xcbiBcXG4gaW50IHJ4cnBjX3NvY2tfc2V0X21pbl9zZWN1cml0eV9sZXZlbChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCB2YWwpO1xcbiBpbnQgcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qga2V5ICopO1xcbi1pbnQgcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzZXQpO1xcbi1cXG4tZW51bSByeHJwY19vb2JfdHlwZSByeHJwY19rZXJuZWxfcXVlcnlfb29iKHN0cnVjdCBza19idWZmICpvb2IsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEpO1xcbi1zdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfa2VybmVsX2RlcXVldWVfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLVxcdFxcdFxcdFxcdFxcdCBlbnVtIHJ4cnBjX29vYl90eXBlICpfdHlwZSk7XFxuLXZvaWQgcnhycGNfa2VybmVsX2ZyZWVfb29iKHN0cnVjdCBza19idWZmICpvb2IpO1xcbi12b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxcbi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsXFxuLVxcdFxcdFxcdFxcdCAgdTE2ICpfc2VydmljZV9pZCwgdTggKl9zZWN1cml0eV9pbmRleCk7XFxuLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSxcXG4tXFx0XFx0XFx0XFx0ICBpbnQgZXJyb3IsIGVudW0gcnhycGNfYWJvcnRfcmVhc29uIHdoeSk7XFxuLWludCByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSk7XFxuLXUzMiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSk7XFxuLWludCByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSk7XFxuK3ZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2tleShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHU4ICpfc2VjdXJpdHlfaW5kZXgsIHUzMiAqX2tyYjVfZW5jdHlwZSk7XFxuIHU4IHJ4cnBjX2tlcm5lbF9xdWVyeV9jYWxsX3NlY3VyaXR5KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXHRcXHRcXHRcXHQgICAgdTE2ICpfc2VydmljZV9pZCwgdTMyICpfZW5jdHlwZSk7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXFxuaW5kZXggMWIzYzQ4YjU1OTFkZmQuLjNkOTYwODJlNmVhYzc2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcXG5AQCAtMTQ4LDYgKzE0OCw3IEBAIGVudW0geWZzX2NtX29wZXJhdGlvbiB7XFxuIFxcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdW51c2Vfc2xpc3RfaXNvcnQsXFx0XFxcIlVOVSBpc29ydFxcXCIpIFxcXFxcXG4gXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91cGRhdGUsXFx0XFx0XFxcIlVQREFURSAgIFxcXCIpIFxcXFxcXG4gXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfYnlfdXVpZCxcXHRcXFwiVVNFIHV1aWQgXFxcIikgXFxcXFxcbitcXHRFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9jYWxsLFxcdFxcdFxcXCJVU0UgY2FsbCBcXFwiKSBcXFxcXFxuIFxcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NtX2NhbGwsXFx0XFxcIlVTRSBjbS1jbFxcXCIpIFxcXFxcXG4gXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2V0X2NhcHMsXFx0XFxcIlVTRSBnY2Fwc1xcXCIpIFxcXFxcXG4gXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYixcXHRcXFwiVVNFIGd2dXBjXFxcIikgXFxcXFxcbkBAIC05MzcsOSArOTM4LDkgQEAgVFJBQ0VfRVZFTlQoYWZzX3NlbmRfZGF0YSxcXG4gXFx0ICAgICk7XFxuIFxcbiBUUkFDRV9FVkVOVChhZnNfc2VudF9kYXRhLFxcbi1cXHQgICAgVFBfUFJPVE8oc3RydWN0IGFmc19jYWxsICpjYWxsLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCByZXQpLFxcbitcXHQgICAgVFBfUFJPVE8odW5zaWduZWQgaW50IGNhbGxfZGVidWdfaWQsIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHJldCksXFxuIFxcbi1cXHQgICAgVFBfQVJHUyhjYWxsLCBtc2csIHJldCksXFxuK1xcdCAgICBUUF9BUkdTKGNhbGxfZGVidWdfaWQsIG1zZywgcmV0KSxcXG4gXFxuIFxcdCAgICBUUF9TVFJVQ1RfX2VudHJ5KFxcbiBcXHRcXHQgICAgX19maWVsZCh1bnNpZ25lZCBpbnQsXFx0XFx0Y2FsbClcXG5AQCAtOTQ5LDcgKzk1MCw3IEBAIFRSQUNFX0VWRU5UKGFmc19zZW50X2RhdGEsXFxuIFxcdFxcdFxcdCAgICAgKSxcXG4gXFxuIFxcdCAgICBUUF9mYXN0X2Fzc2lnbihcXG4tXFx0XFx0ICAgIF9fZW50cnktXFx1MDAzZWNhbGwgPSBjYWxsLVxcdTAwM2VkZWJ1Z19pZDtcXG4rXFx0XFx0ICAgIF9fZW50cnktXFx1MDAzZWNhbGwgPSBjYWxsX2RlYnVnX2lkO1xcbiBcXHRcXHQgICAgX19lbnRyeS1cXHUwMDNlcmV0ID0gcmV0O1xcbiBcXHRcXHQgICAgX19lbnRyeS1cXHUwMDNlb2Zmc2V0ID0gbXNnLVxcdTAwM2Vtc2dfaXRlci54YXJyYXlfc3RhcnQgKyBtc2ctXFx1MDAzZW1zZ19pdGVyLmlvdl9vZmZzZXQ7XFxuIFxcdFxcdCAgICBfX2VudHJ5LVxcdTAwM2Vjb3VudCA9IGlvdl9pdGVyX2NvdW50KFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcXG5pbmRleCA3MDRhMTBkZTY2NzAwNC4uOGZjNDE5MmUwMzkyYmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcXG5AQCAtMjYyLDcgKzI2Miw2IEBAXFxuIFxcdEVNKHJ4cnBjX2Nvbm5fZnJlZSxcXHRcXHRcXHRcXFwiRlJFRSAgICAgICAgXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jb25uX2dldF9hY3RpdmF0ZV9jYWxsLFxcdFxcXCJHRVQgYWN0LWNhbGxcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2Nvbm5fZ2V0X2NhbGxfaW5wdXQsXFx0XFx0XFxcIkdFVCBpbnAtY2FsbFxcXCIpIFxcXFxcXG4tXFx0RU0ocnhycGNfY29ubl9nZXRfY2hhbGxlbmdlX2lucHV0LFxcdFxcXCJHRVQgaW5wLWNoYWxcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2Nvbm5fZ2V0X2Nvbm5faW5wdXQsXFx0XFx0XFxcIkdFVCBpbnAtY29ublxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY29ubl9nZXRfaWRsZSxcXHRcXHRcXHRcXFwiR0VUIGlkbGUgICAgXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jb25uX2dldF9wb2tlX2Fib3J0LFxcdFxcdFxcXCJHRVQgcGstYWJvcnRcXFwiKSBcXFxcXFxuQEAgLTI3NCw3ICsyNzMsNiBAQFxcbiBcXHRFTShyeHJwY19jb25uX25ld19zZXJ2aWNlLFxcdFxcdFxcXCJORVcgc2VydmljZSBcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2Nvbm5fcHV0X2NhbGwsXFx0XFx0XFx0XFxcIlBVVCBjYWxsICAgIFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY29ubl9wdXRfY2FsbF9pbnB1dCxcXHRcXHRcXFwiUFVUIGlucC1jYWxsXFxcIikgXFxcXFxcbi1cXHRFTShyeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQsXFx0XFxcIlBVVCBpbnAtY2hhbFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY29ubl9wdXRfY29ubl9pbnB1dCxcXHRcXHRcXFwiUFVUIGlucC1jb25uXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jb25uX3B1dF9kaXNjYXJkX2lkbGUsXFx0XFx0XFxcIlBVVCBkaXNjLWlkbFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY29ubl9wdXRfbG9jYWxfZGVhZCxcXHRcXHRcXFwiUFVUIGxvYy1kZWFkXFxcIikgXFxcXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oXFxuaW5kZXggZDk3MzVhYmQ0Yzc5MTAuLjdkNmE1MDE1MTkzMTEyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmhcXG5AQCAtNTgsMTEgKzU4LDcgQEAgZW51bSByeHJwY19jbXNnX3R5cGUge1xcbiBcXHRSWFJQQ19UWF9MRU5HVEhcXHRcXHQ9IDEyLFxcdC8qIC1zLTogVG90YWwgbGVuZ3RoIG9mIFR4IGRhdGEgKi9cXG4gXFx0UlhSUENfU0VUX0NBTExfVElNRU9VVFxcdD0gMTMsXFx0LyogLXMtOiBTZXQgb25lIG9yIG1vcmUgY2FsbCB0aW1lb3V0cyAqL1xcbiBcXHRSWFJQQ19DSEFSR0VfQUNDRVBUXFx0PSAxNCxcXHQvKiBTcy06IENoYXJnZSB0aGUgYWNjZXB0IHBvb2wgd2l0aCBhIHVzZXIgY2FsbCBJRCAqL1xcbi1cXHRSWFJQQ19PT0JfSURcXHRcXHQ9IDE1LFxcdC8qIC1zcjogT09CIG1lc3NhZ2UgSUQgKi9cXG4tXFx0UlhSUENfQ0hBTExFTkdFRFxcdD0gMTYsXFx0LyogQy1yOiBJbmZvIG9uIGEgcmVjZWl2ZWQgQ0hBTExFTkdFICovXFxuLVxcdFJYUlBDX1JFU1BPTkRcXHRcXHQ9IDE3LFxcdC8qIENzLTogUmVzcG9uZCB0byBhIGNoYWxsZW5nZSAqL1xcbi1cXHRSWFJQQ19SRVNQT05ERURcXHRcXHQ9IDE4LFxcdC8qIFMtcjogRGF0YSByZWNlaXZlZCBpbiBSRVNQT05TRSAqL1xcbi1cXHRSWFJQQ19SRVNQX1JYR0tfQVBQREFUQVxcdD0gMTksXFx0LyogQ3MtOiBSRVNQT05TRTogUnhHSyBhcHAgZGF0YSB0byBpbmNsdWRlICovXFxuK1xcdFJYUlBDX1JFU1BPTlNFX0FQUERBVEFcXHQ9IDIwLFxcdC8qIENzLTogVXNlciBrZXkgaG9sZGluZyBhcHAgZGF0YSBmb3IgUkVTUE9OU0UgKi9cXG4gXFx0UlhSUENfX1NVUFBPUlRFRFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xcbmluZGV4IGMzYzhjMzI0MGVmOTQ2Li5hYTNjMDU4ZjQwOTU1OSAxMDA2NDRcXG4tLS0gYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xcbisrKyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXFxuQEAgLTIwOCw2ICsyMDgsNyBAQCBkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcXG4gXFx0XFx0a2xlYXZlKFxcXCIgPSAtRU5PTUVNXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2dXBheWxvYWQtXFx1MDAzZXJlZiwgMSk7XFxuIFxcbiBcXHR1cGF5bG9hZC1cXHUwMDNlZGF0YWxlbiA9IHJlc3VsdF9sZW47XFxuIFxcdG1lbWNweSh1cGF5bG9hZC1cXHUwMDNlZGF0YSwgZGF0YSwgcmVzdWx0X2xlbik7XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9NYWtlZmlsZSBiL25ldC9yeHJwYy9NYWtlZmlsZVxcbmluZGV4IGY5OTRmOWYzMGEyOWQ0Li5mN2E1ZTBhNTkyZWUxMyAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvTWFrZWZpbGVcXG4rKysgYi9uZXQvcnhycGMvTWFrZWZpbGVcXG5AQCAtMjQsNyArMjQsNiBAQCByeHJwYy15IDo9IFxcXFxcXG4gXFx0bG9jYWxfb2JqZWN0Lm8gXFxcXFxcbiBcXHRtaXNjLm8gXFxcXFxcbiBcXHRuZXRfbnMubyBcXFxcXFxuLVxcdG9vYi5vIFxcXFxcXG4gXFx0b3V0cHV0Lm8gXFxcXFxcbiBcXHRwZWVyX2V2ZW50Lm8gXFxcXFxcbiBcXHRwZWVyX29iamVjdC5vIFxcXFxcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FmX3J4cnBjLmMgYi9uZXQvcnhycGMvYWZfcnhycGMuY1xcbmluZGV4IDlhYjBmMjJjODgxZWM1Li45ZDVjZTFjN2FkMGQyMiAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvYWZfcnhycGMuY1xcbisrKyBiL25ldC9yeHJwYy9hZl9yeHJwYy5jXFxuQEAgLTMxOCw2ICszMTgsNyBAQCBFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9wdXRfcGVlcik7XFxuICAqIEBzb2NrOiBUaGUgc29ja2V0IG9uIHdoaWNoIHRvIG1ha2UgdGhlIGNhbGxcXG4gICogQHBlZXI6IFRoZSBwZWVyIHRvIGNvbnRhY3RcXG4gICogQGtleTogVGhlIHNlY3VyaXR5IGNvbnRleHQgdG8gdXNlIChkZWZhdWx0cyB0byBzb2NrZXQgc2V0dGluZylcXG4rICogQGFwcF9kYXRhOiBUaGUgc2VjdXJpdHkgcmVzcG9uc2UgYXBwbGljYXRpb24gZGF0YSAob3IgTlVMTClcXG4gICogQHVzZXJfY2FsbF9JRDogVGhlIElEIHRvIHVzZVxcbiAgKiBAdHhfdG90YWxfbGVuOiBUb3RhbCBsZW5ndGggb2YgZGF0YSB0byB0cmFuc21pdCBkdXJpbmcgdGhlIGNhbGwgKG9yIC0xKVxcbiAgKiBAaGFyZF90aW1lb3V0OiBUaGUgbWF4aW11bSBsaWZlc3BhbiBvZiB0aGUgY2FsbCBpbiBzZWNcXG5AQCAtMzQwLDYgKzM0MSw3IEBAIEVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3B1dF9wZWVyKTtcXG4gc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByeHJwY19wZWVyICpwZWVyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2V5ICprZXksXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrZXkgKmFwcF9kYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgczY0IHR4X3RvdGFsX2xlbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgdTMyIGhhcmRfdGltZW91dCxcXG5AQCAtMzY4LDYgKzM3MCw3IEBAIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbiBcXHRcXHRrZXkgPSBOVUxMOyAvKiBhIG5vLXNlY3VyaXR5IGtleSAqL1xcbiBcXG4gXFx0bWVtc2V0KFxcdTAwMjZwLCAwLCBzaXplb2YocCkpO1xcbitcXHRwLmFwcF9kYXRhXFx0XFx0PSBhcHBfZGF0YTtcXG4gXFx0cC51c2VyX2NhbGxfSURcXHRcXHQ9IHVzZXJfY2FsbF9JRDtcXG4gXFx0cC50eF90b3RhbF9sZW5cXHRcXHQ9IHR4X3RvdGFsX2xlbjtcXG4gXFx0cC5pbnRlcnJ1cHRpYmlsaXR5XFx0PSBpbnRlcnJ1cHRpYmlsaXR5O1xcbkBAIC01OTUsMTAgKzU5OCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuKVxcbiBcXHRcXHRmYWxsdGhyb3VnaDtcXG4gXFx0Y2FzZSBSWFJQQ19TRVJWRVJfQk9VTkQ6XFxuIFxcdGNhc2UgUlhSUENfU0VSVkVSX0xJU1RFTklORzpcXG4tXFx0XFx0aWYgKG0tXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19PT0IpXFxuLVxcdFxcdFxcdHJldCA9IHJ4cnBjX3NlbmRtc2dfb29iKHJ4LCBtLCBsZW4pO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHJldCA9IHJ4cnBjX2RvX3NlbmRtc2cocngsIG0sIGxlbik7XFxuK1xcdFxcdHJldCA9IHJ4cnBjX2RvX3NlbmRtc2cocngsIG0sIGxlbik7XFxuIFxcdFxcdC8qIFRoZSBzb2NrZXQgaGFzIGJlZW4gdW5sb2NrZWQgKi9cXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdGRlZmF1bHQ6XFxuQEAgLTYzMyw3ICs2MzMsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gXFx0XFx0XFx0ICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuIHtcXG4gXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cXHUwMDNlc2spO1xcbi1cXHR1bnNpZ25lZCBpbnQgbWluX3NlY19sZXZlbCwgdmFsO1xcbitcXHR1bnNpZ25lZCBpbnQgbWluX3NlY19sZXZlbDtcXG4gXFx0dTE2IHNlcnZpY2VfdXBncmFkZVsyXTtcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTcxMCwyMyArNzEwLDcgQEAgc3RhdGljIGludCByeHJwY19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcbiBcXHRcXHRjYXNlIFJYUlBDX01BTkFHRV9SRVNQT05TRTpcXG4gXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0aWYgKG9wdGxlbiAhPSBzaXplb2YodW5zaWduZWQgaW50KSlcXG4tXFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4tXFx0XFx0XFx0cmV0ID0gLUVJU0NPTk47XFxuLVxcdFxcdFxcdGlmIChyeC1cXHUwMDNlc2suc2tfc3RhdGUgIT0gUlhSUENfVU5CT1VORClcXG4tXFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4tXFx0XFx0XFx0cmV0ID0gY29weV9zYWZlX2Zyb21fc29ja3B0cihcXHUwMDI2dmFsLCBzaXplb2YodmFsKSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBvcHR2YWwsIG9wdGxlbik7XFxuLVxcdFxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuLVxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdGlmICh2YWwgXFx1MDAzZSAxKVxcbi1cXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbi1cXHRcXHRcXHRpZiAodmFsKVxcbi1cXHRcXHRcXHRcXHRzZXRfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcXHUwMDI2cngtXFx1MDAzZWZsYWdzKTtcXG4tXFx0XFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRcXHRjbGVhcl9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFxcdTAwMjZyeC1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHRcXHRnb3RvIHN1Y2Nlc3M7XFxuK1xcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcbiBcXHRcXHRkZWZhdWx0OlxcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtODM1LDggKzgxOSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbiBcXHRyeC1cXHUwMDNlY2FsbHMgPSBSQl9ST09UO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnJ4LVxcdTAwM2VpbmNvbWluZ19sb2NrKTtcXG4tXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfb29icSk7XFxuLVxcdHJ4LVxcdTAwM2VwZW5kaW5nX29vYnEgPSBSQl9ST09UO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cngtXFx1MDAzZXNvY2tfY2FsbHMpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cngtXFx1MDAzZXRvX2JlX2FjY2VwdGVkKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX3EpO1xcbkBAIC04ODQsMjMgKzg2Niw2IEBAIHN0YXRpYyBpbnQgcnhycGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGZsYWdzKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBQdXJnZSB0aGUgb3V0LW9mLWJhbmQgcXVldWUuXFxuLSAqL1xcbi1zdGF0aWMgdm9pZCByeHJwY19wdXJnZV9vb2JfcXVldWUoc3RydWN0IHNvY2sgKnNrKVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNrKTtcXG4tXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tXFxuLVxcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpKSlcXG4tXFx0XFx0cnhycGNfa2VybmVsX2ZyZWVfb29iKHNrYik7XFxuLVxcdHdoaWxlICghUkJfRU1QVFlfUk9PVChcXHUwMDI2cngtXFx1MDAzZXBlbmRpbmdfb29icSkpIHtcXG4tXFx0XFx0c2tiID0gcmJfZW50cnkocngtXFx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiwgcmJub2RlKTtcXG4tXFx0XFx0cmJfZXJhc2UoXFx1MDAyNnNrYi1cXHUwMDNlcmJub2RlLCBcXHUwMDI2cngtXFx1MDAzZXBlbmRpbmdfb29icSk7XFxuLVxcdFxcdHJ4cnBjX2tlcm5lbF9mcmVlX29vYihza2IpO1xcbi1cXHR9XFxuLX1cXG4tXFxuIC8qXFxuICAqIFJ4UlBDIHNvY2tldCBkZXN0cnVjdG9yXFxuICAqL1xcbkBAIC05MDgsNyArODczLDYgQEAgc3RhdGljIHZvaWQgcnhycGNfc29ja19kZXN0cnVjdG9yKHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRfZW50ZXIoXFxcIiVwXFxcIiwgc2spO1xcbiBcXG4tXFx0cnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTtcXG4gXFx0cnhycGNfcHVyZ2VfcXVldWUoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG4gXFxuIFxcdFdBUk5fT04ocmVmY291bnRfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3dtZW1fYWxsb2MpKTtcXG5AQCAtOTYxLDcgKzkyNSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVsZWFzZV9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4gXFx0cnhycGNfZGlzY2FyZF9wcmVhbGxvYyhyeCk7XFxuIFxcdHJ4cnBjX3JlbGVhc2VfY2FsbHNfb25fc29ja2V0KHJ4KTtcXG4gXFx0Zmx1c2hfd29ya3F1ZXVlKHJ4cnBjX3dvcmtxdWV1ZSk7XFxuLVxcdHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzayk7XFxuIFxcdHJ4cnBjX3B1cmdlX3F1ZXVlKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XFxuIFxcbiBcXHRyeHJwY191bnVzZV9sb2NhbChyeC1cXHUwMDNlbG9jYWwsIHJ4cnBjX2xvY2FsX3VudXNlX3JlbGVhc2Vfc29jayk7XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oIGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcXG5pbmRleCBjZTk0NmIwYTAzZTJiMy4uMTAxYWM3NTQ0NzU4NGQgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcXG4rKysgYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxcbkBAIC0xNzEsOSArMTcxLDYgQEAgc3RydWN0IHJ4cnBjX3NvY2sge1xcbiBcXHRjb25zdCBzdHJ1Y3QgcnhycGNfa2VybmVsX29wcyAqYXBwX29wcztcXHQvKiBUYWJsZSBvZiBrZXJuZWwgYXBwIG5vdGlmaWNhdGlvbiBmdW5jcyAqL1xcbiBcXHRzdHJ1Y3QgcnhycGNfbG9jYWxcXHQqbG9jYWw7XFx0XFx0LyogbG9jYWwgZW5kcG9pbnQgKi9cXG4gXFx0c3RydWN0IHJ4cnBjX2JhY2tsb2dcXHQqYmFja2xvZztcXHQvKiBQcmVhbGxvY2F0aW9uIGZvciBzZXJ2aWNlcyAqL1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXFx0cmVjdm1zZ19vb2JxO1xcdC8qIE9PQiBtZXNzYWdlcyBmb3IgcmVjdm1zZyB0byBwaWNrIHVwICovXFxuLVxcdHN0cnVjdCByYl9yb290XFx0XFx0cGVuZGluZ19vb2JxO1xcdC8qIE9PQiBtZXNzYWdlcyBhd2FpdGluZyB1c2Vyc3BhY2UgdG8gcmVzcG9uZCB0byAqL1xcbi1cXHR1NjRcXHRcXHRcXHRvb2JfaWRfY291bnRlcjtcXHQvKiBPT0IgbWVzc2FnZSBJRCBjb3VudGVyICovXFxuIFxcdHNwaW5sb2NrX3RcXHRcXHRpbmNvbWluZ19sb2NrO1xcdC8qIEluY29taW5nIGNhbGwgdnMgc2VydmljZSBzaHV0ZG93biBsb2NrICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRzb2NrX2NhbGxzO1xcdC8qIExpc3Qgb2YgY2FsbHMgb3duZWQgYnkgdGhpcyBzb2NrZXQgKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdHRvX2JlX2FjY2VwdGVkO1xcdC8qIGNhbGxzIGF3YWl0aW5nIGFjY2VwdGFuY2UgKi9cXG5AQCAtMTg0LDcgKzE4MSw2IEBAIHN0cnVjdCByeHJwY19zb2NrIHtcXG4gXFx0c3RydWN0IHJiX3Jvb3RcXHRcXHRjYWxscztcXHRcXHQvKiBVc2VyIElEIC1cXHUwMDNlIGNhbGwgbWFwcGluZyAqL1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZmxhZ3M7XFxuICNkZWZpbmUgUlhSUENfU09DS19DT05ORUNURURcXHRcXHQwXFx0LyogY29ubmVjdF9zcnggaXMgc2V0ICovXFxuLSNkZWZpbmUgUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0VcXHQxXFx0LyogVXNlciB3YW50cyB0byBtYW5hZ2UgUkVTUE9OU0UgcGFja2V0cyAqL1xcbiBcXHRyd2xvY2tfdFxcdFxcdGNhbGxfbG9jaztcXHQvKiBsb2NrIGZvciBjYWxscyAqL1xcbiBcXHR1MzJcXHRcXHRcXHRtaW5fc2VjX2xldmVsO1xcdC8qIG1pbmltdW0gc2VjdXJpdHkgbGV2ZWwgKi9cXG4gI2RlZmluZSBSWFJQQ19TRUNVUklUWV9NQVhcXHRSWFJQQ19TRUNVUklUWV9FTkNSWVBUXFxuQEAgLTI0MSw3ICsyMzcsNiBAQCBzdHJ1Y3QgcnhycGNfc2tiX3ByaXYge1xcbiBcXHRcXHRcXHR1OFxcdFxcdHJlYXNvbjtcXHRcXHQvKiBSZWFzb24gZm9yIGFjayAqL1xcbiBcXHRcXHR9IGFjaztcXG4gXFx0XFx0c3RydWN0IHtcXG4tXFx0XFx0XFx0c3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm47XFx0LyogQ29ubmVjdGlvbiByZWZlcnJlZCB0byAqL1xcbiBcXHRcXHRcXHR1bmlvbiB7XFxuIFxcdFxcdFxcdFxcdHUzMiByeGthZF9ub25jZTtcXG4gXFx0XFx0XFx0fTtcXG5AQCAtMzEwLDEzICszMDUsNiBAQCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkge1xcbiBcXHRib29sICgqdmFsaWRhdGVfY2hhbGxlbmdlKShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIFxcbi1cXHQvKiBGaWxsIG91dCB0aGUgY21zZyBmb3IgcmVjdm1zZygpIHRvIHBhc3Mgb24gYSBjaGFsbGVuZ2UgdG8gdXNlcnNwYWNlLlxcbi1cXHQgKiBUaGUgc2VjdXJpdHkgY2xhc3MgZ2V0cyB0byBhZGQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cXG4tXFx0ICovXFxuLVxcdGludCAoKmNoYWxsZW5nZV90b19yZWN2bXNnKShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4tXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXNnaGRyICptc2cpO1xcbi1cXG4gXFx0LyogUGFyc2Ugc2VuZG1zZygpIGNvbnRyb2wgbWVzc2FnZSBhbmQgcmVzcG9uZCB0byBjaGFsbGVuZ2UuICovXFxuIFxcdGludCAoKnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UpKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXNnaGRyICptc2cpO1xcbkBAIC01MTYsNiArNTA0LDcgQEAgc3RydWN0IHJ4cnBjX2J1bmRsZSB7XFxuIFxcdHN0cnVjdCByeHJwY19sb2NhbFxcdCpsb2NhbDtcXHRcXHQvKiBSZXByZXNlbnRhdGlvbiBvZiBsb2NhbCBlbmRwb2ludCAqL1xcbiBcXHRzdHJ1Y3QgcnhycGNfcGVlclxcdCpwZWVyO1xcdFxcdC8qIFJlbW90ZSBlbmRwb2ludCAqL1xcbiBcXHRzdHJ1Y3Qga2V5XFx0XFx0KmtleTtcXHRcXHQvKiBTZWN1cml0eSBkZXRhaWxzICovXFxuK1xcdHN0cnVjdCBrZXlcXHRcXHQqYXBwX2RhdGE7XFx0LyogU2VjdXJpdHkgcmVzcG9uc2UgYXBwIGRhdGEgKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdHByb2NfbGluaztcXHQvKiBMaW5rIGluIG5ldC1cXHUwMDNlYnVuZGxlX3Byb2NfbGlzdCAqL1xcbiBcXHRjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5O1xcdC8qIGFwcGxpZWQgc2VjdXJpdHkgbW9kdWxlICovXFxuIFxcdHJlZmNvdW50X3RcXHRcXHRyZWY7XFxuQEAgLTcxOSw2ICs3MDgsNyBAQCBzdHJ1Y3QgcnhycGNfY2FsbCB7XFxuIFxcdHN0cnVjdCByeHJwY19zb2NrIF9fcmN1XFx0KnNvY2tldDtcXHQvKiBzb2NrZXQgcmVzcG9uc2libGUgKi9cXG4gXFx0c3RydWN0IHJ4cnBjX25ldFxcdCpyeG5ldDtcXHRcXHQvKiBOZXR3b3JrIG5hbWVzcGFjZSB0byB3aGljaCBjYWxsIGJlbG9uZ3MgKi9cXG4gXFx0c3RydWN0IGtleVxcdFxcdCprZXk7XFx0XFx0LyogU2VjdXJpdHkgZGV0YWlscyAqL1xcbitcXHRzdHJ1Y3Qga2V5XFx0XFx0KmFwcF9kYXRhO1xcdC8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovXFxuIFxcdGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSAqc2VjdXJpdHk7XFx0LyogYXBwbGllZCBzZWN1cml0eSBtb2R1bGUgKi9cXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0dXNlcl9tdXRleDtcXHQvKiBVc2VyIGFjY2VzcyBtdXRleCAqL1xcbiBcXHRzdHJ1Y3Qgc29ja2FkZHJfcnhycGNcXHRkZXN0X3NyeDtcXHQvKiBEZXN0aW5hdGlvbiBhZGRyZXNzICovXFxuQEAgLTkxMyw2ICs5MDMsNyBAQCBlbnVtIHJ4cnBjX2NvbW1hbmQge1xcbiB9O1xcbiBcXG4gc3RydWN0IHJ4cnBjX2NhbGxfcGFyYW1zIHtcXG4rXFx0c3RydWN0IGtleVxcdFxcdCphcHBfZGF0YTtcXHQvKiBTZWN1cml0eSByZXNwb25zZSBhcHAgZGF0YSAqL1xcbiBcXHRzNjRcXHRcXHRcXHR0eF90b3RhbF9sZW47XFx0LyogVG90YWwgVHggZGF0YSBsZW5ndGggKGlmIHNlbmQgZGF0YSkgKi9cXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHVzZXJfY2FsbF9JRDtcXHQvKiBVc2VyJ3MgY2FsbCBJRCAqL1xcbiBcXHRzdHJ1Y3Qge1xcbkBAIC0xMzc1LDEzICsxMzY2LDYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcnhycGNfbmV0ICpyeHJwY19uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRyZXR1cm4gbmV0X2dlbmVyaWMobmV0LCByeHJwY19uZXRfaWQpO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBvb2IuY1xcbi0gKi9cXG4tYm9vbCByeHJwY19ub3RpZnlfc29ja2V0X29vYihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLXZvaWQgcnhycGNfYWRkX3BlbmRpbmdfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLWludCByeHJwY19zZW5kbXNnX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7XFxuLVxcbiAvKlxcbiAgKiBvdXRwdXQuY1xcbiAgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmMgYi9uZXQvcnhycGMvY2FsbF9vYmplY3QuY1xcbmluZGV4IDgxN2VkOWFjYjkxZTYxLi4yZGYzZDAxOTBhODkxOCAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvY2FsbF9vYmplY3QuY1xcbisrKyBiL25ldC9yeHJwYy9jYWxsX29iamVjdC5jXFxuQEAgLTE5OCw3ICsxOTgsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2FsbG9jX2NsaWVudF9jYWxsKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4gXFx0a3RpbWVfdCBub3c7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRfZW50ZXIoXFxcIlxcXCIpO1xcbitcXHRfZW50ZXIoXFxcIiVwXFxcIiwgcC1cXHUwMDNlYXBwX2RhdGEpO1xcbiBcXG4gXFx0Y2FsbCA9IHJ4cnBjX2FsbG9jX2NhbGwocngsIGdmcCwgZGVidWdfaWQpO1xcbiBcXHRpZiAoIWNhbGwpXFxuQEAgLTIxMSw2ICsyMTEsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2FsbG9jX2NsaWVudF9jYWxsKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4gXFx0Y2FsbC1cXHUwMDNlaW50ZXJydXB0aWJpbGl0eVxcdD0gcC1cXHUwMDNlaW50ZXJydXB0aWJpbGl0eTtcXG4gXFx0Y2FsbC1cXHUwMDNldHhfdG90YWxfbGVuXFx0PSBwLVxcdTAwM2V0eF90b3RhbF9sZW47XFxuIFxcdGNhbGwtXFx1MDAzZWtleVxcdFxcdD0ga2V5X2dldChjcC1cXHUwMDNla2V5KTtcXG4rXFx0Y2FsbC1cXHUwMDNlYXBwX2RhdGFcXHRcXHQ9IGtleV9nZXQocC1cXHUwMDNlYXBwX2RhdGEpO1xcbiBcXHRjYWxsLVxcdTAwM2VwZWVyXFx0XFx0PSByeHJwY19nZXRfcGVlcihjcC1cXHUwMDNlcGVlciwgcnhycGNfcGVlcl9nZXRfY2FsbCk7XFxuIFxcdGNhbGwtXFx1MDAzZWxvY2FsXFx0XFx0PSByeHJwY19nZXRfbG9jYWwoY3AtXFx1MDAzZWxvY2FsLCByeHJwY19sb2NhbF9nZXRfY2FsbCk7XFxuIFxcdGNhbGwtXFx1MDAzZXNlY3VyaXR5X2xldmVsXFx0PSBjcC1cXHUwMDNlc2VjdXJpdHlfbGV2ZWw7XFxuQEAgLTY5Nyw2ICs2OTgsNyBAQCBzdGF0aWMgdm9pZCByeHJwY19kZXN0cm95X2NhbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRyeHJwY19wdXRfcGVlcihjYWxsLVxcdTAwM2VwZWVyLCByeHJwY19wZWVyX3B1dF9jYWxsKTtcXG4gXFx0cnhycGNfcHV0X2xvY2FsKGNhbGwtXFx1MDAzZWxvY2FsLCByeHJwY19sb2NhbF9wdXRfY2FsbCk7XFxuIFxcdGtleV9wdXQoY2FsbC1cXHUwMDNla2V5KTtcXG4rXFx0a2V5X3B1dChjYWxsLVxcdTAwM2VhcHBfZGF0YSk7XFxuIFxcdGNhbGxfcmN1KFxcdTAwMjZjYWxsLVxcdTAwM2VyY3UsIHJ4cnBjX3JjdV9mcmVlX2NhbGwpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY29ubl9jbGllbnQuYyBiL25ldC9yeHJwYy9jb25uX2NsaWVudC5jXFxuaW5kZXggNDg1MTlmMGRlMTg1MzkuLjVjYmZhN2IyMjNlMDExIDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9jb25uX2NsaWVudC5jXFxuKysrIGIvbmV0L3J4cnBjL2Nvbm5fY2xpZW50LmNcXG5AQCAtODEsNiArODEsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2J1bmRsZSAqcnhycGNfYWxsb2NfYnVuZGxlKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXHRcXHRidW5kbGUtXFx1MDAzZWxvY2FsXFx0XFx0PSBjYWxsLVxcdTAwM2Vsb2NhbDtcXG4gXFx0XFx0YnVuZGxlLVxcdTAwM2VwZWVyXFx0XFx0PSByeHJwY19nZXRfcGVlcihjYWxsLVxcdTAwM2VwZWVyLCByeHJwY19wZWVyX2dldF9idW5kbGUpO1xcbiBcXHRcXHRidW5kbGUtXFx1MDAzZWtleVxcdFxcdD0ga2V5X2dldChjYWxsLVxcdTAwM2VrZXkpO1xcbitcXHRcXHRidW5kbGUtXFx1MDAzZWFwcF9kYXRhXFx0PSBrZXlfZ2V0KGNhbGwtXFx1MDAzZWFwcF9kYXRhKTtcXG4gXFx0XFx0YnVuZGxlLVxcdTAwM2VzZWN1cml0eVxcdD0gY2FsbC1cXHUwMDNlc2VjdXJpdHk7XFxuIFxcdFxcdGJ1bmRsZS1cXHUwMDNlZXhjbHVzaXZlXFx0PSB0ZXN0X2JpdChSWFJQQ19DQUxMX0VYQ0xVU0lWRSwgXFx1MDAyNmNhbGwtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0YnVuZGxlLVxcdTAwM2V1cGdyYWRlXFx0XFx0PSB0ZXN0X2JpdChSWFJQQ19DQUxMX1VQR1JBREUsIFxcdTAwMjZjYWxsLVxcdTAwM2VmbGFncyk7XFxuQEAgLTExOCw2ICsxMTksNyBAQCBzdGF0aWMgdm9pZCByeHJwY19mcmVlX2J1bmRsZShzdHJ1Y3QgcnhycGNfYnVuZGxlICpidW5kbGUpXFxuIFxcdHdyaXRlX3VubG9jayhcXHUwMDI2YnVuZGxlLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhuZXQtXFx1MDAzZWNvbm5fbG9jayk7XFxuIFxcdHJ4cnBjX3B1dF9wZWVyKGJ1bmRsZS1cXHUwMDNlcGVlciwgcnhycGNfcGVlcl9wdXRfYnVuZGxlKTtcXG4gXFx0a2V5X3B1dChidW5kbGUtXFx1MDAzZWtleSk7XFxuK1xcdGtleV9wdXQoYnVuZGxlLVxcdTAwM2VhcHBfZGF0YSk7XFxuIFxcdGtmcmVlKGJ1bmRsZSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX2V2ZW50LmMgYi9uZXQvcnhycGMvY29ubl9ldmVudC5jXFxuaW5kZXggNjExYzc5MGJjNmQwY2UuLjkxNDZiOWQ0YzJhYzUwIDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9jb25uX2V2ZW50LmNcXG4rKysgYi9uZXQvcnhycGMvY29ubl9ldmVudC5jXFxuQEAgLTI3OSwxMCArMjc5LDcgQEAgc3RhdGljIGludCByeHJwY19wcm9jZXNzX2V2ZW50KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXG4gXFx0c3dpdGNoIChzcC1cXHUwMDNlaGRyLnR5cGUpIHtcXG4gXFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9DSEFMTEVOR0U6XFxuLVxcdFxcdHJldCA9IGNvbm4tXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VyZXNwb25kX3RvX2NoYWxsZW5nZShjb25uLCBza2IpO1xcbi1cXHRcXHRzcC1cXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XFxuLVxcdFxcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldHVybiBjb25uLVxcdTAwM2VzZWN1cml0eS1cXHUwMDNlcmVzcG9uZF90b19jaGFsbGVuZ2UoY29ubiwgc2tiKTtcXG4gXFxuIFxcdGNhc2UgUlhSUENfUEFDS0VUX1RZUEVfUkVTUE9OU0U6XFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNvbm4tXFx1MDAzZXN0YXRlX2xvY2spO1xcbkBAIC00MjUsNjYgKzQyMiw2IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuIFxcdHJ4cnBjX3F1ZXVlX2Nvbm4oY29ubiwgcnhycGNfY29ubl9xdWV1ZV9yeF93b3JrKTtcXG4gfVxcbiBcXG4tLypcXG4tICogUG9zdCBhIENIQUxMRU5HRSBwYWNrZXQgdG8gdGhlIHNvY2tldCBvZiBvbmUgb2YgYSBjb25uZWN0aW9uJ3MgY2FsbHMgc28gdGhhdFxcbi0gKiBpdCBjYW4gZ2V0IGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgcGFja2V0LCBwb3NzaWJseSBxdWVyeWluZ1xcbi0gKiB1c2Vyc3BhY2UuXFxuLSAqL1xcbi1zdGF0aWMgYm9vbCByeHJwY19wb3N0X2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpO1xcbi1cXHRzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCA9IE5VTEw7XFxuLVxcdHN0cnVjdCByeHJwY19zb2NrICpyeDtcXG4tXFx0Ym9vbCByZXNwb25kID0gZmFsc2UsIHF1ZXVlZCA9IGZhbHNlO1xcbi1cXG4tXFx0c3AtXFx1MDAzZWNoYWxsLmNvbm4gPVxcbi1cXHRcXHRyeHJwY19nZXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX2dldF9jaGFsbGVuZ2VfaW5wdXQpO1xcbi1cXG4tXFx0aWYgKCFjb25uLVxcdTAwM2VzZWN1cml0eS1cXHUwMDNlY2hhbGxlbmdlX3RvX3JlY3Ztc2cpIHtcXG4tXFx0XFx0cnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihjb25uLCBza2IpO1xcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0fVxcbi1cXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXG4tXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGNvbm4tXFx1MDAzZWNoYW5uZWxzKTsgaSsrKSB7XFxuLVxcdFxcdGlmIChjb25uLVxcdTAwM2VjaGFubmVsc1tpXS5jYWxsKSB7XFxuLVxcdFxcdFxcdGNhbGwgPSBjb25uLVxcdTAwM2VjaGFubmVsc1tpXS5jYWxsO1xcbi1cXHRcXHRcXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVxcdTAwM2Vzb2NrZXQpO1xcbi1cXHRcXHRcXHRpZiAoIXJ4KSB7XFxuLVxcdFxcdFxcdFxcdGNhbGwgPSBOVUxMO1xcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0fVxcbi1cXG4tXFx0XFx0XFx0cmVzcG9uZCA9IHRydWU7XFxuLVxcdFxcdFxcdGlmICh0ZXN0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXFx1MDAyNnJ4LVxcdTAwM2VmbGFncykpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRjYWxsID0gTlVMTDtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIXJlc3BvbmQpIHtcXG4tXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdFxcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XFxuLVxcdFxcdHNwLVxcdTAwM2VjaGFsbC5jb25uID0gTlVMTDtcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoY2FsbClcXG4tXFx0XFx0cXVldWVkID0gcnhycGNfbm90aWZ5X3NvY2tldF9vb2IoY2FsbCwgc2tiKTtcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdGlmIChjYWxsIFxcdTAwMjZcXHUwMDI2ICFxdWV1ZWQpIHtcXG4tXFx0XFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTtcXG4tXFx0XFx0c3AtXFx1MDAzZWNoYWxsLmNvbm4gPSBOVUxMO1xcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghY2FsbClcXG4tXFx0XFx0cnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihjb25uLCBza2IpO1xcbi1cXHRyZXR1cm4gdHJ1ZTtcXG4tfVxcbi1cXG4gLypcXG4gICogSW5wdXQgYSBjb25uZWN0aW9uLWxldmVsIHBhY2tldC5cXG4gICovXFxuQEAgLTUxMyw3ICs0NTAsOCBAQCBib29sIHJ4cnBjX2lucHV0X2Nvbm5fcGFja2V0KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHR9XFxuIFxcdFxcdGlmICghY29ubi1cXHUwMDNlc2VjdXJpdHktXFx1MDAzZXZhbGlkYXRlX2NoYWxsZW5nZShjb25uLCBza2IpKVxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdFxcdHJldHVybiByeHJwY19wb3N0X2NoYWxsZW5nZShjb25uLCBza2IpO1xcbitcXHRcXHRyeHJwY19wb3N0X3BhY2tldF90b19jb25uKGNvbm4sIHNrYik7XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9SRVNQT05TRTpcXG4gXFx0XFx0aWYgKHJ4cnBjX2lzX2Nvbm5fYWJvcnRlZChjb25uKSkge1xcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMva2V5LmMgYi9uZXQvcnhycGMva2V5LmNcXG5pbmRleCBhMGFhNzhkODkyODk3Zi4uMmRkZGJlM2NhZDVjZmMgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2tleS5jXFxuKysrIGIvbmV0L3J4cnBjL2tleS5jXFxuQEAgLTg5MywzICs4OTMsMzkgQEAgc3RhdGljIGxvbmcgcnhycGNfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksXFxuIFxcdF9sZWF2ZShcXFwiID0gJXp1XFxcIiwgc2l6ZSk7XFxuIFxcdHJldHVybiBzaXplO1xcbiB9XFxuK1xcbisvKipcXG4rICogcnhycGNfa2VybmVsX3F1ZXJ5X2tleSAtIFF1ZXJ5IHBhcmFtZXRlcnMgZnJvbSBhbiByeHJwYyBrZXlcXG4rICogQGtleTogVGhlIGtleSB0byBxdWVyeVxcbisgKiBAX3NlY3VyaXR5X2luZGV4OiBXaGVyZSB0byByZXR1cm4gdGhlIHNlY3VyaXR5IGluZGV4XFxuKyAqIEBfa3JiNV9lbmN0eXBlOiBXaGVyZSB0byByZXR1cm4gdGhlIGtyYjUgZW5jcnlwdGlvbiB0eXBlIGlmIGFwcGxpY2FibGVcXG4rICpcXG4rICogUXVlcnkgYW4gcnhycGMgYXV0aGVudGljYXRpb24ga2V5LCBleHRyYWN0aW5nIHRoZSBzZWN1cml0eSBpbmRleCBmcm9tIHRoZVxcbisgKiBmaXJzdCB0b2tlbiB0aGVyZWluLlxcbisgKi9cXG4rdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgdTggKl9zZWN1cml0eV9pbmRleCwgdTMyICpfa3JiNV9lbmN0eXBlKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCByeHJwY19rZXlfdG9rZW4gKnRva2VuO1xcbitcXG4rXFx0dG9rZW4gPSBrZXktXFx1MDAzZXBheWxvYWQuZGF0YVswXTtcXG4rXFx0aWYgKCF0b2tlbikge1xcbitcXHRcXHQqX3NlY3VyaXR5X2luZGV4ID0gMDtcXG4rXFx0XFx0Kl9rcmI1X2VuY3R5cGUgPSAwO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdCpfc2VjdXJpdHlfaW5kZXggPSB0b2tlbi1cXHUwMDNlc2VjdXJpdHlfaW5kZXg7XFxuK1xcdHN3aXRjaCAodG9rZW4tXFx1MDAzZXNlY3VyaXR5X2luZGV4KSB7XFxuK1xcdGNhc2UgUlhSUENfU0VDVVJJVFlfUlhLQUQ6XFxuK1xcdFxcdCpfa3JiNV9lbmN0eXBlID0gMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6XFxuK1xcdFxcdCpfa3JiNV9lbmN0eXBlID0gdG9rZW4tXFx1MDAzZXJ4Z2stXFx1MDAzZWVuY3R5cGU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuK1xcdFxcdCpfa3JiNV9lbmN0eXBlID0gMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkpO1xcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvb29iLmMgYi9uZXQvcnhycGMvb29iLmNcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCBjODBlZTI0ODdkMDk0MS4uMDAwMDAwMDAwMDAwMDBcXG4tLS0gYS9uZXQvcnhycGMvb29iLmNcXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsMzg3ICswLDAgQEBcXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4tLyogT3V0IG9mIGJhbmQgbWVzc2FnZSBoYW5kbGluZyAoZS5nLiBjaGFsbGVuZ2UtcmVzcG9uc2UpXFxuLSAqXFxuLSAqIENvcHlyaWdodCAoQykgMjAyNSBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXFxuLSAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSlcXG4tICovXFxuLVxcbi0jZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFxcXCI6IFxcXCIgZm10XFxuLVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0LmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZnAuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NuZXQvYWZfcnhycGMuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFxcImFyLWludGVybmFsLmhcXFwiXFxuLVxcbi1lbnVtIHJ4cnBjX29vYl9jb21tYW5kIHtcXG4tXFx0UlhSUENfT09CX0NNRF9VTlNFVCxcXG4tXFx0UlhSUENfT09CX0NNRF9SRVNQT05ELFxcbi19IF9fbW9kZShieXRlKTtcXG4tXFxuLXN0cnVjdCByeHJwY19vb2JfcGFyYW1zIHtcXG4tXFx0dTY0XFx0XFx0XFx0b29iX2lkO1xcdFxcdC8qIElEIG51bWJlciBvZiBtZXNzYWdlIGlmIHJlcGx5ICovXFxuLVxcdHMzMlxcdFxcdFxcdGFib3J0X2NvZGU7XFxuLVxcdGVudW0gcnhycGNfb29iX2NvbW1hbmRcXHRjb21tYW5kO1xcbi1cXHRib29sXFx0XFx0XFx0aGF2ZV9vb2JfaWQ6MTtcXG4tfTtcXG4tXFxuLS8qXFxuLSAqIFBvc3QgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZSBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2VcXG4tICogYXNzb2NpYXRlZCB3aXRoIGEgcmVmZXJlbmNlIGNhbGwuXFxuLSAqL1xcbi1ib29sIHJ4cnBjX25vdGlmeV9zb2NrZXRfb29iKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTtcXG4tXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4O1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2s7XFxuLVxcdGJvb2wgcXVldWVkID0gZmFsc2U7XFxuLVxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcbi1cXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVxcdTAwM2Vzb2NrZXQpO1xcbi1cXHRpZiAocngpIHtcXG4tXFx0XFx0c2sgPSBcXHUwMDI2cngtXFx1MDAzZXNrO1xcbi1cXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19sb2NrKTtcXG4tXFxuLVxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgXFx1MDAzYyBSWFJQQ19DTE9TRSkge1xcbi1cXHRcXHRcXHRza2ItXFx1MDAzZXNrYl9tc3RhbXBfbnMgPSByeC1cXHUwMDNlb29iX2lkX2NvdW50ZXIrKztcXG4tXFx0XFx0XFx0cnhycGNfZ2V0X3NrYihza2IsIHJ4cnBjX3NrYl9nZXRfcG9zdF9vb2IpO1xcbi1cXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfb29icSwgc2tiKTtcXG4tXFx0XFx0XFx0cXVldWVkID0gdHJ1ZTtcXG4tXFxuLVxcdFxcdFxcdHRyYWNlX3J4cnBjX25vdGlmeV9zb2NrZXQoY2FsbC1cXHUwMDNlZGVidWdfaWQsIHNwLVxcdTAwM2VoZHIuc2VyaWFsKTtcXG4tXFx0XFx0XFx0aWYgKHJ4LVxcdTAwM2VhcHBfb3BzKVxcbi1cXHRcXHRcXHRcXHRyeC1cXHUwMDNlYXBwX29wcy1cXHUwMDNlbm90aWZ5X29vYihzaywgc2tiKTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19sb2NrKTtcXG4tXFx0XFx0aWYgKHF1ZXVlZCBcXHUwMDI2XFx1MDAyNiAhcngtXFx1MDAzZWFwcF9vcHMgXFx1MDAyNlxcdTAwMjYgIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcXG4tXFx0XFx0XFx0c2stXFx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xcbi1cXHR9XFxuLVxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFx0cmV0dXJuIHF1ZXVlZDtcXG4tfVxcbi1cXG4tLypcXG4tICogTG9jYXRlIHRoZSBPT0IgbWVzc2FnZSB0byByZXNwb25kIHRvIGJ5IGl0cyBJRC5cXG4tICovXFxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfZmluZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHU2NCBvb2JfaWQpXFxuLXtcXG4tXFx0c3RydWN0IHJiX25vZGUgKnA7XFxuLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLVxcbi1cXHRwID0gcngtXFx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlO1xcbi1cXHR3aGlsZSAocCkge1xcbi1cXHRcXHRza2IgPSByYl9lbnRyeShwLCBzdHJ1Y3Qgc2tfYnVmZiwgcmJub2RlKTtcXG4tXFxuLVxcdFxcdGlmIChvb2JfaWQgXFx1MDAzYyBza2ItXFx1MDAzZXNrYl9tc3RhbXBfbnMpXFxuLVxcdFxcdFxcdHAgPSBwLVxcdTAwM2VyYl9sZWZ0O1xcbi1cXHRcXHRlbHNlIGlmIChvb2JfaWQgXFx1MDAzZSBza2ItXFx1MDAzZXNrYl9tc3RhbXBfbnMpXFxuLVxcdFxcdFxcdHAgPSBwLVxcdTAwM2VyYl9yaWdodDtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRyZXR1cm4gc2tiO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gTlVMTDtcXG4tfVxcbi1cXG4tLypcXG4tICogQWRkIGFuIE9PQiBtZXNzYWdlIGludG8gdGhlIHBlbmRpbmctcmVzcG9uc2Ugc2V0LiAgV2UgYWx3YXlzIGFzc2lnbiB0aGUgbmV4dFxcbi0gKiB2YWx1ZSBmcm9tIGEgNjQtYml0IGNvdW50ZXIgdG8gdGhlIG9vYl9pZCwgc28ganVzdCBhc3N1bWUgd2UncmUgYWx3YXlzIGdvaW5nXFxuLSAqIHRvIGJlIG9uIHRoZSByaWdodC1oYW5kIGVkZ2Ugb2YgdGhlIHRyZWUgYW5kIHRoYXQgdGhlIGNvdW50ZXIgd29uJ3Qgd3JhcC5cXG4tICogVGhlIHRyZWUgaXMgYWxzbyBnaXZlbiBhIHJlZiB0byB0aGUgbWVzc2FnZS5cXG4tICovXFxuLXZvaWQgcnhycGNfYWRkX3BlbmRpbmdfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4te1xcbi1cXHRzdHJ1Y3QgcmJfbm9kZSAqKnBwID0gXFx1MDAyNnJ4LVxcdTAwM2VwZW5kaW5nX29vYnEucmJfbm9kZSwgKnAgPSBOVUxMO1xcbi1cXG4tXFx0d2hpbGUgKCpwcCkge1xcbi1cXHRcXHRwID0gKnBwO1xcbi1cXHRcXHRwcCA9IFxcdTAwMjYoKnBwKS1cXHUwMDNlcmJfcmlnaHQ7XFxuLVxcdH1cXG4tXFxuLVxcdHJiX2xpbmtfbm9kZShcXHUwMDI2c2tiLVxcdTAwM2VyYm5vZGUsIHAsIHBwKTtcXG4tXFx0cmJfaW5zZXJ0X2NvbG9yKFxcdTAwMjZza2ItXFx1MDAzZXJibm9kZSwgXFx1MDAyNnJ4LVxcdTAwM2VwZW5kaW5nX29vYnEpO1xcbi19XFxuLVxcbi0vKlxcbi0gKiBFeHRyYWN0IGNvbnRyb2wgbWVzc2FnZXMgZnJvbSB0aGUgc2VuZG1zZygpIGNvbnRyb2wgYnVmZmVyLlxcbi0gKi9cXG4tc3RhdGljIGludCByeHJwY19zZW5kbXNnX29vYl9jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgKnApXFxuLXtcXG4tXFx0c3RydWN0IGNtc2doZHIgKmNtc2c7XFxuLVxcdGludCBsZW47XFxuLVxcbi1cXHRpZiAobXNnLVxcdTAwM2Vtc2dfY29udHJvbGxlbiA9PSAwKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdGZvcl9lYWNoX2Ntc2doZHIoY21zZywgbXNnKSB7XFxuLVxcdFxcdGlmICghQ01TR19PSyhtc2csIGNtc2cpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdFxcdGxlbiA9IGNtc2ctXFx1MDAzZWNtc2dfbGVuIC0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKTtcXG4tXFx0XFx0X2RlYnVnKFxcXCJDTVNHICVkLCAlZCwgJWRcXFwiLFxcbi1cXHRcXHQgICAgICAgY21zZy1cXHUwMDNlY21zZ19sZXZlbCwgY21zZy1cXHUwMDNlY21zZ190eXBlLCBsZW4pO1xcbi1cXG4tXFx0XFx0aWYgKGNtc2ctXFx1MDAzZWNtc2dfbGV2ZWwgIT0gU09MX1JYUlBDKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdHN3aXRjaCAoY21zZy1cXHUwMDNlY21zZ190eXBlKSB7XFxuLVxcdFxcdGNhc2UgUlhSUENfT09CX0lEOlxcbi1cXHRcXHRcXHRpZiAobGVuICE9IHNpemVvZihwLVxcdTAwM2Vvb2JfaWQpIHx8IHAtXFx1MDAzZWhhdmVfb29iX2lkKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZwLVxcdTAwM2Vvb2JfaWQsIENNU0dfREFUQShjbXNnKSwgc2l6ZW9mKHAtXFx1MDAzZW9vYl9pZCkpO1xcbi1cXHRcXHRcXHRwLVxcdTAwM2VoYXZlX29vYl9pZCA9IHRydWU7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIFJYUlBDX1JFU1BPTkQ6XFxuLVxcdFxcdFxcdGlmIChwLVxcdTAwM2Vjb21tYW5kICE9IFJYUlBDX09PQl9DTURfVU5TRVQpXFxuLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRcXHRwLVxcdTAwM2Vjb21tYW5kID0gUlhSUENfT09CX0NNRF9SRVNQT05EO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBSWFJQQ19BQk9SVDpcXG4tXFx0XFx0XFx0aWYgKGxlbiAhPSBzaXplb2YocC1cXHUwMDNlYWJvcnRfY29kZSkgfHwgcC1cXHUwMDNlYWJvcnRfY29kZSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdFxcdG1lbWNweShcXHUwMDI2cC1cXHUwMDNlYWJvcnRfY29kZSwgQ01TR19EQVRBKGNtc2cpLCBzaXplb2YocC1cXHUwMDNlYWJvcnRfY29kZSkpO1xcbi1cXHRcXHRcXHRpZiAocC1cXHUwMDNlYWJvcnRfY29kZSA9PSAwKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgUlhSUENfUkVTUF9SWEdLX0FQUERBVEE6XFxuLVxcdFxcdFxcdGlmIChwLVxcdTAwM2Vjb21tYW5kICE9IFJYUlBDX09PQl9DTURfUkVTUE9ORClcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHRzd2l0Y2ggKHAtXFx1MDAzZWNvbW1hbmQpIHtcXG4tXFx0Y2FzZSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQ6XFxuLVxcdFxcdGlmICghcC1cXHUwMDNlaGF2ZV9vb2JfaWQpXFxuLVxcdFxcdFxcdHJldHVybiAtRUJBRFNMVDtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGRlZmF1bHQ6XFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tLypcXG4tICogQWxsb3cgdXNlcnNwYWNlIHRvIHJlc3BvbmQgdG8gYW4gT09CIHVzaW5nIHNlbmRtc2coKS5cXG4tICovXFxuLXN0YXRpYyBpbnQgcnhycGNfcmVzcG9uZF90b19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyAqcCxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IG1zZ2hkciAqbXNnKVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uO1xcbi1cXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwO1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0c2tiID0gcnhycGNfZmluZF9wZW5kaW5nX29vYihyeCwgcC1cXHUwMDNlb29iX2lkKTtcXG4tXFx0aWYgKHNrYilcXG4tXFx0XFx0cmJfZXJhc2UoXFx1MDAyNnNrYi1cXHUwMDNlcmJub2RlLCBcXHUwMDI2cngtXFx1MDAzZXBlbmRpbmdfb29icSk7XFxuLVxcdHJlbGVhc2Vfc29jayhcXHUwMDI2cngtXFx1MDAzZXNrKTtcXG4tXFx0aWYgKCFza2IpXFxuLVxcdFxcdHJldHVybiAtRUJBRFNMVDtcXG4tXFxuLVxcdHNwID0gcnhycGNfc2tiKHNrYik7XFxuLVxcbi1cXHRzd2l0Y2ggKHAtXFx1MDAzZWNvbW1hbmQpIHtcXG4tXFx0Y2FzZSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQ6XFxuLVxcdFxcdHJldCA9IC1FUFJPVE87XFxuLVxcdFxcdGlmIChza2ItXFx1MDAzZW1hcmsgIT0gUlhSUENfT09CX0NIQUxMRU5HRSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNvbm4gPSBzcC1cXHUwMDNlY2hhbGwuY29ubjtcXG4tXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuLVxcdFxcdGlmICghY29ubi1cXHUwMDNlc2VjdXJpdHktXFx1MDAzZXNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRpZiAocC1cXHUwMDNlYWJvcnRfY29kZSkge1xcbi1cXHRcXHRcXHRyeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIHAtXFx1MDAzZWFib3J0X2NvZGUsIC1FQ09OTkFCT1JURUQsXFxuLVxcdFxcdFxcdFxcdFxcdCByeHJwY19hYm9ydF9yZXNwb25zZV9zZW5kbXNnKTtcXG4tXFx0XFx0XFx0cmV0ID0gMDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cmV0ID0gY29ubi1cXHUwMDNlc2VjdXJpdHktXFx1MDAzZXNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc2tiLCBtc2cpO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0fVxcbi1cXG4tXFx0c3dpdGNoIChza2ItXFx1MDAzZW1hcmspIHtcXG4tXFx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxcbi1cXHRcXHRyeHJwY19wdXRfY29ubmVjdGlvbihzcC1cXHUwMDNlY2hhbGwuY29ubiwgcnhycGNfY29ubl9wdXRfb29iKTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFx0cnhycGNfZnJlZV9za2Ioc2tiLCByeHJwY19za2JfcHV0X29vYik7XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIFNlbmQgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZSBvciByZXNwb25kIHRvIGEgcmVjZWl2ZWQgb3V0LW9mLWJhbmQgbWVzc2FnZS5cXG4tICogLSBjYWxsZXIgZ2l2ZXMgdXMgdGhlIHNvY2tldCBsb2NrXFxuLSAqIC0gdGhlIHNvY2tldCBtYXkgYmUgZWl0aGVyIGEgY2xpZW50IHNvY2tldCBvciBhIHNlcnZlciBzb2NrZXRcXG4tICovXFxuLWludCByeHJwY19zZW5kbXNnX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyBwID0ge307XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRfZW50ZXIoXFxcIlxcXCIpO1xcbi1cXG4tXFx0cmV0ID0gcnhycGNfc2VuZG1zZ19vb2JfY21zZyhtc2csIFxcdTAwMjZwKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gZXJyb3JfcmVsZWFzZV9zb2NrO1xcbi1cXG4tXFx0aWYgKHAuaGF2ZV9vb2JfaWQpXFxuLVxcdFxcdHJldHVybiByeHJwY19yZXNwb25kX3RvX29vYihyeCwgXFx1MDAyNnAsIG1zZyk7XFxuLVxcbi1cXHRyZWxlYXNlX3NvY2soXFx1MDAyNnJ4LVxcdTAwM2Vzayk7XFxuLVxcbi1cXHRzd2l0Y2ggKHAuY29tbWFuZCkge1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0fVxcbi1cXG4tXFx0X2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuLVxcdHJldHVybiByZXQ7XFxuLVxcbi1lcnJvcl9yZWxlYXNlX3NvY2s6XFxuLVxcdHJlbGVhc2Vfc29jayhcXHUwMDI2cngtXFx1MDAzZXNrKTtcXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4tLyoqXFxuLSAqIHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2IgLSBRdWVyeSB0aGUgcGFyYW1ldGVycyBvZiBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlXFxuLSAqIEBvb2I6IFRoZSBtZXNzYWdlIHRvIHF1ZXJ5XFxuLSAqIEBfcGVlcjogV2hlcmUgdG8gcmV0dXJuIHRoZSBwZWVyIHJlY29yZFxcbi0gKiBAX3BlZXJfYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgYXR0YWNoZWQgdG8gYSBwZWVyIHJlY29yZFxcbi0gKlxcbi0gKiBFeHRyYWN0IHVzZWZ1bCBwYXJhbWV0ZXJzIGZyb20gYW4gb3V0LW9mLWJhbmQgbWVzc2FnZS4gIFRoZSBzb3VyY2UgcGVlclxcbi0gKiBwYXJhbWV0ZXJzIGFyZSByZXR1cm5lZCB0aHJvdWdoIHRoZSBhcmd1bWVudCBsaXN0IGFuZCB0aGUgbWVzc2FnZSB0eXBlIGlzXFxuLSAqIHJldHVybmVkLlxcbi0gKlxcbi0gKiBSZXR1cm46XFxuLSAqICogJVJYUlBDX09PQl9DSEFMTEVOR0UgLSBDaGFsbGVuZ2Ugd2FudGluZyBhIHJlc3BvbnNlLlxcbi0gKi9cXG4tZW51bSByeHJwY19vb2JfdHlwZSByeHJwY19rZXJuZWxfcXVlcnlfb29iKHN0cnVjdCBza19idWZmICpvb2IsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihvb2IpO1xcbi1cXHRlbnVtIHJ4cnBjX29vYl90eXBlIHR5cGUgPSBvb2ItXFx1MDAzZW1hcms7XFxuLVxcbi1cXHRzd2l0Y2ggKHR5cGUpIHtcXG4tXFx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxcbi1cXHRcXHQqX3BlZXJcXHRcXHQ9IHNwLVxcdTAwM2VjaGFsbC5jb25uLVxcdTAwM2VwZWVyO1xcbi1cXHRcXHQqX3BlZXJfYXBwZGF0YVxcdD0gc3AtXFx1MDAzZWNoYWxsLmNvbm4tXFx1MDAzZXBlZXItXFx1MDAzZWFwcF9kYXRhO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbi1cXHRcXHQqX3BlZXJcXHRcXHQ9IE5VTEw7XFxuLVxcdFxcdCpfcGVlcl9hcHBkYXRhXFx0PSAwO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIHR5cGU7XFxuLX1cXG4tRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfb29iKTtcXG4tXFxuLS8qKlxcbi0gKiByeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2IgLSBEZXF1ZXVlIGFuZCByZXR1cm4gdGhlIGZyb250IE9PQiBtZXNzYWdlXFxuLSAqIEBzb2NrOiBUaGUgc29ja2V0IHRvIHF1ZXJ5XFxuLSAqIEBfdHlwZTogV2hlcmUgdG8gcmV0dXJuIHRoZSBtZXNzYWdlIHR5cGVcXG4tICpcXG4tICogRGVxdWV1ZSB0aGUgZnJvbnQgT09CIG1lc3NhZ2UsIGlmIHRoZXJlIGlzIG9uZSwgYW5kIHJldHVybiBpdCBhbmRcXG4tICogaXRzIHR5cGUuXFxuLSAqXFxuLSAqIFJldHVybjogVGhlIHNrX2J1ZmYgcmVwcmVzZW50aW5nIHRoZSBPT0IgbWVzc2FnZSBvciAlTlVMTCBpZiB0aGUgcXVldWUgd2FzXFxuLSAqIGVtcHR5Llxcbi0gKi9cXG4tc3RydWN0IHNrX2J1ZmYgKnJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi1cXHRcXHRcXHRcXHRcXHQgZW51bSByeHJwY19vb2JfdHlwZSAqX3R5cGUpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cXHUwMDNlc2spO1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqb29iO1xcbi1cXG4tXFx0b29iID0gc2tiX2RlcXVldWUoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpO1xcbi1cXHRpZiAob29iKVxcbi1cXHRcXHQqX3R5cGUgPSBvb2ItXFx1MDAzZW1hcms7XFxuLVxcdHJldHVybiBvb2I7XFxuLX1cXG4tRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2IpO1xcbi1cXG4tLyoqXFxuLSAqIHJ4cnBjX2tlcm5lbF9mcmVlX29vYiAtIEZyZWUgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZVxcbi0gKiBAb29iOiBUaGUgT09CIG1lc3NhZ2UgdG8gZnJlZVxcbi0gKlxcbi0gKiBGcmVlIGFuIE9PQiBtZXNzYWdlIGFsb25nIHdpdGggYW55IHJlc291cmNlcyBpdCBob2xkcy5cXG4tICovXFxuLXZvaWQgcnhycGNfa2VybmVsX2ZyZWVfb29iKHN0cnVjdCBza19idWZmICpvb2IpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihvb2IpO1xcbi1cXG4tXFx0c3dpdGNoIChvb2ItXFx1MDAzZW1hcmspIHtcXG4tXFx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxcbi1cXHRcXHRyeHJwY19wdXRfY29ubmVjdGlvbihzcC1cXHUwMDNlY2hhbGwuY29ubiwgcnhycGNfY29ubl9wdXRfb29iKTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFxuLVxcdHJ4cnBjX2ZyZWVfc2tiKG9vYiwgcnhycGNfc2tiX3B1dF9wdXJnZV9vb2IpO1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX2ZyZWVfb29iKTtcXG4tXFxuLS8qKlxcbi0gKiByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlIC0gUXVlcnkgdGhlIHBhcmFtZXRlcnMgb2YgYSBjaGFsbGVuZ2VcXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byBxdWVyeVxcbi0gKiBAX3BlZXI6IFdoZXJlIHRvIHJldHVybiB0aGUgcGVlciByZWNvcmRcXG4tICogQF9wZWVyX2FwcGRhdGE6IFRoZSBhcHBsaWNhdGlvbiBkYXRhIGF0dGFjaGVkIHRvIGEgcGVlciByZWNvcmRcXG4tICogQF9zZXJ2aWNlX2lkOiBXaGVyZSB0byByZXR1cm4gdGhlIGNvbm5lY3Rpb24gc2VydmljZSBJRFxcbi0gKiBAX3NlY3VyaXR5X2luZGV4OiBXaGVyZSB0byByZXR1cm4gdGhlIGNvbm5lY3Rpb24gc2VjdXJpdHkgaW5kZXhcXG4tICpcXG4tICogRXh0cmFjdCB1c2VmdWwgcGFyYW1ldGVycyBmcm9tIGEgQ0hBTExFTkdFIG1lc3NhZ2UuXFxuLSAqL1xcbi12b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxcbi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsXFxuLVxcdFxcdFxcdFxcdCAgdTE2ICpfc2VydmljZV9pZCwgdTggKl9zZWN1cml0eV9pbmRleClcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XFxuLVxcbi1cXHQqX3BlZXJcXHRcXHQ9IHNwLVxcdTAwM2VjaGFsbC5jb25uLVxcdTAwM2VwZWVyO1xcbi1cXHQqX3BlZXJfYXBwZGF0YVxcdD0gc3AtXFx1MDAzZWNoYWxsLmNvbm4tXFx1MDAzZXBlZXItXFx1MDAzZWFwcF9kYXRhO1xcbi1cXHQqX3NlcnZpY2VfaWRcXHQ9IHNwLVxcdTAwM2VoZHIuc2VydmljZUlkO1xcbi1cXHQqX3NlY3VyaXR5X2luZGV4ID0gc3AtXFx1MDAzZWhkci5zZWN1cml0eUluZGV4O1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSk7XFxuLVxcbi0vKipcXG4tICogcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UgLSBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHJlamVjdCBhIGNoYWxsZW5nZVxcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIGJlIHJlamVjdGVkXFxuLSAqIEBhYm9ydF9jb2RlOiBUaGUgYWJvcnQgY29kZSB0byBzdGljayBpbnRvIHRoZSBBQk9SVCBwYWNrZXRcXG4tICogQGVycm9yOiBMb2NhbCBlcnJvciB2YWx1ZVxcbi0gKiBAd2h5OiBJbmRpY2F0aW9uIGFzIHRvIHdoeS5cXG4tICpcXG4tICogQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byByZWplY3QgYSBjaGFsbGVuZ2UgYnkgYWJvcnRpbmcgdGhlIGNvbm5lY3Rpb24gaWZcXG4tICogaXQncyBzdGlsbCBpbiBhbiBhYm9ydGFibGUgc3RhdGUuICBUaGUgZXJyb3IgaXMgcmV0dXJuZWQgc28gdGhpcyBmdW5jdGlvblxcbi0gKiBjYW4gYmUgdXNlZCB3aXRoIGEgcmV0dXJuIHN0YXRlbWVudC5cXG4tICpcXG4tICogUmV0dXJuOiBUaGUgJWVycm9yIHBhcmFtZXRlci5cXG4tICovXFxuLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSxcXG4tXFx0XFx0XFx0XFx0ICBpbnQgZXJyb3IsIGVudW0gcnhycGNfYWJvcnRfcmVhc29uIHdoeSlcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XFxuLVxcbi1cXHRfZW50ZXIoXFxcInsleH0sJWQsJWQsJXVcXFwiLCBzcC1cXHUwMDNlaGRyLnNlcmlhbCwgYWJvcnRfY29kZSwgZXJyb3IsIHdoeSk7XFxuLVxcbi1cXHRyeHJwY19hYm9ydF9jb25uKHNwLVxcdTAwM2VjaGFsbC5jb25uLCBOVUxMLCBhYm9ydF9jb2RlLCBlcnJvciwgd2h5KTtcXG4tXFx0cmV0dXJuIGVycm9yO1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UpO1xcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcmVjdm1zZy5jIGIvbmV0L3J4cnBjL3JlY3Ztc2cuY1xcbmluZGV4IGVmY2JhNGIyZTc0ZjBjLi4yODU5YTgwZTE4NzY2MyAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvcmVjdm1zZy5jXFxuKysrIGIvbmV0L3J4cnBjL3JlY3Ztc2cuY1xcbkBAIC0yMTUsNjEgKzIxNSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ191c2VyX2lkKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuIFxcdH1cXG4gfVxcbiBcXG4tLypcXG4tICogRGVhbCB3aXRoIGEgQ0hBTExFTkdFIHBhY2tldC5cXG4tICovXFxuLXN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19jaGFsbGVuZ2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xcbi1cXHRzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiA9IHNwLVxcdTAwM2VjaGFsbC5jb25uO1xcbi1cXG4tXFx0cmV0dXJuIGNvbm4tXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VjaGFsbGVuZ2VfdG9fcmVjdm1zZyhjb25uLCBjaGFsbGVuZ2UsIG1zZyk7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIFByb2Nlc3MgT09CIHBhY2tldHMuICBDYWxsZWQgd2l0aCB0aGUgc29ja2V0IGxvY2tlZC5cXG4tICovXFxuLXN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19vb2Ioc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBmbGFncylcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVxcdTAwM2Vzayk7XFxuLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLVxcdGJvb2wgbmVlZF9yZXNwb25zZSA9IGZhbHNlO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0c2tiID0gc2tiX3BlZWsoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpO1xcbi1cXHRpZiAoIXNrYilcXG4tXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuLVxcdHJ4cnBjX3NlZV9za2Ioc2tiLCByeHJwY19za2Jfc2VlX3JlY3Ztc2cpO1xcbi1cXG4tXFx0cmV0ID0gcHV0X2Ntc2cobXNnLCBTT0xfUlhSUEMsIFJYUlBDX09PQl9JRCwgc2l6ZW9mKHU2NCksXFxuLVxcdFxcdCAgICAgICBcXHUwMDI2c2tiLVxcdTAwM2Vza2JfbXN0YW1wX25zKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHRzd2l0Y2ggKChlbnVtIHJ4cnBjX29vYl90eXBlKXNrYi1cXHUwMDNlbWFyaykge1xcbi1cXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XFxuLVxcdFxcdG5lZWRfcmVzcG9uc2UgPSB0cnVlO1xcbi1cXHRcXHRyZXQgPSByeHJwY19yZWN2bXNnX2NoYWxsZW5nZShzb2NrLCBtc2csIHNrYiwgZmxhZ3MpO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJyZWN2bXNnKCkgY2FuJ3QgcHJvY2VzcyB1bmtub3duIE9PQiB0eXBlICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgIHNrYi1cXHUwMDNlbWFyayk7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIShmbGFncyBcXHUwMDI2IE1TR19QRUVLKSkge1xcbi1cXHRcXHRza2JfdW5saW5rKHNrYiwgXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpO1xcbi1cXHRcXHRpZiAobmVlZF9yZXNwb25zZSlcXG4tXFx0XFx0XFx0cnhycGNfYWRkX3BlbmRpbmdfb29iKHJ4LCBza2IpO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9vb2IpO1xcbi1cXHR9XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuIC8qXFxuICAqIERlbGl2ZXIgbWVzc2FnZXMgdG8gYSBjYWxsLiAgVGhpcyBrZWVwcyBwcm9jZXNzaW5nIHBhY2tldHMgdW50aWwgdGhlIGJ1ZmZlclxcbiAgKiBpcyBmaWxsZWQgYW5kIHdlIGZpbmQgZWl0aGVyIG1vcmUgREFUQSAocmV0dXJucyAwKSBvciB0aGUgZW5kIG9mIHRoZSBEQVRBXFxuQEAgLTI4MSw3ICsyMjYsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG4gXFx0XFx0XFx0ICAgICAgc2l6ZV90IGxlbiwgaW50IGZsYWdzLCBzaXplX3QgKl9vZmZzZXQpXFxuIHtcXG4gXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcDtcXG4tXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cXHUwMDNlc2spO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXHRyeHJwY19zZXFfdCBzZXEgPSAwO1xcbiBcXHRzaXplX3QgcmVtYWluO1xcbkBAIC0zNzYsMTMgKzMyMCw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXG4gXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBNU0dfUEVFSykpXFxuIFxcdFxcdFxcdHJ4cnBjX3JvdGF0ZV9yeF93aW5kb3coY2FsbCk7XFxuLVxcbi1cXHRcXHRpZiAoIXJ4LVxcdTAwM2VhcHBfb3BzIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xcbi1cXHRcXHRcXHR0cmFjZV9yeHJwY19yZWN2ZGF0YShjYWxsLCByeHJwY19yZWN2bXNnX29vYnEsIHNlcSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICByeF9wa3Rfb2Zmc2V0LCByeF9wa3RfbGVuLCByZXQpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBvdXQ6XFxuQEAgLTQxOSw3ICszNTYsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcbiBcXHR0cmFjZV9yeHJwY19yZWN2bXNnKDAsIHJ4cnBjX3JlY3Ztc2dfZW50ZXIsIDApO1xcbiBcXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgKE1TR19PT0IgfCBNU0dfVFJVTkMpKVxcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNU0dfVFJVTkMpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuIFxcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhcXHUwMDI2cngtXFx1MDAzZXNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuQEAgLTQzMCwxNCArMzY3LDEyIEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4gXFx0LyogUmV0dXJuIGltbWVkaWF0ZWx5IGlmIGEgY2xpZW50IHNvY2tldCBoYXMgbm8gb3V0c3RhbmRpbmcgY2FsbHMgKi9cXG4gXFx0aWYgKFJCX0VNUFRZX1JPT1QoXFx1MDAyNnJ4LVxcdTAwM2VjYWxscykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGxpc3RfZW1wdHkoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX3EpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICByeC1cXHUwMDNlc2suc2tfc3RhdGUgIT0gUlhSUENfU0VSVkVSX0xJU1RFTklORykge1xcbiBcXHRcXHRyZWxlYXNlX3NvY2soXFx1MDAyNnJ4LVxcdTAwM2Vzayk7XFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfcSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfb29icSkpIHtcXG4rXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX3EpKSB7XFxuIFxcdFxcdHJldCA9IC1FV09VTERCTE9DSztcXG4gXFx0XFx0aWYgKHRpbWVvID09IDApIHtcXG4gXFx0XFx0XFx0Y2FsbCA9IE5VTEw7XFxuQEAgLTQ1Myw4ICszODgsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gd2FpdF9lcnJvcjtcXG4gXFxuLVxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19xKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xcbitcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfcSkpIHtcXG4gXFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxcbiBcXHRcXHRcXHRcXHRnb3RvIHdhaXRfaW50ZXJydXB0ZWQ7XFxuIFxcdFxcdFxcdHRyYWNlX3J4cnBjX3JlY3Ztc2coMCwgcnhycGNfcmVjdm1zZ193YWl0LCAwKTtcXG5AQCAtNDY0LDE1ICszOTgsNiBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdGdvdG8gdHJ5X2FnYWluO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBEZWFsIHdpdGggT09CIG1lc3NhZ2VzIGJlZm9yZSB3ZSBjb25zaWRlciBnZXR0aW5nIG5vcm1hbCBkYXRhLiAqL1xcbi1cXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfb29icSkpIHtcXG4tXFx0XFx0cmV0ID0gcnhycGNfcmVjdm1zZ19vb2Ioc29jaywgbXNnLCBmbGFncyk7XFxuLVxcdFxcdHJlbGVhc2Vfc29jayhcXHUwMDI2cngtXFx1MDAzZXNrKTtcXG4tXFx0XFx0aWYgKHJldCA9PSAtRUFHQUlOKVxcbi1cXHRcXHRcXHRnb3RvIHRyeV9hZ2FpbjtcXG4tXFx0XFx0Z290byBlcnJvcl90cmFjZTtcXG4tXFx0fVxcbi1cXG4gXFx0LyogRmluZCB0aGUgbmV4dCBjYWxsIGFuZCBkZXF1ZXVlIGl0IGlmIHdlJ3JlIG5vdCBqdXN0IHBlZWtpbmcuICBJZiB3ZVxcbiBcXHQgKiBkbyBkZXF1ZXVlIGl0LCB0aGF0IGNvbWVzIHdpdGggYSByZWYgdGhhdCB3ZSB3aWxsIG5lZWQgdG8gcmVsZWFzZS5cXG4gXFx0ICogV2UgYWxzbyB3YW50IHRvIHdlZWQgb3V0IGNhbGxzIHRoYXQgZ290IHJlcXVldWVkIHdoaWxzdCB3ZSB3ZXJlXFxuQEAgLTQ4Myw4ICs0MDgsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdGNhbGwgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCByeHJwY19jYWxsLCByZWN2bXNnX2xpbmspO1xcbiBcXG4gXFx0aWYgKCFyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBza2JfcXVldWVfZW1wdHkoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfcXVldWUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBza2JfcXVldWVfZW1wdHkoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpKSB7XFxuK1xcdCAgICBza2JfcXVldWVfZW1wdHkoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfcXVldWUpKSB7XFxuIFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfbGluayk7XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jayk7XFxuIFxcdFxcdHJlbGVhc2Vfc29jayhcXHUwMDI2cngtXFx1MDAzZXNrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmNcXG5pbmRleCA3N2E2N2FjZTFkMjQ4MS4uOWFiNzY2ZDVmMGI2YzggMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL3J4Z2suY1xcbisrKyBiL25ldC9yeHJwYy9yeGdrLmNcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXktdHlwZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNja2V5cy91c2VyLXR5cGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImFyLWludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJyeGdrX2NvbW1vbi5oXFxcIlxcbiBcXG5AQCAtNzM0LDM3ICs3MzUsNiBAQCBzdGF0aWMgYm9vbCByeGdrX3ZhbGlkYXRlX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UgLSBRdWVyeSBSeEdLLXNwZWNpZmljIGNoYWxsZW5nZSBwYXJhbWV0ZXJzXFxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgcGFja2V0IHRvIHF1ZXJ5XFxuLSAqXFxuLSAqIFJldHVybjogVGhlIEtlcmJlcm9zIDUgZW5jb2RpbmcgdHlwZSBmb3IgdGhlIGNoYWxsZW5nZWQgY29ubmVjdGlvbi5cXG4tICovXFxuLXUzMiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XFxuLVxcbi1cXHRyZXR1cm4gc3AtXFx1MDAzZWNoYWxsLmNvbm4tXFx1MDAzZXJ4Z2suZW5jdHlwZTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MKHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSk7XFxuLVxcbi0vKlxcbi0gKiBGaWxsIG91dCB0aGUgY29udHJvbCBtZXNzYWdlIHRvIHBhc3MgdG8gdXNlcnNwYWNlIHRvIGluZm9ybSBhYm91dCB0aGVcXG4tICogY2hhbGxlbmdlLlxcbi0gKi9cXG4tc3RhdGljIGludCByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnKVxcbi17XFxuLVxcdHN0cnVjdCByeGdrX2NoYWxsZW5nZSBjaGFsbDtcXG4tXFxuLVxcdGNoYWxsLmJhc2Uuc2VydmljZV9pZFxcdFxcdD0gY29ubi1cXHUwMDNlc2VydmljZV9pZDtcXG4tXFx0Y2hhbGwuYmFzZS5zZWN1cml0eV9pbmRleFxcdD0gY29ubi1cXHUwMDNlc2VjdXJpdHlfaXg7XFxuLVxcdGNoYWxsLmVuY3R5cGVcXHRcXHRcXHQ9IGNvbm4tXFx1MDAzZXJ4Z2suZW5jdHlwZTtcXG4tXFxuLVxcdHJldHVybiBwdXRfY21zZyhtc2csIFNPTF9SWFJQQywgUlhSUENfQ0hBTExFTkdFRCwgc2l6ZW9mKGNoYWxsKSwgXFx1MDAyNmNoYWxsKTtcXG4tfVxcbi1cXG4gLypcXG4gICogSW5zZXJ0IHRoZSByZXF1aXNpdGUgYW1vdW50IG9mIFhEUiBwYWRkaW5nIGZvciB0aGUgbGVuZ3RoIGdpdmVuLlxcbiAgKi9cXG5AQCAtODM3LDcgKzgwNyw3IEBAIHN0YXRpYyBub2lubGluZSBzc2l6ZV90IHJ4Z2tfaW5zZXJ0X3Jlc3BvbnNlX2hlYWRlcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29uXFxuICAqL1xcbiBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICphcHBkYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3BvbnNlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90IG9mZnNldClcXG4ge1xcbkBAIC04NTksMjAgKzgyOSwyMCBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuIFxcbi1cXHRhLmFwcGRhdGFfbGVuID0gaHRvbmwoYXBwZGF0YS1cXHUwMDNlbGVuKTtcXG4rXFx0YS5hcHBkYXRhX2xlbiA9IGh0b25sKGFwcGRhdGEtXFx1MDAzZWRhdGFsZW4pO1xcbiBcXG4gXFx0cmV0ID0gc2tiX3N0b3JlX2JpdHMocmVzcG9uc2UsIG9mZnNldCwgXFx1MDAyNmEsIHNpemVvZihhKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRvZmZzZXQgKz0gc2l6ZW9mKGEpO1xcbiBcXG4tXFx0aWYgKGFwcGRhdGEtXFx1MDAzZWxlbikge1xcbi1cXHRcXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBhcHBkYXRhLVxcdTAwM2VkYXRhLCBhcHBkYXRhLVxcdTAwM2VsZW4pO1xcbitcXHRpZiAoYXBwZGF0YS1cXHUwMDNlZGF0YWxlbikge1xcbitcXHRcXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBhcHBkYXRhLVxcdTAwM2VkYXRhLCBhcHBkYXRhLVxcdTAwM2VkYXRhbGVuKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdG9mZnNldCArPSBhcHBkYXRhLVxcdTAwM2VsZW47XFxuK1xcdFxcdG9mZnNldCArPSBhcHBkYXRhLVxcdTAwM2VkYXRhbGVuO1xcbiBcXG4tXFx0XFx0cmV0ID0gcnhna19wYWRfb3V0KHJlc3BvbnNlLCBhcHBkYXRhLVxcdTAwM2VsZW4sIG9mZnNldCk7XFxuK1xcdFxcdHJldCA9IHJ4Z2tfcGFkX291dChyZXNwb25zZSwgYXBwZGF0YS1cXHUwMDNlZGF0YWxlbiwgb2Zmc2V0KTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdG9mZnNldCArPSByZXQ7XFxuQEAgLTg5MCw3ICs4NjAsNyBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBcXHUwMDI2Yiwgc2l6ZW9mKGIpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdHJldHVybiBzaXplb2YoYSkgKyB4ZHJfcm91bmRfdXAoYXBwZGF0YS1cXHUwMDNlbGVuKSArIHNpemVvZihiKTtcXG4rXFx0cmV0dXJuIHNpemVvZihhKSArIHhkcl9yb3VuZF91cChhcHBkYXRhLVxcdTAwM2VkYXRhbGVuKSArIHNpemVvZihiKTtcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3Qgcnhna19lbmNyeXB0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuQEAgLTkyMyw3ICs4OTMsNyBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2VuY3J5cHRfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gICovXFxuIHN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSlcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKmFwcGRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AsICpyc3A7XFxuIFxcdHN0cnVjdCByeGdrX2NvbnRleHQgKmdrO1xcbkBAIC05MzYsNyArOTA2LDcgQEAgc3RhdGljIGludCByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0aWYgKElTX0VSUihnaykpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGdrKTtcXG4gXFxuLVxcdGF1dGhfbGVuID0gMjAgKyAoNCArIGFwcGRhdGEtXFx1MDAzZWxlbikgKyAxMiArICgxICsgNCkgKiA0O1xcbitcXHRhdXRoX2xlbiA9IDIwICsgKDQgKyBhcHBkYXRhLVxcdTAwM2VkYXRhbGVuKSArIDEyICsgKDEgKyA0KSAqIDQ7XFxuIFxcdGF1dGh4X2xlbiA9IGNyeXB0b19rcmI1X2hvd19tdWNoX2J1ZmZlcihnay1cXHUwMDNla3JiNSwgS1JCNV9FTkNSWVBUX01PREUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGF1dGhfbGVuLCBcXHUwMDI2YXV0aF9vZmZzZXQpO1xcbiBcXHRsZW4gPSBzaXplb2Yoc3RydWN0IHJ4cnBjX3dpcmVfaGVhZGVyKSArXFxuQEAgLTEwMTEsNjYgKzk4MSwzNiBAQCBzdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiAgKiBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHBhY2tldC5cXG4gICovXFxuIHN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSlcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxcbiB7XFxuLVxcdF9lbnRlcihcXFwieyVkLCV4fVxcXCIsIGNvbm4tXFx1MDAzZWRlYnVnX2lkLCBrZXlfc2VyaWFsKGNvbm4tXFx1MDAzZWtleSkpO1xcbitcXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCBkdW1teSA9IHt9LCAqYXBwZGF0YSA9IFxcdTAwMjZkdW1teTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdF9lbnRlcihcXFwieyVkLCV1LCV4LCV4fVxcXCIsXFxuK1xcdCAgICAgICBjb25uLVxcdTAwM2VkZWJ1Z19pZCwgY29ubi1cXHUwMDNlc2VydmljZV9pZCxcXG4rXFx0ICAgICAgIGtleV9zZXJpYWwoY29ubi1cXHUwMDNla2V5KSwga2V5X3NlcmlhbChjb25uLVxcdTAwM2VidW5kbGUtXFx1MDAzZWFwcF9kYXRhKSk7XFxuIFxcbiBcXHRpZiAoa2V5X3ZhbGlkYXRlKGNvbm4tXFx1MDAzZWtleSkgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBSWEdLX0VYUElSRUQsIC1FUFJPVE8sXFxuIFxcdFxcdFxcdFxcdFxcdHJ4Z2tfYWJvcnRfY2hhbGxfa2V5X2V4cGlyZWQpO1xcbiBcXG4tXFx0cmV0dXJuIHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKGNvbm4sIGNoYWxsZW5nZSwgYXBwZGF0YSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZV9ub19hcHBkYXRhKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxcbi17XFxuLVxcdHN0cnVjdCBrcmI1X2J1ZmZlciBhcHBkYXRhID0ge307XFxuLVxcbi1cXHRyZXR1cm4gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShjb25uLCBjaGFsbGVuZ2UsIFxcdTAwMjZhcHBkYXRhKTtcXG4tfVxcbi1cXG4tLyoqXFxuLSAqIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlIC0gUmVzcG9uZCB0byBhIGNoYWxsZW5nZSB3aXRoIGFwcGRhdGFcXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byByZXNwb25kIHRvXFxuLSAqIEBhcHBkYXRhOiBUaGUgYXBwbGljYXRpb24gZGF0YSB0byBpbmNsdWRlIGluIHRoZSBSRVNQT05TRSBhdXRoZW50aWNhdG9yXFxuLSAqXFxuLSAqIEFsbG93IGEga2VybmVsIGFwcGxpY2F0aW9uIHRvIHJlc3BvbmQgdG8gYSBDSEFMTEVOR0Ugd2l0aCBhcHBsaWNhdGlvbiBkYXRhXFxuLSAqIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBSeEdLIFJFU1BPTlNFIEF1dGhlbnRpY2F0b3IuXFxuLSAqXFxuLSAqIFJldHVybjogJTAgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4tICovXFxuLWludCByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSlcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKmNzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xcbi1cXG4tXFx0cmV0dXJuIHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UoY3NwLVxcdTAwM2VjaGFsbC5jb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpO1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UpO1xcbi1cXG4tLypcXG4tICogUGFyc2Ugc2VuZG1zZygpIGNvbnRyb2wgbWVzc2FnZSBhbmQgcmVzcG9uZCB0byBjaGFsbGVuZ2UuICBXZSBuZWVkIHRvIHNlZSBpZlxcbi0gKiB0aGVyZSdzIGFuIGFwcGRhdGEgdG8gZmlzaCBvdXQuXFxuLSAqL1xcbi1zdGF0aWMgaW50IHJ4Z2tfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZylcXG4te1xcbi1cXHRzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9O1xcbi1cXHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcXG4tXFxuLVxcdGZvcl9lYWNoX2Ntc2doZHIoY21zZywgbXNnKSB7XFxuLVxcdFxcdGlmIChjbXNnLVxcdTAwM2VjbXNnX2xldmVsICE9IFNPTF9SWFJQQyB8fFxcbi1cXHRcXHQgICAgY21zZy1cXHUwMDNlY21zZ190eXBlICE9IFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aWYgKGFwcGRhdGEuZGF0YSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdGFwcGRhdGEuZGF0YSA9IENNU0dfREFUQShjbXNnKTtcXG4tXFx0XFx0YXBwZGF0YS5sZW4gPSBjbXNnLVxcdTAwM2VjbXNnX2xlbiAtIHNpemVvZihzdHJ1Y3QgY21zZ2hkcik7XFxuK1xcdGlmIChjb25uLVxcdTAwM2VidW5kbGUtXFx1MDAzZWFwcF9kYXRhKSB7XFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0XFx0YXBwZGF0YSA9IChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKVxcbitcXHRcXHRcXHR1c2VyX2tleV9wYXlsb2FkX3JjdShjb25uLVxcdTAwM2VidW5kbGUtXFx1MDAzZWFwcF9kYXRhKTtcXG4rXFx0XFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNmFwcGRhdGEtXFx1MDAzZXJlZikpXFxuK1xcdFxcdFxcdGFwcGRhdGEgPSBOVUxMO1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0aWYgKCFhcHBkYXRhKVxcbitcXHRcXHRcXHRyZXR1cm4gcnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBSWEdLX0VYUElSRUQsIC1FS0VZUkVWT0tFRCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cnhna19hYm9ydF9jaGFsbF9rZXlfZXhwaXJlZCk7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UsIFxcdTAwMjZhcHBkYXRhKTtcXG4rXFx0cmV0ID0gcnhna19jb25zdHJ1Y3RfcmVzcG9uc2UoY29ubiwgY2hhbGxlbmdlLCBhcHBkYXRhKTtcXG4rXFxuK1xcdGlmIChhcHBkYXRhICE9IFxcdTAwMjZkdW1teSlcXG4rXFx0XFx0cHV0X3VzZXJfa2V5X3BheWxvYWQoYXBwZGF0YSk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTEzNDYsOSArMTI4Niw3IEBAIGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGdrX3lmcyA9IHtcXG4gXFx0LmZyZWVfY2FsbF9jcnlwdG9cXHRcXHQ9IHJ4Z2tfZnJlZV9jYWxsX2NyeXB0byxcXG4gXFx0Lmlzc3VlX2NoYWxsZW5nZVxcdFxcdD0gcnhna19pc3N1ZV9jaGFsbGVuZ2UsXFxuIFxcdC52YWxpZGF0ZV9jaGFsbGVuZ2VcXHRcXHQ9IHJ4Z2tfdmFsaWRhdGVfY2hhbGxlbmdlLFxcbi1cXHQuY2hhbGxlbmdlX3RvX3JlY3Ztc2dcXHRcXHQ9IHJ4Z2tfY2hhbGxlbmdlX3RvX3JlY3Ztc2csXFxuLVxcdC5zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlXFx0PSByeGdrX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UsXFxuLVxcdC5yZXNwb25kX3RvX2NoYWxsZW5nZVxcdFxcdD0gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZV9ub19hcHBkYXRhLFxcbitcXHQucmVzcG9uZF90b19jaGFsbGVuZ2VcXHRcXHQ9IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UsXFxuIFxcdC52ZXJpZnlfcmVzcG9uc2VcXHRcXHQ9IHJ4Z2tfdmVyaWZ5X3Jlc3BvbnNlLFxcbiBcXHQuY2xlYXJcXHRcXHRcXHRcXHQ9IHJ4Z2tfY2xlYXIsXFxuIFxcdC5kZWZhdWx0X2RlY29kZV90aWNrZXRcXHRcXHQ9IHJ4Z2tfeWZzX2RlY29kZV90aWNrZXQsXFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeGthZC5jIGIvbmV0L3J4cnBjL3J4a2FkLmNcXG5pbmRleCBjYTlmMGU4MmNiOWFjNy4uZTU1YmZjYTEwZTFhOTQgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL3J4a2FkLmNcXG4rKysgYi9uZXQvcnhycGMvcnhrYWQuY1xcbkBAIC03NDgsMzIgKzc0OCw2IEBAIHN0YXRpYyBpbnQgcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFJ4S0FEIGRvZXMgYXV0b21hdGljIHJlc3BvbnNlIG9ubHkgYXMgdGhlcmUncyBub3RoaW5nIHRvIG1hbmFnZSB0aGF0IGlzbid0XFxuLSAqIGFscmVhZHkgaW4gdGhlIGtleS5cXG4tICovXFxuLXN0YXRpYyBpbnQgcnhrYWRfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpXFxuLXtcXG4tXFx0cmV0dXJuIC1FSU5WQUw7XFxuLX1cXG4tXFxuLS8qKlxcbi0gKiByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UgLSBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHdpdGggYXBwZGF0YVxcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHJlc3BvbmQgdG9cXG4tICpcXG4tICogQWxsb3cgYSBrZXJuZWwgYXBwbGljYXRpb24gdG8gcmVzcG9uZCB0byBhIENIQUxMRU5HRS5cXG4tICpcXG4tICogUmV0dXJuOiAlMCBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxcbi0gKi9cXG4taW50IHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqY3NwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XFxuLVxcbi1cXHRyZXR1cm4gcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2UoY3NwLVxcdTAwM2VjaGFsbC5jb25uLCBjaGFsbGVuZ2UpO1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKTtcXG4tXFxuIC8qIERlY3J5cHQgZGF0YSBpbi1wbGFjZSB1c2luZyBERVMtUENCQy4gIEBsZW4gbXVzdCBiZSBhIG11bHRpcGxlIG9mIDguICovXFxuIFZJU0lCTEVfSUZfS1VOSVQgdm9pZCBkZXNfcGNiY19kZWNyeXB0X2lucGxhY2UoY29uc3Qgc3RydWN0IGRlc19jdHggKmtleSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIF9fbGU2NCBpdiwgdTggKmRhdGEsIHNpemVfdCBsZW4pXFxuQEAgLTExMzQsNyArMTEwOCw2IEBAIGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGthZCA9IHtcXG4gXFx0LmZyZWVfY2FsbF9jcnlwdG9cXHRcXHQ9IHJ4a2FkX2ZyZWVfY2FsbF9jcnlwdG8sXFxuIFxcdC5pc3N1ZV9jaGFsbGVuZ2VcXHRcXHQ9IHJ4a2FkX2lzc3VlX2NoYWxsZW5nZSxcXG4gXFx0LnZhbGlkYXRlX2NoYWxsZW5nZVxcdFxcdD0gcnhrYWRfdmFsaWRhdGVfY2hhbGxlbmdlLFxcbi1cXHQuc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZVxcdD0gcnhrYWRfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSxcXG4gXFx0LnJlc3BvbmRfdG9fY2hhbGxlbmdlXFx0XFx0PSByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZSxcXG4gXFx0LnZlcmlmeV9yZXNwb25zZVxcdFxcdD0gcnhrYWRfdmVyaWZ5X3Jlc3BvbnNlLFxcbiBcXHQuY2xlYXJcXHRcXHRcXHRcXHQ9IHJ4a2FkX2NsZWFyLFxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvc2VuZG1zZy5jIGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xcbmluZGV4IGVkMmM5YTUxMDA1YWRlLi4yMjVlZWM0MTBiZWRjOCAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvc2VuZG1zZy5jXFxuKysrIGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xcbkBAIC00NTMsOSArNDUzLDYgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxcbiBcXG4gc3VjY2VzczpcXG4gXFx0cmV0ID0gY29waWVkO1xcbi1cXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgY2FsbC1cXHUwMDNlZXJyb3IgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXQgPSBjYWxsLVxcdTAwM2VlcnJvcjtcXG4gb3V0OlxcbiBcXHRjYWxsLVxcdTAwM2V0eF9wZW5kaW5nID0gdHhiO1xcbiBcXHRfbGVhdmUoXFxcIiA9ICVkXFxcIiwgcmV0KTtcXG5AQCAtNDY3LDggKzQ2NCwxNCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuIFxcdHJldHVybiBjYWxsLVxcdTAwM2VlcnJvcjtcXG4gXFxuIG1heWJlX2Vycm9yOlxcbi1cXHRpZiAoY29waWVkKVxcbitcXHRpZiAoY29waWVkKSB7XFxuK1xcdFxcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBjYWxsLVxcdTAwM2VlcnJvciBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0cmV0ID0gY2FsbC1cXHUwMDNlZXJyb3I7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuIFxcdFxcdGdvdG8gc3VjY2VzcztcXG4rXFx0fVxcbiBcXHRnb3RvIG91dDtcXG4gXFxuIGVmYXVsdDpcXG5AQCAtNTAzLDYgKzUwNiw4IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4gc3RhdGljIGludCByeHJwY19zZW5kbXNnX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfc2VuZF9wYXJhbXMgKnApXFxuIHtcXG4gXFx0c3RydWN0IGNtc2doZHIgKmNtc2c7XFxuK1xcdGtleV9zZXJpYWxfdCBrZXlfaWQ7XFxuK1xcdGtleV9yZWZfdCBrZXk7XFxuIFxcdGJvb2wgZ290X3VzZXJfSUQgPSBmYWxzZTtcXG4gXFx0aW50IGxlbjtcXG4gXFxuQEAgLTU4Nyw2ICs1OTIsMTggQEAgc3RhdGljIGludCByeHJwY19zZW5kbXNnX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfc2VuZF9wYXJhbXMgKnApXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuK1xcdFxcdGNhc2UgUlhSUENfUkVTUE9OU0VfQVBQREFUQTpcXG4rXFx0XFx0XFx0aWYgKGxlbiAhPSBzaXplb2Yoa2V5X3NlcmlhbF90KSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdGlmIChwLVxcdTAwM2VjYWxsLmFwcF9kYXRhKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0a2V5X2lkID0gKihrZXlfc2VyaWFsX3QgKilDTVNHX0RBVEEoY21zZyk7XFxuK1xcdFxcdFxcdGtleSA9IGxvb2t1cF91c2VyX2tleShrZXlfaWQsIDAsIEtFWV9ORUVEX1NFQVJDSCk7XFxuK1xcdFxcdFxcdGlmIChJU19FUlIoa2V5KSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoa2V5KTtcXG4rXFx0XFx0XFx0cC1cXHUwMDNlY2FsbC5hcHBfZGF0YSA9IGtleV9yZWZfdG9fcHRyKGtleSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG5AQCAtNzg2LDYgKzgwMyw3IEBAIGludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbiBcXG4gZXJyb3JfcmVsZWFzZV9zb2NrOlxcbiBcXHRyZWxlYXNlX3NvY2soXFx1MDAyNnJ4LVxcdTAwM2Vzayk7XFxuK1xcdGtleV9wdXQocC5jYWxsLmFwcF9kYXRhKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3NlcnZlcl9rZXkuYyBiL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmNcXG5pbmRleCAzZWZlMTA0YjE5MzBjYi4uZmM2ZjQ3OGUxNzYyYTcgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL3NlcnZlcl9rZXkuY1xcbisrKyBiL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmNcXG5AQCAtMTczLDQzICsxNzMsMyBAQCBpbnQgcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBrZXkgKmtleXJpbmcpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChyeHJwY19zb2NrX3NldF9zZWN1cml0eV9rZXlyaW5nKTtcXG4tXFxuLS8qKlxcbi0gKiByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2UgLSBTZXQgdGhlIG1hbmFnZS1yZXNwb25zZSBmbGFnIGZvciBhIGtlcm5lbCBzZXJ2aWNlXFxuLSAqIEBzazogVGhlIHNvY2tldCB0byBzZXQgdGhlIGtleXJpbmcgb25cXG4tICogQHNldDogVHJ1ZSB0byBzZXQsIGZhbHNlIHRvIGNsZWFyIHRoZSBmbGFnXFxuLSAqXFxuLSAqIFNldCB0aGUgZmxhZyBvbiBhbiByeHJwYyBzb2NrZXQgdG8gc2F5IHRoYXQgdGhlIGNhbGxlciB3YW50cyB0byBtYW5hZ2UgdGhlXFxuLSAqIFJFU1BPTlNFIHBhY2tldCBhbmQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGl0IG1heSBjb250YWluLiAgU2V0dGluZyB0aGlzXFxuLSAqIG1lYW5zIHRoYXQgcmVjdm1zZygpIHdpbGwgcmV0dXJuIG1lc3NhZ2VzIHdpdGggUlhSUENfQ0hBTExFTkdFRCBpbiB0aGVcXG4tICogY29udHJvbCBtZXNzYWdlIGJ1ZmZlciBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFsbGVuZ2UuXFxuLSAqXFxuLSAqIFRoZSB1c2VyIHNob3VsZCByZXNwb25kIHRvIHRoZSBjaGFsbGVuZ2UgYnkgcGFzc2luZyBSWFJQQ19SRVNQT05EIG9yXFxuLSAqIFJYUlBDX1JFU1BPTkRfQUJPUlQgY29udHJvbCBtZXNzYWdlcyB3aXRoIHNlbmRtc2coKSB0byB0aGUgc2FtZSBjYWxsLlxcbi0gKiBTdXBwbGVtZW50YXJ5IGNvbnRyb2wgbWVzc2FnZXMsIHN1Y2ggYXMgUlhSUENfUkVTUF9SWEdLX0FQUERBVEEsIG1heSBiZVxcbi0gKiBpbmNsdWRlZCB0byBpbmRpY2F0ZSB0aGUgcGFydHMgdGhlIHVzZXIgd2FudHMgdG8gc3VwcGx5Llxcbi0gKlxcbi0gKiBUaGUgc2VydmVyIHdpbGwgYmUgcGFzc2VkIHRoZSByZXNwb25zZSBkYXRhIHdpdGggYSBSWFJQQ19SRVNQT05ERUQgY29udHJvbFxcbi0gKiBtZXNzYWdlIHdoZW4gaXQgZ2V0cyB0aGUgZmlyc3QgZGF0YSBmcm9tIGVhY2ggY2FsbC5cXG4tICpcXG4tICogTm90ZSB0aGF0IHRoaXMgaXMgb25seSBob25vdXJlZCBieSBzZWN1cml0eSBjbGFzc2VzIHRoYXQgbmVlZCBhdXhpbGlhcnkgZGF0YVxcbi0gKiAoZS5nLiBSeEdLKS4gIFRob3NlIHRoYXQgZG9uJ3Qgb2ZmZXIgdGhlIGZhY2lsaXR5IChlLmcuIFJ4S0FEKSByZXNwb25kXFxuLSAqIHdpdGhvdXQgY29uc3VsdGluZyB1c2Vyc3BhY2UuXFxuLSAqXFxuLSAqIFJldHVybjogVGhlIHByZXZpb3VzIHNldHRpbmcuXFxuLSAqL1xcbi1pbnQgcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzZXQpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc2spO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0bG9ja19zb2NrKHNrKTtcXG4tXFx0cmV0ID0gISF0ZXN0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXFx1MDAyNnJ4LVxcdTAwM2VmbGFncyk7XFxuLVxcdGlmIChzZXQpXFxuLVxcdFxcdHNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFxcdTAwMjZyeC1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdGNsZWFyX2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXFx1MDAyNnJ4LVxcdTAwM2VmbGFncyk7XFxuLVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tRVhQT1JUX1NZTUJPTChyeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2UpO1xcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jIGIvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuY1xcbmluZGV4IDZmODhiNTA3ZjkyNzkxLi45MGMxYmQ1ZDdkZmVjZiAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXFxuKysrIGIvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuY1xcbkBAIC02Nyw2ICs2Nyw3IEBAIGludCB1c2VyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuIFxcdHVwYXlsb2FkID0ga21hbGxvY19mbGV4KCp1cGF5bG9hZCwgZGF0YSwgZGF0YWxlbik7XFxuIFxcdGlmICghdXBheWxvYWQpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnVwYXlsb2FkLVxcdTAwM2VyZWYsIDEpO1xcbiBcXG4gXFx0LyogYXR0YWNoIHRoZSBkYXRhICovXFxuIFxcdHByZXAtXFx1MDAzZXF1b3RhbGVuID0gZGF0YWxlbjtcXG5AQCAtODgsMTIgKzg5LDIyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfZnJlZV9wcmVwYXJzZSk7XFxuIFxcbiBzdGF0aWMgdm9pZCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbiB7XFxuLVxcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkO1xcbitcXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZCA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCwgcmN1KTtcXG4gXFxuLVxcdHBheWxvYWQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQsIHJjdSk7XFxuIFxcdGtmcmVlX3NlbnNpdGl2ZShwYXlsb2FkKTtcXG4gfVxcbiBcXG4rLypcXG4rICogRnJlZSBhIHVzZXIgZGVmaW5lZCBrZXkgcGF5bG9hZC5cXG4rICovXFxuK3ZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpXFxuK3tcXG4rXFx0aWYgKHBheWxvYWQgXFx1MDAyNlxcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZwYXlsb2FkLVxcdTAwM2VyZWYpKVxcbitcXHRcXHRjYWxsX3JjdShcXHUwMDI2cGF5bG9hZC1cXHUwMDNlcmN1LCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3UpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHB1dF91c2VyX2tleV9wYXlsb2FkKTtcXG4rXFxuIC8qXFxuICAqIHVwZGF0ZSBhIHVzZXIgZGVmaW5lZCBrZXlcXG4gICogLSB0aGUga2V5J3Mgc2VtYXBob3JlIGlzIHdyaXRlLWxvY2tlZFxcbkBAIC0xMTUsOCArMTI2LDcgQEAgaW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcXG4gXFx0cmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgcHJlcC1cXHUwMDNlcGF5bG9hZC5kYXRhWzBdKTtcXG4gXFx0cHJlcC1cXHUwMDNlcGF5bG9hZC5kYXRhWzBdID0gTlVMTDtcXG4gXFxuLVxcdGlmICh6YXApXFxuLVxcdFxcdGNhbGxfcmN1KFxcdTAwMjZ6YXAtXFx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcXG4rXFx0cHV0X3VzZXJfa2V5X3BheWxvYWQoemFwKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX3VwZGF0ZSk7XFxuQEAgLTEzNCw3ICsxNDQsNyBAQCB2b2lkIHVzZXJfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSlcXG4gXFxuIFxcdGlmICh1cGF5bG9hZCkge1xcbiBcXHRcXHRyY3VfYXNzaWduX2tleXBvaW50ZXIoa2V5LCBOVUxMKTtcXG4tXFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnVwYXlsb2FkLVxcdTAwM2VyY3UsIHVzZXJfZnJlZV9wYXlsb2FkX3JjdSk7XFxuK1xcdFxcdHB1dF91c2VyX2tleV9wYXlsb2FkKHVwYXlsb2FkKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0xNDcsOSArMTU3LDggQEAgdm9pZCB1c2VyX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KVxcbiB7XFxuIFxcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1cGF5bG9hZCA9IGtleS1cXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xcbiBcXG4tXFx0a2ZyZWVfc2Vuc2l0aXZlKHVwYXlsb2FkKTtcXG4rXFx0cHV0X3VzZXJfa2V5X3BheWxvYWQodXBheWxvYWQpO1xcbiB9XFxuLVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2Rlc3Ryb3kpO1xcbiBcXG4gLypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6NTM6NTMuODAwNTUwOTY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU1NDAwMTM1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiUlhLQURcIixcbiAgICBcIlJYR0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhXCIsXG4gICAgXCJhZnNfY3JlYXRlX3lmc19jbV90b2tlblwiLFxuICAgIFwicnhna19yZXNwb25kX3RvX2NoYWxsZW5nZVwiLFxuICAgIFwicnhycGNfc2VuZG1zZ19jbXNnXCIsXG4gICAgXCJwdXRfdXNlcl9rZXlfcGF5bG9hZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRlMgYW5kIFJ4UlBDIHN1YnN5c3RlbXMgdG8gaGFuZGxlIFJ4R0sgYXBwbGljYXRpb24gZGF0YSBpbnRlcm5hbGx5IHJhdGhlciB0aGFuIHJlbHlpbmcgb24gdXNlcnNwYWNlIE9PQiBtZXNzYWdlcy4gSXQgaW50cm9kdWNlcyBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAgdG8gZ2VuZXJhdGUgdGhlIGFwcCBkYXRhIGFuZCBwYXNzZXMgaXQgdG8gYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29yayBhbmQgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IGFsdGVycyBleGVjdXRpb24gZmxvdyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNmIxZTJkOWUxMjM5OTRhYjJkN2FhODg4NGUzNmZlOGYzNDMwYzU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxNzo1Mzo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jbV9zZWN1cml0eS5jIGIvZnMvYWZzL2NtX3NlY3VyaXR5LmNcbmluZGV4IDEwMzE2OGM3MGRkNGRmLi5kYjJhM2IzMGYwMjA5NCAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXG4rKysgYi9mcy9hZnMvY21fc2VjdXJpdHkuY1xuQEAgLTYsNyArNiw5IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2V5LXR5cGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2NyeXB0by9rcmI1LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NrZXlzL3VzZXItdHlwZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbiAjaW5jbHVkZSBcImFmc19jbS5oXCJcbiAjaW5jbHVkZSBcImFmc19mcy5oXCJcbkBAIC0xOSw5NyArMjEsNjYgQEBcbiAjZGVmaW5lIHhkcl9sZW5fb2JqZWN0KHgpICg0ICsgcm91bmRfdXAoKHgpLCBzaXplb2YoX19iZTMyKSkpXG4gXG4gI2lmZGVmIENPTkZJR19SWEdLXG4tc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcik7XG4rc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCB1MzIga3JiNV9lbmN0eXBlKTtcbiAjZW5kaWZcbiBcbiAvKlxuLSAqIFJlc3BvbmQgdG8gYW4gUnhHSyBjaGFsbGVuZ2UsIGFkZGluZyBhcHBkYXRhLlxuKyAqIENyZWF0ZSB0aGUgYXBwbGljYXRpb24gZGF0YSB0byBnbyBpbiBhIFJFU1BPTlNFIHBhY2tldCBhIHNlcnZlcidzIENIQUxMRU5HRVxuKyAqIGZyb20gdGhlIHBhcmFtZXRlcnMgY29udGFpbmVkIGluIGEga2V5LiAgVGhlIGtleSBzcGVjaWZpZXMgdGhlIHNlY3VyaXR5XG4rICogaW5kZXggYW5kIG90aGVyIGFwcHJvcHJpYXRlIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZW5jb2RpbmcgdHlwZSBmb3IgUnhHSy5cbiAgKi9cbi1zdGF0aWMgaW50IGFmc19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxuK2ludCBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBrZXkgKmtleSlcbiB7XG4tI2lmZGVmIENPTkZJR19SWEdLXG4tXHRzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9O1xuLVx0c3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcjtcbi0jZW5kaWZcbi1cdHN0cnVjdCByeHJwY19wZWVyICpwZWVyO1xuLVx0dW5zaWduZWQgbG9uZyBwZWVyX2RhdGE7XG4tXHR1MTYgc2VydmljZV9pZDtcbitcdHUzMiBrcmI1X2VuY3R5cGU7XG4rXHRpbnQgcmV0O1xuIFx0dTggc2VjdXJpdHlfaW5kZXg7XG4gXG4tXHRyeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSwgXHUwMDI2cGVlciwgXHUwMDI2cGVlcl9kYXRhLFxuLVx0XHRcdFx0ICAgICBcdTAwMjZzZXJ2aWNlX2lkLCBcdTAwMjZzZWN1cml0eV9pbmRleCk7XG4tXG4tXHRfZW50ZXIoXCIldSwldVwiLCBzZXJ2aWNlX2lkLCBzZWN1cml0eV9pbmRleCk7XG4tXG4tXHRzd2l0Y2ggKHNlcnZpY2VfaWQpIHtcbi1cdFx0LyogV2UgZG9uJ3Qgc2VuZCBDTV9TRVJWSUNFIFJQQ3MsIHNvIGRvbid0IGV4cGVjdCBhIGNoYWxsZW5nZVxuLVx0XHQgKiB0aGVyZWZyb20uXG4tXHRcdCAqL1xuLVx0Y2FzZSBGU19TRVJWSUNFOlxuLVx0Y2FzZSBWTF9TRVJWSUNFOlxuLVx0Y2FzZSBZRlNfRlNfU0VSVklDRTpcbi1cdGNhc2UgWUZTX1ZMX1NFUlZJQ0U6XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0cHJfd2FybihcIkNhbid0IHJlc3BvbmQgdG8gdW5rbm93biBjaGFsbGVuZ2UgJXU6JXVcIixcbi1cdFx0XHRzZXJ2aWNlX2lkLCBzZWN1cml0eV9pbmRleCk7XG4tXHRcdHJldHVybiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFJYX1VTRVJfQUJPUlQsIC1FUFJPVE8sXG4tXHRcdFx0XHRcdFx0ICAgICBhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzKTtcbi1cdH1cbitcdGlmICgha2V5KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFJlYWQgQVBQREFUQSBmbGFnIGJlZm9yZSBjbV9yeGdrX2FwcGRhdGEgKi9cbitcdGlmICh0ZXN0X2JpdF9hY3F1aXJlKEFGU19TRVJWRVJfRkxfQVBQREFUQSwgXHUwMDI2c2VydmVyLVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyeHJwY19rZXJuZWxfcXVlcnlfa2V5KGtleSwgXHUwMDI2c2VjdXJpdHlfaW5kZXgsIFx1MDAyNmtyYjVfZW5jdHlwZSk7XG4rXG4rXHRfZW50ZXIoXCIldSwldVwiLCBzZWN1cml0eV9pbmRleCwga3JiNV9lbmN0eXBlKTtcbiBcbi1cdHN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHtcbitcdHJldCA9IDA7XG4rXHRtdXRleF9sb2NrKFx1MDAyNnNlcnZlci1cdTAwM2VjbV90b2tlbl9sb2NrKTtcbitcbitcdC8qIFJlYWQgQVBQREFUQSBmbGFnIGJlZm9yZSBjbV9yeGdrX2FwcGRhdGEgKi9cbitcdGlmICghdGVzdF9iaXRfYWNxdWlyZShBRlNfU0VSVkVSX0ZMX0FQUERBVEEsIFx1MDAyNnNlcnZlci1cdTAwM2VmbGFncykpIHtcbitcdFx0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xuK1x0XHRjYXNlIDA6XG4rXHRcdFx0YnJlYWs7XG4gI2lmZGVmIENPTkZJR19SWEtBRFxuLVx0Y2FzZSBSWFJQQ19TRUNVUklUWV9SWEtBRDpcbi1cdFx0cmV0dXJuIHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UpO1xuK1x0XHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOlxuK1x0XHRcdHNldF9iaXQoQUZTX1NFUlZFUl9GTF9BUFBEQVRBLCBcdTAwMjZzZXJ2ZXItXHUwMDNlZmxhZ3MpO1xuK1x0XHRcdGJyZWFrO1xuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfUlhHS1xuLVx0Y2FzZSBSWFJQQ19TRUNVUklUWV9SWEdLOlxuLVx0XHRyZXR1cm4gcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlLCBcdTAwMjZhcHBkYXRhKTtcbi1cbi1cdGNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6XG4tXHRcdHN3aXRjaCAoc2VydmljZV9pZCkge1xuLVx0XHRjYXNlIEZTX1NFUlZJQ0U6XG4tXHRcdGNhc2UgWUZTX0ZTX1NFUlZJQ0U6XG4tXHRcdFx0c2VydmVyID0gKHN0cnVjdCBhZnNfc2VydmVyICopcGVlcl9kYXRhO1xuLVx0XHRcdGlmICghc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKSB7XG4tXHRcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnNlcnZlci1cdTAwM2VjbV90b2tlbl9sb2NrKTtcbi1cdFx0XHRcdGlmICghc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKVxuLVx0XHRcdFx0XHRhZnNfY3JlYXRlX3lmc19jbV90b2tlbihjaGFsbGVuZ2UsIHNlcnZlcik7XG4tXHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2c2VydmVyLVx1MDAzZWNtX3Rva2VuX2xvY2spO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKVxuLVx0XHRcdFx0YXBwZGF0YSA9IHNlcnZlci1cdTAwM2VjbV9yeGdrX2FwcGRhdGE7XG4rXHRcdGNhc2UgUlhSUENfU0VDVVJJVFlfUlhHSzpcbitcdFx0XHRzZXRfYml0KEFGU19TRVJWRVJfRkxfQVBQREFUQSwgXHUwMDI2c2VydmVyLVx1MDAzZWZsYWdzKTtcbiBcdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRyZXR1cm4gcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlLCBcdTAwMjZhcHBkYXRhKTtcbi0jZW5kaWZcbiBcbi1cdGRlZmF1bHQ6XG4tXHRcdHJldHVybiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFJYX1VTRVJfQUJPUlQsIC1FUFJPVE8sXG4tXHRcdFx0XHRcdFx0ICAgICBhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzKTtcbi1cdH1cbi19XG4rXHRcdGNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6XG4rXHRcdFx0cmV0ID0gYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc2VydmVyLCBrcmI1X2VuY3R5cGUpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRzZXRfYml0KEFGU19TRVJWRVJfRkxfQVBQREFUQSwgXHUwMDI2c2VydmVyLVx1MDAzZWZsYWdzKTtcbitcdFx0XHRicmVhaztcbisjZW5kaWZcbiBcbi0vKlxuLSAqIFByb2Nlc3MgdGhlIE9PQiBtZXNzYWdlIHF1ZXVlLCBwcm9jZXNzaW5nIGNoYWxsZW5nZSBwYWNrZXRzLlxuLSAqL1xuLXZvaWQgYWZzX3Byb2Nlc3Nfb29iX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi17XG4tXHRzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZnNfbmV0LCByeF9vb2Jfd29yayk7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqb29iO1xuLVx0ZW51bSByeHJwY19vb2JfdHlwZSB0eXBlO1xuLVxuLVx0d2hpbGUgKFJFQURfT05DRShuZXQtXHUwMDNlbGl2ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgKG9vYiA9IHJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYihuZXQtXHUwMDNlc29ja2V0LCBcdTAwMjZ0eXBlKSkpIHtcbi1cdFx0c3dpdGNoICh0eXBlKSB7XG4tXHRcdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcbi1cdFx0XHRhZnNfcmVzcG9uZF90b19jaGFsbGVuZ2Uob29iKTtcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRXQVJOX09OX09OQ0UoMSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbi1cdFx0cnhycGNfa2VybmVsX2ZyZWVfb29iKG9vYik7XG4gXHR9XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2c2VydmVyLVx1MDAzZWNtX3Rva2VuX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19SWEdLXG5AQCAtMTc3LDM3ICsxNDgsMzQgQEAgaW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldClcbiAvKlxuICAqIENyZWF0ZSBhbiBZRlMgUnhHSyBHU1MgdG9rZW4gdG8gdXNlIGFzIGEgdGlja2V0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZXNlcnZlci5cbiAgKi9cbi1zdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyKVxuK3N0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGVuY3R5cGUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY29ubl9rcmI1LCAqdG9rZW5fa3JiNTtcbiBcdGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqdG9rZW5fa2V5O1xuIFx0c3RydWN0IGNyeXB0b19hZWFkICphZWFkO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IHNnO1xuIFx0c3RydWN0IGFmc19uZXQgKm5ldCA9IHNlcnZlci1cdTAwM2VjZWxsLVx1MDAzZW5ldDtcbi1cdGNvbnN0IHN0cnVjdCBrZXkgKmtleSA9IG5ldC1cdTAwM2Vmc19jbV90b2tlbl9rZXk7XG4rXHRjb25zdCBzdHJ1Y3Qga2V5ICpjbV9rZXkgPSBuZXQtXHUwMDNlZnNfY21fdG9rZW5fa2V5O1xuK1x0c3RydWN0IGtleSAqYXBwZGF0YV9rZXkgPSBOVUxMO1xuIFx0c2l6ZV90IGtleXNpemUsIHV1aWRzaXplLCBhdXRoc2l6ZSwgdG9rc2l6ZSwgZW5jc2l6ZSwgY29udHNpemUsIGFkYXRhc2l6ZSwgb2Zmc2V0O1xuIFx0X19iZTMyIGNhcHNbMV0gPSB7XG4gXHRcdFswXSA9IGh0b25sKEFGU19DQVBfRVJST1JfVFJBTlNMQVRJT04pLFxuIFx0fTtcbiBcdF9fYmUzMiAqeGRyO1xuIFx0dm9pZCAqYXBwZGF0YSwgKkswLCAqZW5jYmFzZTtcbi1cdHUzMiBlbmN0eXBlO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICgha2V5KVxuK1x0aWYgKCFjbV9rZXkpXG4gXHRcdHJldHVybiAtRU5PS0VZO1xuIFxuIFx0LyogQXNzdW1lIHRoYXQgdGhlIGZpbGVzZXJ2ZXIgaXMgaGFwcHkgdG8gdXNlIHRoZSBzYW1lIGVuY29kaW5nIHR5cGUgYXNcbiBcdCAqIHdlIHdlcmUgdG9sZCB0byB1c2UgYnkgdGhlIHRva2VuIG9idGFpbmVkIGJ5IHRoZSB1c2VyLlxuIFx0ICovXG4tXHRlbmN0eXBlID0gcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSk7XG4tXG4gXHRjb25uX2tyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZW5jdHlwZSk7XG4gXHRpZiAoIWNvbm5fa3JiNSlcbiBcdFx0cmV0dXJuIC1FTk9QS0c7XG4tXHR0b2tlbl9rcmI1ID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbi1cdHRva2VuX2tleSA9IChjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKilcdTAwMjZrZXktXHUwMDNlcGF5bG9hZC5kYXRhWzJdO1xuK1x0dG9rZW5fa3JiNSA9IGNtX2tleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF07XG4rXHR0b2tlbl9rZXkgPSAoY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICopXHUwMDI2Y21fa2V5LVx1MDAzZXBheWxvYWQuZGF0YVsyXTtcbiBcbiBcdC8qIHN0cnVjdCByeGdrX2tleSB7XG4gXHQgKlx0YWZzX3VpbnQzMlx0ZW5jdHlwZTtcbkBAIC0zMjcsOSArMjk1LDIyIEBAIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X2FlYWQ7XG4gXG4tXHRzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmxlbiAgPSBhZGF0YXNpemU7XG4tXHRzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEgPSBhcHBkYXRhO1xuLVx0YXBwZGF0YSA9IE5VTEw7XG4rXHRhcHBkYXRhX2tleSA9IGtleV9hbGxvYyhcdTAwMjZrZXlfdHlwZV91c2VyLCBcInJ4cnBjOiBhZnMgcnhnayBhcHBkYXRhXCIsXG4rXHRcdFx0XHRHTE9CQUxfUk9PVF9VSUQsIEdMT0JBTF9ST09UX0dJRCwgY3VycmVudF9jcmVkKCksXG4rXHRcdFx0XHRLRVlfUE9TX1ZJRVcgfCBLRVlfUE9TX1NFQVJDSCB8IEtFWV9VU1JfVklFVyxcbitcdFx0XHRcdEtFWV9BTExPQ19OT1RfSU5fUVVPVEEsIE5VTEwpO1xuK1x0aWYgKElTX0VSUihhcHBkYXRhX2tleSkpIHtcbitcdFx0cmV0ID0gUFRSX0VSUihhcHBkYXRhX2tleSk7XG4rXHRcdGdvdG8gb3V0X2FlYWQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBrZXlfaW5zdGFudGlhdGVfYW5kX2xpbmsoYXBwZGF0YV9rZXksIGFwcGRhdGEsIGFkYXRhc2l6ZSwgTlVMTCwgTlVMTCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGtleV9wdXQoYXBwZGF0YV9rZXkpO1xuK1x0XHRnb3RvIG91dF9hZWFkO1xuK1x0fVxuK1xuK1x0c2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YSA9IGFwcGRhdGFfa2V5O1xuIFxuIG91dF9hZWFkOlxuIFx0Y3J5cHRvX2ZyZWVfYWVhZChhZWFkKTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvY21zZXJ2aWNlLmMgYi9mcy9hZnMvY21zZXJ2aWNlLmNcbmluZGV4IDU1NDBhZTFjYWQ1OTlhLi5kNTc5YTY2NWUzZGEwOSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9jbXNlcnZpY2UuY1xuKysrIGIvZnMvYWZzL2Ntc2VydmljZS5jXG5AQCAtMzY0LDcgKzM2NCw4IEBAIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiBcdGlmICghYWZzX2NoZWNrX2NhbGxfc3RhdGUoY2FsbCwgQUZTX0NBTExfU1ZfUkVQTFlJTkcpKVxuIFx0XHRyZXR1cm4gYWZzX2lvX2Vycm9yKGNhbGwsIGFmc19pb19lcnJvcl9jbV9yZXBseSk7XG4gXG4tXHRpZiAobWVtY21wKGNhbGwtXHUwMDNlcmVxdWVzdCwgXHUwMDI2Y2FsbC1cdTAwM2VzZXJ2ZXItXHUwMDNlX3V1aWQsIHNpemVvZihjYWxsLVx1MDAzZXNlcnZlci1cdTAwM2VfdXVpZCkpICE9IDApIHtcbitcdGlmIChjYWxsLVx1MDAzZXNlcnZlciBcdTAwMjZcdTAwMjZcbitcdCAgICBtZW1jbXAoY2FsbC1cdTAwM2VyZXF1ZXN0LCBcdTAwMjZjYWxsLVx1MDAzZXNlcnZlci1cdTAwM2VfdXVpZCwgc2l6ZW9mKGNhbGwtXHUwMDNlc2VydmVyLVx1MDAzZV91dWlkKSkgIT0gMCkge1xuIFx0XHRwcl9ub3RpY2UoXCJDYWxsYmFjayBVVUlEIGRvZXMgbm90IG1hdGNoIGZpbGVzZXJ2ZXIgVVVJRFxcblwiKTtcbiBcdFx0dHJhY2VfYWZzX2NtX25vX3NlcnZlcl91KGNhbGwsIGNhbGwtXHUwMDNlcmVxdWVzdCk7XG4gXHRcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc19wcm9iZS5jIGIvZnMvYWZzL2ZzX3Byb2JlLmNcbmluZGV4IGE5MWFkMTkzOGQwNzg4Li5lMjZmN2YxZTMwYTIzYSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9mc19wcm9iZS5jXG4rKysgYi9mcy9hZnMvZnNfcHJvYmUuY1xuQEAgLTI0MSw5ICsyNDEsMTQgQEAgaW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4gXHRzdHJ1Y3QgYWZzX2VuZHBvaW50X3N0YXRlICplc3RhdGUsICpvbGQ7XG4gXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0ID0gTlVMTCwgKmFsaXN0O1xuIFx0dW5zaWduZWQgbG9uZyB1bnByb2JlZDtcbitcdGludCByZXQ7XG4gXG4gXHRfZW50ZXIoXCIlcFVcIiwgXHUwMDI2c2VydmVyLVx1MDAzZXV1aWQpO1xuIFxuK1x0cmV0ID0gYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzZXJ2ZXIsIGtleSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0ZXN0YXRlID0ga3phbGxvY19vYmooKmVzdGF0ZSk7XG4gXHRpZiAoIWVzdGF0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxuaW5kZXggMGI3MmE4NTY2Mjk5OTIuLjNlNjFjNTQzYTUwYzQ4IDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcbisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5AQCAtMjgzLDcgKzI4Myw2IEBAIHN0cnVjdCBhZnNfbmV0IHtcbiBcdHN0cnVjdCBzb2NrZXRcdFx0KnNvY2tldDtcbiBcdHN0cnVjdCBhZnNfY2FsbFx0XHQqc3BhcmVfaW5jb21pbmdfY2FsbDtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdFx0Y2hhcmdlX3ByZWFsbG9jYXRpb25fd29yaztcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdFx0cnhfb29iX3dvcms7XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0c29ja2V0X211dGV4O1xuIFx0YXRvbWljX3RcdFx0bnJfb3V0c3RhbmRpbmdfY2FsbHM7XG4gXHRhdG9taWNfdFx0XHRucl9zdXBlcmJsb2NrcztcbkBAIC01NDcsNyArNTQ2LDcgQEAgc3RydWN0IGFmc19zZXJ2ZXIge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0XHRkZXN0cm95ZXI7XHQvKiBXb3JrIGl0ZW0gdG8gdHJ5IGFuZCBkZXN0cm95IGEgc2VydmVyICovXG4gXHRzdHJ1Y3QgdGltZXJfbGlzdFx0dGltZXI7XHRcdC8qIE1hbmFnZW1lbnQgdGltZXIgKi9cbiBcdHN0cnVjdCBtdXRleFx0XHRjbV90b2tlbl9sb2NrO1x0LyogTG9jayBnb3Zlcm5pbmcgY3JlYXRpb24gb2YgYXBwZGF0YSAqL1xuLVx0c3RydWN0IGtyYjVfYnVmZmVyXHRjbV9yeGdrX2FwcGRhdGE7IC8qIEFwcGRhdGEgdG8gYmUgaW5jbHVkZWQgaW4gUkVTUE9OU0UgcGFja2V0ICovXG4rXHRzdHJ1Y3Qga2V5XHRcdCpjbV9yeGdrX2FwcGRhdGE7IC8qIEFwcGRhdGEgdG8gYmUgaW5jbHVkZWQgaW4gUkVTUE9OU0UgcGFja2V0ICovXG4gXHR0aW1lNjRfdFx0XHR1bnVzZV90aW1lO1x0LyogVGltZSBhdCB3aGljaCBsYXN0IHVudXNlZCAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRmbGFncztcbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfUkVTUE9ORElORyAwXHRcdC8qIFRoZSBzZXJ2ZXIgaXMgcmVzcG9uZGluZyAqL1xuQEAgLTU1OSw2ICs1NTgsNyBAQCBzdHJ1Y3QgYWZzX3NlcnZlciB7XG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX05PVF9GT1VORFx0Nlx0XHQvKiBWTCBzZXJ2ZXIgc2F5cyBubyBzdWNoIHNlcnZlciAqL1xuICNkZWZpbmUgQUZTX1NFUlZFUl9GTF9WTF9GQUlMXHQ3XHRcdC8qIEZhaWxlZCB0byBhY2Nlc3MgVkwgc2VydmVyICovXG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX01BWV9IQVZFX0NCIDhcdFx0LyogTWF5IGhhdmUgY2FsbGJhY2tzIG9uIHRoaXMgZmlsZXNlcnZlciAqL1xuKyNkZWZpbmUgQUZTX1NFUlZFUl9GTF9BUFBEQVRBXHQ5XHRcdC8qIFNldCBpZiBhcHBkYXRhIGNyZWF0ZWQgKi9cbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfSVNfWUZTXHQxNlx0XHQvKiBTZXJ2ZXIgaXMgWUZTIG5vdCBBRlMgKi9cbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfTk9fSUJVTEtcdDE3XHRcdC8qIEZpbGVzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IEZTLklubGluZUJ1bGtTdGF0dXMgKi9cbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfTk9fUk0yXHQxOFx0XHQvKiBGaWxlc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBZRlMuUmVtb3ZlRmlsZTIgKi9cbkBAIC0xMDkwLDcgKzEwOTAsNyBAQCBleHRlcm4gYm9vbCBhZnNfY21faW5jb21pbmdfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKik7XG4gLypcbiAgKiBjbV9zZWN1cml0eS5jXG4gICovXG4tdm9pZCBhZnNfcHJvY2Vzc19vb2JfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbitpbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpO1xuICNpZmRlZiBDT05GSUdfUlhHS1xuIGludCBhZnNfY3JlYXRlX3Rva2VuX2tleShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpO1xuICNlbHNlXG5AQCAtMTQxNywyMSArMTQxNyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfc2VlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBlbnVtIGFmc19jYWxsX3RyYWNlIHdoeSlcbiBcdFx0ICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLFxuLVx0XHRcdFx0ICAgIGdmcF90IGdmcClcbi17XG4tXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuLVxuLVx0b3AtXHUwMDNlY2FsbFx0PSBjYWxsO1xuLVx0b3AtXHUwMDNldHlwZVx0PSBjYWxsLVx1MDAzZXR5cGU7XG4tXHRjYWxsLVx1MDAzZW9wXHQ9IG9wO1xuLVx0Y2FsbC1cdTAwM2VrZXlcdD0gb3AtXHUwMDNla2V5O1xuLVx0Y2FsbC1cdTAwM2VpbnRyXHQ9ICEob3AtXHUwMDNlZmxhZ3MgXHUwMDI2IEFGU19PUEVSQVRJT05fVU5JTlRSKTtcbi1cdGNhbGwtXHUwMDNlcGVlclx0PSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtXHUwMDNlYWRkcnNbb3AtXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XG4tXHRjYWxsLVx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cdTAwM2VzZXJ2ZXItXHUwMDNlc2VydmljZV9pZDtcbi1cdGFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcbiB7XG4gXHRjYWxsLVx1MDAzZWlvdl9sZW4gPSBzaXplO1xuQEAgLTE3NjMsNiArMTc0OCwyMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqQUZTX1ZOT0RFX1RPX0koc3RydWN0IGFmc192bm9kZSAqdm5vZGUpXG4gXHRyZXR1cm4gXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLFxuK1x0XHRcdFx0ICAgIGdmcF90IGdmcClcbit7XG4rXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuK1xuK1x0b3AtXHUwMDNlY2FsbFx0PSBjYWxsO1xuK1x0b3AtXHUwMDNldHlwZVx0PSBjYWxsLVx1MDAzZXR5cGU7XG4rXHRjYWxsLVx1MDAzZW9wXHQ9IG9wO1xuK1x0Y2FsbC1cdTAwM2VzZXJ2ZXJcdD0gYWZzX3VzZV9zZXJ2ZXIob3AtXHUwMDNlc2VydmVyLCBmYWxzZSwgYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCk7XG4rXHRjYWxsLVx1MDAzZWtleVx0PSBvcC1cdTAwM2VrZXk7XG4rXHRjYWxsLVx1MDAzZWludHJcdD0gIShvcC1cdTAwM2VmbGFncyBcdTAwMjYgQUZTX09QRVJBVElPTl9VTklOVFIpO1xuK1x0Y2FsbC1cdTAwM2VwZWVyXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cdTAwM2VhZGRyc1tvcC1cdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcbitcdGNhbGwtXHUwMDNlc2VydmljZV9pZCA9IG9wLVx1MDAzZXNlcnZlci1cdTAwM2VzZXJ2aWNlX2lkO1xuK1x0YWZzX21ha2VfY2FsbChjYWxsLCBnZnApO1xuK31cbitcbiAvKlxuICAqIE5vdGUgdGhhdCBhIGRlbnRyeSBnb3QgY2hhbmdlZC4gIFdlIG5lZWQgdG8gc2V0IGRfZnNkYXRhIHRvIHRoZSBkYXRhIHZlcnNpb25cbiAgKiBudW1iZXIgZGVyaXZlZCBmcm9tIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4gIEl0IGRvZXNuJ3QgbWF0dGVyIGlmXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL21haW4uYyBiL2ZzL2Fmcy9tYWluLmNcbmluZGV4IDdhODgzYzU5OTc2ZmYyLi42MzUzZmVhYTVmYjRiNSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9tYWluLmNcbisrKyBiL2ZzL2Fmcy9tYWluLmNcbkBAIC03Myw3ICs3Myw2IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBhZnNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0X25zKVxuIFx0Z2VuZXJhdGVfcmFuZG9tX3V1aWQoKHVuc2lnbmVkIGNoYXIgKilcdTAwMjZuZXQtXHUwMDNldXVpZCk7XG4gXG4gXHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZWNoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcmssIGFmc19jaGFyZ2VfcHJlYWxsb2NhdGlvbik7XG4tXHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZXJ4X29vYl93b3JrLCBhZnNfcHJvY2Vzc19vb2JfcXVldWUpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZuZXQtXHUwMDNlc29ja2V0X211dGV4KTtcbiBcbiBcdG5ldC1cdTAwM2VjZWxscyA9IFJCX1JPT1Q7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3J4cnBjLmMgYi9mcy9hZnMvcnhycGMuY1xuaW5kZXggZDgyOTE2NjU3YTNkZGYuLmFlNDhjMTViM2RiOTQzIDEwMDY0NFxuLS0tIGEvZnMvYWZzL3J4cnBjLmNcbisrKyBiL2ZzL2Fmcy9yeHJwYy5jXG5AQCAtMjUsMTQgKzI1LDEyIEBAIHN0YXRpYyB2b2lkIGFmc19wcm9jZXNzX2FzeW5jX2NhbGwoc3RydWN0IHdvcmtfc3RydWN0ICopO1xuIHN0YXRpYyB2b2lkIGFmc19yeF9uZXdfY2FsbChzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgcnhycGNfY2FsbCAqLCB1bnNpZ25lZCBsb25nKTtcbiBzdGF0aWMgdm9pZCBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbChzdHJ1Y3QgcnhycGNfY2FsbCAqLCB1bnNpZ25lZCBsb25nKTtcbiBzdGF0aWMgdm9pZCBhZnNfcnhfYXR0YWNoKHN0cnVjdCByeHJwY19jYWxsICpyeGNhbGwsIHVuc2lnbmVkIGxvbmcgdXNlcl9jYWxsX0lEKTtcbi1zdGF0aWMgdm9pZCBhZnNfcnhfbm90aWZ5X29vYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvb2IpO1xuIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY21fb3BfaWQoc3RydWN0IGFmc19jYWxsICopO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnhycGNfa2VybmVsX29wcyBhZnNfcnhycGNfY2FsbGJhY2tfb3BzID0ge1xuIFx0Lm5vdGlmeV9uZXdfY2FsbFx0PSBhZnNfcnhfbmV3X2NhbGwsXG4gXHQuZGlzY2FyZF9uZXdfY2FsbFx0PSBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbCxcbiBcdC51c2VyX2F0dGFjaF9jYWxsXHQ9IGFmc19yeF9hdHRhY2gsXG4tXHQubm90aWZ5X29vYlx0XHQ9IGFmc19yeF9ub3RpZnlfb29iLFxuIH07XG4gXG4gLyogYXN5bmNocm9ub3VzIGluY29taW5nIGNhbGwgaW5pdGlhbCBwcm9jZXNzaW5nICovXG5AQCAtNzQsMTAgKzcyLDYgQEAgaW50IGFmc19vcGVuX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJvcl8yO1xuIFxuLVx0cmV0ID0gcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHNvY2tldC1cdTAwM2VzaywgdHJ1ZSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycm9yXzI7XG4tXG4gXHRyZXQgPSBhZnNfY3JlYXRlX3Rva2VuX2tleShuZXQsIHNvY2tldCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRwcl9lcnIoXCJDb3VsZG4ndCBjcmVhdGUgUnhHSyBDTSBrZXk6ICVkXFxuXCIsIHJldCk7XG5AQCAtMTI4LDcgKzEyMiw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFx0X2VudGVyKFwiXCIpO1xuIFxuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZuZXQtXHUwMDNlY2hhcmdlX3ByZWFsbG9jYXRpb25fd29yayk7XG4tXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5ldC1cdTAwM2VyeF9vb2Jfd29yayk7XG4gXHQvKiBGdXR1cmUgd29yayBpdGVtcyBzaG91bGQgbm93IHNlZSAtXHUwMDNlbGl2ZSBpcyBmYWxzZS4gKi9cbiBcbiBcdGtlcm5lbF9saXN0ZW4obmV0LVx1MDAzZXNvY2tldCwgMCk7XG5AQCAtMTQ5LDcgKzE0Miw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFxuIFx0a2VybmVsX3NvY2tfc2h1dGRvd24obmV0LVx1MDAzZXNvY2tldCwgU0hVVF9SRFdSKTtcbiBcdGZsdXNoX3dvcmtxdWV1ZShhZnNfYXN5bmNfY2FsbHMpO1xuLVx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZuZXQtXHUwMDNlcnhfb29iX3dvcmspO1xuIFx0bmV0LVx1MDAzZXNvY2tldC1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgPSBOVUxMO1xuIFx0c29ja19yZWxlYXNlKG5ldC1cdTAwM2Vzb2NrZXQpO1xuIFx0a2V5X3B1dChuZXQtXHUwMDNlZnNfY21fdG9rZW5fa2V5KTtcbkBAIC0zNDcsNyArMzM5LDEwIEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdHN0cnVjdCByeHJwY19jYWxsICpyeGNhbGw7XG4gXHRzdHJ1Y3QgbXNnaGRyIG1zZztcbiBcdHN0cnVjdCBrdmVjIGlvdlsxXTtcbitcdHVuc2lnbmVkIGludCBkZWJ1Z19pZCA9IGNhbGwtXHUwMDNlZGVidWdfaWQ7XG4rXHRzdHJ1Y3Qga2V5ICphcHBfZGF0YSA9IE5VTEw7XG4gXHRzaXplX3QgbGVuO1xuK1x0Ym9vbCB3cml0ZV9pdGVyID0gY2FsbC1cdTAwM2V3cml0ZV9pdGVyO1xuIFx0czY0IHR4X3RvdGFsX2xlbjtcbiBcdGludCByZXQ7XG4gXG5AQCAtMzc4LDggKzM3MywyNSBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRcdGNhbGwtXHUwMDNlZHJvcF9yZWYgPSB0cnVlO1xuIFx0fVxuIFxuK1x0aWYgKGNhbGwtXHUwMDNla2V5IFx1MDAyNlx1MDAyNiBjYWxsLVx1MDAzZXNlcnZlcikge1xuK1x0XHR1MzIga3JiNV9lbmN0eXBlID0gMDtcbitcdFx0dTggc2VjdXJpdHlfaW5kZXggPSAwO1xuK1xuK1x0XHRyeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNhbGwtXHUwMDNla2V5LCBcdTAwMjZzZWN1cml0eV9pbmRleCwgXHUwMDI2a3JiNV9lbmN0eXBlKTtcbitcdFx0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xuKyNpZmRlZiBDT05GSUdfUlhHS1xuK1x0XHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxuK1x0XHRcdGFwcF9kYXRhID0gY2FsbC1cdTAwM2VzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhO1xuK1x0XHRcdGJyZWFrO1xuKyNlbmRpZlxuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHQvKiBjcmVhdGUgYSBjYWxsICovXG4tXHRyeGNhbGwgPSByeHJwY19rZXJuZWxfYmVnaW5fY2FsbChjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcGVlciwgY2FsbC1cdTAwM2VrZXksXG4rXHRyeGNhbGwgPSByeHJwY19rZXJuZWxfYmVnaW5fY2FsbChjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcGVlcixcbitcdFx0XHRcdFx0IGNhbGwtXHUwMDNla2V5LCBhcHBfZGF0YSxcbiBcdFx0XHRcdFx0ICh1bnNpZ25lZCBsb25nKWNhbGwsXG4gXHRcdFx0XHRcdCB0eF90b3RhbF9sZW4sXG4gXHRcdFx0XHRcdCBjYWxsLVx1MDAzZW1heF9saWZlc3BhbixcbkBAIC00MTAsNyArNDIyLDcgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuIFx0aW92X2l0ZXJfa3ZlYyhcdTAwMjZtc2cubXNnX2l0ZXIsIElURVJfU09VUkNFLCBpb3YsIDEsIGNhbGwtXHUwMDNlcmVxdWVzdF9zaXplKTtcbiBcdG1zZy5tc2dfY29udHJvbFx0XHQ9IE5VTEw7XG4gXHRtc2cubXNnX2NvbnRyb2xsZW5cdD0gMDtcbi1cdG1zZy5tc2dfZmxhZ3NcdFx0PSBNU0dfV0FJVEFMTCB8IChjYWxsLVx1MDAzZXdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApO1xuK1x0bXNnLm1zZ19mbGFnc1x0XHQ9IE1TR19XQUlUQUxMIHwgKHdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApO1xuIFxuIFx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIHJ4Y2FsbCxcbiBcdFx0XHRcdCAgICAgXHUwMDI2bXNnLCBjYWxsLVx1MDAzZXJlcXVlc3Rfc2l6ZSxcbkBAIC00MTgsNyArNDMwLDkgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJvcl9kb19hYm9ydDtcbiBcbi1cdGlmIChjYWxsLVx1MDAzZXdyaXRlX2l0ZXIpIHtcbitcdC8qIFdlIGxvc3Qgb3VyIHJlZiBvbiBjYWxsIGlmIE1TR19NT1JFIHdhcyBzZXQuICovXG4rXG4rXHRpZiAod3JpdGVfaXRlcikge1xuIFx0XHRtc2cubXNnX2l0ZXIgPSAqY2FsbC1cdTAwM2V3cml0ZV9pdGVyO1xuIFx0XHRtc2cubXNnX2ZsYWdzIFx1MDAyNj0gfk1TR19NT1JFO1xuIFx0XHR0cmFjZV9hZnNfc2VuZF9kYXRhKGNhbGwsIFx1MDAyNm1zZyk7XG5AQCAtNDI3LDkgKzQ0MSw5IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdFx0XHRcdFx0ICAgICBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLFxuIFx0XHRcdFx0XHQgICAgIGlvdl9pdGVyX2NvdW50KFx1MDAyNm1zZy5tc2dfaXRlciksXG4gXHRcdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7XG4tXHRcdCpjYWxsLVx1MDAzZXdyaXRlX2l0ZXIgPSBtc2cubXNnX2l0ZXI7XG4rXHRcdC8qIFdlIGxvc3Qgb3VyIHJlZiBvbiBjYWxsLiAqL1xuIFxuLVx0XHR0cmFjZV9hZnNfc2VudF9kYXRhKGNhbGwsIFx1MDAyNm1zZywgcmV0KTtcbitcdFx0dHJhY2VfYWZzX3NlbnRfZGF0YShkZWJ1Z19pZCwgXHUwMDI2bXNnLCByZXQpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XG4gXHR9XG5AQCAtOTgzLDE0ICs5OTcsMyBAQCBub2lubGluZSBpbnQgYWZzX3Byb3RvY29sX2Vycm9yKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcbiBcdFx0Y2FsbC1cdTAwM2V1bm1hcnNoYWxsaW5nX2Vycm9yID0gdHJ1ZTtcbiBcdHJldHVybiAtRUJBRE1TRztcbiB9XG4tXG4tLypcbi0gKiBXYWtlIHVwIE9PQiBub3RpZmljYXRpb24gcHJvY2Vzc2luZy5cbi0gKi9cbi1zdGF0aWMgdm9pZCBhZnNfcnhfbm90aWZ5X29vYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvb2IpXG4te1xuLVx0c3RydWN0IGFmc19uZXQgKm5ldCA9IHNrLVx1MDAzZXNrX3VzZXJfZGF0YTtcbi1cbi1cdGlmIChSRUFEX09OQ0UobmV0LVx1MDAzZWxpdmUpKVxuLVx0XHRxdWV1ZV93b3JrKGFmc193cSwgXHUwMDI2bmV0LVx1MDAzZXJ4X29vYl93b3JrKTtcbi19XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3NlcnZlci5jIGIvZnMvYWZzL3NlcnZlci5jXG5pbmRleCAwZmUxNjJlYTJhMzZkYi4uNzZhOWYyNWNlNDkwNTggMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc2VydmVyLmNcbisrKyBiL2ZzL2Fmcy9zZXJ2ZXIuY1xuQEAgLTM5OCw3ICszOTgsNyBAQCBzdGF0aWMgdm9pZCBhZnNfc2VydmVyX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbiBcdGFmc19wdXRfZW5kcG9pbnRfc3RhdGUocmN1X2FjY2Vzc19wb2ludGVyKHNlcnZlci1cdTAwM2VlbmRwb2ludF9zdGF0ZSksXG4gXHRcdFx0ICAgICAgIGFmc19lc3RhdGVfdHJhY2VfcHV0X3NlcnZlcik7XG4gXHRhZnNfcHV0X2NlbGwoc2VydmVyLVx1MDAzZWNlbGwsIGFmc19jZWxsX3RyYWNlX3B1dF9zZXJ2ZXIpO1xuLVx0a2ZyZWUoc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKTtcbitcdGtleV9wdXQoc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YSk7XG4gXHRrZnJlZShzZXJ2ZXIpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2tleXMvdXNlci10eXBlLmggYi9pbmNsdWRlL2tleXMvdXNlci10eXBlLmhcbmluZGV4IDM4NmMzMTQzMjc4OTk1Li43MDAyYTk5M2E0NzIyOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaFxuKysrIGIvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oXG5AQCAtMjYsNiArMjYsNyBAQFxuICAqL1xuIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIHtcbiBcdHN0cnVjdCByY3VfaGVhZFx0cmN1O1x0XHQvKiBSQ1UgZGVzdHJ1Y3RvciAqL1xuK1x0cmVmY291bnRfdFx0cmVmO1xuIFx0dW5zaWduZWQgc2hvcnRcdGRhdGFsZW47XHQvKiBsZW5ndGggb2YgdGhpcyBkYXRhICovXG4gXHRjaGFyXHRcdGRhdGFbXSBfX2FsaWduZWQoX19hbGlnbm9mX18odTY0KSk7IC8qIGFjdHVhbCBkYXRhICovXG4gfTtcbkBAIC0zNyw2ICszOCw3IEBAIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQ7XG4gXG4gZXh0ZXJuIGludCB1c2VyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xuIGV4dGVybiB2b2lkIHVzZXJfZnJlZV9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcbit2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKTtcbiBleHRlcm4gaW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XG4gZXh0ZXJuIHZvaWQgdXNlcl9yZXZva2Uoc3RydWN0IGtleSAqa2V5KTtcbiBleHRlcm4gdm9pZCB1c2VyX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl9yeHJwYy5oIGIvaW5jbHVkZS9uZXQvYWZfcnhycGMuaFxuaW5kZXggMGZiNGM0MWM5YmJmNTUuLjU2NTFhMTBiYTI2ZTYxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfcnhycGMuaFxuKysrIGIvaW5jbHVkZS9uZXQvYWZfcnhycGMuaFxuQEAgLTU1LDYgKzU1LDcgQEAgdm9pZCByeHJwY19rZXJuZWxfc2V0X25vdGlmaWNhdGlvbnMoc3RydWN0IHNvY2tldCAqc29jayxcbiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBrZXkgKmtleSxcbitcdFx0XHRcdFx0ICAgc3RydWN0IGtleSAqYXBwX2RhdGEsXG4gXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgdXNlcl9jYWxsX0lELFxuIFx0XHRcdFx0XHQgICBzNjQgdHhfdG90YWxfbGVuLFxuIFx0XHRcdFx0XHQgICB1MzIgaGFyZF90aW1lb3V0LFxuQEAgLTkxLDI0ICs5Miw3IEBAIGJvb2wgcnhycGNfa2VybmVsX2NoZWNrX2xpZmUoY29uc3Qgc3RydWN0IHNvY2tldCAqLCBjb25zdCBzdHJ1Y3QgcnhycGNfY2FsbCAqKTtcbiBcbiBpbnQgcnhycGNfc29ja19zZXRfbWluX3NlY3VyaXR5X2xldmVsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IHZhbCk7XG4gaW50IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc3RydWN0IHNvY2sgKiwgc3RydWN0IGtleSAqKTtcbi1pbnQgcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzZXQpO1xuLVxuLWVudW0gcnhycGNfb29iX3R5cGUgcnhycGNfa2VybmVsX3F1ZXJ5X29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iLFxuLVx0XHRcdFx0XHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxuLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhKTtcbi1zdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfa2VybmVsX2RlcXVldWVfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tXHRcdFx0XHRcdCBlbnVtIHJ4cnBjX29vYl90eXBlICpfdHlwZSk7XG4tdm9pZCByeHJwY19rZXJuZWxfZnJlZV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYik7XG4tdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXG4tXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsXG4tXHRcdFx0XHQgIHUxNiAqX3NlcnZpY2VfaWQsIHU4ICpfc2VjdXJpdHlfaW5kZXgpO1xuLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSxcbi1cdFx0XHRcdCAgaW50IGVycm9yLCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpO1xuLWludCByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSk7XG4tdTMyIHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKTtcbi1pbnQgcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhKTtcbit2b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoY29uc3Qgc3RydWN0IGtleSAqa2V5LCB1OCAqX3NlY3VyaXR5X2luZGV4LCB1MzIgKl9rcmI1X2VuY3R5cGUpO1xuIHU4IHJ4cnBjX2tlcm5lbF9xdWVyeV9jYWxsX3NlY3VyaXR5KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRcdFx0ICAgIHUxNiAqX3NlcnZpY2VfaWQsIHUzMiAqX2VuY3R5cGUpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcbmluZGV4IDFiM2M0OGI1NTkxZGZkLi4zZDk2MDgyZTZlYWM3NiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxuQEAgLTE0OCw2ICsxNDgsNyBAQCBlbnVtIHlmc19jbV9vcGVyYXRpb24ge1xuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91bnVzZV9zbGlzdF9pc29ydCxcdFwiVU5VIGlzb3J0XCIpIFxcXG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VwZGF0ZSxcdFx0XCJVUERBVEUgICBcIikgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2J5X3V1aWQsXHRcIlVTRSB1dWlkIFwiKSBcXFxuK1x0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCxcdFx0XCJVU0UgY2FsbCBcIikgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NtX2NhbGwsXHRcIlVTRSBjbS1jbFwiKSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2V0X2NhcHMsXHRcIlVTRSBnY2Fwc1wiKSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYixcdFwiVVNFIGd2dXBjXCIpIFxcXG5AQCAtOTM3LDkgKzkzOCw5IEBAIFRSQUNFX0VWRU5UKGFmc19zZW5kX2RhdGEsXG4gXHQgICAgKTtcbiBcbiBUUkFDRV9FVkVOVChhZnNfc2VudF9kYXRhLFxuLVx0ICAgIFRQX1BST1RPKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgcmV0KSxcbitcdCAgICBUUF9QUk9UTyh1bnNpZ25lZCBpbnQgY2FsbF9kZWJ1Z19pZCwgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgcmV0KSxcbiBcbi1cdCAgICBUUF9BUkdTKGNhbGwsIG1zZywgcmV0KSxcbitcdCAgICBUUF9BUkdTKGNhbGxfZGVidWdfaWQsIG1zZywgcmV0KSxcbiBcbiBcdCAgICBUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHQgICAgX19maWVsZCh1bnNpZ25lZCBpbnQsXHRcdGNhbGwpXG5AQCAtOTQ5LDcgKzk1MCw3IEBAIFRSQUNFX0VWRU5UKGFmc19zZW50X2RhdGEsXG4gXHRcdFx0ICAgICApLFxuIFxuIFx0ICAgIFRQX2Zhc3RfYXNzaWduKFxuLVx0XHQgICAgX19lbnRyeS1cdTAwM2VjYWxsID0gY2FsbC1cdTAwM2VkZWJ1Z19pZDtcbitcdFx0ICAgIF9fZW50cnktXHUwMDNlY2FsbCA9IGNhbGxfZGVidWdfaWQ7XG4gXHRcdCAgICBfX2VudHJ5LVx1MDAzZXJldCA9IHJldDtcbiBcdFx0ICAgIF9fZW50cnktXHUwMDNlb2Zmc2V0ID0gbXNnLVx1MDAzZW1zZ19pdGVyLnhhcnJheV9zdGFydCArIG1zZy1cdTAwM2Vtc2dfaXRlci5pb3Zfb2Zmc2V0O1xuIFx0XHQgICAgX19lbnRyeS1cdTAwM2Vjb3VudCA9IGlvdl9pdGVyX2NvdW50KFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlcik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcbmluZGV4IDcwNGExMGRlNjY3MDA0Li44ZmM0MTkyZTAzOTJiZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcbkBAIC0yNjIsNyArMjYyLDYgQEBcbiBcdEVNKHJ4cnBjX2Nvbm5fZnJlZSxcdFx0XHRcIkZSRUUgICAgICAgIFwiKSBcXFxuIFx0RU0ocnhycGNfY29ubl9nZXRfYWN0aXZhdGVfY2FsbCxcdFwiR0VUIGFjdC1jYWxsXCIpIFxcXG4gXHRFTShyeHJwY19jb25uX2dldF9jYWxsX2lucHV0LFx0XHRcIkdFVCBpbnAtY2FsbFwiKSBcXFxuLVx0RU0ocnhycGNfY29ubl9nZXRfY2hhbGxlbmdlX2lucHV0LFx0XCJHRVQgaW5wLWNoYWxcIikgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fZ2V0X2Nvbm5faW5wdXQsXHRcdFwiR0VUIGlucC1jb25uXCIpIFxcXG4gXHRFTShyeHJwY19jb25uX2dldF9pZGxlLFx0XHRcdFwiR0VUIGlkbGUgICAgXCIpIFxcXG4gXHRFTShyeHJwY19jb25uX2dldF9wb2tlX2Fib3J0LFx0XHRcIkdFVCBway1hYm9ydFwiKSBcXFxuQEAgLTI3NCw3ICsyNzMsNiBAQFxuIFx0RU0ocnhycGNfY29ubl9uZXdfc2VydmljZSxcdFx0XCJORVcgc2VydmljZSBcIikgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fcHV0X2NhbGwsXHRcdFx0XCJQVVQgY2FsbCAgICBcIikgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fcHV0X2NhbGxfaW5wdXQsXHRcdFwiUFVUIGlucC1jYWxsXCIpIFxcXG4tXHRFTShyeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQsXHRcIlBVVCBpbnAtY2hhbFwiKSBcXFxuIFx0RU0ocnhycGNfY29ubl9wdXRfY29ubl9pbnB1dCxcdFx0XCJQVVQgaW5wLWNvbm5cIikgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fcHV0X2Rpc2NhcmRfaWRsZSxcdFx0XCJQVVQgZGlzYy1pZGxcIikgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fcHV0X2xvY2FsX2RlYWQsXHRcdFwiUFVUIGxvYy1kZWFkXCIpIFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaFxuaW5kZXggZDk3MzVhYmQ0Yzc5MTAuLjdkNmE1MDE1MTkzMTEyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oXG5AQCAtNTgsMTEgKzU4LDcgQEAgZW51bSByeHJwY19jbXNnX3R5cGUge1xuIFx0UlhSUENfVFhfTEVOR1RIXHRcdD0gMTIsXHQvKiAtcy06IFRvdGFsIGxlbmd0aCBvZiBUeCBkYXRhICovXG4gXHRSWFJQQ19TRVRfQ0FMTF9USU1FT1VUXHQ9IDEzLFx0LyogLXMtOiBTZXQgb25lIG9yIG1vcmUgY2FsbCB0aW1lb3V0cyAqL1xuIFx0UlhSUENfQ0hBUkdFX0FDQ0VQVFx0PSAxNCxcdC8qIFNzLTogQ2hhcmdlIHRoZSBhY2NlcHQgcG9vbCB3aXRoIGEgdXNlciBjYWxsIElEICovXG4tXHRSWFJQQ19PT0JfSURcdFx0PSAxNSxcdC8qIC1zcjogT09CIG1lc3NhZ2UgSUQgKi9cbi1cdFJYUlBDX0NIQUxMRU5HRURcdD0gMTYsXHQvKiBDLXI6IEluZm8gb24gYSByZWNlaXZlZCBDSEFMTEVOR0UgKi9cbi1cdFJYUlBDX1JFU1BPTkRcdFx0PSAxNyxcdC8qIENzLTogUmVzcG9uZCB0byBhIGNoYWxsZW5nZSAqL1xuLVx0UlhSUENfUkVTUE9OREVEXHRcdD0gMTgsXHQvKiBTLXI6IERhdGEgcmVjZWl2ZWQgaW4gUkVTUE9OU0UgKi9cbi1cdFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBXHQ9IDE5LFx0LyogQ3MtOiBSRVNQT05TRTogUnhHSyBhcHAgZGF0YSB0byBpbmNsdWRlICovXG4rXHRSWFJQQ19SRVNQT05TRV9BUFBEQVRBXHQ9IDIwLFx0LyogQ3MtOiBVc2VyIGtleSBob2xkaW5nIGFwcCBkYXRhIGZvciBSRVNQT05TRSAqL1xuIFx0UlhSUENfX1NVUFBPUlRFRFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xuaW5kZXggYzNjOGMzMjQwZWY5NDYuLmFhM2MwNThmNDA5NTU5IDEwMDY0NFxuLS0tIGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcbisrKyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXG5AQCAtMjA4LDYgKzIwOCw3IEBAIGRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIFx0XHRrbGVhdmUoXCIgPSAtRU5PTUVNXCIpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbitcdHJlZmNvdW50X3NldChcdTAwMjZ1cGF5bG9hZC1cdTAwM2VyZWYsIDEpO1xuIFxuIFx0dXBheWxvYWQtXHUwMDNlZGF0YWxlbiA9IHJlc3VsdF9sZW47XG4gXHRtZW1jcHkodXBheWxvYWQtXHUwMDNlZGF0YSwgZGF0YSwgcmVzdWx0X2xlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL01ha2VmaWxlIGIvbmV0L3J4cnBjL01ha2VmaWxlXG5pbmRleCBmOTk0ZjlmMzBhMjlkNC4uZjdhNWUwYTU5MmVlMTMgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvTWFrZWZpbGVcbisrKyBiL25ldC9yeHJwYy9NYWtlZmlsZVxuQEAgLTI0LDcgKzI0LDYgQEAgcnhycGMteSA6PSBcXFxuIFx0bG9jYWxfb2JqZWN0Lm8gXFxcbiBcdG1pc2MubyBcXFxuIFx0bmV0X25zLm8gXFxcbi1cdG9vYi5vIFxcXG4gXHRvdXRwdXQubyBcXFxuIFx0cGVlcl9ldmVudC5vIFxcXG4gXHRwZWVyX29iamVjdC5vIFxcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FmX3J4cnBjLmMgYi9uZXQvcnhycGMvYWZfcnhycGMuY1xuaW5kZXggOWFiMGYyMmM4ODFlYzUuLjlkNWNlMWM3YWQwZDIyIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2FmX3J4cnBjLmNcbisrKyBiL25ldC9yeHJwYy9hZl9yeHJwYy5jXG5AQCAtMzE4LDYgKzMxOCw3IEBAIEVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3B1dF9wZWVyKTtcbiAgKiBAc29jazogVGhlIHNvY2tldCBvbiB3aGljaCB0byBtYWtlIHRoZSBjYWxsXG4gICogQHBlZXI6IFRoZSBwZWVyIHRvIGNvbnRhY3RcbiAgKiBAa2V5OiBUaGUgc2VjdXJpdHkgY29udGV4dCB0byB1c2UgKGRlZmF1bHRzIHRvIHNvY2tldCBzZXR0aW5nKVxuKyAqIEBhcHBfZGF0YTogVGhlIHNlY3VyaXR5IHJlc3BvbnNlIGFwcGxpY2F0aW9uIGRhdGEgKG9yIE5VTEwpXG4gICogQHVzZXJfY2FsbF9JRDogVGhlIElEIHRvIHVzZVxuICAqIEB0eF90b3RhbF9sZW46IFRvdGFsIGxlbmd0aCBvZiBkYXRhIHRvIHRyYW5zbWl0IGR1cmluZyB0aGUgY2FsbCAob3IgLTEpXG4gICogQGhhcmRfdGltZW91dDogVGhlIG1heGltdW0gbGlmZXNwYW4gb2YgdGhlIGNhbGwgaW4gc2VjXG5AQCAtMzQwLDYgKzM0MSw3IEBAIEVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3B1dF9wZWVyKTtcbiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBrZXkgKmtleSxcbitcdFx0XHRcdFx0ICAgc3RydWN0IGtleSAqYXBwX2RhdGEsXG4gXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgdXNlcl9jYWxsX0lELFxuIFx0XHRcdFx0XHQgICBzNjQgdHhfdG90YWxfbGVuLFxuIFx0XHRcdFx0XHQgICB1MzIgaGFyZF90aW1lb3V0LFxuQEAgLTM2OCw2ICszNzAsNyBAQCBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0a2V5ID0gTlVMTDsgLyogYSBuby1zZWN1cml0eSBrZXkgKi9cbiBcbiBcdG1lbXNldChcdTAwMjZwLCAwLCBzaXplb2YocCkpO1xuK1x0cC5hcHBfZGF0YVx0XHQ9IGFwcF9kYXRhO1xuIFx0cC51c2VyX2NhbGxfSURcdFx0PSB1c2VyX2NhbGxfSUQ7XG4gXHRwLnR4X3RvdGFsX2xlblx0XHQ9IHR4X3RvdGFsX2xlbjtcbiBcdHAuaW50ZXJydXB0aWJpbGl0eVx0PSBpbnRlcnJ1cHRpYmlsaXR5O1xuQEAgLTU5NSwxMCArNTk4LDcgQEAgc3RhdGljIGludCByeHJwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBsZW4pXG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBSWFJQQ19TRVJWRVJfQk9VTkQ6XG4gXHRjYXNlIFJYUlBDX1NFUlZFUl9MSVNURU5JTkc6XG4tXHRcdGlmIChtLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX09PQilcbi1cdFx0XHRyZXQgPSByeHJwY19zZW5kbXNnX29vYihyeCwgbSwgbGVuKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdHJldCA9IHJ4cnBjX2RvX3NlbmRtc2cocngsIG0sIGxlbik7XG4rXHRcdHJldCA9IHJ4cnBjX2RvX3NlbmRtc2cocngsIG0sIGxlbik7XG4gXHRcdC8qIFRoZSBzb2NrZXQgaGFzIGJlZW4gdW5sb2NrZWQgKi9cbiBcdFx0Z290byBvdXQ7XG4gXHRkZWZhdWx0OlxuQEAgLTYzMyw3ICs2MzMsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiB7XG4gXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbi1cdHVuc2lnbmVkIGludCBtaW5fc2VjX2xldmVsLCB2YWw7XG4rXHR1bnNpZ25lZCBpbnQgbWluX3NlY19sZXZlbDtcbiBcdHUxNiBzZXJ2aWNlX3VwZ3JhZGVbMl07XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTcxMCwyMyArNzEwLDcgQEAgc3RhdGljIGludCByeHJwY19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXG4gXHRcdGNhc2UgUlhSUENfTUFOQUdFX1JFU1BPTlNFOlxuIFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0aWYgKG9wdGxlbiAhPSBzaXplb2YodW5zaWduZWQgaW50KSlcbi1cdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0cmV0ID0gLUVJU0NPTk47XG4tXHRcdFx0aWYgKHJ4LVx1MDAzZXNrLnNrX3N0YXRlICE9IFJYUlBDX1VOQk9VTkQpXG4tXHRcdFx0XHRnb3RvIGVycm9yO1xuLVx0XHRcdHJldCA9IGNvcHlfc2FmZV9mcm9tX3NvY2twdHIoXHUwMDI2dmFsLCBzaXplb2YodmFsKSxcbi1cdFx0XHRcdFx0XHQgICAgIG9wdHZhbCwgb3B0bGVuKTtcbi1cdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBlcnJvcjtcbi1cdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdGlmICh2YWwgXHUwMDNlIDEpXG4tXHRcdFx0XHRnb3RvIGVycm9yO1xuLVx0XHRcdGlmICh2YWwpXG4tXHRcdFx0XHRzZXRfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcdTAwMjZyeC1cdTAwM2VmbGFncyk7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0Y2xlYXJfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcdTAwMjZyeC1cdTAwM2VmbGFncyk7XG4tXHRcdFx0Z290byBzdWNjZXNzO1xuK1x0XHRcdGdvdG8gZXJyb3I7XG4gXG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0YnJlYWs7XG5AQCAtODM1LDggKzgxOSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0cngtXHUwMDNlY2FsbHMgPSBSQl9ST09UO1xuIFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cngtXHUwMDNlaW5jb21pbmdfbG9jayk7XG4tXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSk7XG4tXHRyeC1cdTAwM2VwZW5kaW5nX29vYnEgPSBSQl9ST09UO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cngtXHUwMDNlc29ja19jYWxscyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZyeC1cdTAwM2V0b19iZV9hY2NlcHRlZCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpO1xuQEAgLTg4NCwyMyArODY2LDYgQEAgc3RhdGljIGludCByeHJwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZmxhZ3MpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIFB1cmdlIHRoZSBvdXQtb2YtYmFuZCBxdWV1ZS5cbi0gKi9cbi1zdGF0aWMgdm9pZCByeHJwY19wdXJnZV9vb2JfcXVldWUoc3RydWN0IHNvY2sgKnNrKVxuLXtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNrKTtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXG4tXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpKVxuLVx0XHRyeHJwY19rZXJuZWxfZnJlZV9vb2Ioc2tiKTtcbi1cdHdoaWxlICghUkJfRU1QVFlfUk9PVChcdTAwMjZyeC1cdTAwM2VwZW5kaW5nX29vYnEpKSB7XG4tXHRcdHNrYiA9IHJiX2VudHJ5KHJ4LVx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiwgcmJub2RlKTtcbi1cdFx0cmJfZXJhc2UoXHUwMDI2c2tiLVx1MDAzZXJibm9kZSwgXHUwMDI2cngtXHUwMDNlcGVuZGluZ19vb2JxKTtcbi1cdFx0cnhycGNfa2VybmVsX2ZyZWVfb29iKHNrYik7XG4tXHR9XG4tfVxuLVxuIC8qXG4gICogUnhSUEMgc29ja2V0IGRlc3RydWN0b3JcbiAgKi9cbkBAIC05MDgsNyArODczLDYgQEAgc3RhdGljIHZvaWQgcnhycGNfc29ja19kZXN0cnVjdG9yKHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRfZW50ZXIoXCIlcFwiLCBzayk7XG4gXG4tXHRyeHJwY19wdXJnZV9vb2JfcXVldWUoc2spO1xuIFx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG4gXG4gXHRXQVJOX09OKHJlZmNvdW50X3JlYWQoXHUwMDI2c2stXHUwMDNlc2tfd21lbV9hbGxvYykpO1xuQEAgLTk2MSw3ICs5MjUsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlbGVhc2Vfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4gXHRyeHJwY19kaXNjYXJkX3ByZWFsbG9jKHJ4KTtcbiBcdHJ4cnBjX3JlbGVhc2VfY2FsbHNfb25fc29ja2V0KHJ4KTtcbiBcdGZsdXNoX3dvcmtxdWV1ZShyeHJwY193b3JrcXVldWUpO1xuLVx0cnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTtcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuIFxuIFx0cnhycGNfdW51c2VfbG9jYWwocngtXHUwMDNlbG9jYWwsIHJ4cnBjX2xvY2FsX3VudXNlX3JlbGVhc2Vfc29jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmggYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxuaW5kZXggY2U5NDZiMGEwM2UyYjMuLjEwMWFjNzU0NDc1ODRkIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcbisrKyBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG5AQCAtMTcxLDkgKzE3MSw2IEBAIHN0cnVjdCByeHJwY19zb2NrIHtcbiBcdGNvbnN0IHN0cnVjdCByeHJwY19rZXJuZWxfb3BzICphcHBfb3BzO1x0LyogVGFibGUgb2Yga2VybmVsIGFwcCBub3RpZmljYXRpb24gZnVuY3MgKi9cbiBcdHN0cnVjdCByeHJwY19sb2NhbFx0KmxvY2FsO1x0XHQvKiBsb2NhbCBlbmRwb2ludCAqL1xuIFx0c3RydWN0IHJ4cnBjX2JhY2tsb2dcdCpiYWNrbG9nO1x0LyogUHJlYWxsb2NhdGlvbiBmb3Igc2VydmljZXMgKi9cbi1cdHN0cnVjdCBza19idWZmX2hlYWRcdHJlY3Ztc2dfb29icTtcdC8qIE9PQiBtZXNzYWdlcyBmb3IgcmVjdm1zZyB0byBwaWNrIHVwICovXG4tXHRzdHJ1Y3QgcmJfcm9vdFx0XHRwZW5kaW5nX29vYnE7XHQvKiBPT0IgbWVzc2FnZXMgYXdhaXRpbmcgdXNlcnNwYWNlIHRvIHJlc3BvbmQgdG8gKi9cbi1cdHU2NFx0XHRcdG9vYl9pZF9jb3VudGVyO1x0LyogT09CIG1lc3NhZ2UgSUQgY291bnRlciAqL1xuIFx0c3BpbmxvY2tfdFx0XHRpbmNvbWluZ19sb2NrO1x0LyogSW5jb21pbmcgY2FsbCB2cyBzZXJ2aWNlIHNodXRkb3duIGxvY2sgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWRcdHNvY2tfY2FsbHM7XHQvKiBMaXN0IG9mIGNhbGxzIG93bmVkIGJ5IHRoaXMgc29ja2V0ICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHR0b19iZV9hY2NlcHRlZDtcdC8qIGNhbGxzIGF3YWl0aW5nIGFjY2VwdGFuY2UgKi9cbkBAIC0xODQsNyArMTgxLDYgQEAgc3RydWN0IHJ4cnBjX3NvY2sge1xuIFx0c3RydWN0IHJiX3Jvb3RcdFx0Y2FsbHM7XHRcdC8qIFVzZXIgSUQgLVx1MDAzZSBjYWxsIG1hcHBpbmcgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gI2RlZmluZSBSWFJQQ19TT0NLX0NPTk5FQ1RFRFx0XHQwXHQvKiBjb25uZWN0X3NyeCBpcyBzZXQgKi9cbi0jZGVmaW5lIFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFXHQxXHQvKiBVc2VyIHdhbnRzIHRvIG1hbmFnZSBSRVNQT05TRSBwYWNrZXRzICovXG4gXHRyd2xvY2tfdFx0XHRjYWxsX2xvY2s7XHQvKiBsb2NrIGZvciBjYWxscyAqL1xuIFx0dTMyXHRcdFx0bWluX3NlY19sZXZlbDtcdC8qIG1pbmltdW0gc2VjdXJpdHkgbGV2ZWwgKi9cbiAjZGVmaW5lIFJYUlBDX1NFQ1VSSVRZX01BWFx0UlhSUENfU0VDVVJJVFlfRU5DUllQVFxuQEAgLTI0MSw3ICsyMzcsNiBAQCBzdHJ1Y3QgcnhycGNfc2tiX3ByaXYge1xuIFx0XHRcdHU4XHRcdHJlYXNvbjtcdFx0LyogUmVhc29uIGZvciBhY2sgKi9cbiBcdFx0fSBhY2s7XG4gXHRcdHN0cnVjdCB7XG4tXHRcdFx0c3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm47XHQvKiBDb25uZWN0aW9uIHJlZmVycmVkIHRvICovXG4gXHRcdFx0dW5pb24ge1xuIFx0XHRcdFx0dTMyIHJ4a2FkX25vbmNlO1xuIFx0XHRcdH07XG5AQCAtMzEwLDEzICszMDUsNiBAQCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkge1xuIFx0Ym9vbCAoKnZhbGlkYXRlX2NoYWxsZW5nZSkoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbi1cdC8qIEZpbGwgb3V0IHRoZSBjbXNnIGZvciByZWN2bXNnKCkgdG8gcGFzcyBvbiBhIGNoYWxsZW5nZSB0byB1c2Vyc3BhY2UuXG4tXHQgKiBUaGUgc2VjdXJpdHkgY2xhc3MgZ2V0cyB0byBhZGQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cbi1cdCAqL1xuLVx0aW50ICgqY2hhbGxlbmdlX3RvX3JlY3Ztc2cpKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICAgc3RydWN0IG1zZ2hkciAqbXNnKTtcbi1cbiBcdC8qIFBhcnNlIHNlbmRtc2coKSBjb250cm9sIG1lc3NhZ2UgYW5kIHJlc3BvbmQgdG8gY2hhbGxlbmdlLiAqL1xuIFx0aW50ICgqc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSkoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCBtc2doZHIgKm1zZyk7XG5AQCAtNTE2LDYgKzUwNCw3IEBAIHN0cnVjdCByeHJwY19idW5kbGUge1xuIFx0c3RydWN0IHJ4cnBjX2xvY2FsXHQqbG9jYWw7XHRcdC8qIFJlcHJlc2VudGF0aW9uIG9mIGxvY2FsIGVuZHBvaW50ICovXG4gXHRzdHJ1Y3QgcnhycGNfcGVlclx0KnBlZXI7XHRcdC8qIFJlbW90ZSBlbmRwb2ludCAqL1xuIFx0c3RydWN0IGtleVx0XHQqa2V5O1x0XHQvKiBTZWN1cml0eSBkZXRhaWxzICovXG4rXHRzdHJ1Y3Qga2V5XHRcdCphcHBfZGF0YTtcdC8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRwcm9jX2xpbms7XHQvKiBMaW5rIGluIG5ldC1cdTAwM2VidW5kbGVfcHJvY19saXN0ICovXG4gXHRjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5O1x0LyogYXBwbGllZCBzZWN1cml0eSBtb2R1bGUgKi9cbiBcdHJlZmNvdW50X3RcdFx0cmVmO1xuQEAgLTcxOSw2ICs3MDgsNyBAQCBzdHJ1Y3QgcnhycGNfY2FsbCB7XG4gXHRzdHJ1Y3QgcnhycGNfc29jayBfX3JjdVx0KnNvY2tldDtcdC8qIHNvY2tldCByZXNwb25zaWJsZSAqL1xuIFx0c3RydWN0IHJ4cnBjX25ldFx0KnJ4bmV0O1x0XHQvKiBOZXR3b3JrIG5hbWVzcGFjZSB0byB3aGljaCBjYWxsIGJlbG9uZ3MgKi9cbiBcdHN0cnVjdCBrZXlcdFx0KmtleTtcdFx0LyogU2VjdXJpdHkgZGV0YWlscyAqL1xuK1x0c3RydWN0IGtleVx0XHQqYXBwX2RhdGE7XHQvKiBTZWN1cml0eSByZXNwb25zZSBhcHAgZGF0YSAqL1xuIFx0Y29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5ICpzZWN1cml0eTtcdC8qIGFwcGxpZWQgc2VjdXJpdHkgbW9kdWxlICovXG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0dXNlcl9tdXRleDtcdC8qIFVzZXIgYWNjZXNzIG11dGV4ICovXG4gXHRzdHJ1Y3Qgc29ja2FkZHJfcnhycGNcdGRlc3Rfc3J4O1x0LyogRGVzdGluYXRpb24gYWRkcmVzcyAqL1xuQEAgLTkxMyw2ICs5MDMsNyBAQCBlbnVtIHJ4cnBjX2NvbW1hbmQge1xuIH07XG4gXG4gc3RydWN0IHJ4cnBjX2NhbGxfcGFyYW1zIHtcbitcdHN0cnVjdCBrZXlcdFx0KmFwcF9kYXRhO1x0LyogU2VjdXJpdHkgcmVzcG9uc2UgYXBwIGRhdGEgKi9cbiBcdHM2NFx0XHRcdHR4X3RvdGFsX2xlbjtcdC8qIFRvdGFsIFR4IGRhdGEgbGVuZ3RoIChpZiBzZW5kIGRhdGEpICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdHVzZXJfY2FsbF9JRDtcdC8qIFVzZXIncyBjYWxsIElEICovXG4gXHRzdHJ1Y3Qge1xuQEAgLTEzNzUsMTMgKzEzNjYsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCByeHJwY19uZXQgKnJ4cnBjX25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRyZXR1cm4gbmV0X2dlbmVyaWMobmV0LCByeHJwY19uZXRfaWQpO1xuIH1cbiBcbi0vKlxuLSAqIG9vYi5jXG4tICovXG4tYm9vbCByeHJwY19ub3RpZnlfc29ja2V0X29vYihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tdm9pZCByeHJwY19hZGRfcGVuZGluZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi1pbnQgcnhycGNfc2VuZG1zZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pO1xuLVxuIC8qXG4gICogb3V0cHV0LmNcbiAgKi9cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY2FsbF9vYmplY3QuYyBiL25ldC9yeHJwYy9jYWxsX29iamVjdC5jXG5pbmRleCA4MTdlZDlhY2I5MWU2MS4uMmRmM2QwMTkwYTg5MTggMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY2FsbF9vYmplY3QuY1xuKysrIGIvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmNcbkBAIC0xOTgsNyArMTk4LDcgQEAgc3RhdGljIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19hbGxvY19jbGllbnRfY2FsbChzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRrdGltZV90IG5vdztcbiBcdGludCByZXQ7XG4gXG4tXHRfZW50ZXIoXCJcIik7XG4rXHRfZW50ZXIoXCIlcFwiLCBwLVx1MDAzZWFwcF9kYXRhKTtcbiBcbiBcdGNhbGwgPSByeHJwY19hbGxvY19jYWxsKHJ4LCBnZnAsIGRlYnVnX2lkKTtcbiBcdGlmICghY2FsbClcbkBAIC0yMTEsNiArMjExLDcgQEAgc3RhdGljIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19hbGxvY19jbGllbnRfY2FsbChzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRjYWxsLVx1MDAzZWludGVycnVwdGliaWxpdHlcdD0gcC1cdTAwM2VpbnRlcnJ1cHRpYmlsaXR5O1xuIFx0Y2FsbC1cdTAwM2V0eF90b3RhbF9sZW5cdD0gcC1cdTAwM2V0eF90b3RhbF9sZW47XG4gXHRjYWxsLVx1MDAzZWtleVx0XHQ9IGtleV9nZXQoY3AtXHUwMDNla2V5KTtcbitcdGNhbGwtXHUwMDNlYXBwX2RhdGFcdFx0PSBrZXlfZ2V0KHAtXHUwMDNlYXBwX2RhdGEpO1xuIFx0Y2FsbC1cdTAwM2VwZWVyXHRcdD0gcnhycGNfZ2V0X3BlZXIoY3AtXHUwMDNlcGVlciwgcnhycGNfcGVlcl9nZXRfY2FsbCk7XG4gXHRjYWxsLVx1MDAzZWxvY2FsXHRcdD0gcnhycGNfZ2V0X2xvY2FsKGNwLVx1MDAzZWxvY2FsLCByeHJwY19sb2NhbF9nZXRfY2FsbCk7XG4gXHRjYWxsLVx1MDAzZXNlY3VyaXR5X2xldmVsXHQ9IGNwLVx1MDAzZXNlY3VyaXR5X2xldmVsO1xuQEAgLTY5Nyw2ICs2OTgsNyBAQCBzdGF0aWMgdm9pZCByeHJwY19kZXN0cm95X2NhbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cnhycGNfcHV0X3BlZXIoY2FsbC1cdTAwM2VwZWVyLCByeHJwY19wZWVyX3B1dF9jYWxsKTtcbiBcdHJ4cnBjX3B1dF9sb2NhbChjYWxsLVx1MDAzZWxvY2FsLCByeHJwY19sb2NhbF9wdXRfY2FsbCk7XG4gXHRrZXlfcHV0KGNhbGwtXHUwMDNla2V5KTtcbitcdGtleV9wdXQoY2FsbC1cdTAwM2VhcHBfZGF0YSk7XG4gXHRjYWxsX3JjdShcdTAwMjZjYWxsLVx1MDAzZXJjdSwgcnhycGNfcmN1X2ZyZWVfY2FsbCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX2NsaWVudC5jIGIvbmV0L3J4cnBjL2Nvbm5fY2xpZW50LmNcbmluZGV4IDQ4NTE5ZjBkZTE4NTM5Li41Y2JmYTdiMjIzZTAxMSAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9jb25uX2NsaWVudC5jXG4rKysgYi9uZXQvcnhycGMvY29ubl9jbGllbnQuY1xuQEAgLTgxLDYgKzgxLDcgQEAgc3RhdGljIHN0cnVjdCByeHJwY19idW5kbGUgKnJ4cnBjX2FsbG9jX2J1bmRsZShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0YnVuZGxlLVx1MDAzZWxvY2FsXHRcdD0gY2FsbC1cdTAwM2Vsb2NhbDtcbiBcdFx0YnVuZGxlLVx1MDAzZXBlZXJcdFx0PSByeHJwY19nZXRfcGVlcihjYWxsLVx1MDAzZXBlZXIsIHJ4cnBjX3BlZXJfZ2V0X2J1bmRsZSk7XG4gXHRcdGJ1bmRsZS1cdTAwM2VrZXlcdFx0PSBrZXlfZ2V0KGNhbGwtXHUwMDNla2V5KTtcbitcdFx0YnVuZGxlLVx1MDAzZWFwcF9kYXRhXHQ9IGtleV9nZXQoY2FsbC1cdTAwM2VhcHBfZGF0YSk7XG4gXHRcdGJ1bmRsZS1cdTAwM2VzZWN1cml0eVx0PSBjYWxsLVx1MDAzZXNlY3VyaXR5O1xuIFx0XHRidW5kbGUtXHUwMDNlZXhjbHVzaXZlXHQ9IHRlc3RfYml0KFJYUlBDX0NBTExfRVhDTFVTSVZFLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKTtcbiBcdFx0YnVuZGxlLVx1MDAzZXVwZ3JhZGVcdFx0PSB0ZXN0X2JpdChSWFJQQ19DQUxMX1VQR1JBREUsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpO1xuQEAgLTExOCw2ICsxMTksNyBAQCBzdGF0aWMgdm9pZCByeHJwY19mcmVlX2J1bmRsZShzdHJ1Y3QgcnhycGNfYnVuZGxlICpidW5kbGUpXG4gXHR3cml0ZV91bmxvY2soXHUwMDI2YnVuZGxlLVx1MDAzZWxvY2FsLVx1MDAzZXJ4bmV0LVx1MDAzZWNvbm5fbG9jayk7XG4gXHRyeHJwY19wdXRfcGVlcihidW5kbGUtXHUwMDNlcGVlciwgcnhycGNfcGVlcl9wdXRfYnVuZGxlKTtcbiBcdGtleV9wdXQoYnVuZGxlLVx1MDAzZWtleSk7XG4rXHRrZXlfcHV0KGJ1bmRsZS1cdTAwM2VhcHBfZGF0YSk7XG4gXHRrZnJlZShidW5kbGUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY29ubl9ldmVudC5jIGIvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuY1xuaW5kZXggNjExYzc5MGJjNmQwY2UuLjkxNDZiOWQ0YzJhYzUwIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuY1xuKysrIGIvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuY1xuQEAgLTI3OSwxMCArMjc5LDcgQEAgc3RhdGljIGludCByeHJwY19wcm9jZXNzX2V2ZW50KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFxuIFx0c3dpdGNoIChzcC1cdTAwM2VoZHIudHlwZSkge1xuIFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9DSEFMTEVOR0U6XG4tXHRcdHJldCA9IGNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlcmVzcG9uZF90b19jaGFsbGVuZ2UoY29ubiwgc2tiKTtcbi1cdFx0c3AtXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XG4tXHRcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdHJldHVybiBjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZXJlc3BvbmRfdG9fY2hhbGxlbmdlKGNvbm4sIHNrYik7XG4gXG4gXHRjYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX1JFU1BPTlNFOlxuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNvbm4tXHUwMDNlc3RhdGVfbG9jayk7XG5AQCAtNDI1LDY2ICs0MjIsNiBAQCBzdGF0aWMgdm9pZCByeHJwY19wb3N0X3BhY2tldF90b19jb25uKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0cnhycGNfcXVldWVfY29ubihjb25uLCByeHJwY19jb25uX3F1ZXVlX3J4X3dvcmspO1xuIH1cbiBcbi0vKlxuLSAqIFBvc3QgYSBDSEFMTEVOR0UgcGFja2V0IHRvIHRoZSBzb2NrZXQgb2Ygb25lIG9mIGEgY29ubmVjdGlvbidzIGNhbGxzIHNvIHRoYXRcbi0gKiBpdCBjYW4gZ2V0IGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgcGFja2V0LCBwb3NzaWJseSBxdWVyeWluZ1xuLSAqIHVzZXJzcGFjZS5cbi0gKi9cbi1zdGF0aWMgYm9vbCByeHJwY19wb3N0X2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTtcbi1cdHN0cnVjdCByeHJwY19jYWxsICpjYWxsID0gTlVMTDtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbi1cdGJvb2wgcmVzcG9uZCA9IGZhbHNlLCBxdWV1ZWQgPSBmYWxzZTtcbi1cbi1cdHNwLVx1MDAzZWNoYWxsLmNvbm4gPVxuLVx0XHRyeHJwY19nZXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX2dldF9jaGFsbGVuZ2VfaW5wdXQpO1xuLVxuLVx0aWYgKCFjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZWNoYWxsZW5nZV90b19yZWN2bXNnKSB7XG4tXHRcdHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjb25uLVx1MDAzZWNoYW5uZWxzKTsgaSsrKSB7XG4tXHRcdGlmIChjb25uLVx1MDAzZWNoYW5uZWxzW2ldLmNhbGwpIHtcbi1cdFx0XHRjYWxsID0gY29ubi1cdTAwM2VjaGFubmVsc1tpXS5jYWxsO1xuLVx0XHRcdHJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtXHUwMDNlc29ja2V0KTtcbi1cdFx0XHRpZiAoIXJ4KSB7XG4tXHRcdFx0XHRjYWxsID0gTlVMTDtcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRyZXNwb25kID0gdHJ1ZTtcbi1cdFx0XHRpZiAodGVzdF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKSlcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdGNhbGwgPSBOVUxMO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHRpZiAoIXJlc3BvbmQpIHtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XG4tXHRcdHNwLVx1MDAzZWNoYWxsLmNvbm4gPSBOVUxMO1xuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHR9XG4tXG4tXHRpZiAoY2FsbClcbi1cdFx0cXVldWVkID0gcnhycGNfbm90aWZ5X3NvY2tldF9vb2IoY2FsbCwgc2tiKTtcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0aWYgKGNhbGwgXHUwMDI2XHUwMDI2ICFxdWV1ZWQpIHtcbi1cdFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTtcbi1cdFx0c3AtXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbi1cbi1cdGlmICghY2FsbClcbi1cdFx0cnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihjb25uLCBza2IpO1xuLVx0cmV0dXJuIHRydWU7XG4tfVxuLVxuIC8qXG4gICogSW5wdXQgYSBjb25uZWN0aW9uLWxldmVsIHBhY2tldC5cbiAgKi9cbkBAIC01MTMsNyArNDUwLDggQEAgYm9vbCByeHJwY19pbnB1dF9jb25uX3BhY2tldChzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0fVxuIFx0XHRpZiAoIWNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNldmFsaWRhdGVfY2hhbGxlbmdlKGNvbm4sIHNrYikpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHRyZXR1cm4gcnhycGNfcG9zdF9jaGFsbGVuZ2UoY29ubiwgc2tiKTtcbitcdFx0cnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihjb25uLCBza2IpO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGNhc2UgUlhSUENfUEFDS0VUX1RZUEVfUkVTUE9OU0U6XG4gXHRcdGlmIChyeHJwY19pc19jb25uX2Fib3J0ZWQoY29ubikpIHtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMva2V5LmMgYi9uZXQvcnhycGMva2V5LmNcbmluZGV4IGEwYWE3OGQ4OTI4OTdmLi4yZGRkYmUzY2FkNWNmYyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9rZXkuY1xuKysrIGIvbmV0L3J4cnBjL2tleS5jXG5AQCAtODkzLDMgKzg5MywzOSBAQCBzdGF0aWMgbG9uZyByeHJwY19yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSxcbiBcdF9sZWF2ZShcIiA9ICV6dVwiLCBzaXplKTtcbiBcdHJldHVybiBzaXplO1xuIH1cbitcbisvKipcbisgKiByeHJwY19rZXJuZWxfcXVlcnlfa2V5IC0gUXVlcnkgcGFyYW1ldGVycyBmcm9tIGFuIHJ4cnBjIGtleVxuKyAqIEBrZXk6IFRoZSBrZXkgdG8gcXVlcnlcbisgKiBAX3NlY3VyaXR5X2luZGV4OiBXaGVyZSB0byByZXR1cm4gdGhlIHNlY3VyaXR5IGluZGV4XG4rICogQF9rcmI1X2VuY3R5cGU6IFdoZXJlIHRvIHJldHVybiB0aGUga3JiNSBlbmNyeXB0aW9uIHR5cGUgaWYgYXBwbGljYWJsZVxuKyAqXG4rICogUXVlcnkgYW4gcnhycGMgYXV0aGVudGljYXRpb24ga2V5LCBleHRyYWN0aW5nIHRoZSBzZWN1cml0eSBpbmRleCBmcm9tIHRoZVxuKyAqIGZpcnN0IHRva2VuIHRoZXJlaW4uXG4rICovXG4rdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgdTggKl9zZWN1cml0eV9pbmRleCwgdTMyICpfa3JiNV9lbmN0eXBlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCByeHJwY19rZXlfdG9rZW4gKnRva2VuO1xuK1xuK1x0dG9rZW4gPSBrZXktXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xuK1x0aWYgKCF0b2tlbikge1xuK1x0XHQqX3NlY3VyaXR5X2luZGV4ID0gMDtcbitcdFx0Kl9rcmI1X2VuY3R5cGUgPSAwO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQqX3NlY3VyaXR5X2luZGV4ID0gdG9rZW4tXHUwMDNlc2VjdXJpdHlfaW5kZXg7XG4rXHRzd2l0Y2ggKHRva2VuLVx1MDAzZXNlY3VyaXR5X2luZGV4KSB7XG4rXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOlxuK1x0XHQqX2tyYjVfZW5jdHlwZSA9IDA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbitcdFx0Kl9rcmI1X2VuY3R5cGUgPSB0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZWVuY3R5cGU7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0V0FSTl9PTl9PTkNFKDEpO1xuK1x0XHQqX2tyYjVfZW5jdHlwZSA9IDA7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK31cbitFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkpO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9vb2IuYyBiL25ldC9yeHJwYy9vb2IuY1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBjODBlZTI0ODdkMDk0MS4uMDAwMDAwMDAwMDAwMDBcbi0tLSBhL25ldC9yeHJwYy9vb2IuY1xuKysrIC9kZXYvbnVsbFxuQEAgLTEsMzg3ICswLDAgQEBcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuLS8qIE91dCBvZiBiYW5kIG1lc3NhZ2UgaGFuZGxpbmcgKGUuZy4gY2hhbGxlbmdlLXJlc3BvbnNlKVxuLSAqXG4tICogQ29weXJpZ2h0IChDKSAyMDI1IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pXG4tICovXG4tXG4tI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcIjogXCIgZm10XG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NuZXQvYWZfcnhycGMuaFx1MDAzZVxuLSNpbmNsdWRlIFwiYXItaW50ZXJuYWwuaFwiXG4tXG4tZW51bSByeHJwY19vb2JfY29tbWFuZCB7XG4tXHRSWFJQQ19PT0JfQ01EX1VOU0VULFxuLVx0UlhSUENfT09CX0NNRF9SRVNQT05ELFxuLX0gX19tb2RlKGJ5dGUpO1xuLVxuLXN0cnVjdCByeHJwY19vb2JfcGFyYW1zIHtcbi1cdHU2NFx0XHRcdG9vYl9pZDtcdFx0LyogSUQgbnVtYmVyIG9mIG1lc3NhZ2UgaWYgcmVwbHkgKi9cbi1cdHMzMlx0XHRcdGFib3J0X2NvZGU7XG4tXHRlbnVtIHJ4cnBjX29vYl9jb21tYW5kXHRjb21tYW5kO1xuLVx0Ym9vbFx0XHRcdGhhdmVfb29iX2lkOjE7XG4tfTtcbi1cbi0vKlxuLSAqIFBvc3QgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZSBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2Vcbi0gKiBhc3NvY2lhdGVkIHdpdGggYSByZWZlcmVuY2UgY2FsbC5cbi0gKi9cbi1ib29sIHJ4cnBjX25vdGlmeV9zb2NrZXRfb29iKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbi1cdHN0cnVjdCBzb2NrICpzaztcbi1cdGJvb2wgcXVldWVkID0gZmFsc2U7XG4tXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXG4tXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVx1MDAzZXNvY2tldCk7XG4tXHRpZiAocngpIHtcbi1cdFx0c2sgPSBcdTAwMjZyeC1cdTAwM2Vzaztcbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuLVxuLVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgXHUwMDNjIFJYUlBDX0NMT1NFKSB7XG4tXHRcdFx0c2tiLVx1MDAzZXNrYl9tc3RhbXBfbnMgPSByeC1cdTAwM2Vvb2JfaWRfY291bnRlcisrO1xuLVx0XHRcdHJ4cnBjX2dldF9za2Ioc2tiLCByeHJwY19za2JfZ2V0X3Bvc3Rfb29iKTtcbi1cdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEsIHNrYik7XG4tXHRcdFx0cXVldWVkID0gdHJ1ZTtcbi1cbi1cdFx0XHR0cmFjZV9yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwtXHUwMDNlZGVidWdfaWQsIHNwLVx1MDAzZWhkci5zZXJpYWwpO1xuLVx0XHRcdGlmIChyeC1cdTAwM2VhcHBfb3BzKVxuLVx0XHRcdFx0cngtXHUwMDNlYXBwX29wcy1cdTAwM2Vub3RpZnlfb29iKHNrLCBza2IpO1xuLVx0XHR9XG4tXG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuLVx0XHRpZiAocXVldWVkIFx1MDAyNlx1MDAyNiAhcngtXHUwMDNlYXBwX29wcyBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcbi1cdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbi1cdH1cbi1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0cmV0dXJuIHF1ZXVlZDtcbi19XG4tXG4tLypcbi0gKiBMb2NhdGUgdGhlIE9PQiBtZXNzYWdlIHRvIHJlc3BvbmQgdG8gYnkgaXRzIElELlxuLSAqL1xuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfZmluZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHU2NCBvb2JfaWQpXG4te1xuLVx0c3RydWN0IHJiX25vZGUgKnA7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLVxuLVx0cCA9IHJ4LVx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlO1xuLVx0d2hpbGUgKHApIHtcbi1cdFx0c2tiID0gcmJfZW50cnkocCwgc3RydWN0IHNrX2J1ZmYsIHJibm9kZSk7XG4tXG4tXHRcdGlmIChvb2JfaWQgXHUwMDNjIHNrYi1cdTAwM2Vza2JfbXN0YW1wX25zKVxuLVx0XHRcdHAgPSBwLVx1MDAzZXJiX2xlZnQ7XG4tXHRcdGVsc2UgaWYgKG9vYl9pZCBcdTAwM2Ugc2tiLVx1MDAzZXNrYl9tc3RhbXBfbnMpXG4tXHRcdFx0cCA9IHAtXHUwMDNlcmJfcmlnaHQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXR1cm4gc2tiO1xuLVx0fVxuLVxuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLVxuLS8qXG4tICogQWRkIGFuIE9PQiBtZXNzYWdlIGludG8gdGhlIHBlbmRpbmctcmVzcG9uc2Ugc2V0LiAgV2UgYWx3YXlzIGFzc2lnbiB0aGUgbmV4dFxuLSAqIHZhbHVlIGZyb20gYSA2NC1iaXQgY291bnRlciB0byB0aGUgb29iX2lkLCBzbyBqdXN0IGFzc3VtZSB3ZSdyZSBhbHdheXMgZ29pbmdcbi0gKiB0byBiZSBvbiB0aGUgcmlnaHQtaGFuZCBlZGdlIG9mIHRoZSB0cmVlIGFuZCB0aGF0IHRoZSBjb3VudGVyIHdvbid0IHdyYXAuXG4tICogVGhlIHRyZWUgaXMgYWxzbyBnaXZlbiBhIHJlZiB0byB0aGUgbWVzc2FnZS5cbi0gKi9cbi12b2lkIHJ4cnBjX2FkZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBza19idWZmICpza2IpXG4te1xuLVx0c3RydWN0IHJiX25vZGUgKipwcCA9IFx1MDAyNnJ4LVx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlLCAqcCA9IE5VTEw7XG4tXG4tXHR3aGlsZSAoKnBwKSB7XG4tXHRcdHAgPSAqcHA7XG4tXHRcdHBwID0gXHUwMDI2KCpwcCktXHUwMDNlcmJfcmlnaHQ7XG4tXHR9XG4tXG4tXHRyYl9saW5rX25vZGUoXHUwMDI2c2tiLVx1MDAzZXJibm9kZSwgcCwgcHApO1xuLVx0cmJfaW5zZXJ0X2NvbG9yKFx1MDAyNnNrYi1cdTAwM2VyYm5vZGUsIFx1MDAyNnJ4LVx1MDAzZXBlbmRpbmdfb29icSk7XG4tfVxuLVxuLS8qXG4tICogRXh0cmFjdCBjb250cm9sIG1lc3NhZ2VzIGZyb20gdGhlIHNlbmRtc2coKSBjb250cm9sIGJ1ZmZlci5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfb29iX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyAqcClcbi17XG4tXHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcbi1cdGludCBsZW47XG4tXG4tXHRpZiAobXNnLVx1MDAzZW1zZ19jb250cm9sbGVuID09IDApXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0Zm9yX2VhY2hfY21zZ2hkcihjbXNnLCBtc2cpIHtcbi1cdFx0aWYgKCFDTVNHX09LKG1zZywgY21zZykpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRcdGxlbiA9IGNtc2ctXHUwMDNlY21zZ19sZW4gLSBzaXplb2Yoc3RydWN0IGNtc2doZHIpO1xuLVx0XHRfZGVidWcoXCJDTVNHICVkLCAlZCwgJWRcIixcbi1cdFx0ICAgICAgIGNtc2ctXHUwMDNlY21zZ19sZXZlbCwgY21zZy1cdTAwM2VjbXNnX3R5cGUsIGxlbik7XG4tXG4tXHRcdGlmIChjbXNnLVx1MDAzZWNtc2dfbGV2ZWwgIT0gU09MX1JYUlBDKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRzd2l0Y2ggKGNtc2ctXHUwMDNlY21zZ190eXBlKSB7XG4tXHRcdGNhc2UgUlhSUENfT09CX0lEOlxuLVx0XHRcdGlmIChsZW4gIT0gc2l6ZW9mKHAtXHUwMDNlb29iX2lkKSB8fCBwLVx1MDAzZWhhdmVfb29iX2lkKVxuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0bWVtY3B5KFx1MDAyNnAtXHUwMDNlb29iX2lkLCBDTVNHX0RBVEEoY21zZyksIHNpemVvZihwLVx1MDAzZW9vYl9pZCkpO1xuLVx0XHRcdHAtXHUwMDNlaGF2ZV9vb2JfaWQgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJYUlBDX1JFU1BPTkQ6XG4tXHRcdFx0aWYgKHAtXHUwMDNlY29tbWFuZCAhPSBSWFJQQ19PT0JfQ01EX1VOU0VUKVxuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0cC1cdTAwM2Vjb21tYW5kID0gUlhSUENfT09CX0NNRF9SRVNQT05EO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJYUlBDX0FCT1JUOlxuLVx0XHRcdGlmIChsZW4gIT0gc2l6ZW9mKHAtXHUwMDNlYWJvcnRfY29kZSkgfHwgcC1cdTAwM2VhYm9ydF9jb2RlKVxuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0bWVtY3B5KFx1MDAyNnAtXHUwMDNlYWJvcnRfY29kZSwgQ01TR19EQVRBKGNtc2cpLCBzaXplb2YocC1cdTAwM2VhYm9ydF9jb2RlKSk7XG4tXHRcdFx0aWYgKHAtXHUwMDNlYWJvcnRfY29kZSA9PSAwKVxuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgUlhSUENfUkVTUF9SWEdLX0FQUERBVEE6XG4tXHRcdFx0aWYgKHAtXHUwMDNlY29tbWFuZCAhPSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQpXG4tXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0c3dpdGNoIChwLVx1MDAzZWNvbW1hbmQpIHtcbi1cdGNhc2UgUlhSUENfT09CX0NNRF9SRVNQT05EOlxuLVx0XHRpZiAoIXAtXHUwMDNlaGF2ZV9vb2JfaWQpXG4tXHRcdFx0cmV0dXJuIC1FQkFEU0xUO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLS8qXG4tICogQWxsb3cgdXNlcnNwYWNlIHRvIHJlc3BvbmQgdG8gYW4gT09CIHVzaW5nIHNlbmRtc2coKS5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4cnBjX3Jlc3BvbmRfdG9fb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbi1cdFx0XHRcdHN0cnVjdCByeHJwY19vb2JfcGFyYW1zICpwLFxuLVx0XHRcdFx0c3RydWN0IG1zZ2hkciAqbXNnKVxuLXtcbi1cdHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uO1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcDtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXHRpbnQgcmV0O1xuLVxuLVx0c2tiID0gcnhycGNfZmluZF9wZW5kaW5nX29vYihyeCwgcC1cdTAwM2Vvb2JfaWQpO1xuLVx0aWYgKHNrYilcbi1cdFx0cmJfZXJhc2UoXHUwMDI2c2tiLVx1MDAzZXJibm9kZSwgXHUwMDI2cngtXHUwMDNlcGVuZGluZ19vb2JxKTtcbi1cdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG4tXHRpZiAoIXNrYilcbi1cdFx0cmV0dXJuIC1FQkFEU0xUO1xuLVxuLVx0c3AgPSByeHJwY19za2Ioc2tiKTtcbi1cbi1cdHN3aXRjaCAocC1cdTAwM2Vjb21tYW5kKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DTURfUkVTUE9ORDpcbi1cdFx0cmV0ID0gLUVQUk9UTztcbi1cdFx0aWYgKHNrYi1cdTAwM2VtYXJrICE9IFJYUlBDX09PQl9DSEFMTEVOR0UpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNvbm4gPSBzcC1cdTAwM2VjaGFsbC5jb25uO1xuLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbi1cdFx0aWYgKCFjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZXNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGlmIChwLVx1MDAzZWFib3J0X2NvZGUpIHtcbi1cdFx0XHRyeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIHAtXHUwMDNlYWJvcnRfY29kZSwgLUVDT05OQUJPUlRFRCxcbi1cdFx0XHRcdFx0IHJ4cnBjX2Fib3J0X3Jlc3BvbnNlX3NlbmRtc2cpO1xuLVx0XHRcdHJldCA9IDA7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmV0ID0gY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VzZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHNrYiwgbXNnKTtcbi1cdFx0fVxuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0c3dpdGNoIChza2ItXHUwMDNlbWFyaykge1xuLVx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxuLVx0XHRyeHJwY19wdXRfY29ubmVjdGlvbihzcC1cdTAwM2VjaGFsbC5jb25uLCByeHJwY19jb25uX3B1dF9vb2IpO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9vb2IpO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLypcbi0gKiBTZW5kIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2Ugb3IgcmVzcG9uZCB0byBhIHJlY2VpdmVkIG91dC1vZi1iYW5kIG1lc3NhZ2UuXG4tICogLSBjYWxsZXIgZ2l2ZXMgdXMgdGhlIHNvY2tldCBsb2NrXG4tICogLSB0aGUgc29ja2V0IG1heSBiZSBlaXRoZXIgYSBjbGllbnQgc29ja2V0IG9yIGEgc2VydmVyIHNvY2tldFxuLSAqL1xuLWludCByeHJwY19zZW5kbXNnX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi17XG4tXHRzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyBwID0ge307XG4tXHRpbnQgcmV0O1xuLVxuLVx0X2VudGVyKFwiXCIpO1xuLVxuLVx0cmV0ID0gcnhycGNfc2VuZG1zZ19vb2JfY21zZyhtc2csIFx1MDAyNnApO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJvcl9yZWxlYXNlX3NvY2s7XG4tXG4tXHRpZiAocC5oYXZlX29vYl9pZClcbi1cdFx0cmV0dXJuIHJ4cnBjX3Jlc3BvbmRfdG9fb29iKHJ4LCBcdTAwMjZwLCBtc2cpO1xuLVxuLVx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbi1cbi1cdHN3aXRjaCAocC5jb21tYW5kKSB7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdF9sZWF2ZShcIiA9ICVkXCIsIHJldCk7XG4tXHRyZXR1cm4gcmV0O1xuLVxuLWVycm9yX3JlbGVhc2Vfc29jazpcbi1cdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfcXVlcnlfb29iIC0gUXVlcnkgdGhlIHBhcmFtZXRlcnMgb2YgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZVxuLSAqIEBvb2I6IFRoZSBtZXNzYWdlIHRvIHF1ZXJ5XG4tICogQF9wZWVyOiBXaGVyZSB0byByZXR1cm4gdGhlIHBlZXIgcmVjb3JkXG4tICogQF9wZWVyX2FwcGRhdGE6IFRoZSBhcHBsaWNhdGlvbiBkYXRhIGF0dGFjaGVkIHRvIGEgcGVlciByZWNvcmRcbi0gKlxuLSAqIEV4dHJhY3QgdXNlZnVsIHBhcmFtZXRlcnMgZnJvbSBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlLiAgVGhlIHNvdXJjZSBwZWVyXG4tICogcGFyYW1ldGVycyBhcmUgcmV0dXJuZWQgdGhyb3VnaCB0aGUgYXJndW1lbnQgbGlzdCBhbmQgdGhlIG1lc3NhZ2UgdHlwZSBpc1xuLSAqIHJldHVybmVkLlxuLSAqXG4tICogUmV0dXJuOlxuLSAqICogJVJYUlBDX09PQl9DSEFMTEVOR0UgLSBDaGFsbGVuZ2Ugd2FudGluZyBhIHJlc3BvbnNlLlxuLSAqL1xuLWVudW0gcnhycGNfb29iX3R5cGUgcnhycGNfa2VybmVsX3F1ZXJ5X29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iLFxuLVx0XHRcdFx0XHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxuLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Iob29iKTtcbi1cdGVudW0gcnhycGNfb29iX3R5cGUgdHlwZSA9IG9vYi1cdTAwM2VtYXJrO1xuLVxuLVx0c3dpdGNoICh0eXBlKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XG4tXHRcdCpfcGVlclx0XHQ9IHNwLVx1MDAzZWNoYWxsLmNvbm4tXHUwMDNlcGVlcjtcbi1cdFx0Kl9wZWVyX2FwcGRhdGFcdD0gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VwZWVyLVx1MDAzZWFwcF9kYXRhO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdFdBUk5fT05fT05DRSgxKTtcbi1cdFx0Kl9wZWVyXHRcdD0gTlVMTDtcbi1cdFx0Kl9wZWVyX2FwcGRhdGFcdD0gMDtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHRyZXR1cm4gdHlwZTtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfb29iKTtcbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2IgLSBEZXF1ZXVlIGFuZCByZXR1cm4gdGhlIGZyb250IE9PQiBtZXNzYWdlXG4tICogQHNvY2s6IFRoZSBzb2NrZXQgdG8gcXVlcnlcbi0gKiBAX3R5cGU6IFdoZXJlIHRvIHJldHVybiB0aGUgbWVzc2FnZSB0eXBlXG4tICpcbi0gKiBEZXF1ZXVlIHRoZSBmcm9udCBPT0IgbWVzc2FnZSwgaWYgdGhlcmUgaXMgb25lLCBhbmQgcmV0dXJuIGl0IGFuZFxuLSAqIGl0cyB0eXBlLlxuLSAqXG4tICogUmV0dXJuOiBUaGUgc2tfYnVmZiByZXByZXNlbnRpbmcgdGhlIE9PQiBtZXNzYWdlIG9yICVOVUxMIGlmIHRoZSBxdWV1ZSB3YXNcbi0gKiBlbXB0eS5cbi0gKi9cbi1zdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfa2VybmVsX2RlcXVldWVfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tXHRcdFx0XHRcdCBlbnVtIHJ4cnBjX29vYl90eXBlICpfdHlwZSlcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbi1cdHN0cnVjdCBza19idWZmICpvb2I7XG4tXG4tXHRvb2IgPSBza2JfZGVxdWV1ZShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpO1xuLVx0aWYgKG9vYilcbi1cdFx0Kl90eXBlID0gb29iLVx1MDAzZW1hcms7XG4tXHRyZXR1cm4gb29iO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYik7XG4tXG4tLyoqXG4tICogcnhycGNfa2VybmVsX2ZyZWVfb29iIC0gRnJlZSBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlXG4tICogQG9vYjogVGhlIE9PQiBtZXNzYWdlIHRvIGZyZWVcbi0gKlxuLSAqIEZyZWUgYW4gT09CIG1lc3NhZ2UgYWxvbmcgd2l0aCBhbnkgcmVzb3VyY2VzIGl0IGhvbGRzLlxuLSAqL1xuLXZvaWQgcnhycGNfa2VybmVsX2ZyZWVfb29iKHN0cnVjdCBza19idWZmICpvb2IpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihvb2IpO1xuLVxuLVx0c3dpdGNoIChvb2ItXHUwMDNlbWFyaykge1xuLVx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxuLVx0XHRyeHJwY19wdXRfY29ubmVjdGlvbihzcC1cdTAwM2VjaGFsbC5jb25uLCByeHJwY19jb25uX3B1dF9vb2IpO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdHJ4cnBjX2ZyZWVfc2tiKG9vYiwgcnhycGNfc2tiX3B1dF9wdXJnZV9vb2IpO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9mcmVlX29vYik7XG4tXG4tLyoqXG4tICogcnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSAtIFF1ZXJ5IHRoZSBwYXJhbWV0ZXJzIG9mIGEgY2hhbGxlbmdlXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byBxdWVyeVxuLSAqIEBfcGVlcjogV2hlcmUgdG8gcmV0dXJuIHRoZSBwZWVyIHJlY29yZFxuLSAqIEBfcGVlcl9hcHBkYXRhOiBUaGUgYXBwbGljYXRpb24gZGF0YSBhdHRhY2hlZCB0byBhIHBlZXIgcmVjb3JkXG4tICogQF9zZXJ2aWNlX2lkOiBXaGVyZSB0byByZXR1cm4gdGhlIGNvbm5lY3Rpb24gc2VydmljZSBJRFxuLSAqIEBfc2VjdXJpdHlfaW5kZXg6IFdoZXJlIHRvIHJldHVybiB0aGUgY29ubmVjdGlvbiBzZWN1cml0eSBpbmRleFxuLSAqXG4tICogRXh0cmFjdCB1c2VmdWwgcGFyYW1ldGVycyBmcm9tIGEgQ0hBTExFTkdFIG1lc3NhZ2UuXG4tICovXG4tdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXG4tXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsXG4tXHRcdFx0XHQgIHUxNiAqX3NlcnZpY2VfaWQsIHU4ICpfc2VjdXJpdHlfaW5kZXgpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0Kl9wZWVyXHRcdD0gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VwZWVyO1xuLVx0Kl9wZWVyX2FwcGRhdGFcdD0gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VwZWVyLVx1MDAzZWFwcF9kYXRhO1xuLVx0Kl9zZXJ2aWNlX2lkXHQ9IHNwLVx1MDAzZWhkci5zZXJ2aWNlSWQ7XG4tXHQqX3NlY3VyaXR5X2luZGV4ID0gc3AtXHUwMDNlaGRyLnNlY3VyaXR5SW5kZXg7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSk7XG4tXG4tLyoqXG4tICogcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UgLSBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHJlamVjdCBhIGNoYWxsZW5nZVxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgdG8gYmUgcmVqZWN0ZWRcbi0gKiBAYWJvcnRfY29kZTogVGhlIGFib3J0IGNvZGUgdG8gc3RpY2sgaW50byB0aGUgQUJPUlQgcGFja2V0XG4tICogQGVycm9yOiBMb2NhbCBlcnJvciB2YWx1ZVxuLSAqIEB3aHk6IEluZGljYXRpb24gYXMgdG8gd2h5LlxuLSAqXG4tICogQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byByZWplY3QgYSBjaGFsbGVuZ2UgYnkgYWJvcnRpbmcgdGhlIGNvbm5lY3Rpb24gaWZcbi0gKiBpdCdzIHN0aWxsIGluIGFuIGFib3J0YWJsZSBzdGF0ZS4gIFRoZSBlcnJvciBpcyByZXR1cm5lZCBzbyB0aGlzIGZ1bmN0aW9uXG4tICogY2FuIGJlIHVzZWQgd2l0aCBhIHJldHVybiBzdGF0ZW1lbnQuXG4tICpcbi0gKiBSZXR1cm46IFRoZSAlZXJyb3IgcGFyYW1ldGVyLlxuLSAqL1xuLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSxcbi1cdFx0XHRcdCAgaW50IGVycm9yLCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0X2VudGVyKFwieyV4fSwlZCwlZCwldVwiLCBzcC1cdTAwM2VoZHIuc2VyaWFsLCBhYm9ydF9jb2RlLCBlcnJvciwgd2h5KTtcbi1cbi1cdHJ4cnBjX2Fib3J0X2Nvbm4oc3AtXHUwMDNlY2hhbGwuY29ubiwgTlVMTCwgYWJvcnRfY29kZSwgZXJyb3IsIHdoeSk7XG4tXHRyZXR1cm4gZXJyb3I7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UpO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jXG5pbmRleCBlZmNiYTRiMmU3NGYwYy4uMjg1OWE4MGUxODc2NjMgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcmVjdm1zZy5jXG4rKysgYi9uZXQvcnhycGMvcmVjdm1zZy5jXG5AQCAtMjE1LDYxICsyMTUsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfdXNlcl9pZChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IG1zZ2hkciAqbXNnLFxuIFx0fVxuIH1cbiBcbi0vKlxuLSAqIERlYWwgd2l0aCBhIENIQUxMRU5HRSBwYWNrZXQuXG4tICovXG4tc3RhdGljIGludCByeHJwY19yZWN2bXNnX2NoYWxsZW5nZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVx0c3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4gPSBzcC1cdTAwM2VjaGFsbC5jb25uO1xuLVxuLVx0cmV0dXJuIGNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlY2hhbGxlbmdlX3RvX3JlY3Ztc2coY29ubiwgY2hhbGxlbmdlLCBtc2cpO1xuLX1cbi1cbi0vKlxuLSAqIFByb2Nlc3MgT09CIHBhY2tldHMuICBDYWxsZWQgd2l0aCB0aGUgc29ja2V0IGxvY2tlZC5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi1cdFx0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncylcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXHRib29sIG5lZWRfcmVzcG9uc2UgPSBmYWxzZTtcbi1cdGludCByZXQ7XG4tXG4tXHRza2IgPSBza2JfcGVlayhcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpO1xuLVx0aWYgKCFza2IpXG4tXHRcdHJldHVybiAtRUFHQUlOO1xuLVx0cnhycGNfc2VlX3NrYihza2IsIHJ4cnBjX3NrYl9zZWVfcmVjdm1zZyk7XG4tXG4tXHRyZXQgPSBwdXRfY21zZyhtc2csIFNPTF9SWFJQQywgUlhSUENfT09CX0lELCBzaXplb2YodTY0KSxcbi1cdFx0ICAgICAgIFx1MDAyNnNrYi1cdTAwM2Vza2JfbXN0YW1wX25zKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHRzd2l0Y2ggKChlbnVtIHJ4cnBjX29vYl90eXBlKXNrYi1cdTAwM2VtYXJrKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XG4tXHRcdG5lZWRfcmVzcG9uc2UgPSB0cnVlO1xuLVx0XHRyZXQgPSByeHJwY19yZWN2bXNnX2NoYWxsZW5nZShzb2NrLCBtc2csIHNrYiwgZmxhZ3MpO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdFdBUk5fT05DRSgxLCBcInJlY3Ztc2coKSBjYW4ndCBwcm9jZXNzIHVua25vd24gT09CIHR5cGUgJXVcXG5cIixcbi1cdFx0XHQgIHNrYi1cdTAwM2VtYXJrKTtcbi1cdFx0cmV0ID0gLUVJTztcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHRpZiAoIShmbGFncyBcdTAwMjYgTVNHX1BFRUspKSB7XG4tXHRcdHNrYl91bmxpbmsoc2tiLCBcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpO1xuLVx0XHRpZiAobmVlZF9yZXNwb25zZSlcbi1cdFx0XHRyeHJwY19hZGRfcGVuZGluZ19vb2IocngsIHNrYik7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyeHJwY19mcmVlX3NrYihza2IsIHJ4cnBjX3NrYl9wdXRfb29iKTtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuIC8qXG4gICogRGVsaXZlciBtZXNzYWdlcyB0byBhIGNhbGwuICBUaGlzIGtlZXBzIHByb2Nlc3NpbmcgcGFja2V0cyB1bnRpbCB0aGUgYnVmZmVyXG4gICogaXMgZmlsbGVkIGFuZCB3ZSBmaW5kIGVpdGhlciBtb3JlIERBVEEgKHJldHVybnMgMCkgb3IgdGhlIGVuZCBvZiB0aGUgREFUQVxuQEAgLTI4MSw3ICsyMjYsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHQgICAgICBzaXplX3QgbGVuLCBpbnQgZmxhZ3MsIHNpemVfdCAqX29mZnNldClcbiB7XG4gXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwO1xuLVx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0cnhycGNfc2VxX3Qgc2VxID0gMDtcbiBcdHNpemVfdCByZW1haW47XG5AQCAtMzc2LDEzICszMjAsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcbiBcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE1TR19QRUVLKSlcbiBcdFx0XHRyeHJwY19yb3RhdGVfcnhfd2luZG93KGNhbGwpO1xuLVxuLVx0XHRpZiAoIXJ4LVx1MDAzZWFwcF9vcHMgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpIHtcbi1cdFx0XHR0cmFjZV9yeHJwY19yZWN2ZGF0YShjYWxsLCByeHJwY19yZWN2bXNnX29vYnEsIHNlcSxcbi1cdFx0XHRcdFx0ICAgICByeF9wa3Rfb2Zmc2V0LCByeF9wa3RfbGVuLCByZXQpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4gXHR9XG4gXG4gb3V0OlxuQEAgLTQxOSw3ICszNTYsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXG4gXHR0cmFjZV9yeHJwY19yZWN2bXNnKDAsIHJ4cnBjX3JlY3Ztc2dfZW50ZXIsIDApO1xuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiAoTVNHX09PQiB8IE1TR19UUlVOQykpXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19UUlVOQylcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKFx1MDAyNnJ4LVx1MDAzZXNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbkBAIC00MzAsMTQgKzM2NywxMiBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHQvKiBSZXR1cm4gaW1tZWRpYXRlbHkgaWYgYSBjbGllbnQgc29ja2V0IGhhcyBubyBvdXRzdGFuZGluZyBjYWxscyAqL1xuIFx0aWYgKFJCX0VNUFRZX1JPT1QoXHUwMDI2cngtXHUwMDNlY2FsbHMpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGxpc3RfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSBcdTAwMjZcdTAwMjZcbiBcdCAgICByeC1cdTAwM2Vzay5za19zdGF0ZSAhPSBSWFJQQ19TRVJWRVJfTElTVEVOSU5HKSB7XG4gXHRcdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG4gXHRcdHJldHVybiAtRUFHQUlOO1xuIFx0fVxuIFxuLVx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuK1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKSkge1xuIFx0XHRyZXQgPSAtRVdPVUxEQkxPQ0s7XG4gXHRcdGlmICh0aW1lbyA9PSAwKSB7XG4gXHRcdFx0Y2FsbCA9IE5VTEw7XG5AQCAtNDUzLDggKzM4OCw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIHdhaXRfZXJyb3I7XG4gXG4tXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuK1x0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpKSB7XG4gXHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIFx0XHRcdFx0Z290byB3YWl0X2ludGVycnVwdGVkO1xuIFx0XHRcdHRyYWNlX3J4cnBjX3JlY3Ztc2coMCwgcnhycGNfcmVjdm1zZ193YWl0LCAwKTtcbkBAIC00NjQsMTUgKzM5OCw2IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0Z290byB0cnlfYWdhaW47XG4gXHR9XG4gXG4tXHQvKiBEZWFsIHdpdGggT09CIG1lc3NhZ2VzIGJlZm9yZSB3ZSBjb25zaWRlciBnZXR0aW5nIG5vcm1hbCBkYXRhLiAqL1xuLVx0aWYgKCFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuLVx0XHRyZXQgPSByeHJwY19yZWN2bXNnX29vYihzb2NrLCBtc2csIGZsYWdzKTtcbi1cdFx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbi1cdFx0aWYgKHJldCA9PSAtRUFHQUlOKVxuLVx0XHRcdGdvdG8gdHJ5X2FnYWluO1xuLVx0XHRnb3RvIGVycm9yX3RyYWNlO1xuLVx0fVxuLVxuIFx0LyogRmluZCB0aGUgbmV4dCBjYWxsIGFuZCBkZXF1ZXVlIGl0IGlmIHdlJ3JlIG5vdCBqdXN0IHBlZWtpbmcuICBJZiB3ZVxuIFx0ICogZG8gZGVxdWV1ZSBpdCwgdGhhdCBjb21lcyB3aXRoIGEgcmVmIHRoYXQgd2Ugd2lsbCBuZWVkIHRvIHJlbGVhc2UuXG4gXHQgKiBXZSBhbHNvIHdhbnQgdG8gd2VlZCBvdXQgY2FsbHMgdGhhdCBnb3QgcmVxdWV1ZWQgd2hpbHN0IHdlIHdlcmVcbkBAIC00ODMsOCArNDA4LDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0Y2FsbCA9IGxpc3RfZW50cnkobCwgc3RydWN0IHJ4cnBjX2NhbGwsIHJlY3Ztc2dfbGluayk7XG4gXG4gXHRpZiAoIXJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19xdWV1ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpIHtcbitcdCAgICBza2JfcXVldWVfZW1wdHkoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX3F1ZXVlKSkge1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rKTtcbiBcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4gXHRcdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmNcbmluZGV4IDc3YTY3YWNlMWQyNDgxLi45YWI3NjZkNWYwYjZjOCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yeGdrLmNcbisrKyBiL25ldC9yeHJwYy9yeGdrLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXktdHlwZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNja2V5cy91c2VyLXR5cGUuaFx1MDAzZVxuICNpbmNsdWRlIFwiYXItaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJyeGdrX2NvbW1vbi5oXCJcbiBcbkBAIC03MzQsMzcgKzczNSw2IEBAIHN0YXRpYyBib29sIHJ4Z2tfdmFsaWRhdGVfY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLS8qKlxuLSAqIHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSAtIFF1ZXJ5IFJ4R0stc3BlY2lmaWMgY2hhbGxlbmdlIHBhcmFtZXRlcnNcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHBhY2tldCB0byBxdWVyeVxuLSAqXG4tICogUmV0dXJuOiBUaGUgS2VyYmVyb3MgNSBlbmNvZGluZyB0eXBlIGZvciB0aGUgY2hhbGxlbmdlZCBjb25uZWN0aW9uLlxuLSAqL1xuLXUzMiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XG4tXG4tXHRyZXR1cm4gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VyeGdrLmVuY3R5cGU7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKTtcbi1cbi0vKlxuLSAqIEZpbGwgb3V0IHRoZSBjb250cm9sIG1lc3NhZ2UgdG8gcGFzcyB0byB1c2Vyc3BhY2UgdG8gaW5mb3JtIGFib3V0IHRoZVxuLSAqIGNoYWxsZW5nZS5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4Z2tfY2hhbGxlbmdlX3RvX3JlY3Ztc2coc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZylcbi17XG4tXHRzdHJ1Y3Qgcnhna19jaGFsbGVuZ2UgY2hhbGw7XG4tXG4tXHRjaGFsbC5iYXNlLnNlcnZpY2VfaWRcdFx0PSBjb25uLVx1MDAzZXNlcnZpY2VfaWQ7XG4tXHRjaGFsbC5iYXNlLnNlY3VyaXR5X2luZGV4XHQ9IGNvbm4tXHUwMDNlc2VjdXJpdHlfaXg7XG4tXHRjaGFsbC5lbmN0eXBlXHRcdFx0PSBjb25uLVx1MDAzZXJ4Z2suZW5jdHlwZTtcbi1cbi1cdHJldHVybiBwdXRfY21zZyhtc2csIFNPTF9SWFJQQywgUlhSUENfQ0hBTExFTkdFRCwgc2l6ZW9mKGNoYWxsKSwgXHUwMDI2Y2hhbGwpO1xuLX1cbi1cbiAvKlxuICAqIEluc2VydCB0aGUgcmVxdWlzaXRlIGFtb3VudCBvZiBYRFIgcGFkZGluZyBmb3IgdGhlIGxlbmd0aCBnaXZlbi5cbiAgKi9cbkBAIC04MzcsNyArODA3LDcgQEAgc3RhdGljIG5vaW5saW5lIHNzaXplX3Qgcnhna19pbnNlcnRfcmVzcG9uc2VfaGVhZGVyKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25cbiAgKi9cbiBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSxcbitcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICphcHBkYXRhLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3BvbnNlLFxuIFx0XHRcdFx0XHQgICAgc2l6ZV90IG9mZnNldClcbiB7XG5AQCAtODU5LDIwICs4MjksMjAgQEAgc3RhdGljIHNzaXplX3Qgcnhna19jb25zdHJ1Y3RfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiAtRVBST1RPO1xuIFxuLVx0YS5hcHBkYXRhX2xlbiA9IGh0b25sKGFwcGRhdGEtXHUwMDNlbGVuKTtcbitcdGEuYXBwZGF0YV9sZW4gPSBodG9ubChhcHBkYXRhLVx1MDAzZWRhdGFsZW4pO1xuIFxuIFx0cmV0ID0gc2tiX3N0b3JlX2JpdHMocmVzcG9uc2UsIG9mZnNldCwgXHUwMDI2YSwgc2l6ZW9mKGEpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXHRvZmZzZXQgKz0gc2l6ZW9mKGEpO1xuIFxuLVx0aWYgKGFwcGRhdGEtXHUwMDNlbGVuKSB7XG4tXHRcdHJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIGFwcGRhdGEtXHUwMDNlZGF0YSwgYXBwZGF0YS1cdTAwM2VsZW4pO1xuK1x0aWYgKGFwcGRhdGEtXHUwMDNlZGF0YWxlbikge1xuK1x0XHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBhcHBkYXRhLVx1MDAzZWRhdGEsIGFwcGRhdGEtXHUwMDNlZGF0YWxlbik7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0b2Zmc2V0ICs9IGFwcGRhdGEtXHUwMDNlbGVuO1xuK1x0XHRvZmZzZXQgKz0gYXBwZGF0YS1cdTAwM2VkYXRhbGVuO1xuIFxuLVx0XHRyZXQgPSByeGdrX3BhZF9vdXQocmVzcG9uc2UsIGFwcGRhdGEtXHUwMDNlbGVuLCBvZmZzZXQpO1xuK1x0XHRyZXQgPSByeGdrX3BhZF9vdXQocmVzcG9uc2UsIGFwcGRhdGEtXHUwMDNlZGF0YWxlbiwgb2Zmc2V0KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRvZmZzZXQgKz0gcmV0O1xuQEAgLTg5MCw3ICs4NjAsNyBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0cmV0ID0gc2tiX3N0b3JlX2JpdHMocmVzcG9uc2UsIG9mZnNldCwgXHUwMDI2Yiwgc2l6ZW9mKGIpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4tXHRyZXR1cm4gc2l6ZW9mKGEpICsgeGRyX3JvdW5kX3VwKGFwcGRhdGEtXHUwMDNlbGVuKSArIHNpemVvZihiKTtcbitcdHJldHVybiBzaXplb2YoYSkgKyB4ZHJfcm91bmRfdXAoYXBwZGF0YS1cdTAwM2VkYXRhbGVuKSArIHNpemVvZihiKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3Qgcnhna19lbmNyeXB0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG5AQCAtOTIzLDcgKzg5Myw3IEBAIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfZW5jcnlwdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuICAqL1xuIHN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhKVxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKmFwcGRhdGEpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AsICpyc3A7XG4gXHRzdHJ1Y3Qgcnhna19jb250ZXh0ICpnaztcbkBAIC05MzYsNyArOTA2LDcgQEAgc3RhdGljIGludCByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdGlmIChJU19FUlIoZ2spKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihnayk7XG4gXG4tXHRhdXRoX2xlbiA9IDIwICsgKDQgKyBhcHBkYXRhLVx1MDAzZWxlbikgKyAxMiArICgxICsgNCkgKiA0O1xuK1x0YXV0aF9sZW4gPSAyMCArICg0ICsgYXBwZGF0YS1cdTAwM2VkYXRhbGVuKSArIDEyICsgKDEgKyA0KSAqIDQ7XG4gXHRhdXRoeF9sZW4gPSBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIoZ2stXHUwMDNla3JiNSwgS1JCNV9FTkNSWVBUX01PREUsXG4gXHRcdFx0XHRcdFx0YXV0aF9sZW4sIFx1MDAyNmF1dGhfb2Zmc2V0KTtcbiBcdGxlbiA9IHNpemVvZihzdHJ1Y3QgcnhycGNfd2lyZV9oZWFkZXIpICtcbkBAIC0xMDExLDY2ICs5ODEsMzYgQEAgc3RhdGljIGludCByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiAgKiBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHBhY2tldC5cbiAgKi9cbiBzdGF0aWMgaW50IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSlcbitcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcbiB7XG4tXHRfZW50ZXIoXCJ7JWQsJXh9XCIsIGNvbm4tXHUwMDNlZGVidWdfaWQsIGtleV9zZXJpYWwoY29ubi1cdTAwM2VrZXkpKTtcbitcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIGR1bW15ID0ge30sICphcHBkYXRhID0gXHUwMDI2ZHVtbXk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0X2VudGVyKFwieyVkLCV1LCV4LCV4fVwiLFxuK1x0ICAgICAgIGNvbm4tXHUwMDNlZGVidWdfaWQsIGNvbm4tXHUwMDNlc2VydmljZV9pZCxcbitcdCAgICAgICBrZXlfc2VyaWFsKGNvbm4tXHUwMDNla2V5KSwga2V5X3NlcmlhbChjb25uLVx1MDAzZWJ1bmRsZS1cdTAwM2VhcHBfZGF0YSkpO1xuIFxuIFx0aWYgKGtleV92YWxpZGF0ZShjb25uLVx1MDAzZWtleSkgXHUwMDNjIDApXG4gXHRcdHJldHVybiByeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIFJYR0tfRVhQSVJFRCwgLUVQUk9UTyxcbiBcdFx0XHRcdFx0cnhna19hYm9ydF9jaGFsbF9rZXlfZXhwaXJlZCk7XG4gXG4tXHRyZXR1cm4gcnhna19jb25zdHJ1Y3RfcmVzcG9uc2UoY29ubiwgY2hhbGxlbmdlLCBhcHBkYXRhKTtcbi19XG4tXG4tc3RhdGljIGludCByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlX25vX2FwcGRhdGEoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4tXHRcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcbi17XG4tXHRzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9O1xuLVxuLVx0cmV0dXJuIHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UoY29ubiwgY2hhbGxlbmdlLCBcdTAwMjZhcHBkYXRhKTtcbi19XG4tXG4tLyoqXG4tICogcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UgLSBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHdpdGggYXBwZGF0YVxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgdG8gcmVzcG9uZCB0b1xuLSAqIEBhcHBkYXRhOiBUaGUgYXBwbGljYXRpb24gZGF0YSB0byBpbmNsdWRlIGluIHRoZSBSRVNQT05TRSBhdXRoZW50aWNhdG9yXG4tICpcbi0gKiBBbGxvdyBhIGtlcm5lbCBhcHBsaWNhdGlvbiB0byByZXNwb25kIHRvIGEgQ0hBTExFTkdFIHdpdGggYXBwbGljYXRpb24gZGF0YVxuLSAqIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBSeEdLIFJFU1BPTlNFIEF1dGhlbnRpY2F0b3IuXG4tICpcbi0gKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4tICovXG4taW50IHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSlcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKmNzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0cmV0dXJuIHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UoY3NwLVx1MDAzZWNoYWxsLmNvbm4sIGNoYWxsZW5nZSwgYXBwZGF0YSk7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UpO1xuLVxuLS8qXG4tICogUGFyc2Ugc2VuZG1zZygpIGNvbnRyb2wgbWVzc2FnZSBhbmQgcmVzcG9uZCB0byBjaGFsbGVuZ2UuICBXZSBuZWVkIHRvIHNlZSBpZlxuLSAqIHRoZXJlJ3MgYW4gYXBwZGF0YSB0byBmaXNoIG91dC5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4Z2tfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZylcbi17XG4tXHRzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9O1xuLVx0c3RydWN0IGNtc2doZHIgKmNtc2c7XG4tXG4tXHRmb3JfZWFjaF9jbXNnaGRyKGNtc2csIG1zZykge1xuLVx0XHRpZiAoY21zZy1cdTAwM2VjbXNnX2xldmVsICE9IFNPTF9SWFJQQyB8fFxuLVx0XHQgICAgY21zZy1cdTAwM2VjbXNnX3R5cGUgIT0gUlhSUENfUkVTUF9SWEdLX0FQUERBVEEpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChhcHBkYXRhLmRhdGEpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdGFwcGRhdGEuZGF0YSA9IENNU0dfREFUQShjbXNnKTtcbi1cdFx0YXBwZGF0YS5sZW4gPSBjbXNnLVx1MDAzZWNtc2dfbGVuIC0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKTtcbitcdGlmIChjb25uLVx1MDAzZWJ1bmRsZS1cdTAwM2VhcHBfZGF0YSkge1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRcdGFwcGRhdGEgPSAoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKilcbitcdFx0XHR1c2VyX2tleV9wYXlsb2FkX3JjdShjb25uLVx1MDAzZWJ1bmRsZS1cdTAwM2VhcHBfZGF0YSk7XG4rXHRcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmFwcGRhdGEtXHUwMDNlcmVmKSlcbitcdFx0XHRhcHBkYXRhID0gTlVMTDtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdGlmICghYXBwZGF0YSlcbitcdFx0XHRyZXR1cm4gcnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBSWEdLX0VYUElSRUQsIC1FS0VZUkVWT0tFRCxcbitcdFx0XHRcdFx0XHRyeGdrX2Fib3J0X2NoYWxsX2tleV9leHBpcmVkKTtcbiBcdH1cbiBcbi1cdHJldHVybiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UsIFx1MDAyNmFwcGRhdGEpO1xuK1x0cmV0ID0gcnhna19jb25zdHJ1Y3RfcmVzcG9uc2UoY29ubiwgY2hhbGxlbmdlLCBhcHBkYXRhKTtcbitcbitcdGlmIChhcHBkYXRhICE9IFx1MDAyNmR1bW15KVxuK1x0XHRwdXRfdXNlcl9rZXlfcGF5bG9hZChhcHBkYXRhKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qXG5AQCAtMTM0Niw5ICsxMjg2LDcgQEAgY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHJ4Z2tfeWZzID0ge1xuIFx0LmZyZWVfY2FsbF9jcnlwdG9cdFx0PSByeGdrX2ZyZWVfY2FsbF9jcnlwdG8sXG4gXHQuaXNzdWVfY2hhbGxlbmdlXHRcdD0gcnhna19pc3N1ZV9jaGFsbGVuZ2UsXG4gXHQudmFsaWRhdGVfY2hhbGxlbmdlXHRcdD0gcnhna192YWxpZGF0ZV9jaGFsbGVuZ2UsXG4tXHQuY2hhbGxlbmdlX3RvX3JlY3Ztc2dcdFx0PSByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnLFxuLVx0LnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2VcdD0gcnhna19zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxuLVx0LnJlc3BvbmRfdG9fY2hhbGxlbmdlXHRcdD0gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZV9ub19hcHBkYXRhLFxuK1x0LnJlc3BvbmRfdG9fY2hhbGxlbmdlXHRcdD0gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZSxcbiBcdC52ZXJpZnlfcmVzcG9uc2VcdFx0PSByeGdrX3ZlcmlmeV9yZXNwb25zZSxcbiBcdC5jbGVhclx0XHRcdFx0PSByeGdrX2NsZWFyLFxuIFx0LmRlZmF1bHRfZGVjb2RlX3RpY2tldFx0XHQ9IHJ4Z2tfeWZzX2RlY29kZV90aWNrZXQsXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4a2FkLmMgYi9uZXQvcnhycGMvcnhrYWQuY1xuaW5kZXggY2E5ZjBlODJjYjlhYzcuLmU1NWJmY2ExMGUxYTk0IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL3J4a2FkLmNcbisrKyBiL25ldC9yeHJwYy9yeGthZC5jXG5AQCAtNzQ4LDMyICs3NDgsNiBAQCBzdGF0aWMgaW50IHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLypcbi0gKiBSeEtBRCBkb2VzIGF1dG9tYXRpYyByZXNwb25zZSBvbmx5IGFzIHRoZXJlJ3Mgbm90aGluZyB0byBtYW5hZ2UgdGhhdCBpc24ndFxuLSAqIGFscmVhZHkgaW4gdGhlIGtleS5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4a2FkX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdFx0ICAgICAgc3RydWN0IG1zZ2hkciAqbXNnKVxuLXtcbi1cdHJldHVybiAtRUlOVkFMO1xuLX1cbi1cbi0vKipcbi0gKiByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UgLSBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHdpdGggYXBwZGF0YVxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgdG8gcmVzcG9uZCB0b1xuLSAqXG4tICogQWxsb3cgYSBrZXJuZWwgYXBwbGljYXRpb24gdG8gcmVzcG9uZCB0byBhIENIQUxMRU5HRS5cbi0gKlxuLSAqIFJldHVybjogJTAgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbi0gKi9cbi1pbnQgcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTtcbi1cbi1cdHJldHVybiByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZShjc3AtXHUwMDNlY2hhbGwuY29ubiwgY2hhbGxlbmdlKTtcbi19XG4tRVhQT1JUX1NZTUJPTChyeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UpO1xuLVxuIC8qIERlY3J5cHQgZGF0YSBpbi1wbGFjZSB1c2luZyBERVMtUENCQy4gIEBsZW4gbXVzdCBiZSBhIG11bHRpcGxlIG9mIDguICovXG4gVklTSUJMRV9JRl9LVU5JVCB2b2lkIGRlc19wY2JjX2RlY3J5cHRfaW5wbGFjZShjb25zdCBzdHJ1Y3QgZGVzX2N0eCAqa2V5LFxuIFx0XHRcdFx0XHQgICAgICAgX19sZTY0IGl2LCB1OCAqZGF0YSwgc2l6ZV90IGxlbilcbkBAIC0xMTM0LDcgKzExMDgsNiBAQCBjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgcnhrYWQgPSB7XG4gXHQuZnJlZV9jYWxsX2NyeXB0b1x0XHQ9IHJ4a2FkX2ZyZWVfY2FsbF9jcnlwdG8sXG4gXHQuaXNzdWVfY2hhbGxlbmdlXHRcdD0gcnhrYWRfaXNzdWVfY2hhbGxlbmdlLFxuIFx0LnZhbGlkYXRlX2NoYWxsZW5nZVx0XHQ9IHJ4a2FkX3ZhbGlkYXRlX2NoYWxsZW5nZSxcbi1cdC5zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlXHQ9IHJ4a2FkX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UsXG4gXHQucmVzcG9uZF90b19jaGFsbGVuZ2VcdFx0PSByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZSxcbiBcdC52ZXJpZnlfcmVzcG9uc2VcdFx0PSByeGthZF92ZXJpZnlfcmVzcG9uc2UsXG4gXHQuY2xlYXJcdFx0XHRcdD0gcnhrYWRfY2xlYXIsXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3NlbmRtc2cuYyBiL25ldC9yeHJwYy9zZW5kbXNnLmNcbmluZGV4IGVkMmM5YTUxMDA1YWRlLi4yMjVlZWM0MTBiZWRjOCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9zZW5kbXNnLmNcbisrKyBiL25ldC9yeHJwYy9zZW5kbXNnLmNcbkBAIC00NTMsOSArNDUzLDYgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFxuIHN1Y2Nlc3M6XG4gXHRyZXQgPSBjb3BpZWQ7XG4tXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBjYWxsLVx1MDAzZWVycm9yIFx1MDAzYyAwKVxuLVx0XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuIG91dDpcbiBcdGNhbGwtXHUwMDNldHhfcGVuZGluZyA9IHR4YjtcbiBcdF9sZWF2ZShcIiA9ICVkXCIsIHJldCk7XG5AQCAtNDY3LDggKzQ2NCwxNCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRyZXR1cm4gY2FsbC1cdTAwM2VlcnJvcjtcbiBcbiBtYXliZV9lcnJvcjpcbi1cdGlmIChjb3BpZWQpXG4rXHRpZiAoY29waWVkKSB7XG4rXHRcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgY2FsbC1cdTAwM2VlcnJvciBcdTAwM2MgMCkge1xuK1x0XHRcdHJldCA9IGNhbGwtXHUwMDNlZXJyb3I7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbiBcdFx0Z290byBzdWNjZXNzO1xuK1x0fVxuIFx0Z290byBvdXQ7XG4gXG4gZWZhdWx0OlxuQEAgLTUwMyw2ICs1MDYsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gc3RhdGljIGludCByeHJwY19zZW5kbXNnX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfc2VuZF9wYXJhbXMgKnApXG4ge1xuIFx0c3RydWN0IGNtc2doZHIgKmNtc2c7XG4rXHRrZXlfc2VyaWFsX3Qga2V5X2lkO1xuK1x0a2V5X3JlZl90IGtleTtcbiBcdGJvb2wgZ290X3VzZXJfSUQgPSBmYWxzZTtcbiBcdGludCBsZW47XG4gXG5AQCAtNTg3LDYgKzU5MiwxOCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyAqcClcbiBcdFx0XHRcdHJldHVybiAtRVJBTkdFO1xuIFx0XHRcdGJyZWFrO1xuIFxuK1x0XHRjYXNlIFJYUlBDX1JFU1BPTlNFX0FQUERBVEE6XG4rXHRcdFx0aWYgKGxlbiAhPSBzaXplb2Yoa2V5X3NlcmlhbF90KSlcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdGlmIChwLVx1MDAzZWNhbGwuYXBwX2RhdGEpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRrZXlfaWQgPSAqKGtleV9zZXJpYWxfdCAqKUNNU0dfREFUQShjbXNnKTtcbitcdFx0XHRrZXkgPSBsb29rdXBfdXNlcl9rZXkoa2V5X2lkLCAwLCBLRVlfTkVFRF9TRUFSQ0gpO1xuK1x0XHRcdGlmIChJU19FUlIoa2V5KSlcbitcdFx0XHRcdHJldHVybiBQVFJfRVJSKGtleSk7XG4rXHRcdFx0cC1cdTAwM2VjYWxsLmFwcF9kYXRhID0ga2V5X3JlZl90b19wdHIoa2V5KTtcbitcdFx0XHRicmVhaztcbitcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuQEAgLTc4Niw2ICs4MDMsNyBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcbiBlcnJvcl9yZWxlYXNlX3NvY2s6XG4gXHRyZWxlYXNlX3NvY2soXHUwMDI2cngtXHUwMDNlc2spO1xuK1x0a2V5X3B1dChwLmNhbGwuYXBwX2RhdGEpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3NlcnZlcl9rZXkuYyBiL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmNcbmluZGV4IDNlZmUxMDRiMTkzMGNiLi5mYzZmNDc4ZTE3NjJhNyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmNcbisrKyBiL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmNcbkBAIC0xNzMsNDMgKzE3MywzIEBAIGludCByeHJwY19zb2NrX3NldF9zZWN1cml0eV9rZXlyaW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGtleSAqa2V5cmluZylcbiBcdHJldHVybiByZXQ7XG4gfVxuIEVYUE9SVF9TWU1CT0wocnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyk7XG4tXG4tLyoqXG4tICogcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlIC0gU2V0IHRoZSBtYW5hZ2UtcmVzcG9uc2UgZmxhZyBmb3IgYSBrZXJuZWwgc2VydmljZVxuLSAqIEBzazogVGhlIHNvY2tldCB0byBzZXQgdGhlIGtleXJpbmcgb25cbi0gKiBAc2V0OiBUcnVlIHRvIHNldCwgZmFsc2UgdG8gY2xlYXIgdGhlIGZsYWdcbi0gKlxuLSAqIFNldCB0aGUgZmxhZyBvbiBhbiByeHJwYyBzb2NrZXQgdG8gc2F5IHRoYXQgdGhlIGNhbGxlciB3YW50cyB0byBtYW5hZ2UgdGhlXG4tICogUkVTUE9OU0UgcGFja2V0IGFuZCB0aGUgdXNlci1kZWZpbmVkIGRhdGEgaXQgbWF5IGNvbnRhaW4uICBTZXR0aW5nIHRoaXNcbi0gKiBtZWFucyB0aGF0IHJlY3Ztc2coKSB3aWxsIHJldHVybiBtZXNzYWdlcyB3aXRoIFJYUlBDX0NIQUxMRU5HRUQgaW4gdGhlXG4tICogY29udHJvbCBtZXNzYWdlIGJ1ZmZlciBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFsbGVuZ2UuXG4tICpcbi0gKiBUaGUgdXNlciBzaG91bGQgcmVzcG9uZCB0byB0aGUgY2hhbGxlbmdlIGJ5IHBhc3NpbmcgUlhSUENfUkVTUE9ORCBvclxuLSAqIFJYUlBDX1JFU1BPTkRfQUJPUlQgY29udHJvbCBtZXNzYWdlcyB3aXRoIHNlbmRtc2coKSB0byB0aGUgc2FtZSBjYWxsLlxuLSAqIFN1cHBsZW1lbnRhcnkgY29udHJvbCBtZXNzYWdlcywgc3VjaCBhcyBSWFJQQ19SRVNQX1JYR0tfQVBQREFUQSwgbWF5IGJlXG4tICogaW5jbHVkZWQgdG8gaW5kaWNhdGUgdGhlIHBhcnRzIHRoZSB1c2VyIHdhbnRzIHRvIHN1cHBseS5cbi0gKlxuLSAqIFRoZSBzZXJ2ZXIgd2lsbCBiZSBwYXNzZWQgdGhlIHJlc3BvbnNlIGRhdGEgd2l0aCBhIFJYUlBDX1JFU1BPTkRFRCBjb250cm9sXG4tICogbWVzc2FnZSB3aGVuIGl0IGdldHMgdGhlIGZpcnN0IGRhdGEgZnJvbSBlYWNoIGNhbGwuXG4tICpcbi0gKiBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IGhvbm91cmVkIGJ5IHNlY3VyaXR5IGNsYXNzZXMgdGhhdCBuZWVkIGF1eGlsaWFyeSBkYXRhXG4tICogKGUuZy4gUnhHSykuICBUaG9zZSB0aGF0IGRvbid0IG9mZmVyIHRoZSBmYWNpbGl0eSAoZS5nLiBSeEtBRCkgcmVzcG9uZFxuLSAqIHdpdGhvdXQgY29uc3VsdGluZyB1c2Vyc3BhY2UuXG4tICpcbi0gKiBSZXR1cm46IFRoZSBwcmV2aW91cyBzZXR0aW5nLlxuLSAqL1xuLWludCByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2Uoc3RydWN0IHNvY2sgKnNrLCBib29sIHNldClcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzayk7XG4tXHRpbnQgcmV0O1xuLVxuLVx0bG9ja19zb2NrKHNrKTtcbi1cdHJldCA9ICEhdGVzdF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdGlmIChzZXQpXG4tXHRcdHNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdGVsc2Vcbi1cdFx0Y2xlYXJfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcdTAwMjZyeC1cdTAwM2VmbGFncyk7XG4tXHRyZWxlYXNlX3NvY2soc2spO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2UpO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG5pbmRleCA2Zjg4YjUwN2Y5Mjc5MS4uOTBjMWJkNWQ3ZGZlY2YgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG4rKysgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG5AQCAtNjcsNiArNjcsNyBAQCBpbnQgdXNlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIFx0dXBheWxvYWQgPSBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCBkYXRhbGVuKTtcbiBcdGlmICghdXBheWxvYWQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNnVwYXlsb2FkLVx1MDAzZXJlZiwgMSk7XG4gXG4gXHQvKiBhdHRhY2ggdGhlIGRhdGEgKi9cbiBcdHByZXAtXHUwMDNlcXVvdGFsZW4gPSBkYXRhbGVuO1xuQEAgLTg4LDEyICs4OSwyMiBAQCBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2ZyZWVfcHJlcGFyc2UpO1xuIFxuIHN0YXRpYyB2b2lkIHVzZXJfZnJlZV9wYXlsb2FkX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4ge1xuLVx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQ7XG4rXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZCA9XG4rXHRcdGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCwgcmN1KTtcbiBcbi1cdHBheWxvYWQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQsIHJjdSk7XG4gXHRrZnJlZV9zZW5zaXRpdmUocGF5bG9hZCk7XG4gfVxuIFxuKy8qXG4rICogRnJlZSBhIHVzZXIgZGVmaW5lZCBrZXkgcGF5bG9hZC5cbisgKi9cbit2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKVxuK3tcbitcdGlmIChwYXlsb2FkIFx1MDAyNlx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cGF5bG9hZC1cdTAwM2VyZWYpKVxuK1x0XHRjYWxsX3JjdShcdTAwMjZwYXlsb2FkLVx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocHV0X3VzZXJfa2V5X3BheWxvYWQpO1xuK1xuIC8qXG4gICogdXBkYXRlIGEgdXNlciBkZWZpbmVkIGtleVxuICAqIC0gdGhlIGtleSdzIHNlbWFwaG9yZSBpcyB3cml0ZS1sb2NrZWRcbkBAIC0xMTUsOCArMTI2LDcgQEAgaW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbiBcdHJjdV9hc3NpZ25fa2V5cG9pbnRlcihrZXksIHByZXAtXHUwMDNlcGF5bG9hZC5kYXRhWzBdKTtcbiBcdHByZXAtXHUwMDNlcGF5bG9hZC5kYXRhWzBdID0gTlVMTDtcbiBcbi1cdGlmICh6YXApXG4tXHRcdGNhbGxfcmN1KFx1MDAyNnphcC1cdTAwM2VyY3UsIHVzZXJfZnJlZV9wYXlsb2FkX3JjdSk7XG4rXHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh6YXApO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodXNlcl91cGRhdGUpO1xuQEAgLTEzNCw3ICsxNDQsNyBAQCB2b2lkIHVzZXJfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSlcbiBcbiBcdGlmICh1cGF5bG9hZCkge1xuIFx0XHRyY3VfYXNzaWduX2tleXBvaW50ZXIoa2V5LCBOVUxMKTtcbi1cdFx0Y2FsbF9yY3UoXHUwMDI2dXBheWxvYWQtXHUwMDNlcmN1LCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3UpO1xuK1x0XHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh1cGF5bG9hZCk7XG4gXHR9XG4gfVxuIFxuQEAgLTE0Nyw5ICsxNTcsOCBAQCB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXG4ge1xuIFx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbiBcbi1cdGtmcmVlX3NlbnNpdGl2ZSh1cGF5bG9hZCk7XG4rXHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh1cGF5bG9hZCk7XG4gfVxuLVxuIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfZGVzdHJveSk7XG4gXG4gLypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjUzOjUzLjgwMDU1MzEwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MDY4NTMxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQUZTL1J4UlBDIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGluIGZyb250IG9mIG1lLCBhbmQgaXQgbG9va3MgbGlrZSBhIGZhaXJseSBzaWduaWZpY2FudCByZWZhY3RvciBvZiB0aGUgQUZTIGFuZCBSeFJQQyBzdWJzeXN0ZW1zLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIG1vcmUgdGhhbiBqdXN0IGEgbWlub3IgdHdlYWs7IGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgY29yZSBuZXR3b3JrIGFuZCBmaWxlc3lzdGVtIGludGVyYWN0aW9uLiBJdCdzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGxvdy1sZXZlbCBzdHVmZiwgc3BlY2lmaWNhbGx5IHRoZSB3YXkgdGhlIGtlcm5lbCBoYW5kbGVzIFJ4UlBDIHJlc3BvbnNlcyBhbmQgb3V0LW9mLWJhbmQgbWVzc2FnZXMsIGFuZCBob3cgQUZTIGludGVyYWN0cyB3aXRoIFJ4UlBDLlxuXG5Fc3NlbnRpYWxseSwgdGhleSdyZSByZW1vdmluZyB0aGUgYHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZWAgbG9naWMgYW5kIGdldHRpbmcgcmlkIG9mIHRoZSBPT0IgbWVzc2FnZSBoYW5kbGluZyBpbiBSeFJQQyBlbnRpcmVseS4gSW5zdGVhZCwgdGhleSdyZSBjcmVhdGluZyBhcHBsaWNhdGlvbiBkYXRhIGZvciBSeEdLIHJlc3BvbnNlcyB3aXRoIHRoaXMgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIGZ1bmN0aW9uIGFuZCBzdG9yaW5nIGl0IGluIGEga2V5LiBUaGF0IGtleSBpcyB0aGVuIGZlZCBpbnRvIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAsIHdoaWNoIGlzIGFsc28gYmVpbmcgbW9kaWZpZWQgdG8gYWNjZXB0IHRoaXMgbmV3IGBhcHBfZGF0YWAgcGFyYW1ldGVyLiBUaGUgY3JpdGljYWwgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYCBmdW5jdGlvbiBpcyBnZXR0aW5nIHVwZGF0ZWQgdG8gY2FsbCBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAuIEFuZCwgb2YgY291cnNlLCB0aGV5J3JlIGRlbGV0aW5nIGBvb2IuY2AgZnJvbSB0aGUgYG5ldC9yeHJwYy9gIGRpcmVjdG9yeS5cblxuR2l2ZW4gdGhpcywgdGhpcyB3aWxsIGRlZmluaXRlbHkgY2hhbmdlIGV4ZWN1dGlvbiBmbG93LCBzbyBmdXp6aW5nIGlzIGEgbXVzdC4gV2UgbmVlZCB0byBleHBvc2UgdGhpcyBwYXRjaCB0byBhIGJhdHRlcnkgb2YgdGVzdHMuXG5cblRvIHZlcmlmeSB0aGUgc2V0dXAsIGxldCdzIGxvb2sgYXQgdGhlIGtlcm5lbCBjb25maWdzLiBXZSdyZSBnb2luZyB0byBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgZW5hYmxlZDogYENPTkZJR19BRlNfRlNgLCBgQ09ORklHX0FGX1JYUlBDYCwgYENPTkZJR19SWEtBRGAsIGFuZCBgQ09ORklHX1JYR0tgICh0aGF0IGxhc3Qgb25lLCBpdCdzIG1lbnRpb25lZCBleHBsaWNpdGx5IGluIHRoZSBwYXRjaCwgc28gd2Ugc2hvdWxkIGRvdWJsZS1jaGVjaykuIFdlIHNob3VsZCBjaGVjayBgZnMvYWZzL0tjb25maWdgIGFuZCBgbmV0L3J4cnBjL0tjb25maWdgIGZvciB0aGUgY29uZmlnIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDA1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6NTQ6MDEuMjA3NDA4OTY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjA2NjYxODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSWEdLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9LY29uZmlnPTU4PWNvbmZpZyBSWEtBRFxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctNjUtXFxubmV0L3J4cnBjL0tjb25maWc6NjY6Y29uZmlnIFJYR0tcXG5uZXQvcnhycGMvS2NvbmZpZy02Ny1cXHRib29sIFxcXCJSeFJQQyBHU1NBUEkgc2VjdXJpdHlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjU0OjQzLjgxNDA3NzI1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDY2MTU3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBNb2RpZmljYXRpb25zKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgQ09ORklHX1JYR0tgIGFuZCBgQ09ORklHX1JYS0FEYCBhcmUgZGVmaW5pdGVseSBlbmFibGVkLCBhbmQgd2UgYWxzbyBoYXZlIGBDT05GSUdfQUZTX0ZTYCBhbmQgYENPTkZJR19BRl9SWFJQQ2AuIEdvb2QsIHRoYXQgbmFycm93cyB0aGluZ3MgZG93biBhIGJpdC4gTm93LCBsZXQncyBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcyBhbmQgZmluZCB0aGUgZm9jdXMgc3ltYm9scy5cblxuUmlnaHQsIHRoZSBtb2RpZmllZCBvciBuZXdseSBhZGRlZCBmdW5jdGlvbnMgYXJlOiBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAsIGBhZnNfY3JlYXRlX3lmc19jbV90b2tlbmAsIGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmAsIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAsIGByeHJwY19rZXJuZWxfcXVlcnlfa2V5YCwgYHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2VgLCBgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2VgLCBgcnhycGNfc2VuZG1zZ19jbXNnYCwgYW5kIGBwdXRfdXNlcl9rZXlfcGF5bG9hZGAuIFRoYXQncyBhIGRlY2VudC1zaXplZCBjaHVuayBvZiBjb2RlIHRvIHJldmlldywgaW5kaWNhdGluZyBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyByZWxhdGVkIHRvIEFGUyBhbmQgUnhSUEMsIHBvdGVudGlhbGx5IGludm9sdmluZyBrZXkgbWFuYWdlbWVudCBhbmQgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMuXG5cbkkgdGhpbmsgSSdsbCBzdGFydCBieSBmb2N1c2luZyBvbiBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAuIEl0J3MgbGlrZWx5IHRoYXQgYSBkYXRhIHN0cnVjdHVyZSBpcyBiZWluZyBjcmVhdGVkLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE3NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1NDo0Ny43MjA2OTU3NzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1NTQwNTM4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9jbV9zZWN1cml0eS5jPTI0PXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGtyYjVfZW5jdHlwZSk7XFxuLS1cXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0zMS0gKi9cXG5mcy9hZnMvY21fc2VjdXJpdHkuYzozMjppbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpXFxuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMzMte1xcbi0tXFxuZnMvYWZzL2ZzX3Byb2JlLmM9MjM4PWludCBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxcbi0tXFxuZnMvYWZzL2ZzX3Byb2JlLmMtMjQ3LVxcbmZzL2Fmcy9mc19wcm9iZS5jOjI0ODpcXHRyZXQgPSBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHNlcnZlciwga2V5KTtcXG5mcy9hZnMvZnNfcHJvYmUuYy0yNDktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaD0xMDg4PWV4dGVybiBib29sIGFmc19jbV9pbmNvbWluZ19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqKTtcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwOTItICovXFxuZnMvYWZzL2ludGVybmFsLmg6MTA5MzppbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpO1xcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwOTQtI2lmZGVmIENPTkZJR19SWEdLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjU0OjUyLjQ3NjEwOTI2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NjczOTQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYC4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSB0aGluZy4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIGZsb3csIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemF0aW9ucyB3ZSBjYW4gZXhwbG9yZSBpbiB0aGlzIGFyZWEuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLCBvciBtYXliZSBldmVuIHRoZSBoYXJkd2FyZSwgYmVnaW5zLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgaXQncyBkb2luZyBpbiBkZXRhaWwuIFRoaXMgaXNuJ3QganVzdCBhYm91dCByZWFkaW5nIHRoZSBjb2RlOyBpdCdzIGFib3V0IGNvbm5lY3RpbmcgaXQgdG8gbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIHRoZSBSWFJQQyBwcm90b2NvbCwgdGhlIGtlcm5lbCdzIGFyY2hpdGVjdHVyZSwgYW5kIGFsbCB0aGUgcmVsZXZhbnQgaGFyZHdhcmUgYW5kIGhvdyBpdCBmaXRzLiBJIG5lZWQgdG8gZm9ybSBhIG1lbnRhbCBtb2RlbCBvZiB3aGF0J3MgaGFwcGVuaW5nLiBUaW1lIHRvIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTk3NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjU0OjU1LjY1Mjg1MTg4MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkzNjAxOTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3Q9Nzk1PVRoZSBrZXJuZWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgYXMgZm9sbG93czpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QtNzk5LVxcdHN0cnVjdCByeHJwY19jYWxsICpcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0OjgwMDpcXHRyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QtODAxLVxcdFxcdFxcdFxcdHN0cnVjdCBzb2NrYWRkcl9yeHJwYyAqc3J4LFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC05ODktICAgICBUaGlzIGlzIHVzZWQgdG8gYWNjZXB0IGFuIGluY29taW5nIGNhbGwgYW5kIHRvIGFzc2lnbiBpdCBhIGNhbGwgSUQuICBUaGlzXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdDo5OTA6ICAgICBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKCkgYW5kIGNhbGxzIGFjY2VwdGVkIG11c3RcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0LTk5MS0gICAgIGJlIGVuZGVkIGluIHRoZSBzYW1lIHdheS5cXG4tLVxcbmZzL2Fmcy9yeHJwYy5jPTMzNz12b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXFxuLS1cXG5mcy9hZnMvcnhycGMuYy0zOTItXFx0LyogY3JlYXRlIGEgY2FsbCAqL1xcbmZzL2Fmcy9yeHJwYy5jOjM5MzpcXHRyeGNhbGwgPSByeHJwY19rZXJuZWxfYmVnaW5fY2FsbChjYWxsLVxcdTAwM2VuZXQtXFx1MDAzZXNvY2tldCwgY2FsbC1cXHUwMDNlcGVlcixcXG5mcy9hZnMvcnhycGMuYy0zOTQtXFx0XFx0XFx0XFx0XFx0IGNhbGwtXFx1MDAzZWtleSwgYXBwX2RhdGEsXFxuLS1cXG5pbmNsdWRlL25ldC9hZl9yeHJwYy5oPTUzPXZvaWQgcnhycGNfa2VybmVsX3NldF9ub3RpZmljYXRpb25zKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuaW5jbHVkZS9uZXQvYWZfcnhycGMuaC01NC1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHJ4cnBjX2tlcm5lbF9vcHMgKmFwcF9vcHMpO1xcbmluY2x1ZGUvbmV0L2FmX3J4cnBjLmg6NTU6c3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuaW5jbHVkZS9uZXQvYWZfcnhycGMuaC01Ni1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcixcXG4tLVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jPTMxND1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9wdXRfcGVlcik7XFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zMTYtLyoqXFxubmV0L3J4cnBjL2FmX3J4cnBjLmM6MzE3OiAqIHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsIC0gQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byBiZWdpbiBhIGNhbGxcXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zMTgtICogQHNvY2s6IFRoZSBzb2NrZXQgb24gd2hpY2ggdG8gbWFrZSB0aGUgY2FsbFxcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtMzQwLSAqL1xcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjM0MTpzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zNDItXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zOTctfVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjM5ODpFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKTtcXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zOTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjU1OjAwLjU0NjQ2MjAxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjQ4NTY2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIENhbGwgdG8gQWN0aW9uOiBgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZWAqKlxuXG5SaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzLiBcIkNoZWNrIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYC5cIiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgaW50ZXJlc3RpbmcuIFRoZSBuYW1pbmcgY29udmVudGlvbiwgd2l0aCB0aGF0IHVuZGVyc2NvcmUsIHN1Z2dlc3RzIGl0J3MgYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBtb2R1bGUgd2l0aGluIGEgbGFyZ2VyIHN5c3RlbSDigJMgbGlrZWx5IG9uZSB0aGF0J3MgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggc29tZSBmb3JtIG9mIGV4dGVybmFsIGlucHV0LCBwb3RlbnRpYWxseSBhc3luY2hyb25vdXMuIFRoZSB0ZXJtIFwiY2hhbGxlbmdlXCIgaXMgY3JpdGljYWwgaGVyZS4gSXQgaW1wbGllcyBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgc3lzdGVtLCBvciBhIGNvbXBvbmVudCwgaXMgYmVpbmcgdGVzdGVkLCBwcm9iZWQsIG9yIHBvc3NpYmx5IGV2ZW4gZXhwbG9pdGVkLiBUaGlzIGNvdWxkIGJlIGFueXRoaW5nIGZyb20gYSBzaW1wbGUgdmFsaWRhdGlvbiBjaGVjayB0byBhIG1vcmUgY29tcGxleCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHNjZW5hcmlvLlxuXG5NeSBpbW1lZGlhdGUgY29uc2lkZXJhdGlvbnMgYXJlIGZvY3VzZWQgb24gaXRzIGRlc2lnbi4gSXMgaXQgcHJvcGVybHkgc2FuZGJveGVkPyBBcmUgdGhlcmUgYWRlcXVhdGUgaW5wdXQgdmFsaWRhdGlvbiBjaGVja3MgaW4gcGxhY2UgdG8gcHJldmVudCBjb21tb24gYXR0YWNrcyBsaWtlIGluamVjdGlvbiBvciBidWZmZXIgb3ZlcmZsb3dzPyBXaGF0IGFyZSB0aGUgYWNjZXNzIGNvbnRyb2wgbWVjaGFuaXNtcyBhcm91bmQgdGhpcyBmdW5jdGlvbiDigJMgd2hvIG9yIHdoYXQgaXMgYWxsb3dlZCB0byB0cmlnZ2VyIGl0LCBhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzPyBEb2VzIGl0IGV4aGliaXQgYW55IGluaGVyZW50IHZ1bG5lcmFiaWxpdHkgZHVlIHRvIHRpbWluZyBvciByZXNvdXJjZSBleGhhdXN0aW9uPyBUaGUgXCJyZXNwb25kXCIgcGFydCBzdWdnZXN0cyB0aGF0IGl0J3MgZ29pbmcgdG8gYWN0aXZlbHkgZG8gc29tZXRoaW5nLCB3aGljaCByYXRjaGV0cyB1cCB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcyBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhbmQgdGhlIHBvdGVudGlhbCByZXNwb25zZSBvcHRpb25zIGlzIGtleS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJ3MgYXJjaGl0ZWN0dXJlIOKAkyBpdHMgaW50ZXJuYWwgbG9naWMsIGFueSBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG1vZHVsZXMgdG8gZm9ybXVsYXRlIGFuIGluZm9ybWVkIGp1ZGdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5MzMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1NTowNC4zMTEzMjQ4MzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NDUyMjA2NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnhna19yZXNwb25kX3RvX2NoYWxsZW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvcnhnay5jPTg5ND1zdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3J4cnBjL3J4Z2suYy05ODItICovXFxubmV0L3J4cnBjL3J4Z2suYzo5ODM6c3RhdGljIGludCByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbm5ldC9yeHJwYy9yeGdrLmMtOTg0LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcXG4tLVxcbm5ldC9yeHJwYy9yeGdrLmM9MTI3Mj1jb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgcnhna195ZnMgPSB7XFxuLS1cXG5uZXQvcnhycGMvcnhnay5jLTEyODgtXFx0LnZhbGlkYXRlX2NoYWxsZW5nZVxcdFxcdD0gcnhna192YWxpZGF0ZV9jaGFsbGVuZ2UsXFxubmV0L3J4cnBjL3J4Z2suYzoxMjg5OlxcdC5yZXNwb25kX3RvX2NoYWxsZW5nZVxcdFxcdD0gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZSxcXG5uZXQvcnhycGMvcnhnay5jLTEyOTAtXFx0LnZlcmlmeV9yZXNwb25zZVxcdFxcdD0gcnhna192ZXJpZnlfcmVzcG9uc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjU1OjA4LjI1NjU1MzA1OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgzMzk3OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBzdW1tYXJpemVkLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGlzIGNvZGUgYW5kIGl0cyBjb250ZXh0OlxuXG4qKkFuYWx5emluZyBgcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2VgKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0J3MgY2xlYXJseSBhIGZ1bmN0aW9uLCBsaWtlbHkgaW52b2x2ZWQgaW4gYSBjaGFsbGVuZ2UtcmVzcG9uc2UgYXV0aGVudGljYXRpb24gc2NoZW1lLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbWFwIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBLQUQgKG9yIHNpbWlsYXIpIGF1dGhlbnRpY2F0aW9uIGZsb3cuIElzIHRoaXMgb24gdGhlIGNsaWVudC1zaWRlLCB0aGUgc2VydmVyLXNpZGUsIG9yIGJvdGg/IFdoYXQgYXJlIHRoZSBpbnB1dHM/IFdoYXQgYXJlIHRoZSBleHBlY3RlZCBvdXRwdXRzPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHR5cGljYWwgc3RlcHMgaW52b2x2ZWQ6IGNoYWxsZW5nZSBnZW5lcmF0aW9uLCByZXNwb25zZSBjYWxjdWxhdGlvbiwgdmVyaWZpY2F0aW9uLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hhdCB0aGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBtaWdodCBiZSBoZXJlLiBJcyB0aGlzIHdoZXJlIHdlJ3JlIGhhbmRsaW5nIGtleSBkZXJpdmF0aW9uLCBjcnlwdG8sIG9yIG5vbmNlIGhhbmRsaW5nPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIHRpbWluZyBhdHRhY2tzLCBvciBwb3RlbnRpYWwgb3ZlcmZsb3cgaXNzdWVzPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgaXQgaGFuZGxlcyBlcnJvcnMgYW5kIHBvdGVudGlhbCBwcm90b2NvbCB2aW9sYXRpb25zLiBJcyB0aGVyZSBhbnkgb2J2aW91cyBsb2dnaW5nIHRoYXQgY291bGQgZXhwb3NlIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiwgb3IgaXMgdGhlIGZ1bmN0aW9uJ3Mgc2NvcGUgYnJvYWRlciB0aGFuIEkgaW5pdGlhbGx5IGFzc3VtZT8gVGltZSB0byBzdGFydCBkcmlsbGluZyBpbnRvIHRoZSBjb2RlLCBidXQgYmVmb3JlIEkgZG8sIEkgbmVlZCBhIHF1aWNrIG1lbnRhbCBjaGVja2xpc3Q6IHdoYXQncyB0aGUgZW52aXJvbm1lbnQgaXQncyBydW5uaW5nIGluPyBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIGl0IGhhdmU/IEFyZSB0aGVyZSBhbnkgcmVjZW50IGJ1ZyByZXBvcnRzIG9yIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgZnVuY3Rpb24gdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFuZCBtb3N0IGltcG9ydGFudGx5LCB3aGF0J3MgdGhlICpwdXJwb3NlKiBvZiB0aGlzIGludmVzdGlnYXRpb24/IFZ1bG5lcmFiaWxpdHkgYXNzZXNzbWVudD8gQ29kZSByZXZpZXc/IERlYnVnZ2luZz8gS25vd2luZyB0aGF0IHdpbGwgZGV0ZXJtaW5lIHdoZXJlIG15IGZvY3VzIGdvZXMgZmlyc3QuIEFscmlnaHQsIGxldCdzIGdldCBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTU0NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjU1OjExLjkzOTk1NDA2OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMTAzMTUxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvcnhrYWQuYz02NDI9aW50IHJ4a2FkX2luc2VydF9yZXNwb25zZV9oZWFkZXIoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuLS1cXG5uZXQvcnhycGMvcnhrYWQuYy02OTYtICovXFxubmV0L3J4cnBjL3J4a2FkLmM6Njk3OnN0YXRpYyBpbnQgcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxubmV0L3J4cnBjL3J4a2FkLmMtNjk4LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXFxuLS1cXG5uZXQvcnhycGMvcnhrYWQuYz0xMDk1PWNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGthZCA9IHtcXG4tLVxcbm5ldC9yeHJwYy9yeGthZC5jLTExMTAtXFx0LnZhbGlkYXRlX2NoYWxsZW5nZVxcdFxcdD0gcnhrYWRfdmFsaWRhdGVfY2hhbGxlbmdlLFxcbm5ldC9yeHJwYy9yeGthZC5jOjExMTE6XFx0LnJlc3BvbmRfdG9fY2hhbGxlbmdlXFx0XFx0PSByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZSxcXG5uZXQvcnhycGMvcnhrYWQuYy0xMTEyLVxcdC52ZXJpZnlfcmVzcG9uc2VcXHRcXHQ9IHJ4a2FkX3ZlcmlmeV9yZXNwb25zZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6NTU6MTMuOTUwOTk0NjMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODU3NTg3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHN1cHBvc2VkIHRvIHNvdW5kIGxpa2UgYW4gZXhwZXJ0OlxuXG4qKkRlZXAgRGl2ZTogYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gXCJhZnNfY3JlYXRlX3lmc19jbV90b2tlblwiLi4uIHRoYXQgaW1tZWRpYXRlbHkgc2lnbmFscyBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgQUZTIChBbmRyZXcgRmlsZSBTeXN0ZW0pIGludGVncmF0aW9uLCBsaWtlbHkgd2l0aGluIGEgWUZTIChsaWtlbHkgcmVmZXJyaW5nIHRvIHRoZSBJQk0gU3RlcmxpbmcgT3JkZXIgTWFuYWdlbWVudCBTeXN0ZW0sIGJhc2VkIG9uIGNvbnRleHQpIGNvbnRleHQsIGFuZCB0aGUgY3JlYXRpb24gb2YgYSB0b2tlbiBzcGVjaWZpY2FsbHkgZm9yIENsb3VkIE1hbmFnZW1lbnQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IG1lbnRhbGx5IHJlY29uc3RydWN0IHRoZSB0eXBpY2FsIGZsb3cgaGVyZS4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgdXNlciBhdXRoZW50aWNhdGlvbiwgYXV0aG9yaXphdGlvbiBjaGVja3Mgd2l0aGluIFlGUywgYW5kIHRoZW4gdGhlIGdlbmVyYXRpb24gb2YgYSB0ZW1wb3JhcnkgY3JlZGVudGlhbCBvciB0b2tlbiB0aGF0IEFGUyBjYW4gdXNlIHRvIGFjY2VzcyByZXNvdXJjZXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIElzIHRoaXMgYSBzaGFyZWQgdG9rZW4sIG9yIHNvbWV0aGluZyB0aWVkIHNwZWNpZmljYWxseSB0byBhIHVzZXIgc2Vzc2lvbiBvciBwcm9jZXNzPyBUaGUgc2Vuc2l0aXZpdHkgaGVyZSBpcyBoaWdoOiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBwcm9wZXIgcGVybWlzc2lvbnMgYW5kIGNvbnRyb2xzIGFyZSBpbiBwbGFjZS4gV2hhdCBhcmUgdGhlIGV4cGlyYXRpb24gcG9saWNpZXMgYW5kIHJldm9jYXRpb24gbWVjaGFuaXNtcz9cblxuSSdtIGluc3RhbnRseSB0aGlua2luZyBhYm91dCB0aGUgZGlmZmVyZW50IGxheWVycyBvZiBhYnN0cmFjdGlvbi4gSXMgdGhpcyB0b2tlbiBjcmVhdGlvbiBoYXBwZW5pbmcgZGlyZWN0bHkgd2l0aGluIHRoZSBjb3JlIFlGUyBjb2RlLCBvciBpcyB0aGVyZSBhbiBBUEkgYWJzdHJhY3Rpb24gb3IgbWlkZGxld2FyZSBpbnZvbHZlZD8gSWYgaXQncyB0aGUgbGF0dGVyLCB0aGVuIHRoZSBhcmNoaXRlY3R1cmUgd2lsbCBiZSBzbGlnaHRseSBtb3JlIHJvYnVzdC4gVGhpcyBhbHNvIGluZmx1ZW5jZXMgbXkgaW1tZWRpYXRlIG5lZWQgdG8gY2hlY2sgbG9nZ2luZy4gV2hhdCBsb2dzIGFyZSBhdmFpbGFibGU/IEkgbmVlZCB0byByZXZpZXcgdG8gdW5kZXJzdGFuZCB0aGUgaW5wdXQgcGFyYW1ldGVycyB0byB0aGlzIGZ1bmN0aW9uIC0gdGhlIGNvbnRleHQgZnJvbSB3aGljaCBpdCBpcyBjYWxsZWQsIHdobyBpcyBjYWxsaW5nIGl0LCBhbmQgdGhlIGRhdGEgYmVpbmcgdXNlZCB0byBlc3RhYmxpc2ggdGhpcyBBRlMgdG9rZW4uXG5cbkZ1cnRoZXJtb3JlLCBJIGhhdmUgdG8gYmUgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGZhaWx1cmUgc2NlbmFyaW9zLiBXaGF0IGhhcHBlbnMgaWYgQUZTIGlzIGRvd24sIG9yIGlmIG5ldHdvcmsgY29ubmVjdGl2aXR5IGlzIGRpc3J1cHRlZD8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBoYW5kbGUgZXJyb3JzLCB0aW1lb3V0cywgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZz8gRG9lcyBpdCBncmFjZWZ1bGx5IGRlZ3JhZGUgb3IgY3JlYXRlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBpbiBpdHMgZmFpbHVyZSBzdGF0ZXM/IEkgYW0gYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIGVkZ2UgY2FzZSBzY2VuYXJpb3MuXG5cbkxhc3RseSwgSSBoYXZlIHRvIGNvbXBhcmUgdGhpcyBpbXBsZW1lbnRhdGlvbiBhZ2FpbnN0IHN0YW5kYXJkIHByYWN0aWNlcy4gU2VjdXJpdHksIHBlcmZvcm1hbmNlLCBhbmQgYmVzdCBwcmFjdGljZXMgYXJlIHBhcmFtb3VudCBpbiB0b2tlbiBjcmVhdGlvbiAtIHRoZSBsZXZlbCBvZiBzZW5zaXRpdml0eSBpcyBjcml0aWNhbCBoZXJlLCBhbmQgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFyZWFzIHRoYXQgZGV2aWF0ZSBmcm9tIGluZHVzdHJ5IHN0YW5kYXJkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxNjcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1NToxOC4xMzY3NTYzOTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDczMjQxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2NtX3NlY3VyaXR5LmMtMjMtI2lmZGVmIENPTkZJR19SWEdLXFxuZnMvYWZzL2NtX3NlY3VyaXR5LmM6MjQ6c3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCB1MzIga3JiNV9lbmN0eXBlKTtcXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0yNS0jZW5kaWZcXG4tLVxcbmZzL2Fmcy9jbV9zZWN1cml0eS5jPTMyPWludCBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBrZXkgKmtleSlcXG4tLVxcbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTY4LVxcdFxcdGNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6XFxuZnMvYWZzL2NtX3NlY3VyaXR5LmM6Njk6XFx0XFx0XFx0cmV0ID0gYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc2VydmVyLCBrcmI1X2VuY3R5cGUpO1xcbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTcwLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvYWZzL2NtX3NlY3VyaXR5LmM9OTI9aW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldClcXG4tLVxcbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTE1MC0gKi9cXG5mcy9hZnMvY21fc2VjdXJpdHkuYzoxNTE6c3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCB1MzIgZW5jdHlwZSlcXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0xNTIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1NToyMC4wODQwODg2MjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MjM3MTM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGByeHJwY19zZW5kbXNnX2Ntc2dgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IHJpZ2h0IHRvIGl0LiBUaGUgZm9jdXMgaGVyZSBpcyBjbGVhcmx5IG9uIGByeHJwY19zZW5kbXNnX2Ntc2dgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoYXQgZnVuY3Rpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHNlbmRpbmcgbWVzc2FnZXMgd2l0aCBjb250cm9sIG1lc3NhZ2VzIGluIHRoZSBSWFJQQyBwcm90b2NvbC4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBpdCBoYW5kbGVzIHRoZSBjb25zdHJ1Y3Rpb24gYW5kIHRyYW5zbWlzc2lvbiBvZiB0aG9zZSBhbmNpbGxhcnkgZGF0YSBidWZmZXJzLiBJcyBpdCB0aGUgbWFpbiB3b3JraG9yc2UsIG9yIGEgaGVscGVyIGZ1bmN0aW9uPyBXaGF0J3MgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBhbmQgbmV0d29yayBzdGFjaz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgd2l0aCBsYXJnZXIgY29udHJvbCBtZXNzYWdlcyBvciBmcmFnbWVudGVkIHBheWxvYWRzPyBUaGlzIGlzIHdoZXJlIEknbGwgbmVlZCB0byBnbyBkZWVwLi4uIGxldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5NzgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1NToyMy41NTY0NjI5MjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTkzOTk1NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnhycGNfc2VuZG1zZ19jbXNnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9zZW5kbXNnLmM9MzIwPXN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4tLVxcbm5ldC9yeHJwYy9zZW5kbXNnLmMtNTA1LSAqL1xcbm5ldC9yeHJwYy9zZW5kbXNnLmM6NTA2OnN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zICpwKVxcbm5ldC9yeHJwYy9zZW5kbXNnLmMtNTA3LXtcXG4tLVxcbm5ldC9yeHJwYy9zZW5kbXNnLmM9Njc3PWludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3J4cnBjL3NlbmRtc2cuYy02OTUtXFxubmV0L3J4cnBjL3NlbmRtc2cuYzo2OTY6XFx0cmV0ID0gcnhycGNfc2VuZG1zZ19jbXNnKG1zZywgXFx1MDAyNnApO1xcbm5ldC9yeHJwYy9zZW5kbXNnLmMtNjk3LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1NToyNS41NTU4NjczMzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAxMDgyNjI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYHB1dF91c2VyX2tleV9wYXlsb2FkYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcHV0X3VzZXJfa2V5X3BheWxvYWRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGl0cyBpbnB1dHMsIGFuZCB3aGF0IGl0J3MgdWx0aW1hdGVseSBkb2luZyB3aXRoIHVzZXIga2V5cy4gVGhlcmUncyBhIHN1YnRsZSBudWFuY2UgaGVyZSBJIHNob3VsZCBub3Qgb3Zlcmxvb2suIEl04oCZcyBsaWtlbHkgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGtleSBtYW5hZ2VtZW50IGFuZCBhbnkgdnVsbmVyYWJpbGl0eSBoZXJlIGlzIGEgc2lnbmlmaWNhbnQgcmlzay4gSSB3b25kZXIgYWJvdXQgdGhlIHR5cGUtc2FmZXR5IGNoZWNrcz8gQXJlIHRoZXJlIHByb3BlciBpbnB1dCB2YWxpZGF0aW9ucywgbGlrZSBzYW5pdGl6aW5nIGlucHV0cyBhbmQgYm91bmRhcnkgY29uZGl0aW9ucz8gSSBuZWVkIHRvIGZvY3VzIG9uIHBvdGVudGlhbCB3ZWFrbmVzc2VzIGxpa2UgYnVmZmVyIG92ZXJmbG93cyBvciBpbmplY3Rpb24gdnVsbmVyYWJpbGl0aWVzLiBXZSBzaG91bGQgYWxzbyBjaGVjayBmb3IgcHJvcGVyIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGtleSBhbHJlYWR5IGV4aXN0cz8gV2hhdCBpZiB0aGUgc3RvcmFnZSBzeXN0ZW0gaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGU/IEFuZCwgaXMgdGhlcmUgYW55IGxvZ2dpbmcgdG8gdHJhY2sgdGhlIG9wZXJhdGlvbnM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDM1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6NTU6MjguNTY2Njk3OTA0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTk2MTcyNDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB1dF91c2VyX2tleV9wYXlsb2FkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUva2V5cy91c2VyLXR5cGUuaD00MD1leHRlcm4gdm9pZCB1c2VyX2ZyZWVfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XFxuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oOjQxOnZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpO1xcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC00Mi1leHRlcm4gaW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XFxuLS1cXG5uZXQvcnhycGMvcnhnay5jPTk4Mz1zdGF0aWMgaW50IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuLS1cXG5uZXQvcnhycGMvcnhnay5jLTEwMTEtXFx0aWYgKGFwcGRhdGEgIT0gXFx1MDAyNmR1bW15KVxcbm5ldC9yeHJwYy9yeGdrLmM6MTAxMjpcXHRcXHRwdXRfdXNlcl9rZXlfcGF5bG9hZChhcHBkYXRhKTtcXG5uZXQvcnhycGMvcnhnay5jLTEwMTMtXFx0cmV0dXJuIHJldDtcXG4tLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM9OTA9c3RhdGljIHZvaWQgdXNlcl9mcmVlX3BheWxvYWRfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTAwLSAqL1xcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTAxOnZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpXFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xMDIte1xcbi0tXFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xMDUtfVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTA2OkVYUE9SVF9TWU1CT0xfR1BMKHB1dF91c2VyX2tleV9wYXlsb2FkKTtcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEwNy1cXG4tLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM9MTEyPWludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEyOC1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjEyOTpcXHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh6YXApO1xcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTMwLVxcdHJldHVybiByZXQ7XFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTEzOD12b2lkIHVzZXJfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSlcXG4tLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTQ2LVxcdFxcdHJjdV9hc3NpZ25fa2V5cG9pbnRlcihrZXksIE5VTEwpO1xcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTQ3OlxcdFxcdHB1dF91c2VyX2tleV9wYXlsb2FkKHVwYXlsb2FkKTtcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE0OC1cXHR9XFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTE1Nj12b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE1OS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjE2MDpcXHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh1cGF5bG9hZCk7XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xNjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1NTozMS41NjI5MjA5NTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcwMDY3NzY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgRm9jdXMgZm9yIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBvcHRpbWl6YXRpb24gYW5kIHdoZXJlIHdlIHNob3VsZCBmb2N1cyBvdXIgZWZmb3J0cy4gSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgdGhlc2Ugc3ltYm9scyBhcyBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3Q6IGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCwgYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYCwgYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCwgYHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2VgLCBgcnhycGNfc2VuZG1zZ19jbXNnYCwgYW5kIGBwdXRfdXNlcl9rZXlfcGF5bG9hZGAuXG5cbk5vdywgbGV0J3MgcmVmaW5lIHRoaXMgYSBiaXQuIEkgbmVlZCB0byBjb25zaWRlciBmcmVxdWVuY3kgYW5kIGltcGFjdC4gYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCBpcyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGNhbGwgd2hpY2ggc3VnZ2VzdHMgaXQncyBsaWtlbHkgbm90IHRoZSBiaWdnZXN0IGJvdHRsZW5lY2suIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCBzb3VuZHMgaW5mcmVxdWVudCwgaXQgaXMgY2FsbGVkIHdoZW4gcmVzcG9uZGluZyB0byBhIGNoYWxsZW5nZSB3aGljaCBpcyBsZXNzIGNvbW1vbi4gYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIHJlbGF0ZXMgdG8gcHJvYmluZyBhIGZpbGVzZXJ2ZXIgYW5kIHRoZW4gd2UgaGF2ZSB0aGUgYHJ4cnBjX3NlbmRtc2dfY21zZ2AsIHdoaWNoIGhhcHBlbnMgd2hlbiBzZW5kaW5nIG1lc3NhZ2VzIHdpdGggY29udHJvbCBtZXNzYWdlcy5cblxuUmVmaW5pbmcgdGhlIGxpc3QsIGl0IGxvb2tzIGxpa2UgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgLCBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gLCBgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZWAsIGByeHJwY19zZW5kbXNnX2Ntc2dgLCBhbmQgYHB1dF91c2VyX2tleV9wYXlsb2FkYCBhcmUgdGhlIG9uZXMgdG8gZm9jdXMgb24uXG5cbkkgYWxzbyBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgQUZTX0ZTYCwgYEFGX1JYUlBDYCwgYFJYS0FEYCwgYW5kIGBSWEdLYC5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHRoYXQgYFJYR0tgIGlzIGluZGVlZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBZZXMsIGEgcXVpY2sgY2hlY2sgaW4gYG5ldC9yeHJwYy9LY29uZmlnYCBjb25maXJtcyBgY29uZmlnIFJYR0tgLiBBbmQsIHdhaXQsIGl0J3MgYSAqYm9vbCogd2hpY2ggbWF5IGhhdmUgaW1wbGljYXRpb25zIGZvciBob3cgaXQncyBoYW5kbGVkLiBUaGVuIEknbSB0aGlua2luZyBhYm91dCBgS0VZU2AuIEkgdGhpbmsgYENPTkZJR19LRVlTYCBpcyB1c3VhbGx5IGVuYWJsZWQsIHNvIGxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGF0LlxuXG5BbHJpZ2h0LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgdGhpbmsgSSd2ZSBnb3QgYSBzb2xpZCBzZXQgb2YgdGFyZ2V0cyBhbmQgY29uZmlncyB0byBrZWVwIGluIG1pbmQgbW92aW5nIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzM0LCJPdXRwdXRUb2tlbnMiOjE5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzo1NTozOS4yNjM2MDE2OTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njk1ODczNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiUlhLQURcIixcbiAgICBcIlJYR0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhXCIsXG4gICAgXCJhZnNfY3JlYXRlX3lmc19jbV90b2tlblwiLFxuICAgIFwicnhna19yZXNwb25kX3RvX2NoYWxsZW5nZVwiLFxuICAgIFwicnhycGNfc2VuZG1zZ19jbXNnXCIsXG4gICAgXCJwdXRfdXNlcl9rZXlfcGF5bG9hZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRlMgYW5kIFJ4UlBDIHN1YnN5c3RlbXMgdG8gaGFuZGxlIFJ4R0sgYXBwbGljYXRpb24gZGF0YSBpbnRlcm5hbGx5IHJhdGhlciB0aGFuIHJlbHlpbmcgb24gdXNlcnNwYWNlIE9PQiBtZXNzYWdlcy4gSXQgaW50cm9kdWNlcyBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAgdG8gZ2VuZXJhdGUgdGhlIGFwcCBkYXRhIGFuZCBwYXNzZXMgaXQgdG8gYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29yayBhbmQgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IGFsdGVycyBleGVjdXRpb24gZmxvdyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRlNfRlNcIixcbiAgICBcIkFGX1JYUlBDXCIsXG4gICAgXCJSWEtBRFwiLFxuICAgIFwiUlhHS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFcIixcbiAgICBcImFmc19jcmVhdGVfeWZzX2NtX3Rva2VuXCIsXG4gICAgXCJyeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlXCIsXG4gICAgXCJyeHJwY19zZW5kbXNnX2Ntc2dcIixcbiAgICBcInB1dF91c2VyX2tleV9wYXlsb2FkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGUyBhbmQgUnhSUEMgc3Vic3lzdGVtcyB0byBoYW5kbGUgUnhHSyBhcHBsaWNhdGlvbiBkYXRhIGludGVybmFsbHkgcmF0aGVyIHRoYW4gcmVseWluZyBvbiB1c2Vyc3BhY2UgT09CIG1lc3NhZ2VzLiBJdCBpbnRyb2R1Y2VzIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCB0byBnZW5lcmF0ZSB0aGUgYXBwIGRhdGEgYW5kIHBhc3NlcyBpdCB0byBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JrIGFuZCBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93IGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4db4m[1] Phase: Succeeded StartedAt: 2026-07-02 17:58:55 +0000 UTC FinishedAt: 2026-07-02 17:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4db4m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 17:58:55 +0000 UTC FinishedAt: 2026-07-02 17:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4db4m[2] Phase: Running StartedAt: 2026-07-02 17:58:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-07-02 17:58:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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-07-02 17:58:55 +0000 UTC FinishedAt: 2026-07-02 18:00:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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-07-02 17:58:55 +0000 UTC FinishedAt: 2026-07-02 17:59:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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-workflow4db4m/series-workflow4db4m-convert-artifact-1260500117/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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-07-02 18:00:06 +0000 UTC FinishedAt: 2026-07-02 18:34:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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-07-02 18:00:06 +0000 UTC FinishedAt: 2026-07-02 18:34:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6f8f979d-2f8a-4a2e-8b86-5f7c57c1c018,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-workflow4db4m/series-workflow4db4m-convert-artifact-1260500117/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": "98a4e32b-f3ea-47b1-b737-479c2892b72c", "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-workflow4db4m/series-workflow4db4m-build-action-2212629755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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-07-02 18:00:06 +0000 UTC FinishedAt: 2026-07-02 18:34:09 +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:*6f8f979d-2f8a-4a2e-8b86-5f7c57c1c018,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-workflow4db4m/series-workflow4db4m-convert-artifact-1260500117/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": "98a4e32b-f3ea-47b1-b737-479c2892b72c", "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-workflow4db4m/series-workflow4db4m-build-action-2212629755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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-07-02 18:34:34 +0000 UTC FinishedAt: 2026-07-02 18:34:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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-07-02 18:34:34 +0000 UTC FinishedAt: 2026-07-02 18:34:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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-07-02 18:34:34 +0000 UTC FinishedAt: 2026-07-02 18:35:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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-07-02 18:34:34 +0000 UTC FinishedAt: 2026-07-02 18:34:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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-workflow4db4m/series-workflow4db4m-convert-artifact-61256304/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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-07-02 18:35:23 +0000 UTC FinishedAt: 2026-07-02 18:38:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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-07-02 18:35:23 +0000 UTC FinishedAt: 2026-07-02 18:38:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*98a4e32b-f3ea-47b1-b737-479c2892b72c,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-workflow4db4m/series-workflow4db4m-build-action-2212629755/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-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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-07-02 18:38:43 +0000 UTC FinishedAt: 2026-07-02 18:38:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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-07-02 18:38:43 +0000 UTC FinishedAt: 2026-07-02 18:38:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Running StartedAt: 2026-07-02 18:38:43 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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: Running StartedAt: 2026-07-02 18:38:43 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*6f8f979d-2f8a-4a2e-8b86-5f7c57c1c018,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-workflow4db4m/series-workflow4db4m-convert-artifact-61256304/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4db4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"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":["afs_create_server_appdata","afs_create_yfs_cm_token","rxgk_respond_to_challenge","rxrpc_sendmsg_cmsg","put_user_key_payload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS","AF_RXRPC","RXKAD","RXGK"],"series_id":"4f7f8daa-a063-4165-89b2-c548f146aa15","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: Running StartedAt: 2026-07-02 18:38:43 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*6f8f979d-2f8a-4a2e-8b86-5f7c57c1c018,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-workflow4db4m/series-workflow4db4m-convert-artifact-61256304/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,}