Name: series-workflowcgvnz Phase: Running StartedAt: 2026-07-26 00:39:53 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgvnz[0] Phase: Running StartedAt: 2026-07-26 00:39:53 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgvnz[0].run-triage Phase: Running StartedAt: 2026-07-26 00:39:53 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgvnz[0].run-triage(0) Phase: Running StartedAt: 2026-07-26 00:39:53 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "AFS_FS", "RXKAD", "RXGK", "KEYS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "AFS_FS", "RXKAD", "RXGK", "KEYS" ], "series_id": "9436abf1-683f-41bd-b6a5-c12dbd804c37" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rxrpc_kernel_begin_call", "rxrpc_do_sendmsg", "rxrpc_recvmsg", "afs_create_server_appdata", "afs_fs_probe_fileserver", "user_preparse", "user_update", "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+CgkJCTx0ZD4yMDI2LzA3LzI2IDAxOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGX1JYUlBDJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtSWEtBRCYjMzQ7LAogICAgJiMzNDtSWEdLJiMzNDssCiAgICAmIzM0O0tFWVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyeHJwY19rZXJuZWxfYmVnaW5fY2FsbCYjMzQ7LAogICAgJiMzNDtyeHJwY19kb19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3J4cnBjX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7YWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YSYjMzQ7LAogICAgJiMzNDthZnNfZnNfcHJvYmVfZmlsZXNlcnZlciYjMzQ7LAogICAgJiMzNDt1c2VyX3ByZXBhcnNlJiMzNDssCiAgICAmIzM0O3VzZXJfdXBkYXRlJiMzNDssCiAgICAmIzM0O3B1dF91c2VyX2tleV9wYXlsb2FkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBvdXQtb2YtYmFuZCAoT09CKSBtZXNzYWdlIGhhbmRsaW5nIGluIFJ4UlBDIHdpdGggYSBrZXktYmFzZWQgYXBwcm9hY2ggZm9yIGNoYWxsZW5nZS1yZXNwb25zZSwgc3BlY2lmaWNhbGx5IGZvciBSeEdLLiBJdCBtb2RpZmllcyBjb3JlIFJ4UlBDIHNlbmQvcmVjdiBwYXRocywgQUZTIHNlcnZlciBwcm9iaW5nLCBhbmQgYWRkcyByZWZjb3VudGluZyB0byB1c2VyLWRlZmluZWQga2V5cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBhbmQgZmlsZXN5c3RlbSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc4YTYyYjBkMTI3ZTMyMWI5MzdkNzI5MzQ3YTliOWQ5NGYyNDY3ZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAwMToxMDo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9hZnMvY21fc2VjdXJpdHkuYyBiL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXG5pbmRleCAxMDMxNjhjNzBkZDRkZi4uYjA5OGY0OGIxMGU1MWQgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvY21fc2VjdXJpdHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2NtX3NlY3VyaXR5LmNcbkBAIC02LDcgJiM0Mzs2LDkgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2V5LXR5cGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2NyeXB0by9rcmI1LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNja2V5cy91c2VyLXR5cGUuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDthZnNfY20uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2Fmc19mcy5oXCYjMzQ7XG5AQCAtMTksMTk1ICYjNDM7MjEsMzkgQEBcbiAjZGVmaW5lIHhkcl9sZW5fb2JqZWN0KHgpICg0ICYjNDM7IHJvdW5kX3VwKCh4KSwgc2l6ZW9mKF9fYmUzMikpKVxuIFxuICNpZmRlZiBDT05GSUdfUlhHS1xuLXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIpO1xuLSNlbmRpZlxuLVxuIC8qXG4tICogUmVzcG9uZCB0byBhbiBSeEdLIGNoYWxsZW5nZSwgYWRkaW5nIGFwcGRhdGEuXG4mIzQzOyAqIEFzIHRoZSBZRlMgUnhHSyBhcHBkYXRhIHRvIGJlIHBhc3NlZCBpbiB0aGUgWUZTLkZTLXNlcnZpY2UgUkVTUE9OU0UgcGFja2V0LFxuJiM0MzsgKiBjcmVhdGUgYSBHU1MgdG9rZW4gdG8gdXNlIGFzIGEgdGlja2V0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZXNlcnZlci5cbiAgKi9cbi1zdGF0aWMgaW50IGFmc19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxuLXtcbi0jaWZkZWYgQ09ORklHX1JYR0tcbi1cdHN0cnVjdCBrcmI1X2J1ZmZlciBhcHBkYXRhID0ge307XG4tXHRzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyO1xuLSNlbmRpZlxuLVx0c3RydWN0IHJ4cnBjX3BlZXIgKnBlZXI7XG4tXHR1bnNpZ25lZCBsb25nIHBlZXJfZGF0YTtcbi1cdHUxNiBzZXJ2aWNlX2lkO1xuLVx0dTggc2VjdXJpdHlfaW5kZXg7XG4tXG4tXHRyeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSwgXHUwMDI2cGVlciwgXHUwMDI2cGVlcl9kYXRhLFxuLVx0XHRcdFx0ICAgICBcdTAwMjZzZXJ2aWNlX2lkLCBcdTAwMjZzZWN1cml0eV9pbmRleCk7XG4tXG4tXHRfZW50ZXIoXCYjMzQ7JXUsJXVcJiMzNDssIHNlcnZpY2VfaWQsIHNlY3VyaXR5X2luZGV4KTtcbi1cbi1cdHN3aXRjaCAoc2VydmljZV9pZCkge1xuLVx0XHQvKiBXZSBkb24mIzM5O3Qgc2VuZCBDTV9TRVJWSUNFIFJQQ3MsIHNvIGRvbiYjMzk7dCBleHBlY3QgYSBjaGFsbGVuZ2Vcbi1cdFx0ICogdGhlcmVmcm9tLlxuLVx0XHQgKi9cbi1cdGNhc2UgRlNfU0VSVklDRTpcbi1cdGNhc2UgVkxfU0VSVklDRTpcbi1cdGNhc2UgWUZTX0ZTX1NFUlZJQ0U6XG4tXHRjYXNlIFlGU19WTF9TRVJWSUNFOlxuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdHByX3dhcm4oXCYjMzQ7Q2FuJiMzOTt0IHJlc3BvbmQgdG8gdW5rbm93biBjaGFsbGVuZ2UgJXU6JXVcJiMzNDssXG4tXHRcdFx0c2VydmljZV9pZCwgc2VjdXJpdHlfaW5kZXgpO1xuLVx0XHRyZXR1cm4gcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UoY2hhbGxlbmdlLCBSWF9VU0VSX0FCT1JULCAtRVBST1RPLFxuLVx0XHRcdFx0XHRcdCAgICAgYWZzX2Fib3J0X3Vuc3VwcG9ydGVkX3NlY19jbGFzcyk7XG4tXHR9XG4tXG4tXHRzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7XG4tI2lmZGVmIENPTkZJR19SWEtBRFxuLVx0Y2FzZSBSWFJQQ19TRUNVUklUWV9SWEtBRDpcbi1cdFx0cmV0dXJuIHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UpO1xuLSNlbmRpZlxuLVxuLSNpZmRlZiBDT05GSUdfUlhHS1xuLVx0Y2FzZSBSWFJQQ19TRUNVUklUWV9SWEdLOlxuLVx0XHRyZXR1cm4gcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlLCBcdTAwMjZhcHBkYXRhKTtcbi1cbi1cdGNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6XG4tXHRcdHN3aXRjaCAoc2VydmljZV9pZCkge1xuLVx0XHRjYXNlIEZTX1NFUlZJQ0U6XG4tXHRcdGNhc2UgWUZTX0ZTX1NFUlZJQ0U6XG4tXHRcdFx0c2VydmVyID0gKHN0cnVjdCBhZnNfc2VydmVyICopcGVlcl9kYXRhO1xuLVx0XHRcdGlmICghc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKSB7XG4tXHRcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnNlcnZlci1cdTAwM2VjbV90b2tlbl9sb2NrKTtcbi1cdFx0XHRcdGlmICghc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKVxuLVx0XHRcdFx0XHRhZnNfY3JlYXRlX3lmc19jbV90b2tlbihjaGFsbGVuZ2UsIHNlcnZlcik7XG4tXHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2c2VydmVyLVx1MDAzZWNtX3Rva2VuX2xvY2spO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKVxuLVx0XHRcdFx0YXBwZGF0YSA9IHNlcnZlci1cdTAwM2VjbV9yeGdrX2FwcGRhdGE7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0cmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgXHUwMDI2YXBwZGF0YSk7XG4tI2VuZGlmXG4tXG4tXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UoY2hhbGxlbmdlLCBSWF9VU0VSX0FCT1JULCAtRVBST1RPLFxuLVx0XHRcdFx0XHRcdCAgICAgYWZzX2Fib3J0X3Vuc3VwcG9ydGVkX3NlY19jbGFzcyk7XG4tXHR9XG4tfVxuLVxuLS8qXG4tICogUHJvY2VzcyB0aGUgT09CIG1lc3NhZ2UgcXVldWUsIHByb2Nlc3NpbmcgY2hhbGxlbmdlIHBhY2tldHMuXG4tICovXG4tdm9pZCBhZnNfcHJvY2Vzc19vb2JfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLXtcbi1cdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFmc19uZXQsIHJ4X29vYl93b3JrKTtcbi1cdHN0cnVjdCBza19idWZmICpvb2I7XG4tXHRlbnVtIHJ4cnBjX29vYl90eXBlIHR5cGU7XG4tXG4tXHR3aGlsZSAoUkVBRF9PTkNFKG5ldC1cdTAwM2VsaXZlKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICAob29iID0gcnhycGNfa2VybmVsX2RlcXVldWVfb29iKG5ldC1cdTAwM2Vzb2NrZXQsIFx1MDAyNnR5cGUpKSkge1xuLVx0XHRzd2l0Y2ggKHR5cGUpIHtcbi1cdFx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxuLVx0XHRcdGFmc19yZXNwb25kX3RvX2NoYWxsZW5nZShvb2IpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdHJ4cnBjX2tlcm5lbF9mcmVlX29vYihvb2IpO1xuLVx0fVxuLX1cbi1cbi0jaWZkZWYgQ09ORklHX1JYR0tcbi0vKlxuLSAqIENyZWF0ZSBhIHNlY3VyaXRpZXMga2V5cmluZyBmb3IgdGhlIGNhY2hlIG1hbmFnZXIgYW5kIGF0dGFjaCBhIGtleSB0byBpdCBmb3Jcbi0gKiB0aGUgUnhHSyB0b2tlbnMgd2Ugd2FudCB0byB1c2UgdG8gc2VjdXJlIHRoZSBjYWxsYmFjayBjb25uZWN0aW9uIGJhY2sgZnJvbVxuLSAqIHRoZSBmaWxlc2VydmVyLlxuLSAqL1xuLWludCBhZnNfY3JlYXRlX3Rva2VuX2tleShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpXG4te1xuLVx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNTtcbi1cdHN0cnVjdCBrZXkgKnJpbmc7XG4tXHRrZXlfcmVmX3Qga2V5O1xuLVx0Y2hhciBLMFszMl0sICpkZXNjO1xuLVx0aW50IHJldDtcbi1cbi1cdHJpbmcgPSBrZXlyaW5nX2FsbG9jKFwmIzM0O2thZnNcJiMzNDssXG4tXHRcdFx0ICAgICBHTE9CQUxfUk9PVF9VSUQsIEdMT0JBTF9ST09UX0dJRCwgY3VycmVudF9jcmVkKCksXG4tXHRcdFx0ICAgICBLRVlfUE9TX1NFQVJDSCB8IEtFWV9QT1NfV1JJVEUgfFxuLVx0XHRcdCAgICAgS0VZX1VTUl9WSUVXIHwgS0VZX1VTUl9SRUFEIHwgS0VZX1VTUl9TRUFSQ0gsXG4tXHRcdFx0ICAgICBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLFxuLVx0XHRcdCAgICAgTlVMTCwgTlVMTCk7XG4tXHRpZiAoSVNfRVJSKHJpbmcpKVxuLVx0XHRyZXR1cm4gUFRSX0VSUihyaW5nKTtcbi1cbi1cdHJldCA9IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc29ja2V0LVx1MDAzZXNrLCByaW5nKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0cmV0ID0gLUVOT1BLRztcbi1cdGtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoS1JCNV9FTkNUWVBFX0FFUzEyOF9DVFNfSE1BQ19TSEExXzk2KTtcbi1cdGlmICgha3JiNSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRpZiAoV0FSTl9PTl9PTkNFKGtyYjUtXHUwMDNla2V5X2xlbiBcdTAwM2Ugc2l6ZW9mKEswKSkpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0cmV0ID0gLUVOT01FTTtcbi1cdGRlc2MgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgXCYjMzQ7JXU6JXU6JXU6JXVcJiMzNDssXG4tXHRcdFx0IFlGU19DTV9TRVJWSUNFLCBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSywgMSwga3JiNS1cdTAwM2VldHlwZSk7XG4tXHRpZiAoIWRlc2MpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0d2FpdF9mb3JfcmFuZG9tX2J5dGVzKCk7XG4tXHRnZXRfcmFuZG9tX2J5dGVzKEswLCBrcmI1LVx1MDAzZWtleV9sZW4pO1xuLVxuLVx0a2V5ID0ga2V5X2NyZWF0ZShtYWtlX2tleV9yZWYocmluZywgdHJ1ZSksXG4tXHRcdFx0IFwmIzM0O3J4cnBjX3NcJiMzNDssIGRlc2MsXG4tXHRcdFx0IEswLCBrcmI1LVx1MDAzZWtleV9sZW4sXG4tXHRcdFx0IEtFWV9QT1NfVklFVyB8IEtFWV9QT1NfUkVBRCB8IEtFWV9QT1NfU0VBUkNIIHwgS0VZX1VTUl9WSUVXLFxuLVx0XHRcdCBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBKTtcbi1cdGtmcmVlKGRlc2MpO1xuLVx0aWYgKElTX0VSUihrZXkpKSB7XG4tXHRcdHJldCA9IFBUUl9FUlIoa2V5KTtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRuZXQtXHUwMDNlZnNfY21fdG9rZW5fa2V5ID0ga2V5X3JlZl90b19wdHIoa2V5KTtcbi1cdHJldCA9IDA7XG4tb3V0OlxuLVx0a2V5X3B1dChyaW5nKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLS8qXG4tICogQ3JlYXRlIGFuIFlGUyBSeEdLIEdTUyB0b2tlbiB0byB1c2UgYXMgYSB0aWNrZXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlc2VydmVyLlxuLSAqL1xuLXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIpXG4mIzQzO3N0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfcnhna19jbV9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHUzMiBlbmN0eXBlKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmNvbm5fa3JiNSwgKnRva2VuX2tyYjU7XG4gXHRjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKnRva2VuX2tleTtcbiBcdHN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZDtcbiBcdHN0cnVjdCBzY2F0dGVybGlzdCBzZztcbiBcdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBzZXJ2ZXItXHUwMDNlY2VsbC1cdTAwM2VuZXQ7XG4tXHRjb25zdCBzdHJ1Y3Qga2V5ICprZXkgPSBuZXQtXHUwMDNlZnNfY21fdG9rZW5fa2V5O1xuLVx0c2l6ZV90IGtleXNpemUsIHV1aWRzaXplLCBhdXRoc2l6ZSwgdG9rc2l6ZSwgZW5jc2l6ZSwgY29udHNpemUsIGFkYXRhc2l6ZSwgb2Zmc2V0O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBrZXkgKmNtX2tleSA9IG5ldC1cdTAwM2Vmc19jbV90b2tlbl9rZXk7XG4mIzQzO1x0c3RydWN0IGtleSAqYXBwZGF0YV9rZXkgPSBOVUxMO1xuJiM0MztcdHNpemVfdCBrZXlzaXplLCB1dWlkc2l6ZSwgYXV0aHNpemUsIHRva3NpemUsIGVuY3NpemUsIGNvbnRzaXplO1xuJiM0MztcdHNpemVfdCBhZGF0YXNpemUsIG9mZnNldDtcbiBcdF9fYmUzMiBjYXBzWzFdID0ge1xuIFx0XHRbMF0gPSBodG9ubChBRlNfQ0FQX0VSUk9SX1RSQU5TTEFUSU9OKSxcbiBcdH07XG4gXHRfX2JlMzIgKnhkcjtcbiBcdHZvaWQgKmFwcGRhdGEsICpLMCwgKmVuY2Jhc2U7XG4tXHR1MzIgZW5jdHlwZTtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAoIWtleSlcbiYjNDM7XHRpZiAoIWNtX2tleSlcbiBcdFx0cmV0dXJuIC1FTk9LRVk7XG4gXG4gXHQvKiBBc3N1bWUgdGhhdCB0aGUgZmlsZXNlcnZlciBpcyBoYXBweSB0byB1c2UgdGhlIHNhbWUgZW5jb2RpbmcgdHlwZSBhc1xuIFx0ICogd2Ugd2VyZSB0b2xkIHRvIHVzZSBieSB0aGUgdG9rZW4gb2J0YWluZWQgYnkgdGhlIHVzZXIuXG4gXHQgKi9cbi1cdGVuY3R5cGUgPSByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UoY2hhbGxlbmdlKTtcbi1cbiBcdGNvbm5fa3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZShlbmN0eXBlKTtcbiBcdGlmICghY29ubl9rcmI1KVxuIFx0XHRyZXR1cm4gLUVOT1BLRztcbi1cdHRva2VuX2tyYjUgPSBrZXktXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xuLVx0dG9rZW5fa2V5ID0gKGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqKVx1MDAyNmtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMl07XG4mIzQzO1x0dG9rZW5fa3JiNSA9IGNtX2tleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF07XG4mIzQzO1x0dG9rZW5fa2V5ID0gKGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqKVx1MDAyNmNtX2tleS1cdTAwM2VwYXlsb2FkLmRhdGFbMl07XG4gXG4gXHQvKiBzdHJ1Y3Qgcnhna19rZXkge1xuIFx0ICpcdGFmc191aW50MzJcdGVuY3R5cGU7XG5AQCAtMjM1LDcgJiM0Mzs4MSw3IEBAIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbiBcdCAqXHRzdHJ1Y3QgUlhHS19BdXRoTmFtZVx0aWRlbnRpdGllc1x1MDAzY1x1MDAzZTtcbiBcdCAqIH07XG4gXHQgKi9cbi1cdHRva3NpemUgPSBrZXlzaXplICYjNDM7IDggJiM0MzsgNCAmIzQzOyA0ICYjNDM7IDggJiM0MzsgeGRyX2xlbl9vYmplY3QoYXV0aHNpemUpO1xuJiM0MztcdHRva3NpemUgPSBrZXlzaXplICYjNDM7IDQgJiM0MzsgOCAmIzQzOyA0ICYjNDM7IDQgJiM0MzsgOCAmIzQzOyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7XG4gXG4gXHRvZmZzZXQgPSAwO1xuIFx0ZW5jc2l6ZSA9IGNyeXB0b19rcmI1X2hvd19tdWNoX2J1ZmZlcih0b2tlbl9rcmI1LCBLUkI1X0VOQ1JZUFRfTU9ERSwgdG9rc2l6ZSwgXHUwMDI2b2Zmc2V0KTtcbkBAIC0zMjcsOSAmIzQzOzE3MywyMyBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF9hZWFkO1xuIFxuLVx0c2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5sZW4gID0gYWRhdGFzaXplO1xuLVx0c2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhID0gYXBwZGF0YTtcbi1cdGFwcGRhdGEgPSBOVUxMO1xuJiM0MztcdGFwcGRhdGFfa2V5ID0ga2V5X2FsbG9jKFx1MDAyNmtleV90eXBlX3VzZXIsIFwmIzM0O3J4cnBjOiBhZnMgcnhnayBhcHBkYXRhXCYjMzQ7LFxuJiM0MztcdFx0XHRcdEdMT0JBTF9ST09UX1VJRCwgR0xPQkFMX1JPT1RfR0lELCBjdXJyZW50X2NyZWQoKSxcbiYjNDM7XHRcdFx0XHRLRVlfUE9TX1ZJRVcgfCBLRVlfUE9TX1NFQVJDSCB8IEtFWV9VU1JfVklFVyxcbiYjNDM7XHRcdFx0XHRLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLCBOVUxMKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGFwcGRhdGFfa2V5KSkge1xuJiM0MztcdFx0cmV0ID0gUFRSX0VSUihhcHBkYXRhX2tleSk7XG4mIzQzO1x0XHRnb3RvIG91dF9hZWFkO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0ga2V5X2luc3RhbnRpYXRlX2FuZF9saW5rKGFwcGRhdGFfa2V5LCBhcHBkYXRhLCBhZGF0YXNpemUsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGtleV9wdXQoYXBwZGF0YV9rZXkpO1xuJiM0MztcdFx0Z290byBvdXRfYWVhZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN0b3JlIHRoZSBhcHBkYXRhIGJlZm9yZSB0aGUga2V5IHBvaW50ZXIgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzZXJ2ZXItXHUwMDNleWZzX3J4Z2tfYXBwZGF0YSwgYXBwZGF0YV9rZXkpO1xuIFxuIG91dF9hZWFkOlxuIFx0Y3J5cHRvX2ZyZWVfYWVhZChhZWFkKTtcbkBAIC0zMzksMyAmIzQzOzE5OSwxMTYgQEAgc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19SWEdLICovXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDcmVhdGUgdGhlIGFwcGxpY2F0aW9uIGRhdGEgdG8gZ28gaW4gYSBSRVNQT05TRSBwYWNrZXQgYSBzZXJ2ZXImIzM5O3MgQ0hBTExFTkdFXG4mIzQzOyAqIGZyb20gdGhlIHBhcmFtZXRlcnMgY29udGFpbmVkIGluIGEga2V5LiAgVGhlIGtleSBzcGVjaWZpZXMgdGhlIHNlY3VyaXR5XG4mIzQzOyAqIGluZGV4IGFuZCBvdGhlciBhcHByb3ByaWF0ZSBwYXJhbWV0ZXJzIHN1Y2ggYXMgdGhlIGVuY29kaW5nIHR5cGUgZm9yIFJ4R0suXG4mIzQzOyAqL1xuJiM0MztpbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpXG4mIzQzO3tcbiYjNDM7XHR1MzIga3JiNV9lbmN0eXBlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTggc2VjdXJpdHlfaW5kZXg7XG4mIzQzO1xuJiM0MztcdGlmICgha2V5KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoa2V5LCBcdTAwMjZzZWN1cml0eV9pbmRleCwgXHUwMDI2a3JiNV9lbmN0eXBlKTtcbiYjNDM7XG4mIzQzO1x0X2VudGVyKFwmIzM0OyV1LCV1XCYjMzQ7LCBzZWN1cml0eV9pbmRleCwga3JiNV9lbmN0eXBlKTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xuJiM0MzsjaWZkZWYgQ09ORklHX1JYR0tcbiYjNDM7XHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxuJiM0MztcdFx0LyogUmVhZCB0aGUga2V5IHBvaW50ZXIgYmVmb3JlIHRoZSBhcHBkYXRhICovXG4mIzQzO1x0XHRpZiAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZzZXJ2ZXItXHUwMDNleWZzX3J4Z2tfYXBwZGF0YSkpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IDA7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZzZXJ2ZXItXHUwMDNlY21fdG9rZW5fbG9jayk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHtcbiYjNDM7I2lmZGVmIENPTkZJR19SWEdLXG4mIzQzO1x0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbiYjNDM7XHRcdC8qIFJlYWQgdGhlIGtleSBwb2ludGVyIGJlZm9yZSB0aGUgYXBwZGF0YSAqL1xuJiM0MztcdFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2c2VydmVyLVx1MDAzZXlmc19yeGdrX2FwcGRhdGEpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdHJldCA9IGFmc19jcmVhdGVfeWZzX3J4Z2tfY21fYXBwZGF0YShzZXJ2ZXIsIGtyYjVfZW5jdHlwZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7I2VuZGlmXG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNlcnZlci1cdTAwM2VjbV90b2tlbl9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1JYR0tcbiYjNDM7LypcbiYjNDM7ICogQ3JlYXRlIGEgc2VjdXJpdGllcyBrZXlyaW5nIGZvciB0aGUgY2FjaGUgbWFuYWdlciBhbmQgYXR0YWNoIGEga2V5IHRvIGl0IGZvclxuJiM0MzsgKiB0aGUgUnhHSyB0b2tlbnMgd2Ugd2FudCB0byB1c2UgdG8gc2VjdXJlIHRoZSBjYWxsYmFjayBjb25uZWN0aW9uIGJhY2sgZnJvbVxuJiM0MzsgKiB0aGUgZmlsZXNlcnZlci5cbiYjNDM7ICovXG4mIzQzO2ludCBhZnNfY3JlYXRlX3Rva2VuX2tleShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICprcmI1O1xuJiM0MztcdHN0cnVjdCBrZXkgKnJpbmc7XG4mIzQzO1x0a2V5X3JlZl90IGtleTtcbiYjNDM7XHRjaGFyIEswWzMyXSwgKmRlc2M7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmluZyA9IGtleXJpbmdfYWxsb2MoXCYjMzQ7a2Fmc1wmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICBHTE9CQUxfUk9PVF9VSUQsIEdMT0JBTF9ST09UX0dJRCwgY3VycmVudF9jcmVkKCksXG4mIzQzO1x0XHRcdCAgICAgS0VZX1BPU19TRUFSQ0ggfCBLRVlfUE9TX1dSSVRFIHxcbiYjNDM7XHRcdFx0ICAgICBLRVlfVVNSX1ZJRVcgfCBLRVlfVVNSX1JFQUQgfCBLRVlfVVNSX1NFQVJDSCxcbiYjNDM7XHRcdFx0ICAgICBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLFxuJiM0MztcdFx0XHQgICAgIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmIChJU19FUlIocmluZykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihyaW5nKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzb2NrZXQtXHUwMDNlc2ssIHJpbmcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gLUVOT1BLRztcbiYjNDM7XHRrcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKEtSQjVfRU5DVFlQRV9BRVMxMjhfQ1RTX0hNQUNfU0hBMV85Nik7XG4mIzQzO1x0aWYgKCFrcmI1KVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0Uoa3JiNS1cdTAwM2VrZXlfbGVuIFx1MDAzZSBzaXplb2YoSzApKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdGRlc2MgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgXCYjMzQ7JXU6JXU6JXU6JXVcJiMzNDssXG4mIzQzO1x0XHRcdCBZRlNfQ01fU0VSVklDRSwgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0ssIDEsIGtyYjUtXHUwMDNlZXR5cGUpO1xuJiM0MztcdGlmICghZGVzYylcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHR3YWl0X2Zvcl9yYW5kb21fYnl0ZXMoKTtcbiYjNDM7XHRnZXRfcmFuZG9tX2J5dGVzKEswLCBrcmI1LVx1MDAzZWtleV9sZW4pO1xuJiM0MztcbiYjNDM7XHRrZXkgPSBrZXlfY3JlYXRlKG1ha2Vfa2V5X3JlZihyaW5nLCB0cnVlKSxcbiYjNDM7XHRcdFx0IFwmIzM0O3J4cnBjX3NcJiMzNDssIGRlc2MsXG4mIzQzO1x0XHRcdCBLMCwga3JiNS1cdTAwM2VrZXlfbGVuLFxuJiM0MztcdFx0XHQgS0VZX1BPU19WSUVXIHwgS0VZX1BPU19SRUFEIHwgS0VZX1BPU19TRUFSQ0ggfCBLRVlfVVNSX1ZJRVcsXG4mIzQzO1x0XHRcdCBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBKTtcbiYjNDM7XHRrZnJlZShkZXNjKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGtleSkpIHtcbiYjNDM7XHRcdHJldCA9IFBUUl9FUlIoa2V5KTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV0LVx1MDAzZWZzX2NtX3Rva2VuX2tleSA9IGtleV9yZWZfdG9fcHRyKGtleSk7XG4mIzQzO1x0cmV0ID0gMDtcbiYjNDM7b3V0OlxuJiM0MztcdGtleV9wdXQocmluZyk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX1JYR0sgKi9cbmRpZmYgLS1naXQgYS9mcy9hZnMvZnNfcHJvYmUuYyBiL2ZzL2Fmcy9mc19wcm9iZS5jXG5pbmRleCBhOTFhZDE5MzhkMDc4OC4uZTI2ZjdmMWUzMGEyM2EgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZnNfcHJvYmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ZzX3Byb2JlLmNcbkBAIC0yNDEsOSAmIzQzOzI0MSwxNCBAQCBpbnQgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbiBcdHN0cnVjdCBhZnNfZW5kcG9pbnRfc3RhdGUgKmVzdGF0ZSwgKm9sZDtcbiBcdHN0cnVjdCBhZnNfYWRkcl9saXN0ICpvbGRfYWxpc3QgPSBOVUxMLCAqYWxpc3Q7XG4gXHR1bnNpZ25lZCBsb25nIHVucHJvYmVkO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRfZW50ZXIoXCYjMzQ7JXBVXCYjMzQ7LCBcdTAwMjZzZXJ2ZXItXHUwMDNldXVpZCk7XG4gXG4mIzQzO1x0cmV0ID0gYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzZXJ2ZXIsIGtleSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuIFx0ZXN0YXRlID0ga3phbGxvY19vYmooKmVzdGF0ZSk7XG4gXHRpZiAoIWVzdGF0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxuaW5kZXggNjAxZjAxZTVjMTVmY2MuLmVmN2JkOWY5NDNlMGE2IDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5AQCAtMjgzLDcgJiM0MzsyODMsNiBAQCBzdHJ1Y3QgYWZzX25ldCB7XG4gXHRzdHJ1Y3Qgc29ja2V0XHRcdCpzb2NrZXQ7XG4gXHRzdHJ1Y3QgYWZzX2NhbGxcdFx0KnNwYXJlX2luY29taW5nX2NhbGw7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGNoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcms7XG4tXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHJ4X29vYl93b3JrO1xuIFx0c3RydWN0IG11dGV4XHRcdHNvY2tldF9tdXRleDtcbiBcdGF0b21pY190XHRcdG5yX291dHN0YW5kaW5nX2NhbGxzO1xuIFx0YXRvbWljX3RcdFx0bnJfc3VwZXJibG9ja3M7XG5AQCAtNTQ4LDcgJiM0Mzs1NDcsNyBAQCBzdHJ1Y3QgYWZzX3NlcnZlciB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGRlc3Ryb3llcjtcdC8qIFdvcmsgaXRlbSB0byB0cnkgYW5kIGRlc3Ryb3kgYSBzZXJ2ZXIgKi9cbiBcdHN0cnVjdCB0aW1lcl9saXN0XHR0aW1lcjtcdFx0LyogTWFuYWdlbWVudCB0aW1lciAqL1xuIFx0c3RydWN0IG11dGV4XHRcdGNtX3Rva2VuX2xvY2s7XHQvKiBMb2NrIGdvdmVybmluZyBjcmVhdGlvbiBvZiBhcHBkYXRhICovXG4tXHRzdHJ1Y3Qga3JiNV9idWZmZXJcdGNtX3J4Z2tfYXBwZGF0YTsgLyogQXBwZGF0YSB0byBiZSBpbmNsdWRlZCBpbiBSRVNQT05TRSBwYWNrZXQgKi9cbiYjNDM7XHRzdHJ1Y3Qga2V5XHRcdCp5ZnNfcnhna19hcHBkYXRhOyAvKiBBcHBkYXRhIHRvIGJlIGluY2x1ZGVkIGluIFJFU1BPTlNFIHBhY2tldCAqL1xuIFx0dGltZTY0X3RcdFx0dW51c2VfdGltZTtcdC8qIFRpbWUgYXQgd2hpY2ggbGFzdCB1bnVzZWQgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX1JFU1BPTkRJTkcgMFx0XHQvKiBUaGUgc2VydmVyIGlzIHJlc3BvbmRpbmcgKi9cbkBAIC0xMDg5LDcgJiM0MzsxMDg4LDcgQEAgZXh0ZXJuIGJvb2wgYWZzX2NtX2luY29taW5nX2NhbGwoc3RydWN0IGFmc19jYWxsICopO1xuIC8qXG4gICogY21fc2VjdXJpdHkuY1xuICAqL1xuLXZvaWQgYWZzX3Byb2Nlc3Nfb29iX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4mIzQzO2ludCBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBrZXkgKmtleSk7XG4gI2lmZGVmIENPTkZJR19SWEdLXG4gaW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldCk7XG4gI2Vsc2VcbkBAIC0xNDE2LDIxICYjNDM7MTQxNSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfc2VlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBlbnVtIGFmc19jYWxsX3RyYWNlIHdoeSlcbiBcdFx0ICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLFxuLVx0XHRcdFx0ICAgIGdmcF90IGdmcClcbi17XG4tXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuLVxuLVx0b3AtXHUwMDNlY2FsbFx0PSBjYWxsO1xuLVx0b3AtXHUwMDNldHlwZVx0PSBjYWxsLVx1MDAzZXR5cGU7XG4tXHRjYWxsLVx1MDAzZW9wXHQ9IG9wO1xuLVx0Y2FsbC1cdTAwM2VrZXlcdD0gb3AtXHUwMDNla2V5O1xuLVx0Y2FsbC1cdTAwM2VpbnRyXHQ9ICEob3AtXHUwMDNlZmxhZ3MgXHUwMDI2IEFGU19PUEVSQVRJT05fVU5JTlRSKTtcbi1cdGNhbGwtXHUwMDNlcGVlclx0PSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtXHUwMDNlYWRkcnNbb3AtXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XG4tXHRjYWxsLVx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cdTAwM2VzZXJ2ZXItXHUwMDNlc2VydmljZV9pZDtcbi1cdGFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcbiB7XG4gXHRjYWxsLVx1MDAzZWlvdl9sZW4gPSBzaXplO1xuQEAgLTE3NjIsNiAmIzQzOzE3NDYsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKkFGU19WTk9ERV9UT19JKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlKVxuIFx0cmV0dXJuIFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXG4mIzQzO1x0XHRcdFx0ICAgIGdmcF90IGdmcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhZnNfYWRkcl9saXN0ICphbGlzdCA9IG9wLVx1MDAzZWVzdGF0ZS1cdTAwM2VhZGRyZXNzZXM7XG4mIzQzO1xuJiM0MztcdG9wLVx1MDAzZWNhbGxcdD0gY2FsbDtcbiYjNDM7XHRvcC1cdTAwM2V0eXBlXHQ9IGNhbGwtXHUwMDNldHlwZTtcbiYjNDM7XHRjYWxsLVx1MDAzZW9wXHQ9IG9wO1xuJiM0MztcdGNhbGwtXHUwMDNlc2VydmVyXHQ9IGFmc191c2Vfc2VydmVyKG9wLVx1MDAzZXNlcnZlciwgZmFsc2UsIGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NhbGwpO1xuJiM0MztcdGNhbGwtXHUwMDNla2V5XHQ9IG9wLVx1MDAzZWtleTtcbiYjNDM7XHRjYWxsLVx1MDAzZWludHJcdD0gIShvcC1cdTAwM2VmbGFncyBcdTAwMjYgQUZTX09QRVJBVElPTl9VTklOVFIpO1xuJiM0MztcdGNhbGwtXHUwMDNlcGVlclx0PSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtXHUwMDNlYWRkcnNbb3AtXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XG4mIzQzO1x0Y2FsbC1cdTAwM2VzZXJ2aWNlX2lkID0gb3AtXHUwMDNlc2VydmVyLVx1MDAzZXNlcnZpY2VfaWQ7XG4mIzQzO1x0YWZzX21ha2VfY2FsbChjYWxsLCBnZnApO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogTm90ZSB0aGF0IGEgZGVudHJ5IGdvdCBjaGFuZ2VkLiAgV2UgbmVlZCB0byBzZXQgZF9mc2RhdGEgdG8gdGhlIGRhdGEgdmVyc2lvblxuICAqIG51bWJlciBkZXJpdmVkIGZyb20gdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLiAgSXQgZG9lc24mIzM5O3QgbWF0dGVyIGlmXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL21haW4uYyBiL2ZzL2Fmcy9tYWluLmNcbmluZGV4IDdhODgzYzU5OTc2ZmYyLi42MzUzZmVhYTVmYjRiNSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9tYWluLmNcbkBAIC03Myw3ICYjNDM7NzMsNiBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgYWZzX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldF9ucylcbiBcdGdlbmVyYXRlX3JhbmRvbV91dWlkKCh1bnNpZ25lZCBjaGFyICopXHUwMDI2bmV0LVx1MDAzZXV1aWQpO1xuIFxuIFx0SU5JVF9XT1JLKFx1MDAyNm5ldC1cdTAwM2VjaGFyZ2VfcHJlYWxsb2NhdGlvbl93b3JrLCBhZnNfY2hhcmdlX3ByZWFsbG9jYXRpb24pO1xuLVx0SU5JVF9XT1JLKFx1MDAyNm5ldC1cdTAwM2VyeF9vb2Jfd29yaywgYWZzX3Byb2Nlc3Nfb29iX3F1ZXVlKTtcbiBcdG11dGV4X2luaXQoXHUwMDI2bmV0LVx1MDAzZXNvY2tldF9tdXRleCk7XG4gXG4gXHRuZXQtXHUwMDNlY2VsbHMgPSBSQl9ST09UO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9yeHJwYy5jIGIvZnMvYWZzL3J4cnBjLmNcbmluZGV4IGQ4MjkxNjY1N2EzZGRmLi5jZjc1ODhhMDJmMzA1MyAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9yeHJwYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvcnhycGMuY1xuQEAgLTI1LDE0ICYjNDM7MjUsMTIgQEAgc3RhdGljIHZvaWQgYWZzX3Byb2Nlc3NfYXN5bmNfY2FsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XG4gc3RhdGljIHZvaWQgYWZzX3J4X25ld19jYWxsKHN0cnVjdCBzb2NrICosIHN0cnVjdCByeHJwY19jYWxsICosIHVuc2lnbmVkIGxvbmcpO1xuIHN0YXRpYyB2b2lkIGFmc19yeF9kaXNjYXJkX25ld19jYWxsKHN0cnVjdCByeHJwY19jYWxsICosIHVuc2lnbmVkIGxvbmcpO1xuIHN0YXRpYyB2b2lkIGFmc19yeF9hdHRhY2goc3RydWN0IHJ4cnBjX2NhbGwgKnJ4Y2FsbCwgdW5zaWduZWQgbG9uZyB1c2VyX2NhbGxfSUQpO1xuLXN0YXRpYyB2b2lkIGFmc19yeF9ub3RpZnlfb29iKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9vYik7XG4gc3RhdGljIGludCBhZnNfZGVsaXZlcl9jbV9vcF9pZChzdHJ1Y3QgYWZzX2NhbGwgKik7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByeHJwY19rZXJuZWxfb3BzIGFmc19yeHJwY19jYWxsYmFja19vcHMgPSB7XG4gXHQubm90aWZ5X25ld19jYWxsXHQ9IGFmc19yeF9uZXdfY2FsbCxcbiBcdC5kaXNjYXJkX25ld19jYWxsXHQ9IGFmc19yeF9kaXNjYXJkX25ld19jYWxsLFxuIFx0LnVzZXJfYXR0YWNoX2NhbGxcdD0gYWZzX3J4X2F0dGFjaCxcbi1cdC5ub3RpZnlfb29iXHRcdD0gYWZzX3J4X25vdGlmeV9vb2IsXG4gfTtcbiBcbiAvKiBhc3luY2hyb25vdXMgaW5jb21pbmcgY2FsbCBpbml0aWFsIHByb2Nlc3NpbmcgKi9cbkBAIC03NCwxMCAmIzQzOzcyLDYgQEAgaW50IGFmc19vcGVuX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJvcl8yO1xuIFxuLVx0cmV0ID0gcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHNvY2tldC1cdTAwM2VzaywgdHJ1ZSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycm9yXzI7XG4tXG4gXHRyZXQgPSBhZnNfY3JlYXRlX3Rva2VuX2tleShuZXQsIHNvY2tldCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRwcl9lcnIoXCYjMzQ7Q291bGRuJiMzOTt0IGNyZWF0ZSBSeEdLIENNIGtleTogJWRcXG5cJiMzNDssIHJldCk7XG5AQCAtMTI4LDcgJiM0MzsxMjIsNiBAQCB2b2lkIGFmc19jbG9zZV9zb2NrZXQoc3RydWN0IGFmc19uZXQgKm5ldClcbiBcdF9lbnRlcihcJiMzNDtcJiMzNDspO1xuIFxuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZuZXQtXHUwMDNlY2hhcmdlX3ByZWFsbG9jYXRpb25fd29yayk7XG4tXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5ldC1cdTAwM2VyeF9vb2Jfd29yayk7XG4gXHQvKiBGdXR1cmUgd29yayBpdGVtcyBzaG91bGQgbm93IHNlZSAtXHUwMDNlbGl2ZSBpcyBmYWxzZS4gKi9cbiBcbiBcdGtlcm5lbF9saXN0ZW4obmV0LVx1MDAzZXNvY2tldCwgMCk7XG5AQCAtMTQ5LDcgJiM0MzsxNDIsNiBAQCB2b2lkIGFmc19jbG9zZV9zb2NrZXQoc3RydWN0IGFmc19uZXQgKm5ldClcbiBcbiBcdGtlcm5lbF9zb2NrX3NodXRkb3duKG5ldC1cdTAwM2Vzb2NrZXQsIFNIVVRfUkRXUik7XG4gXHRmbHVzaF93b3JrcXVldWUoYWZzX2FzeW5jX2NhbGxzKTtcbi1cdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bmV0LVx1MDAzZXJ4X29vYl93b3JrKTtcbiBcdG5ldC1cdTAwM2Vzb2NrZXQtXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gTlVMTDtcbiBcdHNvY2tfcmVsZWFzZShuZXQtXHUwMDNlc29ja2V0KTtcbiBcdGtleV9wdXQobmV0LVx1MDAzZWZzX2NtX3Rva2VuX2tleSk7XG5AQCAtMzQ3LDYgJiM0MzszMzksNyBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRzdHJ1Y3QgcnhycGNfY2FsbCAqcnhjYWxsO1xuIFx0c3RydWN0IG1zZ2hkciBtc2c7XG4gXHRzdHJ1Y3Qga3ZlYyBpb3ZbMV07XG4mIzQzO1x0c3RydWN0IGtleSAqYXBwX2RhdGEgPSBOVUxMO1xuIFx0c2l6ZV90IGxlbjtcbiBcdHM2NCB0eF90b3RhbF9sZW47XG4gXHRpbnQgcmV0O1xuQEAgLTM3OCw4ICYjNDM7MzcxLDI2IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdFx0Y2FsbC1cdTAwM2Vkcm9wX3JlZiA9IHRydWU7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKGNhbGwtXHUwMDNla2V5IFx1MDAyNlx1MDAyNiBjYWxsLVx1MDAzZXNlcnZlcikge1xuJiM0MztcdFx0dTMyIGtyYjVfZW5jdHlwZSA9IDA7XG4mIzQzO1x0XHR1OCBzZWN1cml0eV9pbmRleCA9IDA7XG4mIzQzO1xuJiM0MztcdFx0cnhycGNfa2VybmVsX3F1ZXJ5X2tleShjYWxsLVx1MDAzZWtleSwgXHUwMDI2c2VjdXJpdHlfaW5kZXgsIFx1MDAyNmtyYjVfZW5jdHlwZSk7XG4mIzQzO1x0XHRzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7XG4mIzQzOyNpZmRlZiBDT05GSUdfUlhHS1xuJiM0MztcdFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbiYjNDM7XHRcdFx0LyogUmVhZCB0aGUga2V5IHBvaW50ZXIgYmVmb3JlIHRoZSBhcHBkYXRhICovXG4mIzQzO1x0XHRcdGFwcF9kYXRhID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZjYWxsLVx1MDAzZXNlcnZlci1cdTAwM2V5ZnNfcnhna19hcHBkYXRhKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIGNyZWF0ZSBhIGNhbGwgKi9cbi1cdHJ4Y2FsbCA9IHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VwZWVyLCBjYWxsLVx1MDAzZWtleSxcbiYjNDM7XHRyeGNhbGwgPSByeHJwY19rZXJuZWxfYmVnaW5fY2FsbChjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcGVlcixcbiYjNDM7XHRcdFx0XHRcdCBjYWxsLVx1MDAzZWtleSwgYXBwX2RhdGEsXG4gXHRcdFx0XHRcdCAodW5zaWduZWQgbG9uZyljYWxsLFxuIFx0XHRcdFx0XHQgdHhfdG90YWxfbGVuLFxuIFx0XHRcdFx0XHQgY2FsbC1cdTAwM2VtYXhfbGlmZXNwYW4sXG5AQCAtOTgzLDE0ICYjNDM7OTk0LDMgQEAgbm9pbmxpbmUgaW50IGFmc19wcm90b2NvbF9lcnJvcihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXG4gXHRcdGNhbGwtXHUwMDNldW5tYXJzaGFsbGluZ19lcnJvciA9IHRydWU7XG4gXHRyZXR1cm4gLUVCQURNU0c7XG4gfVxuLVxuLS8qXG4tICogV2FrZSB1cCBPT0Igbm90aWZpY2F0aW9uIHByb2Nlc3NpbmcuXG4tICovXG4tc3RhdGljIHZvaWQgYWZzX3J4X25vdGlmeV9vb2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb29iKVxuLXtcbi1cdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBzay1cdTAwM2Vza191c2VyX2RhdGE7XG4tXG4tXHRpZiAoUkVBRF9PTkNFKG5ldC1cdTAwM2VsaXZlKSlcbi1cdFx0cXVldWVfd29yayhhZnNfd3EsIFx1MDAyNm5ldC1cdTAwM2VyeF9vb2Jfd29yayk7XG4tfVxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZXJ2ZXIuYyBiL2ZzL2Fmcy9zZXJ2ZXIuY1xuaW5kZXggMGZlMTYyZWEyYTM2ZGIuLjRjM2E3YmQwZjdkODY2IDEwMDY0NFxuLS0tIGEvZnMvYWZzL3NlcnZlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvc2VydmVyLmNcbkBAIC0zOTgsNyAmIzQzOzM5OCw3IEBAIHN0YXRpYyB2b2lkIGFmc19zZXJ2ZXJfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuIFx0YWZzX3B1dF9lbmRwb2ludF9zdGF0ZShyY3VfYWNjZXNzX3BvaW50ZXIoc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlKSxcbiBcdFx0XHQgICAgICAgYWZzX2VzdGF0ZV90cmFjZV9wdXRfc2VydmVyKTtcbiBcdGFmc19wdXRfY2VsbChzZXJ2ZXItXHUwMDNlY2VsbCwgYWZzX2NlbGxfdHJhY2VfcHV0X3NlcnZlcik7XG4tXHRrZnJlZShzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpO1xuJiM0MztcdGtleV9wdXQoc2VydmVyLVx1MDAzZXlmc19yeGdrX2FwcGRhdGEpO1xuIFx0a2ZyZWUoc2VydmVyKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oIGIvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oXG5pbmRleCAzODZjMzE0MzI3ODk5NS4uNzAwMmE5OTNhNDcyMjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2tleXMvdXNlci10eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaFxuQEAgLTI2LDYgJiM0MzsyNiw3IEBAXG4gICovXG4gc3RydWN0IHVzZXJfa2V5X3BheWxvYWQge1xuIFx0c3RydWN0IHJjdV9oZWFkXHRyY3U7XHRcdC8qIFJDVSBkZXN0cnVjdG9yICovXG4mIzQzO1x0cmVmY291bnRfdFx0cmVmO1xuIFx0dW5zaWduZWQgc2hvcnRcdGRhdGFsZW47XHQvKiBsZW5ndGggb2YgdGhpcyBkYXRhICovXG4gXHRjaGFyXHRcdGRhdGFbXSBfX2FsaWduZWQoX19hbGlnbm9mX18odTY0KSk7IC8qIGFjdHVhbCBkYXRhICovXG4gfTtcbkBAIC0zNyw2ICYjNDM7MzgsNyBAQCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkO1xuIFxuIGV4dGVybiBpbnQgdXNlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcbiBleHRlcm4gdm9pZCB1c2VyX2ZyZWVfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XG4mIzQzO3ZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpO1xuIGV4dGVybiBpbnQgdXNlcl91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcbiBleHRlcm4gdm9pZCB1c2VyX3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpO1xuIGV4dGVybiB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmggYi9pbmNsdWRlL25ldC9hZl9yeHJwYy5oXG5pbmRleCAwZmI0YzQxYzliYmY1NS4uYTliOGUxYmE2N2VmOGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9hZl9yeHJwYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9hZl9yeHJwYy5oXG5AQCAtNTUsNiAmIzQzOzU1LDcgQEAgdm9pZCByeHJwY19rZXJuZWxfc2V0X25vdGlmaWNhdGlvbnMoc3RydWN0IHNvY2tldCAqc29jayxcbiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBrZXkgKmtleSxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBrZXkgKmFwcF9kYXRhLFxuIFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCxcbiBcdFx0XHRcdFx0ICAgczY0IHR4X3RvdGFsX2xlbixcbiBcdFx0XHRcdFx0ICAgdTMyIGhhcmRfdGltZW91dCxcbkBAIC05MSwyNCAmIzQzOzkyLDggQEAgYm9vbCByeHJwY19rZXJuZWxfY2hlY2tfbGlmZShjb25zdCBzdHJ1Y3Qgc29ja2V0ICosIGNvbnN0IHN0cnVjdCByeHJwY19jYWxsICopO1xuIFxuIGludCByeHJwY19zb2NrX3NldF9taW5fc2VjdXJpdHlfbGV2ZWwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgdmFsKTtcbiBpbnQgcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qga2V5ICopO1xuLWludCByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2Uoc3RydWN0IHNvY2sgKnNrLCBib29sIHNldCk7XG4tXG4tZW51bSByeHJwY19vb2JfdHlwZSByeHJwY19rZXJuZWxfcXVlcnlfb29iKHN0cnVjdCBza19idWZmICpvb2IsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXG4tXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEpO1xuLXN0cnVjdCBza19idWZmICpyeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2Ioc3RydWN0IHNvY2tldCAqc29jayxcbi1cdFx0XHRcdFx0IGVudW0gcnhycGNfb29iX3R5cGUgKl90eXBlKTtcbi12b2lkIHJ4cnBjX2tlcm5lbF9mcmVlX29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iKTtcbi12b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgc3RydWN0IHJ4cnBjX3BlZXIgKipfcGVlcixcbi1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyAqX3BlZXJfYXBwZGF0YSxcbi1cdFx0XHRcdCAgdTE2ICpfc2VydmljZV9pZCwgdTggKl9zZWN1cml0eV9pbmRleCk7XG4taW50IHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsIHUzMiBhYm9ydF9jb2RlLFxuLVx0XHRcdFx0ICBpbnQgZXJyb3IsIGVudW0gcnhycGNfYWJvcnRfcmVhc29uIHdoeSk7XG4taW50IHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKTtcbi11MzIgcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpO1xuLWludCByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpO1xuJiM0Mzt2b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoY29uc3Qgc3RydWN0IGtleSAqa2V5LCB1OCAqX3NlY3VyaXR5X2luZGV4LFxuJiM0MztcdFx0XHQgICAgdTMyICpfa3JiNV9lbmN0eXBlKTtcbiB1OCByeHJwY19rZXJuZWxfcXVlcnlfY2FsbF9zZWN1cml0eShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHRcdCAgICB1MTYgKl9zZXJ2aWNlX2lkLCB1MzIgKl9lbmN0eXBlKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXG5pbmRleCAxYjNjNDhiNTU5MWRmZC4uMDRiMGJiNjgyYjgxMDEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcbkBAIC0xNDgsNiAmIzQzOzE0OCw3IEBAIGVudW0geWZzX2NtX29wZXJhdGlvbiB7XG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VudXNlX3NsaXN0X2lzb3J0LFx0XCYjMzQ7VU5VIGlzb3J0XCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91cGRhdGUsXHRcdFwmIzM0O1VQREFURSAgIFwmIzM0OykgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2J5X3V1aWQsXHRcJiMzNDtVU0UgdXVpZCBcJiMzNDspIFxcXG4mIzQzO1x0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCxcdFx0XCYjMzQ7VVNFIGNhbGwgXCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY21fY2FsbCxcdFwmIzM0O1VTRSBjbS1jbFwmIzM0OykgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dldF9jYXBzLFx0XCYjMzQ7VVNFIGdjYXBzXCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYixcdFwmIzM0O1VTRSBndnVwY1wmIzM0OykgXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuaW5kZXggNzA0YTEwZGU2NjcwMDQuLmQzYTMxNDczOWQwN2UwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuQEAgLTc4LDYgJiM0Mzs3OCw3IEBAXG4gXHRFTShyeGdrX2Fib3J0XzJfc2hvcnRfZW5jZGF0YSxcdFx0XCYjMzQ7cnhnazItc2hvcnQtZW5jZGF0YVwmIzM0OylcdFxcXG4gXHRFTShyeGdrX2Fib3J0XzJfc2hvcnRfaGVhZGVyLFx0XHRcJiMzNDtyeGdrMi1zaG9ydC1oZHJcJiMzNDspXHRcXFxuIFx0RU0ocnhna19hYm9ydF9iYWRfa2V5X251bWJlcixcdFx0XCYjMzQ7cnhnay1iYWQta2V5LW51bVwmIzM0OylcdFxcXG4mIzQzO1x0RU0ocnhna19hYm9ydF9jaGFsbF9iYWRfYXBwX2tleSxcdFwmIzM0O3J4Z2stY2hhbGwtYmFkLWFwcC1rZXlcJiMzNDspXFxcbiBcdEVNKHJ4Z2tfYWJvcnRfY2hhbGxfa2V5X2V4cGlyZWQsXHRcJiMzNDtyeGdrLWNoYWxsLWtleS1leHBcJiMzNDspXHRcXFxuIFx0RU0ocnhna19hYm9ydF9jaGFsbF9ub19rZXksXHRcdFwmIzM0O3J4Z2stY2hhbGwtbm9rZXlcJiMzNDspXHRcXFxuIFx0RU0ocnhna19hYm9ydF9jaGFsbF9zaG9ydCxcdFx0XCYjMzQ7cnhnay1jaGFsbC1zaG9ydFwmIzM0OylcdFxcXG5AQCAtMTQ4LDYgJiM0MzsxNDksNyBAQFxuIFx0RU0ocnhycGNfZXByb3RvX3dyb25nX3NlY3VyaXR5LFx0XHRcJiMzNDt3cm9uZy1zZWNcJiMzNDspXHRcdFxcXG4gXHRFTShyeHJwY19yZWN2bXNnX2V4Y2Vzc19kYXRhLFx0XHRcJiMzNDtyZWN2bXNnLWV4Y2Vzc1wmIzM0OylcdFxcXG4gXHRFTShyeHJwY19yZWN2bXNnX3Nob3J0X2RhdGEsXHRcdFwmIzM0O3JlY3Ztc2ctc2hvcnRcJiMzNDspXHRcXFxuJiM0MztcdEVNKHJ4cnBjX3NlbmRtc2dfdHhfZXJyb3IsXHRcdFwmIzM0O3R4LWVycm9yXCYjMzQ7KVx0XHRcXFxuIFx0RV8ocnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsXHRcdFwmIzM0O3NlbmRtc2ctbGF0ZVwmIzM0OylcbiBcbiAjZGVmaW5lIHJ4cnBjX2NhbGxfcG9rZV90cmFjZXMgXFxcbkBAIC0yNjIsNyAmIzQzOzI2NCw2IEBAXG4gXHRFTShyeHJwY19jb25uX2ZyZWUsXHRcdFx0XCYjMzQ7RlJFRSAgICAgICAgXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY29ubl9nZXRfYWN0aXZhdGVfY2FsbCxcdFwmIzM0O0dFVCBhY3QtY2FsbFwmIzM0OykgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fZ2V0X2NhbGxfaW5wdXQsXHRcdFwmIzM0O0dFVCBpbnAtY2FsbFwmIzM0OykgXFxcbi1cdEVNKHJ4cnBjX2Nvbm5fZ2V0X2NoYWxsZW5nZV9pbnB1dCxcdFwmIzM0O0dFVCBpbnAtY2hhbFwmIzM0OykgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fZ2V0X2Nvbm5faW5wdXQsXHRcdFwmIzM0O0dFVCBpbnAtY29ublwmIzM0OykgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fZ2V0X2lkbGUsXHRcdFx0XCYjMzQ7R0VUIGlkbGUgICAgXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY29ubl9nZXRfcG9rZV9hYm9ydCxcdFx0XCYjMzQ7R0VUIHBrLWFib3J0XCYjMzQ7KSBcXFxuQEAgLTI3NCw3ICYjNDM7Mjc1LDYgQEBcbiBcdEVNKHJ4cnBjX2Nvbm5fbmV3X3NlcnZpY2UsXHRcdFwmIzM0O05FVyBzZXJ2aWNlIFwmIzM0OykgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fcHV0X2NhbGwsXHRcdFx0XCYjMzQ7UFVUIGNhbGwgICAgXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY29ubl9wdXRfY2FsbF9pbnB1dCxcdFx0XCYjMzQ7UFVUIGlucC1jYWxsXCYjMzQ7KSBcXFxuLVx0RU0ocnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0LFx0XCYjMzQ7UFVUIGlucC1jaGFsXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY29ubl9wdXRfY29ubl9pbnB1dCxcdFx0XCYjMzQ7UFVUIGlucC1jb25uXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY29ubl9wdXRfZGlzY2FyZF9pZGxlLFx0XHRcJiMzNDtQVVQgZGlzYy1pZGxcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jb25uX3B1dF9sb2NhbF9kZWFkLFx0XHRcJiMzNDtQVVQgbG9jLWRlYWRcJiMzNDspIFxcXG5AQCAtMzQyLDYgJiM0MzszNDIsNyBAQFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfZGlzdHJpYnV0ZV9lcnJvcixcdFwmIzM0O1NFRSBkaXN0LWVyclwmIzM0OykgXFxcbiBcdEVNKHJ4cnBjX2NhbGxfc2VlX2lucHV0LFx0XHRcJiMzNDtTRUUgaW5wdXQgICBcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9ub3RpZnlfcmVsZWFzZWQsXHRcJiMzNDtTRUUgbmZ5LXJsc2RcJiMzNDspIFxcXG4mIzQzO1x0RU0ocnhycGNfY2FsbF9zZWVfbm90aWZ5X3NraXBwZWQsXHRcJiMzNDtTRUUgbmZ5LXNraXBcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnLFx0XHRcJiMzNDtTRUUgcmVjdm1zZyBcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWUsXHRcJiMzNDtTRUUgcmVjdi1ycXVcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWVfZmlyc3QsIFwmIzM0O1NFRSByZWN2LXJxRlwmIzM0OykgXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oXG5pbmRleCBkOTczNWFiZDRjNzkxMC4uN2Q2YTUwMTUxOTMxMTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmhcbkBAIC01OCwxMSAmIzQzOzU4LDcgQEAgZW51bSByeHJwY19jbXNnX3R5cGUge1xuIFx0UlhSUENfVFhfTEVOR1RIXHRcdD0gMTIsXHQvKiAtcy06IFRvdGFsIGxlbmd0aCBvZiBUeCBkYXRhICovXG4gXHRSWFJQQ19TRVRfQ0FMTF9USU1FT1VUXHQ9IDEzLFx0LyogLXMtOiBTZXQgb25lIG9yIG1vcmUgY2FsbCB0aW1lb3V0cyAqL1xuIFx0UlhSUENfQ0hBUkdFX0FDQ0VQVFx0PSAxNCxcdC8qIFNzLTogQ2hhcmdlIHRoZSBhY2NlcHQgcG9vbCB3aXRoIGEgdXNlciBjYWxsIElEICovXG4tXHRSWFJQQ19PT0JfSURcdFx0PSAxNSxcdC8qIC1zcjogT09CIG1lc3NhZ2UgSUQgKi9cbi1cdFJYUlBDX0NIQUxMRU5HRURcdD0gMTYsXHQvKiBDLXI6IEluZm8gb24gYSByZWNlaXZlZCBDSEFMTEVOR0UgKi9cbi1cdFJYUlBDX1JFU1BPTkRcdFx0PSAxNyxcdC8qIENzLTogUmVzcG9uZCB0byBhIGNoYWxsZW5nZSAqL1xuLVx0UlhSUENfUkVTUE9OREVEXHRcdD0gMTgsXHQvKiBTLXI6IERhdGEgcmVjZWl2ZWQgaW4gUkVTUE9OU0UgKi9cbi1cdFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBXHQ9IDE5LFx0LyogQ3MtOiBSRVNQT05TRTogUnhHSyBhcHAgZGF0YSB0byBpbmNsdWRlICovXG4mIzQzO1x0UlhSUENfUkVTUE9OU0VfQVBQREFUQVx0PSAyMCxcdC8qIENzLTogVXNlciBrZXkgaG9sZGluZyBhcHAgZGF0YSBmb3IgUkVTUE9OU0UgKi9cbiBcdFJYUlBDX19TVVBQT1JURURcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcbmluZGV4IGMzYzhjMzI0MGVmOTQ2Li5hYTNjMDU4ZjQwOTU1OSAxMDA2NDRcbi0tLSBhL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xuQEAgLTIwOCw2ICYjNDM7MjA4LDcgQEAgZG5zX3Jlc29sdmVyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXG4gXHRcdGtsZWF2ZShcJiMzNDsgPSAtRU5PTUVNXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNnVwYXlsb2FkLVx1MDAzZXJlZiwgMSk7XG4gXG4gXHR1cGF5bG9hZC1cdTAwM2VkYXRhbGVuID0gcmVzdWx0X2xlbjtcbiBcdG1lbWNweSh1cGF5bG9hZC1cdTAwM2VkYXRhLCBkYXRhLCByZXN1bHRfbGVuKTtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvTWFrZWZpbGUgYi9uZXQvcnhycGMvTWFrZWZpbGVcbmluZGV4IGY5OTRmOWYzMGEyOWQ0Li5mN2E1ZTBhNTkyZWUxMyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL01ha2VmaWxlXG5AQCAtMjQsNyAmIzQzOzI0LDYgQEAgcnhycGMteSA6PSBcXFxuIFx0bG9jYWxfb2JqZWN0Lm8gXFxcbiBcdG1pc2MubyBcXFxuIFx0bmV0X25zLm8gXFxcbi1cdG9vYi5vIFxcXG4gXHRvdXRwdXQubyBcXFxuIFx0cGVlcl9ldmVudC5vIFxcXG4gXHRwZWVyX29iamVjdC5vIFxcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FmX3J4cnBjLmMgYi9uZXQvcnhycGMvYWZfcnhycGMuY1xuaW5kZXggOWFiMGYyMmM4ODFlYzUuLjlkNWNlMWM3YWQwZDIyIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2FmX3J4cnBjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9hZl9yeHJwYy5jXG5AQCAtMzE4LDYgJiM0MzszMTgsNyBAQCBFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9wdXRfcGVlcik7XG4gICogQHNvY2s6IFRoZSBzb2NrZXQgb24gd2hpY2ggdG8gbWFrZSB0aGUgY2FsbFxuICAqIEBwZWVyOiBUaGUgcGVlciB0byBjb250YWN0XG4gICogQGtleTogVGhlIHNlY3VyaXR5IGNvbnRleHQgdG8gdXNlIChkZWZhdWx0cyB0byBzb2NrZXQgc2V0dGluZylcbiYjNDM7ICogQGFwcF9kYXRhOiBUaGUgc2VjdXJpdHkgcmVzcG9uc2UgYXBwbGljYXRpb24gZGF0YSAob3IgTlVMTClcbiAgKiBAdXNlcl9jYWxsX0lEOiBUaGUgSUQgdG8gdXNlXG4gICogQHR4X3RvdGFsX2xlbjogVG90YWwgbGVuZ3RoIG9mIGRhdGEgdG8gdHJhbnNtaXQgZHVyaW5nIHRoZSBjYWxsIChvciAtMSlcbiAgKiBAaGFyZF90aW1lb3V0OiBUaGUgbWF4aW11bSBsaWZlc3BhbiBvZiB0aGUgY2FsbCBpbiBzZWNcbkBAIC0zNDAsNiAmIzQzOzM0MSw3IEBAIEVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3B1dF9wZWVyKTtcbiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBrZXkgKmtleSxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBrZXkgKmFwcF9kYXRhLFxuIFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCxcbiBcdFx0XHRcdFx0ICAgczY0IHR4X3RvdGFsX2xlbixcbiBcdFx0XHRcdFx0ICAgdTMyIGhhcmRfdGltZW91dCxcbkBAIC0zNjgsNiAmIzQzOzM3MCw3IEBAIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0XHRrZXkgPSBOVUxMOyAvKiBhIG5vLXNlY3VyaXR5IGtleSAqL1xuIFxuIFx0bWVtc2V0KFx1MDAyNnAsIDAsIHNpemVvZihwKSk7XG4mIzQzO1x0cC5hcHBfZGF0YVx0XHQ9IGFwcF9kYXRhO1xuIFx0cC51c2VyX2NhbGxfSURcdFx0PSB1c2VyX2NhbGxfSUQ7XG4gXHRwLnR4X3RvdGFsX2xlblx0XHQ9IHR4X3RvdGFsX2xlbjtcbiBcdHAuaW50ZXJydXB0aWJpbGl0eVx0PSBpbnRlcnJ1cHRpYmlsaXR5O1xuQEAgLTU5NSwxMCAmIzQzOzU5OCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuKVxuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGNhc2UgUlhSUENfU0VSVkVSX0JPVU5EOlxuIFx0Y2FzZSBSWFJQQ19TRVJWRVJfTElTVEVOSU5HOlxuLVx0XHRpZiAobS1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19PT0IpXG4tXHRcdFx0cmV0ID0gcnhycGNfc2VuZG1zZ19vb2IocngsIG0sIGxlbik7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSByeHJwY19kb19zZW5kbXNnKHJ4LCBtLCBsZW4pO1xuJiM0MztcdFx0cmV0ID0gcnhycGNfZG9fc2VuZG1zZyhyeCwgbSwgbGVuKTtcbiBcdFx0LyogVGhlIHNvY2tldCBoYXMgYmVlbiB1bmxvY2tlZCAqL1xuIFx0XHRnb3RvIG91dDtcbiBcdGRlZmF1bHQ6XG5AQCAtNjMzLDcgJiM0Mzs2MzMsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiB7XG4gXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbi1cdHVuc2lnbmVkIGludCBtaW5fc2VjX2xldmVsLCB2YWw7XG4mIzQzO1x0dW5zaWduZWQgaW50IG1pbl9zZWNfbGV2ZWw7XG4gXHR1MTYgc2VydmljZV91cGdyYWRlWzJdO1xuIFx0aW50IHJldDtcbiBcbkBAIC03MTAsMjMgJiM0Mzs3MTAsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcbiBcdFx0Y2FzZSBSWFJQQ19NQU5BR0VfUkVTUE9OU0U6XG4gXHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRpZiAob3B0bGVuICE9IHNpemVvZih1bnNpZ25lZCBpbnQpKVxuLVx0XHRcdFx0Z290byBlcnJvcjtcbi1cdFx0XHRyZXQgPSAtRUlTQ09OTjtcbi1cdFx0XHRpZiAocngtXHUwMDNlc2suc2tfc3RhdGUgIT0gUlhSUENfVU5CT1VORClcbi1cdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0cmV0ID0gY29weV9zYWZlX2Zyb21fc29ja3B0cihcdTAwMjZ2YWwsIHNpemVvZih2YWwpLFxuLVx0XHRcdFx0XHRcdCAgICAgb3B0dmFsLCBvcHRsZW4pO1xuLVx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRnb3RvIGVycm9yO1xuLVx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0aWYgKHZhbCBcdTAwM2UgMSlcbi1cdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0aWYgKHZhbClcbi1cdFx0XHRcdHNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRjbGVhcl9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRnb3RvIHN1Y2Nlc3M7XG4mIzQzO1x0XHRcdGdvdG8gZXJyb3I7XG4gXG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0YnJlYWs7XG5AQCAtODM1LDggJiM0Mzs4MTksNiBAQCBzdGF0aWMgaW50IHJ4cnBjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdHJ4LVx1MDAzZWNhbGxzID0gUkJfUk9PVDtcbiBcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnJ4LVx1MDAzZWluY29taW5nX2xvY2spO1xuLVx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpO1xuLVx0cngtXHUwMDNlcGVuZGluZ19vb2JxID0gUkJfUk9PVDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnJ4LVx1MDAzZXNvY2tfY2FsbHMpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cngtXHUwMDNldG9fYmVfYWNjZXB0ZWQpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKTtcbkBAIC04ODQsMjMgJiM0Mzs4NjYsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBmbGFncylcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qXG4tICogUHVyZ2UgdGhlIG91dC1vZi1iYW5kIHF1ZXVlLlxuLSAqL1xuLXN0YXRpYyB2b2lkIHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzdHJ1Y3Qgc29jayAqc2spXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc2spO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi1cbi1cdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkpXG4tXHRcdHJ4cnBjX2tlcm5lbF9mcmVlX29vYihza2IpO1xuLVx0d2hpbGUgKCFSQl9FTVBUWV9ST09UKFx1MDAyNnJ4LVx1MDAzZXBlbmRpbmdfb29icSkpIHtcbi1cdFx0c2tiID0gcmJfZW50cnkocngtXHUwMDNlcGVuZGluZ19vb2JxLnJiX25vZGUsIHN0cnVjdCBza19idWZmLCByYm5vZGUpO1xuLVx0XHRyYl9lcmFzZShcdTAwMjZza2ItXHUwMDNlcmJub2RlLCBcdTAwMjZyeC1cdTAwM2VwZW5kaW5nX29vYnEpO1xuLVx0XHRyeHJwY19rZXJuZWxfZnJlZV9vb2Ioc2tiKTtcbi1cdH1cbi19XG4tXG4gLypcbiAgKiBSeFJQQyBzb2NrZXQgZGVzdHJ1Y3RvclxuICAqL1xuQEAgLTkwOCw3ICYjNDM7ODczLDYgQEAgc3RhdGljIHZvaWQgcnhycGNfc29ja19kZXN0cnVjdG9yKHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRfZW50ZXIoXCYjMzQ7JXBcJiMzNDssIHNrKTtcbiBcbi1cdHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzayk7XG4gXHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbiBcbiBcdFdBUk5fT04ocmVmY291bnRfcmVhZChcdTAwMjZzay1cdTAwM2Vza193bWVtX2FsbG9jKSk7XG5AQCAtOTYxLDcgJiM0Mzs5MjUsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlbGVhc2Vfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4gXHRyeHJwY19kaXNjYXJkX3ByZWFsbG9jKHJ4KTtcbiBcdHJ4cnBjX3JlbGVhc2VfY2FsbHNfb25fc29ja2V0KHJ4KTtcbiBcdGZsdXNoX3dvcmtxdWV1ZShyeHJwY193b3JrcXVldWUpO1xuLVx0cnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTtcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuIFxuIFx0cnhycGNfdW51c2VfbG9jYWwocngtXHUwMDNlbG9jYWwsIHJ4cnBjX2xvY2FsX3VudXNlX3JlbGVhc2Vfc29jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmggYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxuaW5kZXggODY1ZjA1ZmUzN2FiOTYuLjgzODU4YzQ1ZmE0YTQzIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG5AQCAtMTcxLDkgJiM0MzsxNzEsNiBAQCBzdHJ1Y3QgcnhycGNfc29jayB7XG4gXHRjb25zdCBzdHJ1Y3QgcnhycGNfa2VybmVsX29wcyAqYXBwX29wcztcdC8qIFRhYmxlIG9mIGtlcm5lbCBhcHAgbm90aWZpY2F0aW9uIGZ1bmNzICovXG4gXHRzdHJ1Y3QgcnhycGNfbG9jYWxcdCpsb2NhbDtcdFx0LyogbG9jYWwgZW5kcG9pbnQgKi9cbiBcdHN0cnVjdCByeHJwY19iYWNrbG9nXHQqYmFja2xvZztcdC8qIFByZWFsbG9jYXRpb24gZm9yIHNlcnZpY2VzICovXG4tXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXHRyZWN2bXNnX29vYnE7XHQvKiBPT0IgbWVzc2FnZXMgZm9yIHJlY3Ztc2cgdG8gcGljayB1cCAqL1xuLVx0c3RydWN0IHJiX3Jvb3RcdFx0cGVuZGluZ19vb2JxO1x0LyogT09CIG1lc3NhZ2VzIGF3YWl0aW5nIHVzZXJzcGFjZSB0byByZXNwb25kIHRvICovXG4tXHR1NjRcdFx0XHRvb2JfaWRfY291bnRlcjtcdC8qIE9PQiBtZXNzYWdlIElEIGNvdW50ZXIgKi9cbiBcdHNwaW5sb2NrX3RcdFx0aW5jb21pbmdfbG9jaztcdC8qIEluY29taW5nIGNhbGwgdnMgc2VydmljZSBzaHV0ZG93biBsb2NrICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRzb2NrX2NhbGxzO1x0LyogTGlzdCBvZiBjYWxscyBvd25lZCBieSB0aGlzIHNvY2tldCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0dG9fYmVfYWNjZXB0ZWQ7XHQvKiBjYWxscyBhd2FpdGluZyBhY2NlcHRhbmNlICovXG5AQCAtMTg0LDcgJiM0MzsxODEsNiBAQCBzdHJ1Y3QgcnhycGNfc29jayB7XG4gXHRzdHJ1Y3QgcmJfcm9vdFx0XHRjYWxscztcdFx0LyogVXNlciBJRCAtXHUwMDNlIGNhbGwgbWFwcGluZyAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRmbGFncztcbiAjZGVmaW5lIFJYUlBDX1NPQ0tfQ09OTkVDVEVEXHRcdDBcdC8qIGNvbm5lY3Rfc3J4IGlzIHNldCAqL1xuLSNkZWZpbmUgUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0VcdDFcdC8qIFVzZXIgd2FudHMgdG8gbWFuYWdlIFJFU1BPTlNFIHBhY2tldHMgKi9cbiBcdHJ3bG9ja190XHRcdGNhbGxfbG9jaztcdC8qIGxvY2sgZm9yIGNhbGxzICovXG4gXHR1MzJcdFx0XHRtaW5fc2VjX2xldmVsO1x0LyogbWluaW11bSBzZWN1cml0eSBsZXZlbCAqL1xuICNkZWZpbmUgUlhSUENfU0VDVVJJVFlfTUFYXHRSWFJQQ19TRUNVUklUWV9FTkNSWVBUXG5AQCAtMjQxLDcgJiM0MzsyMzcsNiBAQCBzdHJ1Y3QgcnhycGNfc2tiX3ByaXYge1xuIFx0XHRcdHU4XHRcdHJlYXNvbjtcdFx0LyogUmVhc29uIGZvciBhY2sgKi9cbiBcdFx0fSBhY2s7XG4gXHRcdHN0cnVjdCB7XG4tXHRcdFx0c3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm47XHQvKiBDb25uZWN0aW9uIHJlZmVycmVkIHRvICovXG4gXHRcdFx0dW5pb24ge1xuIFx0XHRcdFx0dTMyIHJ4a2FkX25vbmNlO1xuIFx0XHRcdH07XG5AQCAtMzEwLDE3ICYjNDM7MzA1LDYgQEAgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHtcbiBcdGJvb2wgKCp2YWxpZGF0ZV9jaGFsbGVuZ2UpKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4tXHQvKiBGaWxsIG91dCB0aGUgY21zZyBmb3IgcmVjdm1zZygpIHRvIHBhc3Mgb24gYSBjaGFsbGVuZ2UgdG8gdXNlcnNwYWNlLlxuLVx0ICogVGhlIHNlY3VyaXR5IGNsYXNzIGdldHMgdG8gYWRkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG4tXHQgKi9cbi1cdGludCAoKmNoYWxsZW5nZV90b19yZWN2bXNnKShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBtc2doZHIgKm1zZyk7XG4tXG4tXHQvKiBQYXJzZSBzZW5kbXNnKCkgY29udHJvbCBtZXNzYWdlIGFuZCByZXNwb25kIHRvIGNoYWxsZW5nZS4gKi9cbi1cdGludCAoKnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UpKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbXNnaGRyICptc2cpO1xuLVxuIFx0LyogcmVzcG9uZCB0byBhIGNoYWxsZW5nZSAqL1xuIFx0aW50ICgqcmVzcG9uZF90b19jaGFsbGVuZ2UpKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpO1xuQEAgLTUxNiw2ICYjNDM7NTAwLDcgQEAgc3RydWN0IHJ4cnBjX2J1bmRsZSB7XG4gXHRzdHJ1Y3QgcnhycGNfbG9jYWxcdCpsb2NhbDtcdFx0LyogUmVwcmVzZW50YXRpb24gb2YgbG9jYWwgZW5kcG9pbnQgKi9cbiBcdHN0cnVjdCByeHJwY19wZWVyXHQqcGVlcjtcdFx0LyogUmVtb3RlIGVuZHBvaW50ICovXG4gXHRzdHJ1Y3Qga2V5XHRcdCprZXk7XHRcdC8qIFNlY3VyaXR5IGRldGFpbHMgKi9cbiYjNDM7XHRzdHJ1Y3Qga2V5XHRcdCphcHBfZGF0YTtcdC8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRwcm9jX2xpbms7XHQvKiBMaW5rIGluIG5ldC1cdTAwM2VidW5kbGVfcHJvY19saXN0ICovXG4gXHRjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5O1x0LyogYXBwbGllZCBzZWN1cml0eSBtb2R1bGUgKi9cbiBcdHJlZmNvdW50X3RcdFx0cmVmO1xuQEAgLTY0Miw2ICYjNDM7NjI3LDcgQEAgZW51bSByeHJwY19jYWxsX2ZsYWcge1xuIFx0UlhSUENfQ0FMTF9UWF9MQVNULFx0XHQvKiBMYXN0IHBhY2tldCBpbiBUeCBidWZmZXIgKGF0IHJ4dHhfdG9wKSAqL1xuIFx0UlhSUENfQ0FMTF9UWF9BTExfQUNLRUQsXHQvKiBMYXN0IHBhY2tldCBoYXMgYmVlbiBoYXJkLWFja2VkICovXG4gXHRSWFJQQ19DQUxMX1RYX05PX01PUkUsXHRcdC8qIE5vIG1vcmUgZGF0YSB0byB0cmFuc21pdCAoTVNHX01PUkUgZGVhc3NlcnRlZCkgKi9cbiYjNDM7XHRSWFJQQ19DQUxMX1RYX0VSUk9SLFx0XHQvKiBUZXJtaW5hbCBlcnJvcjsgY2FsbCBuZWVkcyBhYm9ydCAqL1xuIFx0UlhSUENfQ0FMTF9TRU5EX1BJTkcsXHRcdC8qIEEgcGluZyB3aWxsIG5lZWQgdG8gYmUgc2VudCAqL1xuIFx0UlhSUENfQ0FMTF9SRVRSQU5TX1RJTUVPVVQsXHQvKiBSZXRyYW5zbWlzc2lvbiBkdWUgdG8gdGltZW91dCBvY2N1cnJlZCAqL1xuIFx0UlhSUENfQ0FMTF9CRUdBTl9SWF9USU1FUixcdC8qIFdlIGJlZ2FuIHRoZSBleHBlY3RfcnhfYnkgdGltZXIgKi9cbkBAIC03MTksNiAmIzQzOzcwNSw3IEBAIHN0cnVjdCByeHJwY19jYWxsIHtcbiBcdHN0cnVjdCByeHJwY19zb2NrIF9fcmN1XHQqc29ja2V0O1x0Lyogc29ja2V0IHJlc3BvbnNpYmxlICovXG4gXHRzdHJ1Y3QgcnhycGNfbmV0XHQqcnhuZXQ7XHRcdC8qIE5ldHdvcmsgbmFtZXNwYWNlIHRvIHdoaWNoIGNhbGwgYmVsb25ncyAqL1xuIFx0c3RydWN0IGtleVx0XHQqa2V5O1x0XHQvKiBTZWN1cml0eSBkZXRhaWxzICovXG4mIzQzO1x0c3RydWN0IGtleVx0XHQqYXBwX2RhdGE7XHQvKiBTZWN1cml0eSByZXNwb25zZSBhcHAgZGF0YSAqL1xuIFx0Y29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5ICpzZWN1cml0eTtcdC8qIGFwcGxpZWQgc2VjdXJpdHkgbW9kdWxlICovXG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0dXNlcl9tdXRleDtcdC8qIFVzZXIgYWNjZXNzIG11dGV4ICovXG4gXHRzdHJ1Y3Qgc29ja2FkZHJfcnhycGNcdGRlc3Rfc3J4O1x0LyogRGVzdGluYXRpb24gYWRkcmVzcyAqL1xuQEAgLTkxMyw2ICYjNDM7OTAwLDcgQEAgZW51bSByeHJwY19jb21tYW5kIHtcbiB9O1xuIFxuIHN0cnVjdCByeHJwY19jYWxsX3BhcmFtcyB7XG4mIzQzO1x0c3RydWN0IGtleVx0XHQqYXBwX2RhdGE7XHQvKiBTZWN1cml0eSByZXNwb25zZSBhcHAgZGF0YSAqL1xuIFx0czY0XHRcdFx0dHhfdG90YWxfbGVuO1x0LyogVG90YWwgVHggZGF0YSBsZW5ndGggKGlmIHNlbmQgZGF0YSkgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0dXNlcl9jYWxsX0lEO1x0LyogVXNlciYjMzk7cyBjYWxsIElEICovXG4gXHRzdHJ1Y3Qge1xuQEAgLTEzNzcsMTMgJiM0MzsxMzY1LDYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcnhycGNfbmV0ICpyeHJwY19uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0cmV0dXJuIG5ldF9nZW5lcmljKG5ldCwgcnhycGNfbmV0X2lkKTtcbiB9XG4gXG4tLypcbi0gKiBvb2IuY1xuLSAqL1xuLWJvb2wgcnhycGNfbm90aWZ5X3NvY2tldF9vb2Ioc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHN0cnVjdCBza19idWZmICpza2IpO1xuLXZvaWQgcnhycGNfYWRkX3BlbmRpbmdfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4taW50IHJ4cnBjX3NlbmRtc2dfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTtcbi1cbiAvKlxuICAqIG91dHB1dC5jXG4gICovXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmMgYi9uZXQvcnhycGMvY2FsbF9vYmplY3QuY1xuaW5kZXggODE3ZWQ5YWNiOTFlNjEuLjlmNjEzMGQ5MGM0Y2E4IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9jYWxsX29iamVjdC5jXG5AQCAtMjExLDYgJiM0MzsyMTEsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2FsbG9jX2NsaWVudF9jYWxsKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdGNhbGwtXHUwMDNlaW50ZXJydXB0aWJpbGl0eVx0PSBwLVx1MDAzZWludGVycnVwdGliaWxpdHk7XG4gXHRjYWxsLVx1MDAzZXR4X3RvdGFsX2xlblx0PSBwLVx1MDAzZXR4X3RvdGFsX2xlbjtcbiBcdGNhbGwtXHUwMDNla2V5XHRcdD0ga2V5X2dldChjcC1cdTAwM2VrZXkpO1xuJiM0MztcdGNhbGwtXHUwMDNlYXBwX2RhdGFcdFx0PSBrZXlfZ2V0KHAtXHUwMDNlYXBwX2RhdGEpO1xuIFx0Y2FsbC1cdTAwM2VwZWVyXHRcdD0gcnhycGNfZ2V0X3BlZXIoY3AtXHUwMDNlcGVlciwgcnhycGNfcGVlcl9nZXRfY2FsbCk7XG4gXHRjYWxsLVx1MDAzZWxvY2FsXHRcdD0gcnhycGNfZ2V0X2xvY2FsKGNwLVx1MDAzZWxvY2FsLCByeHJwY19sb2NhbF9nZXRfY2FsbCk7XG4gXHRjYWxsLVx1MDAzZXNlY3VyaXR5X2xldmVsXHQ9IGNwLVx1MDAzZXNlY3VyaXR5X2xldmVsO1xuQEAgLTY5Nyw2ICYjNDM7Njk4LDcgQEAgc3RhdGljIHZvaWQgcnhycGNfZGVzdHJveV9jYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHJ4cnBjX3B1dF9wZWVyKGNhbGwtXHUwMDNlcGVlciwgcnhycGNfcGVlcl9wdXRfY2FsbCk7XG4gXHRyeHJwY19wdXRfbG9jYWwoY2FsbC1cdTAwM2Vsb2NhbCwgcnhycGNfbG9jYWxfcHV0X2NhbGwpO1xuIFx0a2V5X3B1dChjYWxsLVx1MDAzZWtleSk7XG4mIzQzO1x0a2V5X3B1dChjYWxsLVx1MDAzZWFwcF9kYXRhKTtcbiBcdGNhbGxfcmN1KFx1MDAyNmNhbGwtXHUwMDNlcmN1LCByeHJwY19yY3VfZnJlZV9jYWxsKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcbmluZGV4IDZhZmI1NDM3M2ViYmY5Li42ZTQwMjMxMmUxNDVjMCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcbkBAIC03LDYgJiM0Mzs3LDYxIEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7YXItaW50ZXJuYWwuaFwmIzM0O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBQb3N0IGEgY2FsbCBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2UuICBGdXJ0aGVyXG4mIzQzOyAqIG5vdGlmaWNhdGlvbnMgYXJlIHN1cHByZXNzZWQgYnkgcHV0dGluZyByZWN2bXNnX2xpbmsgb24gYSBkdW1teSBxdWV1ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIF9fcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2s7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChSWFJQQ19DQUxMX1JFTEVBU0VELCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0cnhycGNfc2VlX2NhbGwoY2FsbCwgcnhycGNfY2FsbF9zZWVfbm90aWZ5X3JlbGVhc2VkKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XG4mIzQzO1x0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cdTAwM2Vzb2NrZXQpO1xuJiM0MztcdHNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4mIzQzO1x0aWYgKHJ4IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSBcdTAwM2MgUlhSUENfQ0xPU0UpIHtcbiYjNDM7XHRcdGlmIChjYWxsLVx1MDAzZW5vdGlmeV9yeCkge1xuJiM0MztcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2spO1xuJiM0MztcdFx0XHRjYWxsLVx1MDAzZW5vdGlmeV9yeChzaywgY2FsbCwgY2FsbC1cdTAwM2V1c2VyX2NhbGxfSUQpO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y2FsbC1cdTAwM2Vub3RpZnlfbG9jayk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4mIzQzO1x0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rKSkge1xuJiM0MztcdFx0XHRcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xuJiM0MztcdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmssIFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xuJiM0MztcdFx0XHRcdF9kZWJ1ZyhcJiMzNDtjYWxsICVwc1wmIzM0Oywgc2stXHUwMDNlc2tfZGF0YV9yZWFkeSk7XG4mIzQzO1x0XHRcdFx0c2stXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQb3N0IGEgY2FsbCBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2UuICBGdXJ0aGVyXG4mIzQzOyAqIG5vdGlmaWNhdGlvbnMgYXJlIHN1cHByZXNzZWQgYnkgcHV0dGluZyByZWN2bXNnX2xpbmsgb24gYSBkdW1teSBxdWV1ZS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbiYjNDM7e1xuJiM0MztcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpKSB7XG4mIzQzO1x0XHRyeHJwY19zZWVfY2FsbChjYWxsLCByeHJwY19jYWxsX3NlZV9ub3RpZnlfc2tpcHBlZCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRfX3J4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBUcmFuc2l0aW9uIGEgY2FsbCB0byB0aGUgY29tcGxldGUgc3RhdGUuXG4gICovXG5AQCAtMjUsNyAmIzQzOzgwLDcgQEAgYm9vbCByeHJwY19zZXRfY2FsbF9jb21wbGV0aW9uKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0cnhycGNfc2V0X2NhbGxfc3RhdGUoY2FsbCwgUlhSUENfQ0FMTF9DT01QTEVURSk7XG4gXHR0cmFjZV9yeHJwY19jYWxsX2NvbXBsZXRlKGNhbGwpO1xuIFx0d2FrZV91cChcdTAwMjZjYWxsLVx1MDAzZXdhaXRxKTtcbi1cdHJ4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XG4mIzQzO1x0X19yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX2NsaWVudC5jIGIvbmV0L3J4cnBjL2Nvbm5fY2xpZW50LmNcbmluZGV4IDQ4NTE5ZjBkZTE4NTM5Li5kZDc5NjMwZDMwNjY5OCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9jb25uX2NsaWVudC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY29ubl9jbGllbnQuY1xuQEAgLTgxLDYgJiM0Mzs4MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnhycGNfYnVuZGxlICpyeHJwY19hbGxvY19idW5kbGUoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG4gXHRcdGJ1bmRsZS1cdTAwM2Vsb2NhbFx0XHQ9IGNhbGwtXHUwMDNlbG9jYWw7XG4gXHRcdGJ1bmRsZS1cdTAwM2VwZWVyXHRcdD0gcnhycGNfZ2V0X3BlZXIoY2FsbC1cdTAwM2VwZWVyLCByeHJwY19wZWVyX2dldF9idW5kbGUpO1xuIFx0XHRidW5kbGUtXHUwMDNla2V5XHRcdD0ga2V5X2dldChjYWxsLVx1MDAzZWtleSk7XG4mIzQzO1x0XHRidW5kbGUtXHUwMDNlYXBwX2RhdGFcdD0ga2V5X2dldChjYWxsLVx1MDAzZWFwcF9kYXRhKTtcbiBcdFx0YnVuZGxlLVx1MDAzZXNlY3VyaXR5XHQ9IGNhbGwtXHUwMDNlc2VjdXJpdHk7XG4gXHRcdGJ1bmRsZS1cdTAwM2VleGNsdXNpdmVcdD0gdGVzdF9iaXQoUlhSUENfQ0FMTF9FWENMVVNJVkUsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpO1xuIFx0XHRidW5kbGUtXHUwMDNldXBncmFkZVx0XHQ9IHRlc3RfYml0KFJYUlBDX0NBTExfVVBHUkFERSwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncyk7XG5AQCAtMTE4LDYgJiM0MzsxMTksNyBAQCBzdGF0aWMgdm9pZCByeHJwY19mcmVlX2J1bmRsZShzdHJ1Y3QgcnhycGNfYnVuZGxlICpidW5kbGUpXG4gXHR3cml0ZV91bmxvY2soXHUwMDI2YnVuZGxlLVx1MDAzZWxvY2FsLVx1MDAzZXJ4bmV0LVx1MDAzZWNvbm5fbG9jayk7XG4gXHRyeHJwY19wdXRfcGVlcihidW5kbGUtXHUwMDNlcGVlciwgcnhycGNfcGVlcl9wdXRfYnVuZGxlKTtcbiBcdGtleV9wdXQoYnVuZGxlLVx1MDAzZWtleSk7XG4mIzQzO1x0a2V5X3B1dChidW5kbGUtXHUwMDNlYXBwX2RhdGEpO1xuIFx0a2ZyZWUoYnVuZGxlKTtcbiB9XG4gXG5AQCAtMjc0LDYgJiM0MzsyNzYsNyBAQCBpbnQgcnhycGNfbG9va191cF9idW5kbGUoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiAjZGVmaW5lIGNtcChYLCBZKSAoKGxvbmcpKFgpIC0gKGxvbmcpKFkpKVxuIFx0XHRkaWZmID0gKGNtcChidW5kbGUtXHUwMDNlcGVlciwgY2FsbC1cdTAwM2VwZWVyKSA/OlxuIFx0XHRcdGNtcChidW5kbGUtXHUwMDNla2V5LCBjYWxsLVx1MDAzZWtleSkgPzpcbiYjNDM7XHRcdFx0Y21wKGJ1bmRsZS1cdTAwM2VhcHBfZGF0YSwgY2FsbC1cdTAwM2VhcHBfZGF0YSkgPzpcbiBcdFx0XHRjbXAoYnVuZGxlLVx1MDAzZXNlY3VyaXR5X2xldmVsLCBjYWxsLVx1MDAzZXNlY3VyaXR5X2xldmVsKSA/OlxuIFx0XHRcdGNtcChidW5kbGUtXHUwMDNldXBncmFkZSwgdXBncmFkZSkpO1xuICN1bmRlZiBjbXBcbkBAIC0zMDMsNiAmIzQzOzMwNiw3IEBAIGludCByeHJwY19sb29rX3VwX2J1bmRsZShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuICNkZWZpbmUgY21wKFgsIFkpICgobG9uZykoWCkgLSAobG9uZykoWSkpXG4gXHRcdGRpZmYgPSAoY21wKGJ1bmRsZS1cdTAwM2VwZWVyLCBjYWxsLVx1MDAzZXBlZXIpID86XG4gXHRcdFx0Y21wKGJ1bmRsZS1cdTAwM2VrZXksIGNhbGwtXHUwMDNla2V5KSA/OlxuJiM0MztcdFx0XHRjbXAoYnVuZGxlLVx1MDAzZWFwcF9kYXRhLCBjYWxsLVx1MDAzZWFwcF9kYXRhKSA/OlxuIFx0XHRcdGNtcChidW5kbGUtXHUwMDNlc2VjdXJpdHlfbGV2ZWwsIGNhbGwtXHUwMDNlc2VjdXJpdHlfbGV2ZWwpID86XG4gXHRcdFx0Y21wKGJ1bmRsZS1cdTAwM2V1cGdyYWRlLCB1cGdyYWRlKSk7XG4gI3VuZGVmIGNtcFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX2V2ZW50LmMgYi9uZXQvcnhycGMvY29ubl9ldmVudC5jXG5pbmRleCA2MTFjNzkwYmM2ZDBjZS4uOTE0NmI5ZDRjMmFjNTAgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY29ubl9ldmVudC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY29ubl9ldmVudC5jXG5AQCAtMjc5LDEwICYjNDM7Mjc5LDcgQEAgc3RhdGljIGludCByeHJwY19wcm9jZXNzX2V2ZW50KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFxuIFx0c3dpdGNoIChzcC1cdTAwM2VoZHIudHlwZSkge1xuIFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9DSEFMTEVOR0U6XG4tXHRcdHJldCA9IGNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlcmVzcG9uZF90b19jaGFsbGVuZ2UoY29ubiwgc2tiKTtcbi1cdFx0c3AtXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XG4tXHRcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VyZXNwb25kX3RvX2NoYWxsZW5nZShjb25uLCBza2IpO1xuIFxuIFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9SRVNQT05TRTpcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjb25uLVx1MDAzZXN0YXRlX2xvY2spO1xuQEAgLTQyNSw2NiAmIzQzOzQyMiw2IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRyeHJwY19xdWV1ZV9jb25uKGNvbm4sIHJ4cnBjX2Nvbm5fcXVldWVfcnhfd29yayk7XG4gfVxuIFxuLS8qXG4tICogUG9zdCBhIENIQUxMRU5HRSBwYWNrZXQgdG8gdGhlIHNvY2tldCBvZiBvbmUgb2YgYSBjb25uZWN0aW9uJiMzOTtzIGNhbGxzIHNvIHRoYXRcbi0gKiBpdCBjYW4gZ2V0IGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgcGFja2V0LCBwb3NzaWJseSBxdWVyeWluZ1xuLSAqIHVzZXJzcGFjZS5cbi0gKi9cbi1zdGF0aWMgYm9vbCByeHJwY19wb3N0X2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTtcbi1cdHN0cnVjdCByeHJwY19jYWxsICpjYWxsID0gTlVMTDtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbi1cdGJvb2wgcmVzcG9uZCA9IGZhbHNlLCBxdWV1ZWQgPSBmYWxzZTtcbi1cbi1cdHNwLVx1MDAzZWNoYWxsLmNvbm4gPVxuLVx0XHRyeHJwY19nZXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX2dldF9jaGFsbGVuZ2VfaW5wdXQpO1xuLVxuLVx0aWYgKCFjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZWNoYWxsZW5nZV90b19yZWN2bXNnKSB7XG4tXHRcdHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjb25uLVx1MDAzZWNoYW5uZWxzKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKGNvbm4tXHUwMDNlY2hhbm5lbHNbaV0uY2FsbCkge1xuLVx0XHRcdGNhbGwgPSBjb25uLVx1MDAzZWNoYW5uZWxzW2ldLmNhbGw7XG4tXHRcdFx0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cdTAwM2Vzb2NrZXQpO1xuLVx0XHRcdGlmICghcngpIHtcbi1cdFx0XHRcdGNhbGwgPSBOVUxMO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdHJlc3BvbmQgPSB0cnVlO1xuLVx0XHRcdGlmICh0ZXN0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXHUwMDI2cngtXHUwMDNlZmxhZ3MpKVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0Y2FsbCA9IE5VTEw7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdGlmICghcmVzcG9uZCkge1xuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTtcbi1cdFx0c3AtXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbi1cbi1cdGlmIChjYWxsKVxuLVx0XHRxdWV1ZWQgPSByeHJwY19ub3RpZnlfc29ja2V0X29vYihjYWxsLCBza2IpO1xuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRpZiAoY2FsbCBcdTAwMjZcdTAwMjYgIXF1ZXVlZCkge1xuLVx0XHRyeHJwY19wdXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQpO1xuLVx0XHRzcC1cdTAwM2VjaGFsbC5jb25uID0gTlVMTDtcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0fVxuLVxuLVx0aWYgKCFjYWxsKVxuLVx0XHRyeHJwY19wb3N0X3BhY2tldF90b19jb25uKGNvbm4sIHNrYik7XG4tXHRyZXR1cm4gdHJ1ZTtcbi19XG4tXG4gLypcbiAgKiBJbnB1dCBhIGNvbm5lY3Rpb24tbGV2ZWwgcGFja2V0LlxuICAqL1xuQEAgLTUxMyw3ICYjNDM7NDUwLDggQEAgYm9vbCByeHJwY19pbnB1dF9jb25uX3BhY2tldChzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0fVxuIFx0XHRpZiAoIWNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNldmFsaWRhdGVfY2hhbGxlbmdlKGNvbm4sIHNrYikpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHRyZXR1cm4gcnhycGNfcG9zdF9jaGFsbGVuZ2UoY29ubiwgc2tiKTtcbiYjNDM7XHRcdHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTtcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9SRVNQT05TRTpcbiBcdFx0aWYgKHJ4cnBjX2lzX2Nvbm5fYWJvcnRlZChjb25uKSkge1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9pbnNlY3VyZS5jIGIvbmV0L3J4cnBjL2luc2VjdXJlLmNcbmluZGV4IDBiMzkwNDZiZGM2MTZhLi5jMDgzYzgyYzRlN2YzZiAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9pbnNlY3VyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvaW5zZWN1cmUuY1xuQEAgLTQ3LDEyICYjNDM7NDcsNiBAQCBzdGF0aWMgYm9vbCBub25lX3ZhbGlkYXRlX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5vbmVfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZylcbi17XG4tXHRyZXR1cm4gLUVJTlZBTDtcbi19XG4tXG4gc3RhdGljIGludCBub25lX3ZlcmlmeV9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdFx0XHRcdHN0cnVjdCBza19idWZmICpyZXNwb25zZV9za2IsXG4gXHRcdFx0XHR2b2lkICpyZXNwb25zZSwgdW5zaWduZWQgaW50IGxlbilcbkBAIC04OCw3ICYjNDM7ODIsNiBAQCBjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgcnhycGNfbm9fc2VjdXJpdHkgPSB7XG4gXHQuc2VjdXJlX3BhY2tldFx0XHRcdD0gbm9uZV9zZWN1cmVfcGFja2V0LFxuIFx0LnZlcmlmeV9wYWNrZXRcdFx0XHQ9IG5vbmVfdmVyaWZ5X3BhY2tldCxcbiBcdC52YWxpZGF0ZV9jaGFsbGVuZ2VcdFx0PSBub25lX3ZhbGlkYXRlX2NoYWxsZW5nZSxcbi1cdC5zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlXHQ9IG5vbmVfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSxcbiBcdC52ZXJpZnlfcmVzcG9uc2VcdFx0PSBub25lX3ZlcmlmeV9yZXNwb25zZSxcbiBcdC5jbGVhclx0XHRcdFx0PSBub25lX2NsZWFyLFxuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2tleS5jIGIvbmV0L3J4cnBjL2tleS5jXG5pbmRleCBhMGFhNzhkODkyODk3Zi4uMTZiYWI3MmU2ZjA3NzcgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMva2V5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9rZXkuY1xuQEAgLTg5MywzICYjNDM7ODkzLDQwIEBAIHN0YXRpYyBsb25nIHJ4cnBjX3JlYWQoY29uc3Qgc3RydWN0IGtleSAqa2V5LFxuIFx0X2xlYXZlKFwmIzM0OyA9ICV6dVwmIzM0Oywgc2l6ZSk7XG4gXHRyZXR1cm4gc2l6ZTtcbiB9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcnhycGNfa2VybmVsX3F1ZXJ5X2tleSAtIFF1ZXJ5IHBhcmFtZXRlcnMgZnJvbSBhbiByeHJwYyBrZXlcbiYjNDM7ICogQGtleTogVGhlIGtleSB0byBxdWVyeVxuJiM0MzsgKiBAX3NlY3VyaXR5X2luZGV4OiBXaGVyZSB0byByZXR1cm4gdGhlIHNlY3VyaXR5IGluZGV4XG4mIzQzOyAqIEBfa3JiNV9lbmN0eXBlOiBXaGVyZSB0byByZXR1cm4gdGhlIGtyYjUgZW5jcnlwdGlvbiB0eXBlIGlmIGFwcGxpY2FibGVcbiYjNDM7ICpcbiYjNDM7ICogUXVlcnkgYW4gcnhycGMgYXV0aGVudGljYXRpb24ga2V5LCBleHRyYWN0aW5nIHRoZSBzZWN1cml0eSBpbmRleCBmcm9tIHRoZVxuJiM0MzsgKiBmaXJzdCB0b2tlbiB0aGVyZWluLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCByeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgdTggKl9zZWN1cml0eV9pbmRleCxcbiYjNDM7XHRcdFx0ICAgIHUzMiAqX2tyYjVfZW5jdHlwZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCByeHJwY19rZXlfdG9rZW4gKnRva2VuO1xuJiM0MztcbiYjNDM7XHR0b2tlbiA9IGtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF07XG4mIzQzO1x0aWYgKCF0b2tlbikge1xuJiM0MztcdFx0Kl9zZWN1cml0eV9pbmRleCA9IDA7XG4mIzQzO1x0XHQqX2tyYjVfZW5jdHlwZSA9IDA7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqX3NlY3VyaXR5X2luZGV4ID0gdG9rZW4tXHUwMDNlc2VjdXJpdHlfaW5kZXg7XG4mIzQzO1x0c3dpdGNoICh0b2tlbi1cdTAwM2VzZWN1cml0eV9pbmRleCkge1xuJiM0MztcdGNhc2UgUlhSUENfU0VDVVJJVFlfUlhLQUQ6XG4mIzQzO1x0XHQqX2tyYjVfZW5jdHlwZSA9IDA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxuJiM0MztcdFx0Kl9rcmI1X2VuY3R5cGUgPSB0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZWVuY3R5cGU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0V0FSTl9PTl9PTkNFKDEpO1xuJiM0MztcdFx0Kl9rcmI1X2VuY3R5cGUgPSAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3F1ZXJ5X2tleSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL29vYi5jIGIvbmV0L3J4cnBjL29vYi5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGM4MGVlMjQ4N2QwOTQxLi4wMDAwMDAwMDAwMDAwMFxuLS0tIGEvbmV0L3J4cnBjL29vYi5jXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSwzODcgJiM0MzswLDAgQEBcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuLS8qIE91dCBvZiBiYW5kIG1lc3NhZ2UgaGFuZGxpbmcgKGUuZy4gY2hhbGxlbmdlLXJlc3BvbnNlKVxuLSAqXG4tICogQ29weXJpZ2h0IChDKSAyMDI1IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pXG4tICovXG4tXG4tI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcJiMzNDs6IFwmIzM0OyBmbXRcbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY25ldC9hZl9yeHJwYy5oXHUwMDNlXG4tI2luY2x1ZGUgXCYjMzQ7YXItaW50ZXJuYWwuaFwmIzM0O1xuLVxuLWVudW0gcnhycGNfb29iX2NvbW1hbmQge1xuLVx0UlhSUENfT09CX0NNRF9VTlNFVCxcbi1cdFJYUlBDX09PQl9DTURfUkVTUE9ORCxcbi19IF9fbW9kZShieXRlKTtcbi1cbi1zdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyB7XG4tXHR1NjRcdFx0XHRvb2JfaWQ7XHRcdC8qIElEIG51bWJlciBvZiBtZXNzYWdlIGlmIHJlcGx5ICovXG4tXHRzMzJcdFx0XHRhYm9ydF9jb2RlO1xuLVx0ZW51bSByeHJwY19vb2JfY29tbWFuZFx0Y29tbWFuZDtcbi1cdGJvb2xcdFx0XHRoYXZlX29vYl9pZDoxO1xuLX07XG4tXG4tLypcbi0gKiBQb3N0IGFuIG91dC1vZi1iYW5kIG1lc3NhZ2UgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlXG4tICogYXNzb2NpYXRlZCB3aXRoIGEgcmVmZXJlbmNlIGNhbGwuXG4tICovXG4tYm9vbCByeHJwY19ub3RpZnlfc29ja2V0X29vYihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKHNrYik7XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcng7XG4tXHRzdHJ1Y3Qgc29jayAqc2s7XG4tXHRib29sIHF1ZXVlZCA9IGZhbHNlO1xuLVxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVxuLVx0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cdTAwM2Vzb2NrZXQpO1xuLVx0aWYgKHJ4KSB7XG4tXHRcdHNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4tXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbi1cbi1cdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlIFx1MDAzYyBSWFJQQ19DTE9TRSkge1xuLVx0XHRcdHNrYi1cdTAwM2Vza2JfbXN0YW1wX25zID0gcngtXHUwMDNlb29iX2lkX2NvdW50ZXImIzQzOyYjNDM7O1xuLVx0XHRcdHJ4cnBjX2dldF9za2Ioc2tiLCByeHJwY19za2JfZ2V0X3Bvc3Rfb29iKTtcbi1cdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEsIHNrYik7XG4tXHRcdFx0cXVldWVkID0gdHJ1ZTtcbi1cbi1cdFx0XHR0cmFjZV9yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwtXHUwMDNlZGVidWdfaWQsIHNwLVx1MDAzZWhkci5zZXJpYWwpO1xuLVx0XHRcdGlmIChyeC1cdTAwM2VhcHBfb3BzKVxuLVx0XHRcdFx0cngtXHUwMDNlYXBwX29wcy1cdTAwM2Vub3RpZnlfb29iKHNrLCBza2IpO1xuLVx0XHR9XG4tXG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuLVx0XHRpZiAocXVldWVkIFx1MDAyNlx1MDAyNiAhcngtXHUwMDNlYXBwX29wcyBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcbi1cdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbi1cdH1cbi1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0cmV0dXJuIHF1ZXVlZDtcbi19XG4tXG4tLypcbi0gKiBMb2NhdGUgdGhlIE9PQiBtZXNzYWdlIHRvIHJlc3BvbmQgdG8gYnkgaXRzIElELlxuLSAqL1xuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfZmluZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHU2NCBvb2JfaWQpXG4te1xuLVx0c3RydWN0IHJiX25vZGUgKnA7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLVxuLVx0cCA9IHJ4LVx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlO1xuLVx0d2hpbGUgKHApIHtcbi1cdFx0c2tiID0gcmJfZW50cnkocCwgc3RydWN0IHNrX2J1ZmYsIHJibm9kZSk7XG4tXG4tXHRcdGlmIChvb2JfaWQgXHUwMDNjIHNrYi1cdTAwM2Vza2JfbXN0YW1wX25zKVxuLVx0XHRcdHAgPSBwLVx1MDAzZXJiX2xlZnQ7XG4tXHRcdGVsc2UgaWYgKG9vYl9pZCBcdTAwM2Ugc2tiLVx1MDAzZXNrYl9tc3RhbXBfbnMpXG4tXHRcdFx0cCA9IHAtXHUwMDNlcmJfcmlnaHQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXR1cm4gc2tiO1xuLVx0fVxuLVxuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLVxuLS8qXG4tICogQWRkIGFuIE9PQiBtZXNzYWdlIGludG8gdGhlIHBlbmRpbmctcmVzcG9uc2Ugc2V0LiAgV2UgYWx3YXlzIGFzc2lnbiB0aGUgbmV4dFxuLSAqIHZhbHVlIGZyb20gYSA2NC1iaXQgY291bnRlciB0byB0aGUgb29iX2lkLCBzbyBqdXN0IGFzc3VtZSB3ZSYjMzk7cmUgYWx3YXlzIGdvaW5nXG4tICogdG8gYmUgb24gdGhlIHJpZ2h0LWhhbmQgZWRnZSBvZiB0aGUgdHJlZSBhbmQgdGhhdCB0aGUgY291bnRlciB3b24mIzM5O3Qgd3JhcC5cbi0gKiBUaGUgdHJlZSBpcyBhbHNvIGdpdmVuIGEgcmVmIHRvIHRoZSBtZXNzYWdlLlxuLSAqL1xuLXZvaWQgcnhycGNfYWRkX3BlbmRpbmdfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi17XG4tXHRzdHJ1Y3QgcmJfbm9kZSAqKnBwID0gXHUwMDI2cngtXHUwMDNlcGVuZGluZ19vb2JxLnJiX25vZGUsICpwID0gTlVMTDtcbi1cbi1cdHdoaWxlICgqcHApIHtcbi1cdFx0cCA9ICpwcDtcbi1cdFx0cHAgPSBcdTAwMjYoKnBwKS1cdTAwM2VyYl9yaWdodDtcbi1cdH1cbi1cbi1cdHJiX2xpbmtfbm9kZShcdTAwMjZza2ItXHUwMDNlcmJub2RlLCBwLCBwcCk7XG4tXHRyYl9pbnNlcnRfY29sb3IoXHUwMDI2c2tiLVx1MDAzZXJibm9kZSwgXHUwMDI2cngtXHUwMDNlcGVuZGluZ19vb2JxKTtcbi19XG4tXG4tLypcbi0gKiBFeHRyYWN0IGNvbnRyb2wgbWVzc2FnZXMgZnJvbSB0aGUgc2VuZG1zZygpIGNvbnRyb2wgYnVmZmVyLlxuLSAqL1xuLXN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19vb2JfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19vb2JfcGFyYW1zICpwKVxuLXtcbi1cdHN0cnVjdCBjbXNnaGRyICpjbXNnO1xuLVx0aW50IGxlbjtcbi1cbi1cdGlmIChtc2ctXHUwMDNlbXNnX2NvbnRyb2xsZW4gPT0gMClcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRmb3JfZWFjaF9jbXNnaGRyKGNtc2csIG1zZykge1xuLVx0XHRpZiAoIUNNU0dfT0sobXNnLCBjbXNnKSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdFx0bGVuID0gY21zZy1cdTAwM2VjbXNnX2xlbiAtIHNpemVvZihzdHJ1Y3QgY21zZ2hkcik7XG4tXHRcdF9kZWJ1ZyhcJiMzNDtDTVNHICVkLCAlZCwgJWRcJiMzNDssXG4tXHRcdCAgICAgICBjbXNnLVx1MDAzZWNtc2dfbGV2ZWwsIGNtc2ctXHUwMDNlY21zZ190eXBlLCBsZW4pO1xuLVxuLVx0XHRpZiAoY21zZy1cdTAwM2VjbXNnX2xldmVsICE9IFNPTF9SWFJQQylcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0c3dpdGNoIChjbXNnLVx1MDAzZWNtc2dfdHlwZSkge1xuLVx0XHRjYXNlIFJYUlBDX09PQl9JRDpcbi1cdFx0XHRpZiAobGVuICE9IHNpemVvZihwLVx1MDAzZW9vYl9pZCkgfHwgcC1cdTAwM2VoYXZlX29vYl9pZClcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdG1lbWNweShcdTAwMjZwLVx1MDAzZW9vYl9pZCwgQ01TR19EQVRBKGNtc2cpLCBzaXplb2YocC1cdTAwM2Vvb2JfaWQpKTtcbi1cdFx0XHRwLVx1MDAzZWhhdmVfb29iX2lkID0gdHJ1ZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBSWFJQQ19SRVNQT05EOlxuLVx0XHRcdGlmIChwLVx1MDAzZWNvbW1hbmQgIT0gUlhSUENfT09CX0NNRF9VTlNFVClcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdHAtXHUwMDNlY29tbWFuZCA9IFJYUlBDX09PQl9DTURfUkVTUE9ORDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBSWFJQQ19BQk9SVDpcbi1cdFx0XHRpZiAobGVuICE9IHNpemVvZihwLVx1MDAzZWFib3J0X2NvZGUpIHx8IHAtXHUwMDNlYWJvcnRfY29kZSlcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdG1lbWNweShcdTAwMjZwLVx1MDAzZWFib3J0X2NvZGUsIENNU0dfREFUQShjbXNnKSwgc2l6ZW9mKHAtXHUwMDNlYWJvcnRfY29kZSkpO1xuLVx0XHRcdGlmIChwLVx1MDAzZWFib3J0X2NvZGUgPT0gMClcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBOlxuLVx0XHRcdGlmIChwLVx1MDAzZWNvbW1hbmQgIT0gUlhSUENfT09CX0NNRF9SRVNQT05EKVxuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHN3aXRjaCAocC1cdTAwM2Vjb21tYW5kKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DTURfUkVTUE9ORDpcbi1cdFx0aWYgKCFwLVx1MDAzZWhhdmVfb29iX2lkKVxuLVx0XHRcdHJldHVybiAtRUJBRFNMVDtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi0vKlxuLSAqIEFsbG93IHVzZXJzcGFjZSB0byByZXNwb25kIHRvIGFuIE9PQiB1c2luZyBzZW5kbXNnKCkuXG4tICovXG4tc3RhdGljIGludCByeHJwY19yZXNwb25kX3RvX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4tXHRcdFx0XHRzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyAqcCxcbi1cdFx0XHRcdHN0cnVjdCBtc2doZHIgKm1zZylcbi17XG4tXHRzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubjtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3A7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLVx0aW50IHJldDtcbi1cbi1cdHNrYiA9IHJ4cnBjX2ZpbmRfcGVuZGluZ19vb2IocngsIHAtXHUwMDNlb29iX2lkKTtcbi1cdGlmIChza2IpXG4tXHRcdHJiX2VyYXNlKFx1MDAyNnNrYi1cdTAwM2VyYm5vZGUsIFx1MDAyNnJ4LVx1MDAzZXBlbmRpbmdfb29icSk7XG4tXHRyZWxlYXNlX3NvY2soXHUwMDI2cngtXHUwMDNlc2spO1xuLVx0aWYgKCFza2IpXG4tXHRcdHJldHVybiAtRUJBRFNMVDtcbi1cbi1cdHNwID0gcnhycGNfc2tiKHNrYik7XG4tXG4tXHRzd2l0Y2ggKHAtXHUwMDNlY29tbWFuZCkge1xuLVx0Y2FzZSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQ6XG4tXHRcdHJldCA9IC1FUFJPVE87XG4tXHRcdGlmIChza2ItXHUwMDNlbWFyayAhPSBSWFJQQ19PT0JfQ0hBTExFTkdFKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRjb25uID0gc3AtXHUwMDNlY2hhbGwuY29ubjtcbi1cdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4tXHRcdGlmICghY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VzZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAocC1cdTAwM2VhYm9ydF9jb2RlKSB7XG4tXHRcdFx0cnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBwLVx1MDAzZWFib3J0X2NvZGUsIC1FQ09OTkFCT1JURUQsXG4tXHRcdFx0XHRcdCByeHJwY19hYm9ydF9yZXNwb25zZV9zZW5kbXNnKTtcbi1cdFx0XHRyZXQgPSAwO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHJldCA9IGNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZShza2IsIG1zZyk7XG4tXHRcdH1cbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdHN3aXRjaCAoc2tiLVx1MDAzZW1hcmspIHtcbi1cdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcbi1cdFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtXHUwMDNlY2hhbGwuY29ubiwgcnhycGNfY29ubl9wdXRfb29iKTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXHRyeHJwY19mcmVlX3NrYihza2IsIHJ4cnBjX3NrYl9wdXRfb29iKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLS8qXG4tICogU2VuZCBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlIG9yIHJlc3BvbmQgdG8gYSByZWNlaXZlZCBvdXQtb2YtYmFuZCBtZXNzYWdlLlxuLSAqIC0gY2FsbGVyIGdpdmVzIHVzIHRoZSBzb2NrZXQgbG9ja1xuLSAqIC0gdGhlIHNvY2tldCBtYXkgYmUgZWl0aGVyIGEgY2xpZW50IHNvY2tldCBvciBhIHNlcnZlciBzb2NrZXRcbi0gKi9cbi1pbnQgcnhycGNfc2VuZG1zZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4te1xuLVx0c3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgcCA9IHt9O1xuLVx0aW50IHJldDtcbi1cbi1cdF9lbnRlcihcJiMzNDtcJiMzNDspO1xuLVxuLVx0cmV0ID0gcnhycGNfc2VuZG1zZ19vb2JfY21zZyhtc2csIFx1MDAyNnApO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJvcl9yZWxlYXNlX3NvY2s7XG4tXG4tXHRpZiAocC5oYXZlX29vYl9pZClcbi1cdFx0cmV0dXJuIHJ4cnBjX3Jlc3BvbmRfdG9fb29iKHJ4LCBcdTAwMjZwLCBtc2cpO1xuLVxuLVx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbi1cbi1cdHN3aXRjaCAocC5jb21tYW5kKSB7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbi1cdHJldHVybiByZXQ7XG4tXG4tZXJyb3JfcmVsZWFzZV9zb2NrOlxuLVx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLS8qKlxuLSAqIHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2IgLSBRdWVyeSB0aGUgcGFyYW1ldGVycyBvZiBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlXG4tICogQG9vYjogVGhlIG1lc3NhZ2UgdG8gcXVlcnlcbi0gKiBAX3BlZXI6IFdoZXJlIHRvIHJldHVybiB0aGUgcGVlciByZWNvcmRcbi0gKiBAX3BlZXJfYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgYXR0YWNoZWQgdG8gYSBwZWVyIHJlY29yZFxuLSAqXG4tICogRXh0cmFjdCB1c2VmdWwgcGFyYW1ldGVycyBmcm9tIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2UuICBUaGUgc291cmNlIHBlZXJcbi0gKiBwYXJhbWV0ZXJzIGFyZSByZXR1cm5lZCB0aHJvdWdoIHRoZSBhcmd1bWVudCBsaXN0IGFuZCB0aGUgbWVzc2FnZSB0eXBlIGlzXG4tICogcmV0dXJuZWQuXG4tICpcbi0gKiBSZXR1cm46XG4tICogKiAlUlhSUENfT09CX0NIQUxMRU5HRSAtIENoYWxsZW5nZSB3YW50aW5nIGEgcmVzcG9uc2UuXG4tICovXG4tZW51bSByeHJwY19vb2JfdHlwZSByeHJwY19rZXJuZWxfcXVlcnlfb29iKHN0cnVjdCBza19idWZmICpvb2IsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXG4tXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihvb2IpO1xuLVx0ZW51bSByeHJwY19vb2JfdHlwZSB0eXBlID0gb29iLVx1MDAzZW1hcms7XG4tXG4tXHRzd2l0Y2ggKHR5cGUpIHtcbi1cdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcbi1cdFx0Kl9wZWVyXHRcdD0gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VwZWVyO1xuLVx0XHQqX3BlZXJfYXBwZGF0YVx0PSBzcC1cdTAwM2VjaGFsbC5jb25uLVx1MDAzZXBlZXItXHUwMDNlYXBwX2RhdGE7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0V0FSTl9PTl9PTkNFKDEpO1xuLVx0XHQqX3BlZXJcdFx0PSBOVUxMO1xuLVx0XHQqX3BlZXJfYXBwZGF0YVx0PSAwO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdHJldHVybiB0eXBlO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2IpO1xuLVxuLS8qKlxuLSAqIHJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYiAtIERlcXVldWUgYW5kIHJldHVybiB0aGUgZnJvbnQgT09CIG1lc3NhZ2Vcbi0gKiBAc29jazogVGhlIHNvY2tldCB0byBxdWVyeVxuLSAqIEBfdHlwZTogV2hlcmUgdG8gcmV0dXJuIHRoZSBtZXNzYWdlIHR5cGVcbi0gKlxuLSAqIERlcXVldWUgdGhlIGZyb250IE9PQiBtZXNzYWdlLCBpZiB0aGVyZSBpcyBvbmUsIGFuZCByZXR1cm4gaXQgYW5kXG4tICogaXRzIHR5cGUuXG4tICpcbi0gKiBSZXR1cm46IFRoZSBza19idWZmIHJlcHJlc2VudGluZyB0aGUgT09CIG1lc3NhZ2Ugb3IgJU5VTEwgaWYgdGhlIHF1ZXVlIHdhc1xuLSAqIGVtcHR5LlxuLSAqL1xuLXN0cnVjdCBza19idWZmICpyeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2Ioc3RydWN0IHNvY2tldCAqc29jayxcbi1cdFx0XHRcdFx0IGVudW0gcnhycGNfb29iX3R5cGUgKl90eXBlKVxuLXtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stXHUwMDNlc2spO1xuLVx0c3RydWN0IHNrX2J1ZmYgKm9vYjtcbi1cbi1cdG9vYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSk7XG4tXHRpZiAob29iKVxuLVx0XHQqX3R5cGUgPSBvb2ItXHUwMDNlbWFyaztcbi1cdHJldHVybiBvb2I7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX2RlcXVldWVfb29iKTtcbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfZnJlZV9vb2IgLSBGcmVlIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2Vcbi0gKiBAb29iOiBUaGUgT09CIG1lc3NhZ2UgdG8gZnJlZVxuLSAqXG4tICogRnJlZSBhbiBPT0IgbWVzc2FnZSBhbG9uZyB3aXRoIGFueSByZXNvdXJjZXMgaXQgaG9sZHMuXG4tICovXG4tdm9pZCByeHJwY19rZXJuZWxfZnJlZV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYilcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKG9vYik7XG4tXG4tXHRzd2l0Y2ggKG9vYi1cdTAwM2VtYXJrKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XG4tXHRcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKHNwLVx1MDAzZWNoYWxsLmNvbm4sIHJ4cnBjX2Nvbm5fcHV0X29vYik7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0cnhycGNfZnJlZV9za2Iob29iLCByeHJwY19za2JfcHV0X3B1cmdlX29vYik7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX2ZyZWVfb29iKTtcbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlIC0gUXVlcnkgdGhlIHBhcmFtZXRlcnMgb2YgYSBjaGFsbGVuZ2Vcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHF1ZXJ5XG4tICogQF9wZWVyOiBXaGVyZSB0byByZXR1cm4gdGhlIHBlZXIgcmVjb3JkXG4tICogQF9wZWVyX2FwcGRhdGE6IFRoZSBhcHBsaWNhdGlvbiBkYXRhIGF0dGFjaGVkIHRvIGEgcGVlciByZWNvcmRcbi0gKiBAX3NlcnZpY2VfaWQ6IFdoZXJlIHRvIHJldHVybiB0aGUgY29ubmVjdGlvbiBzZXJ2aWNlIElEXG4tICogQF9zZWN1cml0eV9pbmRleDogV2hlcmUgdG8gcmV0dXJuIHRoZSBjb25uZWN0aW9uIHNlY3VyaXR5IGluZGV4XG4tICpcbi0gKiBFeHRyYWN0IHVzZWZ1bCBwYXJhbWV0ZXJzIGZyb20gYSBDSEFMTEVOR0UgbWVzc2FnZS5cbi0gKi9cbi12b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgc3RydWN0IHJ4cnBjX3BlZXIgKipfcGVlcixcbi1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyAqX3BlZXJfYXBwZGF0YSxcbi1cdFx0XHRcdCAgdTE2ICpfc2VydmljZV9pZCwgdTggKl9zZWN1cml0eV9pbmRleClcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XG4tXG4tXHQqX3BlZXJcdFx0PSBzcC1cdTAwM2VjaGFsbC5jb25uLVx1MDAzZXBlZXI7XG4tXHQqX3BlZXJfYXBwZGF0YVx0PSBzcC1cdTAwM2VjaGFsbC5jb25uLVx1MDAzZXBlZXItXHUwMDNlYXBwX2RhdGE7XG4tXHQqX3NlcnZpY2VfaWRcdD0gc3AtXHUwMDNlaGRyLnNlcnZpY2VJZDtcbi1cdCpfc2VjdXJpdHlfaW5kZXggPSBzcC1cdTAwM2VoZHIuc2VjdXJpdHlJbmRleDtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKTtcbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZSAtIEFsbG93IGEga2VybmVsIHNlcnZpY2UgdG8gcmVqZWN0IGEgY2hhbGxlbmdlXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byBiZSByZWplY3RlZFxuLSAqIEBhYm9ydF9jb2RlOiBUaGUgYWJvcnQgY29kZSB0byBzdGljayBpbnRvIHRoZSBBQk9SVCBwYWNrZXRcbi0gKiBAZXJyb3I6IExvY2FsIGVycm9yIHZhbHVlXG4tICogQHdoeTogSW5kaWNhdGlvbiBhcyB0byB3aHkuXG4tICpcbi0gKiBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHJlamVjdCBhIGNoYWxsZW5nZSBieSBhYm9ydGluZyB0aGUgY29ubmVjdGlvbiBpZlxuLSAqIGl0JiMzOTtzIHN0aWxsIGluIGFuIGFib3J0YWJsZSBzdGF0ZS4gIFRoZSBlcnJvciBpcyByZXR1cm5lZCBzbyB0aGlzIGZ1bmN0aW9uXG4tICogY2FuIGJlIHVzZWQgd2l0aCBhIHJldHVybiBzdGF0ZW1lbnQuXG4tICpcbi0gKiBSZXR1cm46IFRoZSAlZXJyb3IgcGFyYW1ldGVyLlxuLSAqL1xuLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSxcbi1cdFx0XHRcdCAgaW50IGVycm9yLCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0X2VudGVyKFwmIzM0O3sleH0sJWQsJWQsJXVcJiMzNDssIHNwLVx1MDAzZWhkci5zZXJpYWwsIGFib3J0X2NvZGUsIGVycm9yLCB3aHkpO1xuLVxuLVx0cnhycGNfYWJvcnRfY29ubihzcC1cdTAwM2VjaGFsbC5jb25uLCBOVUxMLCBhYm9ydF9jb2RlLCBlcnJvciwgd2h5KTtcbi1cdHJldHVybiBlcnJvcjtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3Byb2MuYyBiL25ldC9yeHJwYy9wcm9jLmNcbmluZGV4IGU5YTI3ZmE3YjI1ZDhiLi5mMzAwNDkxYjA2YmRhYyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9wcm9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9wcm9jLmNcbkBAIC0yMzgsNyAmIzQzOzIzOCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfYnVuZGxlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIFx0XHRzZXFfcHV0cyhzZXEsXG4gXHRcdFx0IFwmIzM0O1Byb3RvIExvY2FsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7XG4gXHRcdFx0IFwmIzM0OyBSZW1vdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O1xuLVx0XHRcdCBcJiMzNDsgU3ZJRCBSZWYgQWN0IEZsZyBLZXkgICAgICB8XCYjMzQ7XG4mIzQzO1x0XHRcdCBcJiMzNDsgU3ZJRCBSZWYgQWN0IEZsZyBLZXkgICAgICBBcHBEYXRhICB8XCYjMzQ7XG4gXHRcdFx0IFwmIzM0OyBCdW5kbGUgICBDb25uXzAgICBDb25uXzEgICBDb25uXzIgICBDb25uXzNcXG5cJiMzNDtcbiBcdFx0XHQgKTtcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMjUwLDcgJiM0MzsyNTAsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX2J1bmRsZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiBcdHNjbnByaW50ZihyYnVmZiwgc2l6ZW9mKHJidWZmKSwgXCYjMzQ7JXBJU3BjXCYjMzQ7LCBcdTAwMjZidW5kbGUtXHUwMDNlcGVlci1cdTAwM2VzcngudHJhbnNwb3J0KTtcbiBcdHNlcV9wcmludGYoc2VxLFxuIFx0XHQgICBcJiMzNDtVRFAgICAlLTQ3LjQ3cyAlLTQ3LjQ3cyAlNHggJTN1ICUzZFwmIzM0O1xuLVx0XHQgICBcJiMzNDsgJWMlYyVjICUwOHggfCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHhcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBcJiMzNDsgJWMlYyVjICUwOHggJTA4eCB8ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eFxcblwmIzM0OyxcbiBcdFx0ICAgbGJ1ZmYsXG4gXHRcdCAgIHJidWZmLFxuIFx0XHQgICBidW5kbGUtXHUwMDNlc2VydmljZV9pZCxcbkBAIC0yNjAsNiAmIzQzOzI2MCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfYnVuZGxlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIFx0XHQgICBidW5kbGUtXHUwMDNlZXhjbHVzaXZlID8gJiMzOTtlJiMzOTsgOiAmIzM5Oy0mIzM5OyxcbiBcdFx0ICAgYnVuZGxlLVx1MDAzZXVwZ3JhZGUgPyAmIzM5O3UmIzM5OyA6ICYjMzk7LSYjMzk7LFxuIFx0XHQgICBrZXlfc2VyaWFsKGJ1bmRsZS1cdTAwM2VrZXkpLFxuJiM0MztcdFx0ICAga2V5X3NlcmlhbChidW5kbGUtXHUwMDNlYXBwX2RhdGEpLFxuIFx0XHQgICBidW5kbGUtXHUwMDNlZGVidWdfaWQsXG4gXHRcdCAgIGJ1bmRsZS1cdTAwM2Vjb25uX2lkc1swXSxcbiBcdFx0ICAgYnVuZGxlLVx1MDAzZWNvbm5faWRzWzFdLFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jXG5pbmRleCBlZmNiYTRiMmU3NGYwYy4uOGM0NTcxOTgyZWRjNDUgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcmVjdm1zZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcmVjdm1zZy5jXG5AQCAtMTcsMTMgJiM0MzsxNywxMiBAQFxuICNpbmNsdWRlIFwmIzM0O2FyLWludGVybmFsLmhcJiMzNDtcbiBcbiAvKlxuLSAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXJcbi0gKiBub3RpZmljYXRpb25zIGFyZSBzdXBwcmVzc2VkIGJ5IHB1dHRpbmcgcmVjdm1zZ19saW5rIG9uIGEgZHVtbXkgcXVldWUuXG4mIzQzOyAqIFJlcXVldWUgYSBjYWxsIGZvciByZWN2bXNnKCkgdG8gcGljayB1cC5cbiAgKi9cbi12b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4mIzQzO3N0YXRpYyB2b2lkIHJ4cnBjX3JlcXVldWVfY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbiB7XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcng7XG4tXHRzdHJ1Y3Qgc29jayAqc2s7XG4mIzQzO1x0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cdTAwM2Vzayk7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4gXG4gXHRfZW50ZXIoXCYjMzQ7JWRcJiMzNDssIGNhbGwtXHUwMDNlZGVidWdfaWQpO1xuIFxuQEAgLTMyLDMxICYjNDM7MzEsMTggQEAgdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXG4tXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVx1MDAzZXNvY2tldCk7XG4tXHRzayA9IFx1MDAyNnJ4LVx1MDAzZXNrO1xuLVx0aWYgKHJ4IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSBcdTAwM2MgUlhSUENfQ0xPU0UpIHtcbi1cdFx0aWYgKGNhbGwtXHUwMDNlbm90aWZ5X3J4KSB7XG4tXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjYWxsLVx1MDAzZW5vdGlmeV9sb2NrKTtcbi1cdFx0XHRjYWxsLVx1MDAzZW5vdGlmeV9yeChzaywgY2FsbCwgY2FsbC1cdTAwM2V1c2VyX2NhbGxfSUQpO1xuLVx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjYWxsLVx1MDAzZW5vdGlmeV9sb2NrKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4tXHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmspKSB7XG4tXHRcdFx0XHRyeHJwY19nZXRfY2FsbChjYWxsLCByeHJwY19jYWxsX2dldF9ub3RpZnlfc29ja2V0KTtcbi1cdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmssIFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSk7XG4tXHRcdFx0fVxuLVx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbiYjNDM7XHRpZiAobGlzdF9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaykpIHtcbiYjNDM7XHRcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xuJiM0MztcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaywgXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKTtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4gXG4tXHRcdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHtcbi1cdFx0XHRcdF9kZWJ1ZyhcJiMzNDtjYWxsICVwc1wmIzM0Oywgc2stXHUwMDNlc2tfZGF0YV9yZWFkeSk7XG4tXHRcdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbi1cdFx0XHR9XG4tXHRcdH1cbiYjNDM7XHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xuJiM0MztcdFx0X2RlYnVnKFwmIzM0O2NhbGwgJXBzXCYjMzQ7LCBzay1cdTAwM2Vza19kYXRhX3JlYWR5KTtcbiYjNDM7XHRcdHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xuIFx0fVxuIFxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRfbGVhdmUoXCYjMzQ7XCYjMzQ7KTtcbiB9XG4gXG5AQCAtMjE1LDYxICYjNDM7MjAxLDYgQEAgc3RhdGljIGludCByeHJwY19yZWN2bXNnX3VzZXJfaWQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdH1cbiB9XG4gXG4tLypcbi0gKiBEZWFsIHdpdGggYSBDSEFMTEVOR0UgcGFja2V0LlxuLSAqL1xuLXN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19jaGFsbGVuZ2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTtcbi1cdHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uID0gc3AtXHUwMDNlY2hhbGwuY29ubjtcbi1cbi1cdHJldHVybiBjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZWNoYWxsZW5nZV90b19yZWN2bXNnKGNvbm4sIGNoYWxsZW5nZSwgbXNnKTtcbi19XG4tXG4tLypcbi0gKiBQcm9jZXNzIE9PQiBwYWNrZXRzLiAgQ2FsbGVkIHdpdGggdGhlIHNvY2tldCBsb2NrZWQuXG4tICovXG4tc3RhdGljIGludCByeHJwY19yZWN2bXNnX29vYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cdTAwM2Vzayk7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLVx0Ym9vbCBuZWVkX3Jlc3BvbnNlID0gZmFsc2U7XG4tXHRpbnQgcmV0O1xuLVxuLVx0c2tiID0gc2tiX3BlZWsoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKTtcbi1cdGlmICghc2tiKVxuLVx0XHRyZXR1cm4gLUVBR0FJTjtcbi1cdHJ4cnBjX3NlZV9za2Ioc2tiLCByeHJwY19za2Jfc2VlX3JlY3Ztc2cpO1xuLVxuLVx0cmV0ID0gcHV0X2Ntc2cobXNnLCBTT0xfUlhSUEMsIFJYUlBDX09PQl9JRCwgc2l6ZW9mKHU2NCksXG4tXHRcdCAgICAgICBcdTAwMjZza2ItXHUwMDNlc2tiX21zdGFtcF9ucyk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0c3dpdGNoICgoZW51bSByeHJwY19vb2JfdHlwZSlza2ItXHUwMDNlbWFyaykge1xuLVx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxuLVx0XHRuZWVkX3Jlc3BvbnNlID0gdHJ1ZTtcbi1cdFx0cmV0ID0gcnhycGNfcmVjdm1zZ19jaGFsbGVuZ2Uoc29jaywgbXNnLCBza2IsIGZsYWdzKTtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7cmVjdm1zZygpIGNhbiYjMzk7dCBwcm9jZXNzIHVua25vd24gT09CIHR5cGUgJXVcXG5cJiMzNDssXG4tXHRcdFx0ICBza2ItXHUwMDNlbWFyayk7XG4tXHRcdHJldCA9IC1FSU87XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0aWYgKCEoZmxhZ3MgXHUwMDI2IE1TR19QRUVLKSkge1xuLVx0XHRza2JfdW5saW5rKHNrYiwgXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKTtcbi1cdFx0aWYgKG5lZWRfcmVzcG9uc2UpXG4tXHRcdFx0cnhycGNfYWRkX3BlbmRpbmdfb29iKHJ4LCBza2IpO1xuLVx0XHRlbHNlXG4tXHRcdFx0cnhycGNfZnJlZV9za2Ioc2tiLCByeHJwY19za2JfcHV0X29vYik7XG4tXHR9XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbiAvKlxuICAqIERlbGl2ZXIgbWVzc2FnZXMgdG8gYSBjYWxsLiAgVGhpcyBrZWVwcyBwcm9jZXNzaW5nIHBhY2tldHMgdW50aWwgdGhlIGJ1ZmZlclxuICAqIGlzIGZpbGxlZCBhbmQgd2UgZmluZCBlaXRoZXIgbW9yZSBEQVRBIChyZXR1cm5zIDApIG9yIHRoZSBlbmQgb2YgdGhlIERBVEFcbkBAIC0yODEsNyAmIzQzOzIxMiw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRcdCAgICAgIHNpemVfdCBsZW4sIGludCBmbGFncywgc2l6ZV90ICpfb2Zmc2V0KVxuIHtcbiBcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3A7XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRyeHJwY19zZXFfdCBzZXEgPSAwO1xuIFx0c2l6ZV90IHJlbWFpbjtcbkBAIC0zNzYsMTMgJiM0MzszMDYsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcbiBcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE1TR19QRUVLKSlcbiBcdFx0XHRyeHJwY19yb3RhdGVfcnhfd2luZG93KGNhbGwpO1xuLVxuLVx0XHRpZiAoIXJ4LVx1MDAzZWFwcF9vcHMgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpIHtcbi1cdFx0XHR0cmFjZV9yeHJwY19yZWN2ZGF0YShjYWxsLCByeHJwY19yZWN2bXNnX29vYnEsIHNlcSxcbi1cdFx0XHRcdFx0ICAgICByeF9wa3Rfb2Zmc2V0LCByeF9wa3RfbGVuLCByZXQpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4gXHR9XG4gXG4gb3V0OlxuQEAgLTQzMCwxNCAmIzQzOzM1MywxMiBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHQvKiBSZXR1cm4gaW1tZWRpYXRlbHkgaWYgYSBjbGllbnQgc29ja2V0IGhhcyBubyBvdXRzdGFuZGluZyBjYWxscyAqL1xuIFx0aWYgKFJCX0VNUFRZX1JPT1QoXHUwMDI2cngtXHUwMDNlY2FsbHMpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGxpc3RfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSBcdTAwMjZcdTAwMjZcbiBcdCAgICByeC1cdTAwM2Vzay5za19zdGF0ZSAhPSBSWFJQQ19TRVJWRVJfTElTVEVOSU5HKSB7XG4gXHRcdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG4gXHRcdHJldHVybiAtRUFHQUlOO1xuIFx0fVxuIFxuLVx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSkpIHtcbiBcdFx0cmV0ID0gLUVXT1VMREJMT0NLO1xuIFx0XHRpZiAodGltZW8gPT0gMCkge1xuIFx0XHRcdGNhbGwgPSBOVUxMO1xuQEAgLTQ1Myw4ICYjNDM7Mzc0LDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gd2FpdF9lcnJvcjtcbiBcbi1cdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpKSB7XG4mIzQzO1x0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpKSB7XG4gXHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIFx0XHRcdFx0Z290byB3YWl0X2ludGVycnVwdGVkO1xuIFx0XHRcdHRyYWNlX3J4cnBjX3JlY3Ztc2coMCwgcnhycGNfcmVjdm1zZ193YWl0LCAwKTtcbkBAIC00NjQsMTUgJiM0MzszODQsNiBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdGdvdG8gdHJ5X2FnYWluO1xuIFx0fVxuIFxuLVx0LyogRGVhbCB3aXRoIE9PQiBtZXNzYWdlcyBiZWZvcmUgd2UgY29uc2lkZXIgZ2V0dGluZyBub3JtYWwgZGF0YS4gKi9cbi1cdGlmICghc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpIHtcbi1cdFx0cmV0ID0gcnhycGNfcmVjdm1zZ19vb2Ioc29jaywgbXNnLCBmbGFncyk7XG4tXHRcdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG4tXHRcdGlmIChyZXQgPT0gLUVBR0FJTilcbi1cdFx0XHRnb3RvIHRyeV9hZ2Fpbjtcbi1cdFx0Z290byBlcnJvcl90cmFjZTtcbi1cdH1cbi1cbiBcdC8qIEZpbmQgdGhlIG5leHQgY2FsbCBhbmQgZGVxdWV1ZSBpdCBpZiB3ZSYjMzk7cmUgbm90IGp1c3QgcGVla2luZy4gIElmIHdlXG4gXHQgKiBkbyBkZXF1ZXVlIGl0LCB0aGF0IGNvbWVzIHdpdGggYSByZWYgdGhhdCB3ZSB3aWxsIG5lZWQgdG8gcmVsZWFzZS5cbiBcdCAqIFdlIGFsc28gd2FudCB0byB3ZWVkIG91dCBjYWxscyB0aGF0IGdvdCByZXF1ZXVlZCB3aGlsc3Qgd2Ugd2VyZVxuQEAgLTQ4Myw4ICYjNDM7Mzk0LDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0Y2FsbCA9IGxpc3RfZW50cnkobCwgc3RydWN0IHJ4cnBjX2NhbGwsIHJlY3Ztc2dfbGluayk7XG4gXG4gXHRpZiAoIXJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19xdWV1ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpIHtcbiYjNDM7XHQgICAgc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19xdWV1ZSkpIHtcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluayk7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuIFx0XHRyZWxlYXNlX3NvY2soXHUwMDI2cngtXHUwMDNlc2spO1xuQEAgLTU2MSw3ICYjNDM7NDcxLDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE1TR19QRUVLKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19xdWV1ZSkpXG4tXHRcdHJ4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XG4mIzQzO1x0XHRyeHJwY19yZXF1ZXVlX2NhbGwoc29jaywgY2FsbCk7XG4gXHRnb3RvIG5vdF95ZXRfY29tcGxldGU7XG4gXG4gY2FsbF9mYWlsZWQ6XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmNcbmluZGV4IDc3YTY3YWNlMWQyNDgxLi5jNjRlZjk2NzYzYWUyZCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yeGdrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9yeGdrLmNcbkBAIC0xMSw2ICYjNDM7MTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2V5LXR5cGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NrZXlzL3VzZXItdHlwZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7YXItaW50ZXJuYWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3J4Z2tfY29tbW9uLmhcJiMzNDtcbiBcbkBAIC03MzQsMzcgJiM0Mzs3MzUsNiBAQCBzdGF0aWMgYm9vbCByeGdrX3ZhbGlkYXRlX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi0vKipcbi0gKiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UgLSBRdWVyeSBSeEdLLXNwZWNpZmljIGNoYWxsZW5nZSBwYXJhbWV0ZXJzXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSBwYWNrZXQgdG8gcXVlcnlcbi0gKlxuLSAqIFJldHVybjogVGhlIEtlcmJlcm9zIDUgZW5jb2RpbmcgdHlwZSBmb3IgdGhlIGNoYWxsZW5nZWQgY29ubmVjdGlvbi5cbi0gKi9cbi11MzIgcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0cmV0dXJuIHNwLVx1MDAzZWNoYWxsLmNvbm4tXHUwMDNlcnhnay5lbmN0eXBlO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSk7XG4tXG4tLypcbi0gKiBGaWxsIG91dCB0aGUgY29udHJvbCBtZXNzYWdlIHRvIHBhc3MgdG8gdXNlcnNwYWNlIHRvIGluZm9ybSBhYm91dCB0aGVcbi0gKiBjaGFsbGVuZ2UuXG4tICovXG4tc3RhdGljIGludCByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpXG4te1xuLVx0c3RydWN0IHJ4Z2tfY2hhbGxlbmdlIGNoYWxsO1xuLVxuLVx0Y2hhbGwuYmFzZS5zZXJ2aWNlX2lkXHRcdD0gY29ubi1cdTAwM2VzZXJ2aWNlX2lkO1xuLVx0Y2hhbGwuYmFzZS5zZWN1cml0eV9pbmRleFx0PSBjb25uLVx1MDAzZXNlY3VyaXR5X2l4O1xuLVx0Y2hhbGwuZW5jdHlwZVx0XHRcdD0gY29ubi1cdTAwM2VyeGdrLmVuY3R5cGU7XG4tXG4tXHRyZXR1cm4gcHV0X2Ntc2cobXNnLCBTT0xfUlhSUEMsIFJYUlBDX0NIQUxMRU5HRUQsIHNpemVvZihjaGFsbCksIFx1MDAyNmNoYWxsKTtcbi19XG4tXG4gLypcbiAgKiBJbnNlcnQgdGhlIHJlcXVpc2l0ZSBhbW91bnQgb2YgWERSIHBhZGRpbmcgZm9yIHRoZSBsZW5ndGggZ2l2ZW4uXG4gICovXG5AQCAtODM3LDcgJiM0Mzs4MDcsNyBAQCBzdGF0aWMgbm9pbmxpbmUgc3NpemVfdCByeGdrX2luc2VydF9yZXNwb25zZV9oZWFkZXIoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvblxuICAqL1xuIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhLFxuJiM0MztcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICphcHBkYXRhLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3BvbnNlLFxuIFx0XHRcdFx0XHQgICAgc2l6ZV90IG9mZnNldClcbiB7XG5AQCAtODU5LDIwICYjNDM7ODI5LDIwIEBAIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVQUk9UTztcbiBcbi1cdGEuYXBwZGF0YV9sZW4gPSBodG9ubChhcHBkYXRhLVx1MDAzZWxlbik7XG4mIzQzO1x0YS5hcHBkYXRhX2xlbiA9IGh0b25sKGFwcGRhdGEtXHUwMDNlZGF0YWxlbik7XG4gXG4gXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBcdTAwMjZhLCBzaXplb2YoYSkpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdG9mZnNldCAmIzQzOz0gc2l6ZW9mKGEpO1xuIFxuLVx0aWYgKGFwcGRhdGEtXHUwMDNlbGVuKSB7XG4tXHRcdHJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIGFwcGRhdGEtXHUwMDNlZGF0YSwgYXBwZGF0YS1cdTAwM2VsZW4pO1xuJiM0MztcdGlmIChhcHBkYXRhLVx1MDAzZWRhdGFsZW4pIHtcbiYjNDM7XHRcdHJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIGFwcGRhdGEtXHUwMDNlZGF0YSwgYXBwZGF0YS1cdTAwM2VkYXRhbGVuKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRvZmZzZXQgJiM0Mzs9IGFwcGRhdGEtXHUwMDNlbGVuO1xuJiM0MztcdFx0b2Zmc2V0ICYjNDM7PSBhcHBkYXRhLVx1MDAzZWRhdGFsZW47XG4gXG4tXHRcdHJldCA9IHJ4Z2tfcGFkX291dChyZXNwb25zZSwgYXBwZGF0YS1cdTAwM2VsZW4sIG9mZnNldCk7XG4mIzQzO1x0XHRyZXQgPSByeGdrX3BhZF9vdXQocmVzcG9uc2UsIGFwcGRhdGEtXHUwMDNlZGF0YWxlbiwgb2Zmc2V0KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRvZmZzZXQgJiM0Mzs9IHJldDtcbkBAIC04OTAsNyAmIzQzOzg2MCw3IEBAIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBcdTAwMjZiLCBzaXplb2YoYikpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbi1cdHJldHVybiBzaXplb2YoYSkgJiM0MzsgeGRyX3JvdW5kX3VwKGFwcGRhdGEtXHUwMDNlbGVuKSAmIzQzOyBzaXplb2YoYik7XG4mIzQzO1x0cmV0dXJuIHNpemVvZihhKSAmIzQzOyB4ZHJfcm91bmRfdXAoYXBwZGF0YS1cdTAwM2VkYXRhbGVuKSAmIzQzOyBzaXplb2YoYik7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfZW5jcnlwdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuQEAgLTkyMyw3ICYjNDM7ODkzLDcgQEAgc3RhdGljIHNzaXplX3Qgcnhna19lbmNyeXB0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gICovXG4gc3RhdGljIGludCByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKmFwcGRhdGEpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AsICpyc3A7XG4gXHRzdHJ1Y3Qgcnhna19jb250ZXh0ICpnaztcbkBAIC05MzYsMTEgJiM0Mzs5MDYsMTEgQEAgc3RhdGljIGludCByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdGlmIChJU19FUlIoZ2spKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihnayk7XG4gXG4tXHRhdXRoX2xlbiA9IDIwICYjNDM7ICg0ICYjNDM7IGFwcGRhdGEtXHUwMDNlbGVuKSAmIzQzOyAxMiAmIzQzOyAoMSAmIzQzOyA0KSAqIDQ7XG4mIzQzO1x0YXV0aF9sZW4gPSAyMCAmIzQzOyB4ZHJfb2JqZWN0X2xlbihhcHBkYXRhLVx1MDAzZWRhdGFsZW4pICYjNDM7IDEyICYjNDM7ICgxICYjNDM7IDQpICogNDtcbiBcdGF1dGh4X2xlbiA9IGNyeXB0b19rcmI1X2hvd19tdWNoX2J1ZmZlcihnay1cdTAwM2VrcmI1LCBLUkI1X0VOQ1JZUFRfTU9ERSxcbiBcdFx0XHRcdFx0XHRhdXRoX2xlbiwgXHUwMDI2YXV0aF9vZmZzZXQpO1xuIFx0bGVuID0gc2l6ZW9mKHN0cnVjdCByeHJwY193aXJlX2hlYWRlcikgJiM0Mztcbi1cdFx0OCAmIzQzOyAoNCAmIzQzOyB4ZHJfcm91bmRfdXAoZ2stXHUwMDNla2V5LVx1MDAzZXRpY2tldC5sZW4pKSAmIzQzOyAoNCAmIzQzOyBhdXRoeF9sZW4pO1xuJiM0MztcdFx0OCAmIzQzOyB4ZHJfb2JqZWN0X2xlbihnay1cdTAwM2VrZXktXHUwMDNldGlja2V0LmxlbikgJiM0MzsgeGRyX29iamVjdF9sZW4oYXV0aHhfbGVuKTtcbiBcbiBcdHJlc3BvbnNlID0gYWxsb2Nfc2tiX3dpdGhfZnJhZ3MoMCwgbGVuLCAwLCBcdTAwMjZyZXQsIEdGUF9OT0ZTKTtcbiBcdGlmICghcmVzcG9uc2UpXG5AQCAtMTAxMSw2NiAmIzQzOzk4MSw0NCBAQCBzdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuICAqIFJlc3BvbmQgdG8gYSBjaGFsbGVuZ2UgcGFja2V0LlxuICAqL1xuIHN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhKVxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcbiB7XG4tXHRfZW50ZXIoXCYjMzQ7eyVkLCV4fVwmIzM0OywgY29ubi1cdTAwM2VkZWJ1Z19pZCwga2V5X3NlcmlhbChjb25uLVx1MDAzZWtleSkpO1xuJiM0MztcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIGR1bW15ID0ge30sICphcHBkYXRhID0gXHUwMDI2ZHVtbXk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0X2VudGVyKFwmIzM0O3slZCwldSwleCwleH1cJiMzNDssXG4mIzQzO1x0ICAgICAgIGNvbm4tXHUwMDNlZGVidWdfaWQsIGNvbm4tXHUwMDNlc2VydmljZV9pZCxcbiYjNDM7XHQgICAgICAga2V5X3NlcmlhbChjb25uLVx1MDAzZWtleSksIGtleV9zZXJpYWwoY29ubi1cdTAwM2VidW5kbGUtXHUwMDNlYXBwX2RhdGEpKTtcbiBcbiBcdGlmIChrZXlfdmFsaWRhdGUoY29ubi1cdTAwM2VrZXkpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBSWEdLX0VYUElSRUQsIC1FUFJPVE8sXG4gXHRcdFx0XHRcdHJ4Z2tfYWJvcnRfY2hhbGxfa2V5X2V4cGlyZWQpO1xuIFxuLVx0cmV0dXJuIHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKGNvbm4sIGNoYWxsZW5nZSwgYXBwZGF0YSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZV9ub19hcHBkYXRhKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLVx0XHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4te1xuLVx0c3RydWN0IGtyYjVfYnVmZmVyIGFwcGRhdGEgPSB7fTtcbi1cbi1cdHJldHVybiByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNvbm4sIGNoYWxsZW5nZSwgXHUwMDI2YXBwZGF0YSk7XG4tfVxuLVxuLS8qKlxuLSAqIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlIC0gUmVzcG9uZCB0byBhIGNoYWxsZW5nZSB3aXRoIGFwcGRhdGFcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHJlc3BvbmQgdG9cbi0gKiBAYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgUkVTUE9OU0UgYXV0aGVudGljYXRvclxuLSAqXG4tICogQWxsb3cgYSBrZXJuZWwgYXBwbGljYXRpb24gdG8gcmVzcG9uZCB0byBhIENIQUxMRU5HRSB3aXRoIGFwcGxpY2F0aW9uIGRhdGFcbi0gKiB0byBiZSBpbmNsdWRlZCBpbiB0aGUgUnhHSyBSRVNQT05TRSBBdXRoZW50aWNhdG9yLlxuLSAqXG4tICogUmV0dXJuOiAlMCBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuLSAqL1xuLWludCByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTtcbi1cbi1cdHJldHVybiByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNzcC1cdTAwM2VjaGFsbC5jb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKTtcbi1cbi0vKlxuLSAqIFBhcnNlIHNlbmRtc2coKSBjb250cm9sIG1lc3NhZ2UgYW5kIHJlc3BvbmQgdG8gY2hhbGxlbmdlLiAgV2UgbmVlZCB0byBzZWUgaWZcbi0gKiB0aGVyZSYjMzk7cyBhbiBhcHBkYXRhIHRvIGZpc2ggb3V0LlxuLSAqL1xuLXN0YXRpYyBpbnQgcnhna19zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHRcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnKVxuLXtcbi1cdHN0cnVjdCBrcmI1X2J1ZmZlciBhcHBkYXRhID0ge307XG4tXHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcbi1cbi1cdGZvcl9lYWNoX2Ntc2doZHIoY21zZywgbXNnKSB7XG4tXHRcdGlmIChjbXNnLVx1MDAzZWNtc2dfbGV2ZWwgIT0gU09MX1JYUlBDIHx8XG4tXHRcdCAgICBjbXNnLVx1MDAzZWNtc2dfdHlwZSAhPSBSWFJQQ19SRVNQX1JYR0tfQVBQREFUQSlcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKGFwcGRhdGEuZGF0YSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0YXBwZGF0YS5kYXRhID0gQ01TR19EQVRBKGNtc2cpO1xuLVx0XHRhcHBkYXRhLmxlbiA9IGNtc2ctXHUwMDNlY21zZ19sZW4gLSBzaXplb2Yoc3RydWN0IGNtc2doZHIpO1xuJiM0MztcdGlmIChjb25uLVx1MDAzZWJ1bmRsZS1cdTAwM2VhcHBfZGF0YSkge1xuJiM0MztcdFx0c3RydWN0IGtleSAqYXBwX2tleSA9IGNvbm4tXHUwMDNlYnVuZGxlLVx1MDAzZWFwcF9kYXRhO1xuJiM0MztcbiYjNDM7XHRcdC8qIFRoZSB3cm9uZyBzb3J0IG9mIGtleSBzaG91bGRuJiMzOTt0IGdldCB0aGlzIGZhci4gKi9cbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0UoYXBwX2tleS1cdTAwM2V0eXBlICE9IFx1MDAyNmtleV90eXBlX3VzZXIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0IGFwcF9rZXktXHUwMDNldHlwZSAhPSBcdTAwMjZrZXlfdHlwZV9sb2dvbikpXG4mIzQzO1x0XHRcdHJldHVybiByeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIFJYR0tfRVhQSVJFRCwgLUVLRVlSRUpFQ1RFRCxcbiYjNDM7XHRcdFx0XHRcdFx0cnhna19hYm9ydF9jaGFsbF9iYWRfYXBwX2tleSk7XG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0YXBwZGF0YSA9IChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKVxuJiM0MztcdFx0XHR1c2VyX2tleV9wYXlsb2FkX3JjdShjb25uLVx1MDAzZWJ1bmRsZS1cdTAwM2VhcHBfZGF0YSk7XG4mIzQzO1x0XHRpZiAoYXBwZGF0YSBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZhcHBkYXRhLVx1MDAzZXJlZikpXG4mIzQzO1x0XHRcdGFwcGRhdGEgPSBOVUxMO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRpZiAoIWFwcGRhdGEpXG4mIzQzO1x0XHRcdHJldHVybiByeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIFJYR0tfRVhQSVJFRCwgLUVLRVlSRVZPS0VELFxuJiM0MztcdFx0XHRcdFx0XHRyeGdrX2Fib3J0X2NoYWxsX2tleV9leHBpcmVkKTtcbiBcdH1cbiBcbi1cdHJldHVybiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UsIFx1MDAyNmFwcGRhdGEpO1xuJiM0MztcdHJldCA9IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKGNvbm4sIGNoYWxsZW5nZSwgYXBwZGF0YSk7XG4mIzQzO1xuJiM0MztcdGlmIChhcHBkYXRhICE9IFx1MDAyNmR1bW15KVxuJiM0MztcdFx0cHV0X3VzZXJfa2V5X3BheWxvYWQoYXBwZGF0YSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLypcbkBAIC0xMzQ2LDkgJiM0MzsxMjk0LDcgQEAgY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHJ4Z2tfeWZzID0ge1xuIFx0LmZyZWVfY2FsbF9jcnlwdG9cdFx0PSByeGdrX2ZyZWVfY2FsbF9jcnlwdG8sXG4gXHQuaXNzdWVfY2hhbGxlbmdlXHRcdD0gcnhna19pc3N1ZV9jaGFsbGVuZ2UsXG4gXHQudmFsaWRhdGVfY2hhbGxlbmdlXHRcdD0gcnhna192YWxpZGF0ZV9jaGFsbGVuZ2UsXG4tXHQuY2hhbGxlbmdlX3RvX3JlY3Ztc2dcdFx0PSByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnLFxuLVx0LnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2VcdD0gcnhna19zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxuLVx0LnJlc3BvbmRfdG9fY2hhbGxlbmdlXHRcdD0gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZV9ub19hcHBkYXRhLFxuJiM0MztcdC5yZXNwb25kX3RvX2NoYWxsZW5nZVx0XHQ9IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UsXG4gXHQudmVyaWZ5X3Jlc3BvbnNlXHRcdD0gcnhna192ZXJpZnlfcmVzcG9uc2UsXG4gXHQuY2xlYXJcdFx0XHRcdD0gcnhna19jbGVhcixcbiBcdC5kZWZhdWx0X2RlY29kZV90aWNrZXRcdFx0PSByeGdrX3lmc19kZWNvZGVfdGlja2V0LFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeGthZC5jIGIvbmV0L3J4cnBjL3J4a2FkLmNcbmluZGV4IGNhOWYwZTgyY2I5YWM3Li5lNTViZmNhMTBlMWE5NCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yeGthZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcnhrYWQuY1xuQEAgLTc0OCwzMiAmIzQzOzc0OCw2IEBAIHN0YXRpYyBpbnQgcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIFJ4S0FEIGRvZXMgYXV0b21hdGljIHJlc3BvbnNlIG9ubHkgYXMgdGhlcmUmIzM5O3Mgbm90aGluZyB0byBtYW5hZ2UgdGhhdCBpc24mIzM5O3Rcbi0gKiBhbHJlYWR5IGluIHRoZSBrZXkuXG4tICovXG4tc3RhdGljIGludCByeGthZF9zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBtc2doZHIgKm1zZylcbi17XG4tXHRyZXR1cm4gLUVJTlZBTDtcbi19XG4tXG4tLyoqXG4tICogcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlIC0gUmVzcG9uZCB0byBhIGNoYWxsZW5nZSB3aXRoIGFwcGRhdGFcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHJlc3BvbmQgdG9cbi0gKlxuLSAqIEFsbG93IGEga2VybmVsIGFwcGxpY2F0aW9uIHRvIHJlc3BvbmQgdG8gYSBDSEFMTEVOR0UuXG4tICpcbi0gKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4tICovXG4taW50IHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqY3NwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XG4tXG4tXHRyZXR1cm4gcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2UoY3NwLVx1MDAzZWNoYWxsLmNvbm4sIGNoYWxsZW5nZSk7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKTtcbi1cbiAvKiBEZWNyeXB0IGRhdGEgaW4tcGxhY2UgdXNpbmcgREVTLVBDQkMuICBAbGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4LiAqL1xuIFZJU0lCTEVfSUZfS1VOSVQgdm9pZCBkZXNfcGNiY19kZWNyeXB0X2lucGxhY2UoY29uc3Qgc3RydWN0IGRlc19jdHggKmtleSxcbiBcdFx0XHRcdFx0ICAgICAgIF9fbGU2NCBpdiwgdTggKmRhdGEsIHNpemVfdCBsZW4pXG5AQCAtMTEzNCw3ICYjNDM7MTEwOCw2IEBAIGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGthZCA9IHtcbiBcdC5mcmVlX2NhbGxfY3J5cHRvXHRcdD0gcnhrYWRfZnJlZV9jYWxsX2NyeXB0byxcbiBcdC5pc3N1ZV9jaGFsbGVuZ2VcdFx0PSByeGthZF9pc3N1ZV9jaGFsbGVuZ2UsXG4gXHQudmFsaWRhdGVfY2hhbGxlbmdlXHRcdD0gcnhrYWRfdmFsaWRhdGVfY2hhbGxlbmdlLFxuLVx0LnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2VcdD0gcnhrYWRfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSxcbiBcdC5yZXNwb25kX3RvX2NoYWxsZW5nZVx0XHQ9IHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxuIFx0LnZlcmlmeV9yZXNwb25zZVx0XHQ9IHJ4a2FkX3ZlcmlmeV9yZXNwb25zZSxcbiBcdC5jbGVhclx0XHRcdFx0PSByeGthZF9jbGVhcixcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvc2VuZG1zZy5jIGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xuaW5kZXggZWQyYzlhNTEwMDVhZGUuLmIzZjc2NWZkNDFiYzcwIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL3NlbmRtc2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2tleXMvdXNlci10eXBlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2FmX3J4cnBjLmhcdTAwM2VcbkBAIC0zMjAsOCAmIzQzOzMyMSw4IEBAIHN0YXRpYyBpbnQgcnhycGNfYWxsb2NfdHhxdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0XHQgICBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tXHRcdFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsXG4tXHRcdFx0ICAgYm9vbCAqX2Ryb3BwZWRfbG9jaylcbiYjNDM7XHRcdFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgpXG4mIzQzO1x0X19yZWxlYXNlcyhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX3R4YnVmICp0eGI7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZyeC1cdTAwM2VzaztcbkBAIC0zMzAsMjMgJiM0MzszMzEsMzEgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0Ym9vbCBtb3JlID0gbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX01PUkU7XG4gXHRpbnQgcmV0LCBjb3BpZWQgPSAwO1xuIFxuLVx0aWYgKHRlc3RfYml0KFJYUlBDX0NBTExfVFhfTk9fTU9SRSwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRpZiAodW5saWtlbHkodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9OT19NT1JFLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKSkpIHtcbiBcdFx0dHJhY2VfcnhycGNfYWJvcnQoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsXG4gXHRcdFx0XHQgIGNhbGwtXHUwMDNlY2lkLCBjYWxsLVx1MDAzZWNhbGxfaWQsIGNhbGwtXHUwMDNlcnhfY29uc3VtZWQsXG4gXHRcdFx0XHQgIDAsIC1FUFJPVE8pO1xuLVx0XHRyZXR1cm4gLUVQUk9UTztcbiYjNDM7XHRcdHJldCA9IC1FUFJPVE87XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX0VSUk9SLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKSkpIHtcbiYjNDM7XHRcdHRyYWNlX3J4cnBjX2Fib3J0KGNhbGwtXHUwMDNlZGVidWdfaWQsIHJ4cnBjX3NlbmRtc2dfdHhfZXJyb3IsXG4mIzQzO1x0XHRcdFx0ICBjYWxsLVx1MDAzZWNpZCwgY2FsbC1cdTAwM2VjYWxsX2lkLCBjYWxsLVx1MDAzZXJ4X2NvbnN1bWVkLFxuJiM0MztcdFx0XHRcdCAgMCwgLUVJTyk7XG4mIzQzO1x0XHRyZXQgPSAtRUlPO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuIFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuIFxuIFx0cmV0ID0gcnhycGNfd2FpdF90b19iZV9jb25uZWN0ZWQoY2FsbCwgXHUwMDI2dGltZW8pO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdGlmIChjYWxsLVx1MDAzZWNvbm4tXHUwMDNlc3RhdGUgPT0gUlhSUENfQ09OTl9DTElFTlRfVU5TRUNVUkVEKSB7XG4gXHRcdHJldCA9IHJ4cnBjX2luaXRfY2xpZW50X2Nvbm5fc2VjdXJpdHkoY2FsbC1cdTAwM2Vjb25uKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4gXHQvKiB0aGlzIHNob3VsZCBiZSBpbiBwb2xsICovXG5AQCAtNDQwLDEyICYjNDM7NDQ5LDIxIEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0LyogYWRkIHRoZSBwYWNrZXQgdG8gdGhlIHNlbmQgcXVldWUgaWYgaXQmIzM5O3Mgbm93IGZ1bGwgKi9cbiBcdFx0aWYgKCF0eGItXHUwMDNlc3BhY2UgfHxcbiBcdFx0ICAgIChtc2dfZGF0YV9sZWZ0KG1zZykgPT0gMCBcdTAwMjZcdTAwMjYgIW1vcmUpKSB7XG4mIzQzO1x0XHRcdC8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZFxuJiM0MztcdFx0XHQgKiBoYXZlIGNvcnJ1cHRlZCB0aGUgdHhidWYgY29udGVudCB3aXRoIGEgcGFydGlhbFxuJiM0MztcdFx0XHQgKiBlbmNyeXB0LiAgQXNzdW1lIHRoYXQgRU5PTUVNIGlzIHJldHJ5YWJsZSwgYnV0XG4mIzQzO1x0XHRcdCAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHJldCA9IGNhbGwtXHUwMDNlc2VjdXJpdHktXHUwMDNlc2VjdXJlX3BhY2tldChjYWxsLCB0eGIpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdFx0aWYgKHJldCA9PSAtRU5PTUVNKVxuJiM0MztcdFx0XHRcdFx0Z290byBtYXliZV9lcnJvcl9yZXdpbmQ7XG4mIzQzO1x0XHRcdFx0c2V0X2JpdChSWFJQQ19DQUxMX1RYX0VSUk9SLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF90eGI7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4gXHRcdFx0aWYgKG1zZ19kYXRhX2xlZnQobXNnKSA9PSAwIFx1MDAyNlx1MDAyNiAhbW9yZSlcbiBcdFx0XHRcdHR4Yi1cdTAwM2VmbGFncyB8PSBSWFJQQ19MQVNUX1BBQ0tFVDtcbi1cbi1cdFx0XHRyZXQgPSBjYWxsLVx1MDAzZXNlY3VyaXR5LVx1MDAzZXNlY3VyZV9wYWNrZXQoY2FsbCwgdHhiKTtcbi1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdFx0cnhycGNfcXVldWVfcGFja2V0KHJ4LCBjYWxsLCB0eGIsIG5vdGlmeV9lbmRfdHgpO1xuIFx0XHRcdHR4YiA9IE5VTEw7XG4gXHRcdH1cbkBAIC00NTMsNDggJiM0Mzs0NzEsNzIgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFxuIHN1Y2Nlc3M6XG4gXHRyZXQgPSBjb3BpZWQ7XG4tXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBjYWxsLVx1MDAzZWVycm9yIFx1MDAzYyAwKVxuLVx0XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuLW91dDpcbiYjNDM7b3V0X3R4YjpcbiBcdGNhbGwtXHUwMDNldHhfcGVuZGluZyA9IHR4YjtcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gXG4gY2FsbF90ZXJtaW5hdGVkOlxuIFx0cnhycGNfcHV0X3R4YnVmKHR4YiwgcnhycGNfdHhidWZfcHV0X3NlbmRfYWJvcnRlZCk7XG4tXHRfbGVhdmUoXCYjMzQ7ID0gJWRcJiMzNDssIGNhbGwtXHUwMDNlZXJyb3IpO1xuLVx0cmV0dXJuIGNhbGwtXHUwMDNlZXJyb3I7XG4tXG4mIzQzO1x0Y2FsbC1cdTAwM2V0eF9wZW5kaW5nID0gTlVMTDtcbiYjNDM7XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuJiM0MztcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XG4mIzQzO21heWJlX2Vycm9yX3Jld2luZDpcbiYjNDM7XHQvKiBJZiB3ZSBnb3QgYSByZXRyeWFibGUgZXJyb3IgYWZ0ZXIgY29weWluZyBhbGwgdGhlIHN1cHBsaWVkIGRhdGEgaW50b1xuJiM0MztcdCAqIHRoZSBsYXN0IHBhY2tldCwgd2UgbmVlZCB0byByZXdpbmQgdGhlIGJ1ZmZlciBieSBvbmUgYnl0ZSBzbyB0aGVcbiYjNDM7XHQgKiBjYWxsZXIga25vd3MgdGhleSBuZWVkIHRvIHJldHJ5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjb3BpZWQgXHUwMDI2XHUwMDI2ICFtb3JlIFx1MDAyNlx1MDAyNiAhbXNnX2RhdGFfbGVmdChtc2cpKSB7XG4mIzQzO1x0XHR0eGItXHUwMDNlc3BhY2UgICYjNDM7PSAxO1xuJiM0MztcdFx0dHhiLVx1MDAzZWxlbiAgICAtPSAxO1xuJiM0MztcdFx0dHhiLVx1MDAzZW9mZnNldCAtPSAxO1xuJiM0MztcdFx0Y29waWVkICAgICAgLT0gMTtcbiYjNDM7XHRcdGlmIChjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbiAhPSAtMSlcbiYjNDM7XHRcdFx0Y2FsbC1cdTAwM2V0eF90b3RhbF9sZW4gJiM0Mzs9IDE7XG4mIzQzO1x0XHRpb3ZfaXRlcl9yZXZlcnQoXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCAxKTtcbiYjNDM7XHR9XG4gbWF5YmVfZXJyb3I6XG4tXHRpZiAoY29waWVkKVxuJiM0MztcdGlmIChjb3BpZWQpIHtcbiYjNDM7XHRcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGNhbGwtXHUwMDNlZXJyb3IgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbiYjNDM7XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0fVxuIFx0XHRnb3RvIHN1Y2Nlc3M7XG4tXHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0Z290byBvdXRfdHhiO1xuIFxuIGVmYXVsdDpcbiBcdHJldCA9IC1FRkFVTFQ7XG4tXHRnb3RvIG91dDtcbiYjNDM7XHRnb3RvIG91dF90eGI7XG4gXG4gd2FpdF9mb3Jfc3BhY2U6XG4gXHRyZXQgPSAtRUFHQUlOO1xuIFx0aWYgKG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVClcbiBcdFx0Z290byBtYXliZV9lcnJvcjtcbiYjNDM7XHRjYWxsLVx1MDAzZXR4X3BlbmRpbmcgPSB0eGI7XG4mIzQzO1x0dHhiID0gTlVMTDtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuLVx0Kl9kcm9wcGVkX2xvY2sgPSB0cnVlO1xuJiM0MztcbiBcdHJldCA9IHJ4cnBjX3dhaXRfZm9yX3R4X3dpbmRvdyhyeCwgY2FsbCwgXHUwMDI2dGltZW8sXG4gXHRcdFx0XHQgICAgICAgbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX1dBSVRBTEwpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBtYXliZV9lcnJvcjtcbiYjNDM7XHRcdGdvdG8gb3V0X25vbG9jaztcbiBcdGlmIChjYWxsLVx1MDAzZWludGVycnVwdGliaWxpdHkgPT0gUlhSUENfSU5URVJSVVBUSUJMRSkge1xuIFx0XHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCkgXHUwMDNjIDApIHtcbiBcdFx0XHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xuLVx0XHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X25vbG9jaztcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIFx0fVxuLVx0Kl9kcm9wcGVkX2xvY2sgPSBmYWxzZTtcbiBcdGdvdG8gcmVsb2FkO1xuJiM0MztvdXRfbm9sb2NrOlxuJiM0MztcdF9sZWF2ZShcJiMzNDsgPSAlZCBbaW50cl1cJiMzNDssIHJldCk7XG4mIzQzO1x0cmV0dXJuIGNvcGllZCA/OiByZXQ7XG4gfVxuIFxuIC8qXG5AQCAtNTAzLDYgJiM0Mzs1NDUsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gc3RhdGljIGludCByeHJwY19zZW5kbXNnX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfc2VuZF9wYXJhbXMgKnApXG4ge1xuIFx0c3RydWN0IGNtc2doZHIgKmNtc2c7XG4mIzQzO1x0a2V5X3NlcmlhbF90IGtleV9pZDtcbiYjNDM7XHRrZXlfcmVmX3Qga2V5O1xuIFx0Ym9vbCBnb3RfdXNlcl9JRCA9IGZhbHNlO1xuIFx0aW50IGxlbjtcbiBcbkBAIC01ODcsNiAmIzQzOzYzMSwyMyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyAqcClcbiBcdFx0XHRcdHJldHVybiAtRVJBTkdFO1xuIFx0XHRcdGJyZWFrO1xuIFxuJiM0MztcdFx0Y2FzZSBSWFJQQ19SRVNQT05TRV9BUFBEQVRBOlxuJiM0MztcdFx0XHRpZiAobGVuICE9IHNpemVvZihrZXlfc2VyaWFsX3QpKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHRpZiAocC1cdTAwM2VjYWxsLmFwcF9kYXRhKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHRrZXlfaWQgPSAqKGtleV9zZXJpYWxfdCAqKUNNU0dfREFUQShjbXNnKTtcbiYjNDM7XHRcdFx0a2V5ID0gbG9va3VwX3VzZXJfa2V5KGtleV9pZCwgMCwgS0VZX05FRURfU0VBUkNIKTtcbiYjNDM7XHRcdFx0aWYgKElTX0VSUihrZXkpKVxuJiM0MztcdFx0XHRcdHJldHVybiBQVFJfRVJSKGtleSk7XG4mIzQzO1x0XHRcdGlmIChrZXlfcmVmX3RvX3B0cihrZXkpLVx1MDAzZXR5cGUgIT0gXHUwMDI2a2V5X3R5cGVfdXNlciBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIGtleV9yZWZfdG9fcHRyKGtleSktXHUwMDNldHlwZSAhPSBcdTAwMjZrZXlfdHlwZV9sb2dvbikge1xuJiM0MztcdFx0XHRcdGtleV9yZWZfcHV0KGtleSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cC1cdTAwM2VjYWxsLmFwcF9kYXRhID0ga2V5X3JlZl90b19wdHIoa2V5KTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG5AQCAtNjk1LDggJiM0Mzs3NTYsMTAgQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHRcdFx0Z290byBlcnJvcl9yZWxlYXNlX3NvY2s7XG4gXHRcdGNhbGwgPSByeHJwY19uZXdfY2xpZW50X2NhbGxfZm9yX3NlbmRtc2cocngsIG1zZywgXHUwMDI2cCk7XG4gXHRcdC8qIFRoZSBzb2NrZXQgaXMgbm93IHVubG9ja2VkLi4uICovXG4tXHRcdGlmIChJU19FUlIoY2FsbCkpXG4mIzQzO1x0XHRpZiAoSVNfRVJSKGNhbGwpKSB7XG4mIzQzO1x0XHRcdGtleV9wdXQocC5jYWxsLmFwcF9kYXRhKTtcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihjYWxsKTtcbiYjNDM7XHRcdH1cbiBcdFx0LyogLi4uIGFuZCB3ZSBoYXZlIHRoZSBjYWxsIGxvY2suICovXG4gXHRcdHAuY2FsbC5ucl90aW1lb3V0cyA9IDA7XG4gXHRcdHJldCA9IDA7XG5AQCAtNzY5LDggJiM0Mzs4MzIsOCBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdFx0cmV0ID0gMDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJYUlBDX0NNRF9TRU5EX0RBVEE6XG4tXHRcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeCwgY2FsbCwgbXNnLCBsZW4sIE5VTEwsIFx1MDAyNmRyb3BwZWRfbG9jayk7XG4tXHRcdGJyZWFrO1xuJiM0MztcdFx0cmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4LCBjYWxsLCBtc2csIGxlbiwgTlVMTCk7XG4mIzQzO1x0XHRnb3RvIGVycm9yX3B1dDtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuQEAgLTc4MSwxMSAmIzQzOzg0NCwxMyBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4gZXJyb3JfcHV0OlxuIFx0cnhycGNfcHV0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9wdXRfc2VuZG1zZyk7XG4mIzQzO1x0a2V5X3B1dChwLmNhbGwuYXBwX2RhdGEpO1xuIFx0X2xlYXZlKFwmIzM0OyA9ICVkXCYjMzQ7LCByZXQpO1xuIFx0cmV0dXJuIHJldDtcbiBcbiBlcnJvcl9yZWxlYXNlX3NvY2s6XG4gXHRyZWxlYXNlX3NvY2soXHUwMDI2cngtXHUwMDNlc2spO1xuJiM0MztcdGtleV9wdXQocC5jYWxsLmFwcF9kYXRhKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTgwOCw3ICYjNDM7ODczLDYgQEAgaW50IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG4gXHRcdFx0ICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRcdCAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KVxuIHtcbi1cdGJvb2wgZHJvcHBlZF9sb2NrID0gZmFsc2U7XG4gXHRpbnQgcmV0O1xuIFxuIFx0X2VudGVyKFwmIzM0O3slZH0sXCYjMzQ7LCBjYWxsLVx1MDAzZWRlYnVnX2lkKTtcbkBAIC04MTksMTIgJiM0Mzs4ODMsMTAgQEAgaW50IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG4gXHRtdXRleF9sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4gXG4gXHRyZXQgPSByeHJwY19zZW5kX2RhdGEocnhycGNfc2soc29jay1cdTAwM2VzayksIGNhbGwsIG1zZywgbGVuLFxuLVx0XHRcdCAgICAgIG5vdGlmeV9lbmRfdHgsIFx1MDAyNmRyb3BwZWRfbG9jayk7XG4mIzQzO1x0XHRcdCAgICAgIG5vdGlmeV9lbmRfdHgpO1xuIFx0aWYgKHJldCA9PSAtRVNIVVRET1dOKVxuIFx0XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuIFxuLVx0aWYgKCFkcm9wcGVkX2xvY2spXG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIFx0X2xlYXZlKFwmIzM0OyA9ICVkXCYjMzQ7LCByZXQpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3NlcnZlcl9rZXkuYyBiL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmNcbmluZGV4IDNlZmUxMDRiMTkzMGNiLi5mYzZmNDc4ZTE3NjJhNyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmNcbkBAIC0xNzMsNDMgJiM0MzsxNzMsMyBAQCBpbnQgcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBrZXkgKmtleXJpbmcpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MKHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcpO1xuLVxuLS8qKlxuLSAqIHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZSAtIFNldCB0aGUgbWFuYWdlLXJlc3BvbnNlIGZsYWcgZm9yIGEga2VybmVsIHNlcnZpY2Vcbi0gKiBAc2s6IFRoZSBzb2NrZXQgdG8gc2V0IHRoZSBrZXlyaW5nIG9uXG4tICogQHNldDogVHJ1ZSB0byBzZXQsIGZhbHNlIHRvIGNsZWFyIHRoZSBmbGFnXG4tICpcbi0gKiBTZXQgdGhlIGZsYWcgb24gYW4gcnhycGMgc29ja2V0IHRvIHNheSB0aGF0IHRoZSBjYWxsZXIgd2FudHMgdG8gbWFuYWdlIHRoZVxuLSAqIFJFU1BPTlNFIHBhY2tldCBhbmQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGl0IG1heSBjb250YWluLiAgU2V0dGluZyB0aGlzXG4tICogbWVhbnMgdGhhdCByZWN2bXNnKCkgd2lsbCByZXR1cm4gbWVzc2FnZXMgd2l0aCBSWFJQQ19DSEFMTEVOR0VEIGluIHRoZVxuLSAqIGNvbnRyb2wgbWVzc2FnZSBidWZmZXIgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhbGxlbmdlLlxuLSAqXG4tICogVGhlIHVzZXIgc2hvdWxkIHJlc3BvbmQgdG8gdGhlIGNoYWxsZW5nZSBieSBwYXNzaW5nIFJYUlBDX1JFU1BPTkQgb3Jcbi0gKiBSWFJQQ19SRVNQT05EX0FCT1JUIGNvbnRyb2wgbWVzc2FnZXMgd2l0aCBzZW5kbXNnKCkgdG8gdGhlIHNhbWUgY2FsbC5cbi0gKiBTdXBwbGVtZW50YXJ5IGNvbnRyb2wgbWVzc2FnZXMsIHN1Y2ggYXMgUlhSUENfUkVTUF9SWEdLX0FQUERBVEEsIG1heSBiZVxuLSAqIGluY2x1ZGVkIHRvIGluZGljYXRlIHRoZSBwYXJ0cyB0aGUgdXNlciB3YW50cyB0byBzdXBwbHkuXG4tICpcbi0gKiBUaGUgc2VydmVyIHdpbGwgYmUgcGFzc2VkIHRoZSByZXNwb25zZSBkYXRhIHdpdGggYSBSWFJQQ19SRVNQT05ERUQgY29udHJvbFxuLSAqIG1lc3NhZ2Ugd2hlbiBpdCBnZXRzIHRoZSBmaXJzdCBkYXRhIGZyb20gZWFjaCBjYWxsLlxuLSAqXG4tICogTm90ZSB0aGF0IHRoaXMgaXMgb25seSBob25vdXJlZCBieSBzZWN1cml0eSBjbGFzc2VzIHRoYXQgbmVlZCBhdXhpbGlhcnkgZGF0YVxuLSAqIChlLmcuIFJ4R0spLiAgVGhvc2UgdGhhdCBkb24mIzM5O3Qgb2ZmZXIgdGhlIGZhY2lsaXR5IChlLmcuIFJ4S0FEKSByZXNwb25kXG4tICogd2l0aG91dCBjb25zdWx0aW5nIHVzZXJzcGFjZS5cbi0gKlxuLSAqIFJldHVybjogVGhlIHByZXZpb3VzIHNldHRpbmcuXG4tICovXG4taW50IHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc2V0KVxuLXtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNrKTtcbi1cdGludCByZXQ7XG4tXG4tXHRsb2NrX3NvY2soc2spO1xuLVx0cmV0ID0gISF0ZXN0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXHUwMDI2cngtXHUwMDNlZmxhZ3MpO1xuLVx0aWYgKHNldClcbi1cdFx0c2V0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXHUwMDI2cngtXHUwMDNlZmxhZ3MpO1xuLVx0ZWxzZVxuLVx0XHRjbGVhcl9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdHJlbGVhc2Vfc29jayhzayk7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZSk7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcbmluZGV4IDZmODhiNTA3ZjkyNzkxLi45MGMxYmQ1ZDdkZmVjZiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcbkBAIC02Nyw2ICYjNDM7NjcsNyBAQCBpbnQgdXNlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIFx0dXBheWxvYWQgPSBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCBkYXRhbGVuKTtcbiBcdGlmICghdXBheWxvYWQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZ1cGF5bG9hZC1cdTAwM2VyZWYsIDEpO1xuIFxuIFx0LyogYXR0YWNoIHRoZSBkYXRhICovXG4gXHRwcmVwLVx1MDAzZXF1b3RhbGVuID0gZGF0YWxlbjtcbkBAIC04OCwxMiAmIzQzOzg5LDIyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfZnJlZV9wcmVwYXJzZSk7XG4gXG4gc3RhdGljIHZvaWQgdXNlcl9mcmVlX3BheWxvYWRfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiB7XG4tXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZDtcbiYjNDM7XHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZCA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQsIHJjdSk7XG4gXG4tXHRwYXlsb2FkID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkLCByY3UpO1xuIFx0a2ZyZWVfc2Vuc2l0aXZlKHBheWxvYWQpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRnJlZSBhIHVzZXIgZGVmaW5lZCBrZXkgcGF5bG9hZC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAocGF5bG9hZCBcdTAwMjZcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnBheWxvYWQtXHUwMDNlcmVmKSlcbiYjNDM7XHRcdGNhbGxfcmN1KFx1MDAyNnBheWxvYWQtXHUwMDNlcmN1LCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3UpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHB1dF91c2VyX2tleV9wYXlsb2FkKTtcbiYjNDM7XG4gLypcbiAgKiB1cGRhdGUgYSB1c2VyIGRlZmluZWQga2V5XG4gICogLSB0aGUga2V5JiMzOTtzIHNlbWFwaG9yZSBpcyB3cml0ZS1sb2NrZWRcbkBAIC0xMTUsOCAmIzQzOzEyNiw3IEBAIGludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXG4gXHRyY3VfYXNzaWduX2tleXBvaW50ZXIoa2V5LCBwcmVwLVx1MDAzZXBheWxvYWQuZGF0YVswXSk7XG4gXHRwcmVwLVx1MDAzZXBheWxvYWQuZGF0YVswXSA9IE5VTEw7XG4gXG4tXHRpZiAoemFwKVxuLVx0XHRjYWxsX3JjdShcdTAwMjZ6YXAtXHUwMDNlcmN1LCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3UpO1xuJiM0MztcdHB1dF91c2VyX2tleV9wYXlsb2FkKHphcCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX3VwZGF0ZSk7XG5AQCAtMTM0LDcgJiM0MzsxNDQsNyBAQCB2b2lkIHVzZXJfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSlcbiBcbiBcdGlmICh1cGF5bG9hZCkge1xuIFx0XHRyY3VfYXNzaWduX2tleXBvaW50ZXIoa2V5LCBOVUxMKTtcbi1cdFx0Y2FsbF9yY3UoXHUwMDI2dXBheWxvYWQtXHUwMDNlcmN1LCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3UpO1xuJiM0MztcdFx0cHV0X3VzZXJfa2V5X3BheWxvYWQodXBheWxvYWQpO1xuIFx0fVxuIH1cbiBcbkBAIC0xNDcsOSAmIzQzOzE1Nyw4IEBAIHZvaWQgdXNlcl9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSlcbiB7XG4gXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQgPSBrZXktXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xuIFxuLVx0a2ZyZWVfc2Vuc2l0aXZlKHVwYXlsb2FkKTtcbiYjNDM7XHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh1cGF5bG9hZCk7XG4gfVxuLVxuIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfZGVzdHJveSk7XG4gXG4gLypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZfUlhSUEMmIzM0OywKICAgICYjMzQ7QUZTX0ZTJiMzNDssCiAgICAmIzM0O1JYS0FEJiMzNDssCiAgICAmIzM0O1JYR0smIzM0OywKICAgICYjMzQ7S0VZUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX2tlcm5lbF9iZWdpbl9jYWxsJiMzNDssCiAgICAmIzM0O3J4cnBjX2RvX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cnhycGNfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDthZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhJiMzNDssCiAgICAmIzM0O2Fmc19mc19wcm9iZV9maWxlc2VydmVyJiMzNDssCiAgICAmIzM0O3VzZXJfcHJlcGFyc2UmIzM0OywKICAgICYjMzQ7dXNlcl91cGRhdGUmIzM0OywKICAgICYjMzQ7cHV0X3VzZXJfa2V5X3BheWxvYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIG91dC1vZi1iYW5kIChPT0IpIG1lc3NhZ2UgaGFuZGxpbmcgaW4gUnhSUEMgd2l0aCBhIGtleS1iYXNlZCBhcHByb2FjaCBmb3IgY2hhbGxlbmdlLXJlc3BvbnNlLCBzcGVjaWZpY2FsbHkgZm9yIFJ4R0suIEl0IG1vZGlmaWVzIGNvcmUgUnhSUEMgc2VuZC9yZWN2IHBhdGhzLCBBRlMgc2VydmVyIHByb2JpbmcsIGFuZCBhZGRzIHJlZmNvdW50aW5nIHRvIHVzZXItZGVmaW5lZCBrZXlzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBuZXR3b3JrIGFuZCBmaWxlc3lzdGVtIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzhhNjJiMGQxMjdlMzIxYjkzN2Q3MjkzNDdhOWI5ZDk0ZjI0NjdlYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDAxOjEwOjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYWZzL2NtX3NlY3VyaXR5LmMgYi9mcy9hZnMvY21fc2VjdXJpdHkuYwppbmRleCAxMDMxNjhjNzBkZDRkZi4uYjA5OGY0OGIxMGU1MWQgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9jbV9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9jbV9zZWN1cml0eS5jCkBAIC02LDcgJiM0Mzs2LDkgQEAKICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXktdHlwZS5oJmd0OwogI2luY2x1ZGUgJmx0O2NyeXB0by9rcmI1LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2tleXMvdXNlci10eXBlLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDthZnNfY20uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2Fmc19mcy5oJiMzNDsKQEAgLTE5LDE5NSAmIzQzOzIxLDM5IEBACiAjZGVmaW5lIHhkcl9sZW5fb2JqZWN0KHgpICg0ICYjNDM7IHJvdW5kX3VwKCh4KSwgc2l6ZW9mKF9fYmUzMikpKQogCiAjaWZkZWYgQ09ORklHX1JYR0sKLXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkgICBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyKTsKLSNlbmRpZgotCiAvKgotICogUmVzcG9uZCB0byBhbiBSeEdLIGNoYWxsZW5nZSwgYWRkaW5nIGFwcGRhdGEuCiYjNDM7ICogQXMgdGhlIFlGUyBSeEdLIGFwcGRhdGEgdG8gYmUgcGFzc2VkIGluIHRoZSBZRlMuRlMtc2VydmljZSBSRVNQT05TRSBwYWNrZXQsCiYjNDM7ICogY3JlYXRlIGEgR1NTIHRva2VuIHRvIHVzZSBhcyBhIHRpY2tldCB0byB0aGUgc3BlY2lmaWVkIGZpbGVzZXJ2ZXIuCiAgKi8KLXN0YXRpYyBpbnQgYWZzX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpCi17Ci0jaWZkZWYgQ09ORklHX1JYR0sKLQlzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9OwotCXN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXI7Ci0jZW5kaWYKLQlzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcjsKLQl1bnNpZ25lZCBsb25nIHBlZXJfZGF0YTsKLQl1MTYgc2VydmljZV9pZDsKLQl1OCBzZWN1cml0eV9pbmRleDsKLQotCXJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UoY2hhbGxlbmdlLCAmYW1wO3BlZXIsICZhbXA7cGVlcl9kYXRhLAotCQkJCSAgICAgJmFtcDtzZXJ2aWNlX2lkLCAmYW1wO3NlY3VyaXR5X2luZGV4KTsKLQotCV9lbnRlcigmIzM0OyV1LCV1JiMzNDssIHNlcnZpY2VfaWQsIHNlY3VyaXR5X2luZGV4KTsKLQotCXN3aXRjaCAoc2VydmljZV9pZCkgewotCQkvKiBXZSBkb24mIzM5O3Qgc2VuZCBDTV9TRVJWSUNFIFJQQ3MsIHNvIGRvbiYjMzk7dCBleHBlY3QgYSBjaGFsbGVuZ2UKLQkJICogdGhlcmVmcm9tLgotCQkgKi8KLQljYXNlIEZTX1NFUlZJQ0U6Ci0JY2FzZSBWTF9TRVJWSUNFOgotCWNhc2UgWUZTX0ZTX1NFUlZJQ0U6Ci0JY2FzZSBZRlNfVkxfU0VSVklDRToKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfd2FybigmIzM0O0NhbiYjMzk7dCByZXNwb25kIHRvIHVua25vd24gY2hhbGxlbmdlICV1OiV1JiMzNDssCi0JCQlzZXJ2aWNlX2lkLCBzZWN1cml0eV9pbmRleCk7Ci0JCXJldHVybiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFJYX1VTRVJfQUJPUlQsIC1FUFJPVE8sCi0JCQkJCQkgICAgIGFmc19hYm9ydF91bnN1cHBvcnRlZF9zZWNfY2xhc3MpOwotCX0KLQotCXN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHsKLSNpZmRlZiBDT05GSUdfUlhLQUQKLQljYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOgotCQlyZXR1cm4gcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19SWEdLCi0JY2FzZSBSWFJQQ19TRUNVUklUWV9SWEdLOgotCQlyZXR1cm4gcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlLCAmYW1wO2FwcGRhdGEpOwotCi0JY2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzoKLQkJc3dpdGNoIChzZXJ2aWNlX2lkKSB7Ci0JCWNhc2UgRlNfU0VSVklDRToKLQkJY2FzZSBZRlNfRlNfU0VSVklDRToKLQkJCXNlcnZlciA9IChzdHJ1Y3QgYWZzX3NlcnZlciAqKXBlZXJfZGF0YTsKLQkJCWlmICghc2VydmVyLSZndDtjbV9yeGdrX2FwcGRhdGEuZGF0YSkgewotCQkJCW11dGV4X2xvY2soJmFtcDtzZXJ2ZXItJmd0O2NtX3Rva2VuX2xvY2spOwotCQkJCWlmICghc2VydmVyLSZndDtjbV9yeGdrX2FwcGRhdGEuZGF0YSkKLQkJCQkJYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oY2hhbGxlbmdlLCBzZXJ2ZXIpOwotCQkJCW11dGV4X3VubG9jaygmYW1wO3NlcnZlci0mZ3Q7Y21fdG9rZW5fbG9jayk7Ci0JCQl9Ci0JCQlpZiAoc2VydmVyLSZndDtjbV9yeGdrX2FwcGRhdGEuZGF0YSkKLQkJCQlhcHBkYXRhID0gc2VydmVyLSZndDtjbV9yeGdrX2FwcGRhdGE7Ci0JCQlicmVhazsKLQkJfQotCQlyZXR1cm4gcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlLCAmYW1wO2FwcGRhdGEpOwotI2VuZGlmCi0KLQlkZWZhdWx0OgotCQlyZXR1cm4gcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UoY2hhbGxlbmdlLCBSWF9VU0VSX0FCT1JULCAtRVBST1RPLAotCQkJCQkJICAgICBhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzKTsKLQl9Ci19Ci0KLS8qCi0gKiBQcm9jZXNzIHRoZSBPT0IgbWVzc2FnZSBxdWV1ZSwgcHJvY2Vzc2luZyBjaGFsbGVuZ2UgcGFja2V0cy4KLSAqLwotdm9pZCBhZnNfcHJvY2Vzc19vb2JfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFmc19uZXQsIHJ4X29vYl93b3JrKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqb29iOwotCWVudW0gcnhycGNfb29iX3R5cGUgdHlwZTsKLQotCXdoaWxlIChSRUFEX09OQ0UobmV0LSZndDtsaXZlKSAmYW1wOyZhbXA7Ci0JICAgICAgIChvb2IgPSByeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2IobmV0LSZndDtzb2NrZXQsICZhbXA7dHlwZSkpKSB7Ci0JCXN3aXRjaCAodHlwZSkgewotCQljYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6Ci0JCQlhZnNfcmVzcG9uZF90b19jaGFsbGVuZ2Uob29iKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJ4cnBjX2tlcm5lbF9mcmVlX29vYihvb2IpOwotCX0KLX0KLQotI2lmZGVmIENPTkZJR19SWEdLCi0vKgotICogQ3JlYXRlIGEgc2VjdXJpdGllcyBrZXlyaW5nIGZvciB0aGUgY2FjaGUgbWFuYWdlciBhbmQgYXR0YWNoIGEga2V5IHRvIGl0IGZvcgotICogdGhlIFJ4R0sgdG9rZW5zIHdlIHdhbnQgdG8gdXNlIHRvIHNlY3VyZSB0aGUgY2FsbGJhY2sgY29ubmVjdGlvbiBiYWNrIGZyb20KLSAqIHRoZSBmaWxlc2VydmVyLgotICovCi1pbnQgYWZzX2NyZWF0ZV90b2tlbl9rZXkoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29ja2V0KQotewotCWNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmtyYjU7Ci0Jc3RydWN0IGtleSAqcmluZzsKLQlrZXlfcmVmX3Qga2V5OwotCWNoYXIgSzBbMzJdLCAqZGVzYzsKLQlpbnQgcmV0OwotCi0JcmluZyA9IGtleXJpbmdfYWxsb2MoJiMzNDtrYWZzJiMzNDssCi0JCQkgICAgIEdMT0JBTF9ST09UX1VJRCwgR0xPQkFMX1JPT1RfR0lELCBjdXJyZW50X2NyZWQoKSwKLQkJCSAgICAgS0VZX1BPU19TRUFSQ0ggfCBLRVlfUE9TX1dSSVRFIHwKLQkJCSAgICAgS0VZX1VTUl9WSUVXIHwgS0VZX1VTUl9SRUFEIHwgS0VZX1VTUl9TRUFSQ0gsCi0JCQkgICAgIEtFWV9BTExPQ19OT1RfSU5fUVVPVEEsCi0JCQkgICAgIE5VTEwsIE5VTEwpOwotCWlmIChJU19FUlIocmluZykpCi0JCXJldHVybiBQVFJfRVJSKHJpbmcpOwotCi0JcmV0ID0gcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzb2NrZXQtJmd0O3NrLCByaW5nKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSAtRU5PUEtHOwotCWtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoS1JCNV9FTkNUWVBFX0FFUzEyOF9DVFNfSE1BQ19TSEExXzk2KTsKLQlpZiAoIWtyYjUpCi0JCWdvdG8gb3V0OwotCi0JaWYgKFdBUk5fT05fT05DRShrcmI1LSZndDtrZXlfbGVuICZndDsgc2l6ZW9mKEswKSkpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gLUVOT01FTTsKLQlkZXNjID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICYjMzQ7JXU6JXU6JXU6JXUmIzM0OywKLQkJCSBZRlNfQ01fU0VSVklDRSwgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0ssIDEsIGtyYjUtJmd0O2V0eXBlKTsKLQlpZiAoIWRlc2MpCi0JCWdvdG8gb3V0OwotCi0Jd2FpdF9mb3JfcmFuZG9tX2J5dGVzKCk7Ci0JZ2V0X3JhbmRvbV9ieXRlcyhLMCwga3JiNS0mZ3Q7a2V5X2xlbik7Ci0KLQlrZXkgPSBrZXlfY3JlYXRlKG1ha2Vfa2V5X3JlZihyaW5nLCB0cnVlKSwKLQkJCSAmIzM0O3J4cnBjX3MmIzM0OywgZGVzYywKLQkJCSBLMCwga3JiNS0mZ3Q7a2V5X2xlbiwKLQkJCSBLRVlfUE9TX1ZJRVcgfCBLRVlfUE9TX1JFQUQgfCBLRVlfUE9TX1NFQVJDSCB8IEtFWV9VU1JfVklFVywKLQkJCSBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBKTsKLQlrZnJlZShkZXNjKTsKLQlpZiAoSVNfRVJSKGtleSkpIHsKLQkJcmV0ID0gUFRSX0VSUihrZXkpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQluZXQtJmd0O2ZzX2NtX3Rva2VuX2tleSA9IGtleV9yZWZfdG9fcHRyKGtleSk7Ci0JcmV0ID0gMDsKLW91dDoKLQlrZXlfcHV0KHJpbmcpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBDcmVhdGUgYW4gWUZTIFJ4R0sgR1NTIHRva2VuIHRvIHVzZSBhcyBhIHRpY2tldCB0byB0aGUgc3BlY2lmaWVkIGZpbGVzZXJ2ZXIuCi0gKi8KLXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkgICBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyKQomIzQzO3N0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfcnhna19jbV9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHUzMiBlbmN0eXBlKQogewogCWNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmNvbm5fa3JiNSwgKnRva2VuX2tyYjU7CiAJY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICp0b2tlbl9rZXk7CiAJc3RydWN0IGNyeXB0b19hZWFkICphZWFkOwogCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKIAlzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gc2VydmVyLSZndDtjZWxsLSZndDtuZXQ7Ci0JY29uc3Qgc3RydWN0IGtleSAqa2V5ID0gbmV0LSZndDtmc19jbV90b2tlbl9rZXk7Ci0Jc2l6ZV90IGtleXNpemUsIHV1aWRzaXplLCBhdXRoc2l6ZSwgdG9rc2l6ZSwgZW5jc2l6ZSwgY29udHNpemUsIGFkYXRhc2l6ZSwgb2Zmc2V0OwomIzQzOwljb25zdCBzdHJ1Y3Qga2V5ICpjbV9rZXkgPSBuZXQtJmd0O2ZzX2NtX3Rva2VuX2tleTsKJiM0MzsJc3RydWN0IGtleSAqYXBwZGF0YV9rZXkgPSBOVUxMOwomIzQzOwlzaXplX3Qga2V5c2l6ZSwgdXVpZHNpemUsIGF1dGhzaXplLCB0b2tzaXplLCBlbmNzaXplLCBjb250c2l6ZTsKJiM0MzsJc2l6ZV90IGFkYXRhc2l6ZSwgb2Zmc2V0OwogCV9fYmUzMiBjYXBzWzFdID0gewogCQlbMF0gPSBodG9ubChBRlNfQ0FQX0VSUk9SX1RSQU5TTEFUSU9OKSwKIAl9OwogCV9fYmUzMiAqeGRyOwogCXZvaWQgKmFwcGRhdGEsICpLMCwgKmVuY2Jhc2U7Ci0JdTMyIGVuY3R5cGU7CiAJaW50IHJldDsKIAotCWlmICgha2V5KQomIzQzOwlpZiAoIWNtX2tleSkKIAkJcmV0dXJuIC1FTk9LRVk7CiAKIAkvKiBBc3N1bWUgdGhhdCB0aGUgZmlsZXNlcnZlciBpcyBoYXBweSB0byB1c2UgdGhlIHNhbWUgZW5jb2RpbmcgdHlwZSBhcwogCSAqIHdlIHdlcmUgdG9sZCB0byB1c2UgYnkgdGhlIHRva2VuIG9idGFpbmVkIGJ5IHRoZSB1c2VyLgogCSAqLwotCWVuY3R5cGUgPSByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UoY2hhbGxlbmdlKTsKLQogCWNvbm5fa3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZShlbmN0eXBlKTsKIAlpZiAoIWNvbm5fa3JiNSkKIAkJcmV0dXJuIC1FTk9QS0c7Ci0JdG9rZW5fa3JiNSA9IGtleS0mZ3Q7cGF5bG9hZC5kYXRhWzBdOwotCXRva2VuX2tleSA9IChjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKikmYW1wO2tleS0mZ3Q7cGF5bG9hZC5kYXRhWzJdOwomIzQzOwl0b2tlbl9rcmI1ID0gY21fa2V5LSZndDtwYXlsb2FkLmRhdGFbMF07CiYjNDM7CXRva2VuX2tleSA9IChjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKikmYW1wO2NtX2tleS0mZ3Q7cGF5bG9hZC5kYXRhWzJdOwogCiAJLyogc3RydWN0IHJ4Z2tfa2V5IHsKIAkgKglhZnNfdWludDMyCWVuY3R5cGU7CkBAIC0yMzUsNyAmIzQzOzgxLDcgQEAgc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLAogCSAqCXN0cnVjdCBSWEdLX0F1dGhOYW1lCWlkZW50aXRpZXMmbHQ7Jmd0OzsKIAkgKiB9OwogCSAqLwotCXRva3NpemUgPSBrZXlzaXplICYjNDM7IDggJiM0MzsgNCAmIzQzOyA0ICYjNDM7IDggJiM0MzsgeGRyX2xlbl9vYmplY3QoYXV0aHNpemUpOwomIzQzOwl0b2tzaXplID0ga2V5c2l6ZSAmIzQzOyA0ICYjNDM7IDggJiM0MzsgNCAmIzQzOyA0ICYjNDM7IDggJiM0MzsgeGRyX2xlbl9vYmplY3QoYXV0aHNpemUpOwogCiAJb2Zmc2V0ID0gMDsKIAllbmNzaXplID0gY3J5cHRvX2tyYjVfaG93X211Y2hfYnVmZmVyKHRva2VuX2tyYjUsIEtSQjVfRU5DUllQVF9NT0RFLCB0b2tzaXplLCAmYW1wO29mZnNldCk7CkBAIC0zMjcsOSAmIzQzOzE3MywyMyBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gb3V0X2FlYWQ7CiAKLQlzZXJ2ZXItJmd0O2NtX3J4Z2tfYXBwZGF0YS5sZW4gID0gYWRhdGFzaXplOwotCXNlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhLmRhdGEgPSBhcHBkYXRhOwotCWFwcGRhdGEgPSBOVUxMOwomIzQzOwlhcHBkYXRhX2tleSA9IGtleV9hbGxvYygmYW1wO2tleV90eXBlX3VzZXIsICYjMzQ7cnhycGM6IGFmcyByeGdrIGFwcGRhdGEmIzM0OywKJiM0MzsJCQkJR0xPQkFMX1JPT1RfVUlELCBHTE9CQUxfUk9PVF9HSUQsIGN1cnJlbnRfY3JlZCgpLAomIzQzOwkJCQlLRVlfUE9TX1ZJRVcgfCBLRVlfUE9TX1NFQVJDSCB8IEtFWV9VU1JfVklFVywKJiM0MzsJCQkJS0VZX0FMTE9DX05PVF9JTl9RVU9UQSwgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIoYXBwZGF0YV9rZXkpKSB7CiYjNDM7CQlyZXQgPSBQVFJfRVJSKGFwcGRhdGFfa2V5KTsKJiM0MzsJCWdvdG8gb3V0X2FlYWQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0ga2V5X2luc3RhbnRpYXRlX2FuZF9saW5rKGFwcGRhdGFfa2V5LCBhcHBkYXRhLCBhZGF0YXNpemUsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJa2V5X3B1dChhcHBkYXRhX2tleSk7CiYjNDM7CQlnb3RvIG91dF9hZWFkOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFN0b3JlIHRoZSBhcHBkYXRhIGJlZm9yZSB0aGUga2V5IHBvaW50ZXIgKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtzZXJ2ZXItJmd0O3lmc19yeGdrX2FwcGRhdGEsIGFwcGRhdGFfa2V5KTsKIAogb3V0X2FlYWQ6CiAJY3J5cHRvX2ZyZWVfYWVhZChhZWFkKTsKQEAgLTMzOSwzICYjNDM7MTk5LDExNiBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCiAJcmV0dXJuIHJldDsKIH0KICNlbmRpZiAvKiBDT05GSUdfUlhHSyAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogQ3JlYXRlIHRoZSBhcHBsaWNhdGlvbiBkYXRhIHRvIGdvIGluIGEgUkVTUE9OU0UgcGFja2V0IGEgc2VydmVyJiMzOTtzIENIQUxMRU5HRQomIzQzOyAqIGZyb20gdGhlIHBhcmFtZXRlcnMgY29udGFpbmVkIGluIGEga2V5LiAgVGhlIGtleSBzcGVjaWZpZXMgdGhlIHNlY3VyaXR5CiYjNDM7ICogaW5kZXggYW5kIG90aGVyIGFwcHJvcHJpYXRlIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZW5jb2RpbmcgdHlwZSBmb3IgUnhHSy4KJiM0MzsgKi8KJiM0MztpbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpCiYjNDM7ewomIzQzOwl1MzIga3JiNV9lbmN0eXBlOwomIzQzOwlpbnQgcmV0OwomIzQzOwl1OCBzZWN1cml0eV9pbmRleDsKJiM0MzsKJiM0MzsJaWYgKCFrZXkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcnhycGNfa2VybmVsX3F1ZXJ5X2tleShrZXksICZhbXA7c2VjdXJpdHlfaW5kZXgsICZhbXA7a3JiNV9lbmN0eXBlKTsKJiM0MzsKJiM0MzsJX2VudGVyKCYjMzQ7JXUsJXUmIzM0Oywgc2VjdXJpdHlfaW5kZXgsIGtyYjVfZW5jdHlwZSk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHsKJiM0MzsjaWZkZWYgQ09ORklHX1JYR0sKJiM0MzsJY2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzoKJiM0MzsJCS8qIFJlYWQgdGhlIGtleSBwb2ludGVyIGJlZm9yZSB0aGUgYXBwZGF0YSAqLwomIzQzOwkJaWYgKHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtzZXJ2ZXItJmd0O3lmc19yeGdrX2FwcGRhdGEpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJYnJlYWs7CiYjNDM7I2VuZGlmCiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSAwOwomIzQzOwltdXRleF9sb2NrKCZhbXA7c2VydmVyLSZndDtjbV90b2tlbl9sb2NrKTsKJiM0MzsKJiM0MzsJc3dpdGNoIChzZWN1cml0eV9pbmRleCkgewomIzQzOyNpZmRlZiBDT05GSUdfUlhHSwomIzQzOwljYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOgomIzQzOwkJLyogUmVhZCB0aGUga2V5IHBvaW50ZXIgYmVmb3JlIHRoZSBhcHBkYXRhICovCiYjNDM7CQlpZiAoc21wX2xvYWRfYWNxdWlyZSgmYW1wO3NlcnZlci0mZ3Q7eWZzX3J4Z2tfYXBwZGF0YSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlyZXQgPSBhZnNfY3JlYXRlX3lmc19yeGdrX2NtX2FwcGRhdGEoc2VydmVyLCBrcmI1X2VuY3R5cGUpOwomIzQzOwkJYnJlYWs7CiYjNDM7I2VuZGlmCiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtzZXJ2ZXItJmd0O2NtX3Rva2VuX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1JYR0sKJiM0MzsvKgomIzQzOyAqIENyZWF0ZSBhIHNlY3VyaXRpZXMga2V5cmluZyBmb3IgdGhlIGNhY2hlIG1hbmFnZXIgYW5kIGF0dGFjaCBhIGtleSB0byBpdCBmb3IKJiM0MzsgKiB0aGUgUnhHSyB0b2tlbnMgd2Ugd2FudCB0byB1c2UgdG8gc2VjdXJlIHRoZSBjYWxsYmFjayBjb25uZWN0aW9uIGJhY2sgZnJvbQomIzQzOyAqIHRoZSBmaWxlc2VydmVyLgomIzQzOyAqLwomIzQzO2ludCBhZnNfY3JlYXRlX3Rva2VuX2tleShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICprcmI1OwomIzQzOwlzdHJ1Y3Qga2V5ICpyaW5nOwomIzQzOwlrZXlfcmVmX3Qga2V5OwomIzQzOwljaGFyIEswWzMyXSwgKmRlc2M7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJpbmcgPSBrZXlyaW5nX2FsbG9jKCYjMzQ7a2FmcyYjMzQ7LAomIzQzOwkJCSAgICAgR0xPQkFMX1JPT1RfVUlELCBHTE9CQUxfUk9PVF9HSUQsIGN1cnJlbnRfY3JlZCgpLAomIzQzOwkJCSAgICAgS0VZX1BPU19TRUFSQ0ggfCBLRVlfUE9TX1dSSVRFIHwKJiM0MzsJCQkgICAgIEtFWV9VU1JfVklFVyB8IEtFWV9VU1JfUkVBRCB8IEtFWV9VU1JfU0VBUkNILAomIzQzOwkJCSAgICAgS0VZX0FMTE9DX05PVF9JTl9RVU9UQSwKJiM0MzsJCQkgICAgIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoSVNfRVJSKHJpbmcpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocmluZyk7CiYjNDM7CiYjNDM7CXJldCA9IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc29ja2V0LSZndDtzaywgcmluZyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IC1FTk9QS0c7CiYjNDM7CWtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoS1JCNV9FTkNUWVBFX0FFUzEyOF9DVFNfSE1BQ19TSEExXzk2KTsKJiM0MzsJaWYgKCFrcmI1KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0Uoa3JiNS0mZ3Q7a2V5X2xlbiAmZ3Q7IHNpemVvZihLMCkpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IC1FTk9NRU07CiYjNDM7CWRlc2MgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgJiMzNDsldToldToldToldSYjMzQ7LAomIzQzOwkJCSBZRlNfQ01fU0VSVklDRSwgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0ssIDEsIGtyYjUtJmd0O2V0eXBlKTsKJiM0MzsJaWYgKCFkZXNjKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXdhaXRfZm9yX3JhbmRvbV9ieXRlcygpOwomIzQzOwlnZXRfcmFuZG9tX2J5dGVzKEswLCBrcmI1LSZndDtrZXlfbGVuKTsKJiM0MzsKJiM0MzsJa2V5ID0ga2V5X2NyZWF0ZShtYWtlX2tleV9yZWYocmluZywgdHJ1ZSksCiYjNDM7CQkJICYjMzQ7cnhycGNfcyYjMzQ7LCBkZXNjLAomIzQzOwkJCSBLMCwga3JiNS0mZ3Q7a2V5X2xlbiwKJiM0MzsJCQkgS0VZX1BPU19WSUVXIHwgS0VZX1BPU19SRUFEIHwgS0VZX1BPU19TRUFSQ0ggfCBLRVlfVVNSX1ZJRVcsCiYjNDM7CQkJIEtFWV9BTExPQ19OT1RfSU5fUVVPVEEpOwomIzQzOwlrZnJlZShkZXNjKTsKJiM0MzsJaWYgKElTX0VSUihrZXkpKSB7CiYjNDM7CQlyZXQgPSBQVFJfRVJSKGtleSk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwluZXQtJmd0O2ZzX2NtX3Rva2VuX2tleSA9IGtleV9yZWZfdG9fcHRyKGtleSk7CiYjNDM7CXJldCA9IDA7CiYjNDM7b3V0OgomIzQzOwlrZXlfcHV0KHJpbmcpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX1JYR0sgKi8KZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc19wcm9iZS5jIGIvZnMvYWZzL2ZzX3Byb2JlLmMKaW5kZXggYTkxYWQxOTM4ZDA3ODguLmUyNmY3ZjFlMzBhMjNhIDEwMDY0NAotLS0gYS9mcy9hZnMvZnNfcHJvYmUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZnNfcHJvYmUuYwpAQCAtMjQxLDkgJiM0MzsyNDEsMTQgQEAgaW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsCiAJc3RydWN0IGFmc19lbmRwb2ludF9zdGF0ZSAqZXN0YXRlLCAqb2xkOwogCXN0cnVjdCBhZnNfYWRkcl9saXN0ICpvbGRfYWxpc3QgPSBOVUxMLCAqYWxpc3Q7CiAJdW5zaWduZWQgbG9uZyB1bnByb2JlZDsKJiM0MzsJaW50IHJldDsKIAogCV9lbnRlcigmIzM0OyVwVSYjMzQ7LCAmYW1wO3NlcnZlci0mZ3Q7dXVpZCk7CiAKJiM0MzsJcmV0ID0gYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzZXJ2ZXIsIGtleSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAllc3RhdGUgPSBremFsbG9jX29iaigqZXN0YXRlKTsKIAlpZiAoIWVzdGF0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oCmluZGV4IDYwMWYwMWU1YzE1ZmNjLi5lZjdiZDlmOTQzZTBhNiAxMDA2NDQKLS0tIGEvZnMvYWZzL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ludGVybmFsLmgKQEAgLTI4Myw3ICYjNDM7MjgzLDYgQEAgc3RydWN0IGFmc19uZXQgewogCXN0cnVjdCBzb2NrZXQJCSpzb2NrZXQ7CiAJc3RydWN0IGFmc19jYWxsCQkqc3BhcmVfaW5jb21pbmdfY2FsbDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJY2hhcmdlX3ByZWFsbG9jYXRpb25fd29yazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcnhfb29iX3dvcms7CiAJc3RydWN0IG11dGV4CQlzb2NrZXRfbXV0ZXg7CiAJYXRvbWljX3QJCW5yX291dHN0YW5kaW5nX2NhbGxzOwogCWF0b21pY190CQlucl9zdXBlcmJsb2NrczsKQEAgLTU0OCw3ICYjNDM7NTQ3LDcgQEAgc3RydWN0IGFmc19zZXJ2ZXIgewogCXN0cnVjdCB3b3JrX3N0cnVjdAlkZXN0cm95ZXI7CS8qIFdvcmsgaXRlbSB0byB0cnkgYW5kIGRlc3Ryb3kgYSBzZXJ2ZXIgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsJCS8qIE1hbmFnZW1lbnQgdGltZXIgKi8KIAlzdHJ1Y3QgbXV0ZXgJCWNtX3Rva2VuX2xvY2s7CS8qIExvY2sgZ292ZXJuaW5nIGNyZWF0aW9uIG9mIGFwcGRhdGEgKi8KLQlzdHJ1Y3Qga3JiNV9idWZmZXIJY21fcnhna19hcHBkYXRhOyAvKiBBcHBkYXRhIHRvIGJlIGluY2x1ZGVkIGluIFJFU1BPTlNFIHBhY2tldCAqLwomIzQzOwlzdHJ1Y3Qga2V5CQkqeWZzX3J4Z2tfYXBwZGF0YTsgLyogQXBwZGF0YSB0byBiZSBpbmNsdWRlZCBpbiBSRVNQT05TRSBwYWNrZXQgKi8KIAl0aW1lNjRfdAkJdW51c2VfdGltZTsJLyogVGltZSBhdCB3aGljaCBsYXN0IHVudXNlZCAqLwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogI2RlZmluZSBBRlNfU0VSVkVSX0ZMX1JFU1BPTkRJTkcgMAkJLyogVGhlIHNlcnZlciBpcyByZXNwb25kaW5nICovCkBAIC0xMDg5LDcgJiM0MzsxMDg4LDcgQEAgZXh0ZXJuIGJvb2wgYWZzX2NtX2luY29taW5nX2NhbGwoc3RydWN0IGFmc19jYWxsICopOwogLyoKICAqIGNtX3NlY3VyaXR5LmMKICAqLwotdm9pZCBhZnNfcHJvY2Vzc19vb2JfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKJiM0MztpbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpOwogI2lmZGVmIENPTkZJR19SWEdLCiBpbnQgYWZzX2NyZWF0ZV90b2tlbl9rZXkoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29ja2V0KTsKICNlbHNlCkBAIC0xNDE2LDIxICYjNDM7MTQxNSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfc2VlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBlbnVtIGFmc19jYWxsX3RyYWNlIHdoeSkKIAkJICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLAotCQkJCSAgICBnZnBfdCBnZnApCi17Ci0Jc3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtJmd0O2VzdGF0ZS0mZ3Q7YWRkcmVzc2VzOwotCi0Jb3AtJmd0O2NhbGwJPSBjYWxsOwotCW9wLSZndDt0eXBlCT0gY2FsbC0mZ3Q7dHlwZTsKLQljYWxsLSZndDtvcAk9IG9wOwotCWNhbGwtJmd0O2tleQk9IG9wLSZndDtrZXk7Ci0JY2FsbC0mZ3Q7aW50cgk9ICEob3AtJmd0O2ZsYWdzICZhbXA7IEFGU19PUEVSQVRJT05fVU5JTlRSKTsKLQljYWxsLSZndDtwZWVyCT0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LSZndDthZGRyc1tvcC0mZ3Q7YWRkcl9pbmRleF0ucGVlcik7Ci0JY2FsbC0mZ3Q7c2VydmljZV9pZCA9IG9wLSZndDtzZXJ2ZXItJmd0O3NlcnZpY2VfaWQ7Ci0JYWZzX21ha2VfY2FsbChjYWxsLCBnZnApOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2V4dHJhY3RfYmVnaW4oc3RydWN0IGFmc19jYWxsICpjYWxsLCB2b2lkICpidWYsIHNpemVfdCBzaXplKQogewogCWNhbGwtJmd0O2lvdl9sZW4gPSBzaXplOwpAQCAtMTc2Miw2ICYjNDM7MTc0NiwyMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqQUZTX1ZOT0RFX1RPX0koc3RydWN0IGFmc192bm9kZSAqdm5vZGUpCiAJcmV0dXJuICZhbXA7dm5vZGUtJmd0O25ldGZzLmlub2RlOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsCiYjNDM7CQkJCSAgICBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC0mZ3Q7ZXN0YXRlLSZndDthZGRyZXNzZXM7CiYjNDM7CiYjNDM7CW9wLSZndDtjYWxsCT0gY2FsbDsKJiM0MzsJb3AtJmd0O3R5cGUJPSBjYWxsLSZndDt0eXBlOwomIzQzOwljYWxsLSZndDtvcAk9IG9wOwomIzQzOwljYWxsLSZndDtzZXJ2ZXIJPSBhZnNfdXNlX3NlcnZlcihvcC0mZ3Q7c2VydmVyLCBmYWxzZSwgYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCk7CiYjNDM7CWNhbGwtJmd0O2tleQk9IG9wLSZndDtrZXk7CiYjNDM7CWNhbGwtJmd0O2ludHIJPSAhKG9wLSZndDtmbGFncyAmYW1wOyBBRlNfT1BFUkFUSU9OX1VOSU5UUik7CiYjNDM7CWNhbGwtJmd0O3BlZXIJPSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtJmd0O2FkZHJzW29wLSZndDthZGRyX2luZGV4XS5wZWVyKTsKJiM0MzsJY2FsbC0mZ3Q7c2VydmljZV9pZCA9IG9wLSZndDtzZXJ2ZXItJmd0O3NlcnZpY2VfaWQ7CiYjNDM7CWFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogTm90ZSB0aGF0IGEgZGVudHJ5IGdvdCBjaGFuZ2VkLiAgV2UgbmVlZCB0byBzZXQgZF9mc2RhdGEgdG8gdGhlIGRhdGEgdmVyc2lvbgogICogbnVtYmVyIGRlcml2ZWQgZnJvbSB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uICBJdCBkb2VzbiYjMzk7dCBtYXR0ZXIgaWYKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9tYWluLmMgYi9mcy9hZnMvbWFpbi5jCmluZGV4IDdhODgzYzU5OTc2ZmYyLi42MzUzZmVhYTVmYjRiNSAxMDA2NDQKLS0tIGEvZnMvYWZzL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvbWFpbi5jCkBAIC03Myw3ICYjNDM7NzMsNiBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgYWZzX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldF9ucykKIAlnZW5lcmF0ZV9yYW5kb21fdXVpZCgodW5zaWduZWQgY2hhciAqKSZhbXA7bmV0LSZndDt1dWlkKTsKIAogCUlOSVRfV09SSygmYW1wO25ldC0mZ3Q7Y2hhcmdlX3ByZWFsbG9jYXRpb25fd29yaywgYWZzX2NoYXJnZV9wcmVhbGxvY2F0aW9uKTsKLQlJTklUX1dPUksoJmFtcDtuZXQtJmd0O3J4X29vYl93b3JrLCBhZnNfcHJvY2Vzc19vb2JfcXVldWUpOwogCW11dGV4X2luaXQoJmFtcDtuZXQtJmd0O3NvY2tldF9tdXRleCk7CiAKIAluZXQtJmd0O2NlbGxzID0gUkJfUk9PVDsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9yeHJwYy5jIGIvZnMvYWZzL3J4cnBjLmMKaW5kZXggZDgyOTE2NjU3YTNkZGYuLmNmNzU4OGEwMmYzMDUzIDEwMDY0NAotLS0gYS9mcy9hZnMvcnhycGMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvcnhycGMuYwpAQCAtMjUsMTQgJiM0MzsyNSwxMiBAQCBzdGF0aWMgdm9pZCBhZnNfcHJvY2Vzc19hc3luY19jYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIHN0YXRpYyB2b2lkIGFmc19yeF9uZXdfY2FsbChzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgcnhycGNfY2FsbCAqLCB1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyB2b2lkIGFmc19yeF9kaXNjYXJkX25ld19jYWxsKHN0cnVjdCByeHJwY19jYWxsICosIHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIHZvaWQgYWZzX3J4X2F0dGFjaChzdHJ1Y3QgcnhycGNfY2FsbCAqcnhjYWxsLCB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCk7Ci1zdGF0aWMgdm9pZCBhZnNfcnhfbm90aWZ5X29vYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvb2IpOwogc3RhdGljIGludCBhZnNfZGVsaXZlcl9jbV9vcF9pZChzdHJ1Y3QgYWZzX2NhbGwgKik7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnhycGNfa2VybmVsX29wcyBhZnNfcnhycGNfY2FsbGJhY2tfb3BzID0gewogCS5ub3RpZnlfbmV3X2NhbGwJPSBhZnNfcnhfbmV3X2NhbGwsCiAJLmRpc2NhcmRfbmV3X2NhbGwJPSBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbCwKIAkudXNlcl9hdHRhY2hfY2FsbAk9IGFmc19yeF9hdHRhY2gsCi0JLm5vdGlmeV9vb2IJCT0gYWZzX3J4X25vdGlmeV9vb2IsCiB9OwogCiAvKiBhc3luY2hyb25vdXMgaW5jb21pbmcgY2FsbCBpbml0aWFsIHByb2Nlc3NpbmcgKi8KQEAgLTc0LDEwICYjNDM7NzIsNiBAQCBpbnQgYWZzX29wZW5fc29ja2V0KHN0cnVjdCBhZnNfbmV0ICpuZXQpCiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gZXJyb3JfMjsKIAotCXJldCA9IHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZShzb2NrZXQtJmd0O3NrLCB0cnVlKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlcnJvcl8yOwotCiAJcmV0ID0gYWZzX2NyZWF0ZV90b2tlbl9rZXkobmV0LCBzb2NrZXQpOwogCWlmIChyZXQgJmx0OyAwKQogCQlwcl9lcnIoJiMzNDtDb3VsZG4mIzM5O3QgY3JlYXRlIFJ4R0sgQ00ga2V5OiAlZFxuJiMzNDssIHJldCk7CkBAIC0xMjgsNyAmIzQzOzEyMiw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KQogCV9lbnRlcigmIzM0OyYjMzQ7KTsKIAogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtuZXQtJmd0O2NoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcmspOwotCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtuZXQtJmd0O3J4X29vYl93b3JrKTsKIAkvKiBGdXR1cmUgd29yayBpdGVtcyBzaG91bGQgbm93IHNlZSAtJmd0O2xpdmUgaXMgZmFsc2UuICovCiAKIAlrZXJuZWxfbGlzdGVuKG5ldC0mZ3Q7c29ja2V0LCAwKTsKQEAgLTE0OSw3ICYjNDM7MTQyLDYgQEAgdm9pZCBhZnNfY2xvc2Vfc29ja2V0KHN0cnVjdCBhZnNfbmV0ICpuZXQpCiAKIAlrZXJuZWxfc29ja19zaHV0ZG93bihuZXQtJmd0O3NvY2tldCwgU0hVVF9SRFdSKTsKIAlmbHVzaF93b3JrcXVldWUoYWZzX2FzeW5jX2NhbGxzKTsKLQljYW5jZWxfd29ya19zeW5jKCZhbXA7bmV0LSZndDtyeF9vb2Jfd29yayk7CiAJbmV0LSZndDtzb2NrZXQtJmd0O3NrLSZndDtza191c2VyX2RhdGEgPSBOVUxMOwogCXNvY2tfcmVsZWFzZShuZXQtJmd0O3NvY2tldCk7CiAJa2V5X3B1dChuZXQtJmd0O2ZzX2NtX3Rva2VuX2tleSk7CkBAIC0zNDcsNiAmIzQzOzMzOSw3IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcCkKIAlzdHJ1Y3QgcnhycGNfY2FsbCAqcnhjYWxsOwogCXN0cnVjdCBtc2doZHIgbXNnOwogCXN0cnVjdCBrdmVjIGlvdlsxXTsKJiM0MzsJc3RydWN0IGtleSAqYXBwX2RhdGEgPSBOVUxMOwogCXNpemVfdCBsZW47CiAJczY0IHR4X3RvdGFsX2xlbjsKIAlpbnQgcmV0OwpAQCAtMzc4LDggJiM0MzszNzEsMjYgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCQljYWxsLSZndDtkcm9wX3JlZiA9IHRydWU7CiAJfQogCiYjNDM7CWlmIChjYWxsLSZndDtrZXkgJmFtcDsmYW1wOyBjYWxsLSZndDtzZXJ2ZXIpIHsKJiM0MzsJCXUzMiBrcmI1X2VuY3R5cGUgPSAwOwomIzQzOwkJdTggc2VjdXJpdHlfaW5kZXggPSAwOwomIzQzOwomIzQzOwkJcnhycGNfa2VybmVsX3F1ZXJ5X2tleShjYWxsLSZndDtrZXksICZhbXA7c2VjdXJpdHlfaW5kZXgsICZhbXA7a3JiNV9lbmN0eXBlKTsKJiM0MzsJCXN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHsKJiM0MzsjaWZkZWYgQ09ORklHX1JYR0sKJiM0MzsJCWNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6CiYjNDM7CQkJLyogUmVhZCB0aGUga2V5IHBvaW50ZXIgYmVmb3JlIHRoZSBhcHBkYXRhICovCiYjNDM7CQkJYXBwX2RhdGEgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7Y2FsbC0mZ3Q7c2VydmVyLSZndDt5ZnNfcnhna19hcHBkYXRhKTsKJiM0MzsJCQlicmVhazsKJiM0MzsjZW5kaWYKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAkvKiBjcmVhdGUgYSBjYWxsICovCi0JcnhjYWxsID0gcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoY2FsbC0mZ3Q7bmV0LSZndDtzb2NrZXQsIGNhbGwtJmd0O3BlZXIsIGNhbGwtJmd0O2tleSwKJiM0MzsJcnhjYWxsID0gcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoY2FsbC0mZ3Q7bmV0LSZndDtzb2NrZXQsIGNhbGwtJmd0O3BlZXIsCiYjNDM7CQkJCQkgY2FsbC0mZ3Q7a2V5LCBhcHBfZGF0YSwKIAkJCQkJICh1bnNpZ25lZCBsb25nKWNhbGwsCiAJCQkJCSB0eF90b3RhbF9sZW4sCiAJCQkJCSBjYWxsLSZndDttYXhfbGlmZXNwYW4sCkBAIC05ODMsMTQgJiM0Mzs5OTQsMyBAQCBub2lubGluZSBpbnQgYWZzX3Byb3RvY29sX2Vycm9yKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwKIAkJY2FsbC0mZ3Q7dW5tYXJzaGFsbGluZ19lcnJvciA9IHRydWU7CiAJcmV0dXJuIC1FQkFETVNHOwogfQotCi0vKgotICogV2FrZSB1cCBPT0Igbm90aWZpY2F0aW9uIHByb2Nlc3NpbmcuCi0gKi8KLXN0YXRpYyB2b2lkIGFmc19yeF9ub3RpZnlfb29iKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9vYikKLXsKLQlzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gc2stJmd0O3NrX3VzZXJfZGF0YTsKLQotCWlmIChSRUFEX09OQ0UobmV0LSZndDtsaXZlKSkKLQkJcXVldWVfd29yayhhZnNfd3EsICZhbXA7bmV0LSZndDtyeF9vb2Jfd29yayk7Ci19CmRpZmYgLS1naXQgYS9mcy9hZnMvc2VydmVyLmMgYi9mcy9hZnMvc2VydmVyLmMKaW5kZXggMGZlMTYyZWEyYTM2ZGIuLjRjM2E3YmQwZjdkODY2IDEwMDY0NAotLS0gYS9mcy9hZnMvc2VydmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL3NlcnZlci5jCkBAIC0zOTgsNyAmIzQzOzM5OCw3IEBAIHN0YXRpYyB2b2lkIGFmc19zZXJ2ZXJfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KQogCWFmc19wdXRfZW5kcG9pbnRfc3RhdGUocmN1X2FjY2Vzc19wb2ludGVyKHNlcnZlci0mZ3Q7ZW5kcG9pbnRfc3RhdGUpLAogCQkJICAgICAgIGFmc19lc3RhdGVfdHJhY2VfcHV0X3NlcnZlcik7CiAJYWZzX3B1dF9jZWxsKHNlcnZlci0mZ3Q7Y2VsbCwgYWZzX2NlbGxfdHJhY2VfcHV0X3NlcnZlcik7Ci0Ja2ZyZWUoc2VydmVyLSZndDtjbV9yeGdrX2FwcGRhdGEuZGF0YSk7CiYjNDM7CWtleV9wdXQoc2VydmVyLSZndDt5ZnNfcnhna19hcHBkYXRhKTsKIAlrZnJlZShzZXJ2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2tleXMvdXNlci10eXBlLmggYi9pbmNsdWRlL2tleXMvdXNlci10eXBlLmgKaW5kZXggMzg2YzMxNDMyNzg5OTUuLjcwMDJhOTkzYTQ3MjI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2tleXMvdXNlci10eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oCkBAIC0yNiw2ICYjNDM7MjYsNyBAQAogICovCiBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCB7CiAJc3RydWN0IHJjdV9oZWFkCXJjdTsJCS8qIFJDVSBkZXN0cnVjdG9yICovCiYjNDM7CXJlZmNvdW50X3QJcmVmOwogCXVuc2lnbmVkIHNob3J0CWRhdGFsZW47CS8qIGxlbmd0aCBvZiB0aGlzIGRhdGEgKi8KIAljaGFyCQlkYXRhW10gX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpOyAvKiBhY3R1YWwgZGF0YSAqLwogfTsKQEAgLTM3LDYgJiM0MzszOCw3IEBAIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQ7CiAKIGV4dGVybiBpbnQgdXNlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTsKIGV4dGVybiB2b2lkIHVzZXJfZnJlZV9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTsKJiM0Mzt2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKTsKIGV4dGVybiBpbnQgdXNlcl91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTsKIGV4dGVybiB2b2lkIHVzZXJfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSk7CiBleHRlcm4gdm9pZCB1c2VyX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmggYi9pbmNsdWRlL25ldC9hZl9yeHJwYy5oCmluZGV4IDBmYjRjNDFjOWJiZjU1Li5hOWI4ZTFiYTY3ZWY4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWZfcnhycGMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9hZl9yeHJwYy5oCkBAIC01NSw2ICYjNDM7NTUsNyBAQCB2b2lkIHJ4cnBjX2tlcm5lbF9zZXRfbm90aWZpY2F0aW9ucyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkJCSAgIHN0cnVjdCByeHJwY19wZWVyICpwZWVyLAogCQkJCQkgICBzdHJ1Y3Qga2V5ICprZXksCiYjNDM7CQkJCQkgICBzdHJ1Y3Qga2V5ICphcHBfZGF0YSwKIAkJCQkJICAgdW5zaWduZWQgbG9uZyB1c2VyX2NhbGxfSUQsCiAJCQkJCSAgIHM2NCB0eF90b3RhbF9sZW4sCiAJCQkJCSAgIHUzMiBoYXJkX3RpbWVvdXQsCkBAIC05MSwyNCAmIzQzOzkyLDggQEAgYm9vbCByeHJwY19rZXJuZWxfY2hlY2tfbGlmZShjb25zdCBzdHJ1Y3Qgc29ja2V0ICosIGNvbnN0IHN0cnVjdCByeHJwY19jYWxsICopOwogCiBpbnQgcnhycGNfc29ja19zZXRfbWluX3NlY3VyaXR5X2xldmVsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IHZhbCk7CiBpbnQgcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qga2V5ICopOwotaW50IHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc2V0KTsKLQotZW51bSByeHJwY19vb2JfdHlwZSByeHJwY19rZXJuZWxfcXVlcnlfb29iKHN0cnVjdCBza19idWZmICpvb2IsCi0JCQkJCSAgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEpOwotc3RydWN0IHNrX2J1ZmYgKnJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCQkJCQkgZW51bSByeHJwY19vb2JfdHlwZSAqX3R5cGUpOwotdm9pZCByeHJwY19rZXJuZWxfZnJlZV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYik7Ci12b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsCi0JCQkJICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhLAotCQkJCSAgdTE2ICpfc2VydmljZV9pZCwgdTggKl9zZWN1cml0eV9pbmRleCk7Ci1pbnQgcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwgdTMyIGFib3J0X2NvZGUsCi0JCQkJICBpbnQgZXJyb3IsIGVudW0gcnhycGNfYWJvcnRfcmVhc29uIHdoeSk7Ci1pbnQgcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpOwotdTMyIHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKTsKLWludCByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLAotCQkJCSAgICAgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhKTsKJiM0Mzt2b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoY29uc3Qgc3RydWN0IGtleSAqa2V5LCB1OCAqX3NlY3VyaXR5X2luZGV4LAomIzQzOwkJCSAgICB1MzIgKl9rcmI1X2VuY3R5cGUpOwogdTggcnhycGNfa2VybmVsX3F1ZXJ5X2NhbGxfc2VjdXJpdHkoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsCiAJCQkJICAgIHUxNiAqX3NlcnZpY2VfaWQsIHUzMiAqX2VuY3R5cGUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oCmluZGV4IDFiM2M0OGI1NTkxZGZkLi4wNGIwYmI2ODJiODEwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmgKQEAgLTE0OCw2ICYjNDM7MTQ4LDcgQEAgZW51bSB5ZnNfY21fb3BlcmF0aW9uIHsKIAlFTShhZnNfc2VydmVyX3RyYWNlX3VudXNlX3NsaXN0X2lzb3J0LAkmIzM0O1VOVSBpc29ydCYjMzQ7KSBcCiAJRU0oYWZzX3NlcnZlcl90cmFjZV91cGRhdGUsCQkmIzM0O1VQREFURSAgICYjMzQ7KSBcCiAJRU0oYWZzX3NlcnZlcl90cmFjZV91c2VfYnlfdXVpZCwJJiMzNDtVU0UgdXVpZCAmIzM0OykgXAomIzQzOwlFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9jYWxsLAkJJiMzNDtVU0UgY2FsbCAmIzM0OykgXAogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NtX2NhbGwsCSYjMzQ7VVNFIGNtLWNsJiMzNDspIFwKIAlFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9nZXRfY2FwcywJJiMzNDtVU0UgZ2NhcHMmIzM0OykgXAogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dpdmVfdXBfY2IsCSYjMzQ7VVNFIGd2dXBjJiMzNDspIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oCmluZGV4IDcwNGExMGRlNjY3MDA0Li5kM2EzMTQ3MzlkMDdlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oCkBAIC03OCw2ICYjNDM7NzgsNyBAQAogCUVNKHJ4Z2tfYWJvcnRfMl9zaG9ydF9lbmNkYXRhLAkJJiMzNDtyeGdrMi1zaG9ydC1lbmNkYXRhJiMzNDspCVwKIAlFTShyeGdrX2Fib3J0XzJfc2hvcnRfaGVhZGVyLAkJJiMzNDtyeGdrMi1zaG9ydC1oZHImIzM0OykJXAogCUVNKHJ4Z2tfYWJvcnRfYmFkX2tleV9udW1iZXIsCQkmIzM0O3J4Z2stYmFkLWtleS1udW0mIzM0OykJXAomIzQzOwlFTShyeGdrX2Fib3J0X2NoYWxsX2JhZF9hcHBfa2V5LAkmIzM0O3J4Z2stY2hhbGwtYmFkLWFwcC1rZXkmIzM0OylcCiAJRU0ocnhna19hYm9ydF9jaGFsbF9rZXlfZXhwaXJlZCwJJiMzNDtyeGdrLWNoYWxsLWtleS1leHAmIzM0OykJXAogCUVNKHJ4Z2tfYWJvcnRfY2hhbGxfbm9fa2V5LAkJJiMzNDtyeGdrLWNoYWxsLW5va2V5JiMzNDspCVwKIAlFTShyeGdrX2Fib3J0X2NoYWxsX3Nob3J0LAkJJiMzNDtyeGdrLWNoYWxsLXNob3J0JiMzNDspCVwKQEAgLTE0OCw2ICYjNDM7MTQ5LDcgQEAKIAlFTShyeHJwY19lcHJvdG9fd3Jvbmdfc2VjdXJpdHksCQkmIzM0O3dyb25nLXNlYyYjMzQ7KQkJXAogCUVNKHJ4cnBjX3JlY3Ztc2dfZXhjZXNzX2RhdGEsCQkmIzM0O3JlY3Ztc2ctZXhjZXNzJiMzNDspCVwKIAlFTShyeHJwY19yZWN2bXNnX3Nob3J0X2RhdGEsCQkmIzM0O3JlY3Ztc2ctc2hvcnQmIzM0OykJXAomIzQzOwlFTShyeHJwY19zZW5kbXNnX3R4X2Vycm9yLAkJJiMzNDt0eC1lcnJvciYjMzQ7KQkJXAogCUVfKHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLAkJJiMzNDtzZW5kbXNnLWxhdGUmIzM0OykKIAogI2RlZmluZSByeHJwY19jYWxsX3Bva2VfdHJhY2VzIFwKQEAgLTI2Miw3ICYjNDM7MjY0LDYgQEAKIAlFTShyeHJwY19jb25uX2ZyZWUsCQkJJiMzNDtGUkVFICAgICAgICAmIzM0OykgXAogCUVNKHJ4cnBjX2Nvbm5fZ2V0X2FjdGl2YXRlX2NhbGwsCSYjMzQ7R0VUIGFjdC1jYWxsJiMzNDspIFwKIAlFTShyeHJwY19jb25uX2dldF9jYWxsX2lucHV0LAkJJiMzNDtHRVQgaW5wLWNhbGwmIzM0OykgXAotCUVNKHJ4cnBjX2Nvbm5fZ2V0X2NoYWxsZW5nZV9pbnB1dCwJJiMzNDtHRVQgaW5wLWNoYWwmIzM0OykgXAogCUVNKHJ4cnBjX2Nvbm5fZ2V0X2Nvbm5faW5wdXQsCQkmIzM0O0dFVCBpbnAtY29ubiYjMzQ7KSBcCiAJRU0ocnhycGNfY29ubl9nZXRfaWRsZSwJCQkmIzM0O0dFVCBpZGxlICAgICYjMzQ7KSBcCiAJRU0ocnhycGNfY29ubl9nZXRfcG9rZV9hYm9ydCwJCSYjMzQ7R0VUIHBrLWFib3J0JiMzNDspIFwKQEAgLTI3NCw3ICYjNDM7Mjc1LDYgQEAKIAlFTShyeHJwY19jb25uX25ld19zZXJ2aWNlLAkJJiMzNDtORVcgc2VydmljZSAmIzM0OykgXAogCUVNKHJ4cnBjX2Nvbm5fcHV0X2NhbGwsCQkJJiMzNDtQVVQgY2FsbCAgICAmIzM0OykgXAogCUVNKHJ4cnBjX2Nvbm5fcHV0X2NhbGxfaW5wdXQsCQkmIzM0O1BVVCBpbnAtY2FsbCYjMzQ7KSBcCi0JRU0ocnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0LAkmIzM0O1BVVCBpbnAtY2hhbCYjMzQ7KSBcCiAJRU0ocnhycGNfY29ubl9wdXRfY29ubl9pbnB1dCwJCSYjMzQ7UFVUIGlucC1jb25uJiMzNDspIFwKIAlFTShyeHJwY19jb25uX3B1dF9kaXNjYXJkX2lkbGUsCQkmIzM0O1BVVCBkaXNjLWlkbCYjMzQ7KSBcCiAJRU0ocnhycGNfY29ubl9wdXRfbG9jYWxfZGVhZCwJCSYjMzQ7UFVUIGxvYy1kZWFkJiMzNDspIFwKQEAgLTM0Miw2ICYjNDM7MzQyLDcgQEAKIAlFTShyeHJwY19jYWxsX3NlZV9kaXN0cmlidXRlX2Vycm9yLAkmIzM0O1NFRSBkaXN0LWVyciYjMzQ7KSBcCiAJRU0ocnhycGNfY2FsbF9zZWVfaW5wdXQsCQkmIzM0O1NFRSBpbnB1dCAgICYjMzQ7KSBcCiAJRU0ocnhycGNfY2FsbF9zZWVfbm90aWZ5X3JlbGVhc2VkLAkmIzM0O1NFRSBuZnktcmxzZCYjMzQ7KSBcCiYjNDM7CUVNKHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9za2lwcGVkLAkmIzM0O1NFRSBuZnktc2tpcCYjMzQ7KSBcCiAJRU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZywJCSYjMzQ7U0VFIHJlY3Ztc2cgJiMzNDspIFwKIAlFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWUsCSYjMzQ7U0VFIHJlY3YtcnF1JiMzNDspIFwKIAlFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWVfZmlyc3QsICYjMzQ7U0VFIHJlY3YtcnFGJiMzNDspIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmgKaW5kZXggZDk3MzVhYmQ0Yzc5MTAuLjdkNmE1MDE1MTkzMTEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaApAQCAtNTgsMTEgJiM0Mzs1OCw3IEBAIGVudW0gcnhycGNfY21zZ190eXBlIHsKIAlSWFJQQ19UWF9MRU5HVEgJCT0gMTIsCS8qIC1zLTogVG90YWwgbGVuZ3RoIG9mIFR4IGRhdGEgKi8KIAlSWFJQQ19TRVRfQ0FMTF9USU1FT1VUCT0gMTMsCS8qIC1zLTogU2V0IG9uZSBvciBtb3JlIGNhbGwgdGltZW91dHMgKi8KIAlSWFJQQ19DSEFSR0VfQUNDRVBUCT0gMTQsCS8qIFNzLTogQ2hhcmdlIHRoZSBhY2NlcHQgcG9vbCB3aXRoIGEgdXNlciBjYWxsIElEICovCi0JUlhSUENfT09CX0lECQk9IDE1LAkvKiAtc3I6IE9PQiBtZXNzYWdlIElEICovCi0JUlhSUENfQ0hBTExFTkdFRAk9IDE2LAkvKiBDLXI6IEluZm8gb24gYSByZWNlaXZlZCBDSEFMTEVOR0UgKi8KLQlSWFJQQ19SRVNQT05ECQk9IDE3LAkvKiBDcy06IFJlc3BvbmQgdG8gYSBjaGFsbGVuZ2UgKi8KLQlSWFJQQ19SRVNQT05ERUQJCT0gMTgsCS8qIFMtcjogRGF0YSByZWNlaXZlZCBpbiBSRVNQT05TRSAqLwotCVJYUlBDX1JFU1BfUlhHS19BUFBEQVRBCT0gMTksCS8qIENzLTogUkVTUE9OU0U6IFJ4R0sgYXBwIGRhdGEgdG8gaW5jbHVkZSAqLwomIzQzOwlSWFJQQ19SRVNQT05TRV9BUFBEQVRBCT0gMjAsCS8qIENzLTogVXNlciBrZXkgaG9sZGluZyBhcHAgZGF0YSBmb3IgUkVTUE9OU0UgKi8KIAlSWFJQQ19fU1VQUE9SVEVECiB9OwogCmRpZmYgLS1naXQgYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jCmluZGV4IGMzYzhjMzI0MGVmOTQ2Li5hYTNjMDU4ZjQwOTU1OSAxMDA2NDQKLS0tIGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMKQEAgLTIwOCw2ICYjNDM7MjA4LDcgQEAgZG5zX3Jlc29sdmVyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApCiAJCWtsZWF2ZSgmIzM0OyA9IC1FTk9NRU0mIzM0Oyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7dXBheWxvYWQtJmd0O3JlZiwgMSk7CiAKIAl1cGF5bG9hZC0mZ3Q7ZGF0YWxlbiA9IHJlc3VsdF9sZW47CiAJbWVtY3B5KHVwYXlsb2FkLSZndDtkYXRhLCBkYXRhLCByZXN1bHRfbGVuKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9NYWtlZmlsZSBiL25ldC9yeHJwYy9NYWtlZmlsZQppbmRleCBmOTk0ZjlmMzBhMjlkNC4uZjdhNWUwYTU5MmVlMTMgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvTWFrZWZpbGUKQEAgLTI0LDcgJiM0MzsyNCw2IEBAIHJ4cnBjLXkgOj0gXAogCWxvY2FsX29iamVjdC5vIFwKIAltaXNjLm8gXAogCW5ldF9ucy5vIFwKLQlvb2IubyBcCiAJb3V0cHV0Lm8gXAogCXBlZXJfZXZlbnQubyBcCiAJcGVlcl9vYmplY3QubyBcCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYWZfcnhycGMuYyBiL25ldC9yeHJwYy9hZl9yeHJwYy5jCmluZGV4IDlhYjBmMjJjODgxZWM1Li45ZDVjZTFjN2FkMGQyMiAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2FmX3J4cnBjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2FmX3J4cnBjLmMKQEAgLTMxOCw2ICYjNDM7MzE4LDcgQEAgRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcHV0X3BlZXIpOwogICogQHNvY2s6IFRoZSBzb2NrZXQgb24gd2hpY2ggdG8gbWFrZSB0aGUgY2FsbAogICogQHBlZXI6IFRoZSBwZWVyIHRvIGNvbnRhY3QKICAqIEBrZXk6IFRoZSBzZWN1cml0eSBjb250ZXh0IHRvIHVzZSAoZGVmYXVsdHMgdG8gc29ja2V0IHNldHRpbmcpCiYjNDM7ICogQGFwcF9kYXRhOiBUaGUgc2VjdXJpdHkgcmVzcG9uc2UgYXBwbGljYXRpb24gZGF0YSAob3IgTlVMTCkKICAqIEB1c2VyX2NhbGxfSUQ6IFRoZSBJRCB0byB1c2UKICAqIEB0eF90b3RhbF9sZW46IFRvdGFsIGxlbmd0aCBvZiBkYXRhIHRvIHRyYW5zbWl0IGR1cmluZyB0aGUgY2FsbCAob3IgLTEpCiAgKiBAaGFyZF90aW1lb3V0OiBUaGUgbWF4aW11bSBsaWZlc3BhbiBvZiB0aGUgY2FsbCBpbiBzZWMKQEAgLTM0MCw2ICYjNDM7MzQxLDcgQEAgRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcHV0X3BlZXIpOwogc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkJCSAgIHN0cnVjdCByeHJwY19wZWVyICpwZWVyLAogCQkJCQkgICBzdHJ1Y3Qga2V5ICprZXksCiYjNDM7CQkJCQkgICBzdHJ1Y3Qga2V5ICphcHBfZGF0YSwKIAkJCQkJICAgdW5zaWduZWQgbG9uZyB1c2VyX2NhbGxfSUQsCiAJCQkJCSAgIHM2NCB0eF90b3RhbF9sZW4sCiAJCQkJCSAgIHUzMiBoYXJkX3RpbWVvdXQsCkBAIC0zNjgsNiAmIzQzOzM3MCw3IEBAIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQlrZXkgPSBOVUxMOyAvKiBhIG5vLXNlY3VyaXR5IGtleSAqLwogCiAJbWVtc2V0KCZhbXA7cCwgMCwgc2l6ZW9mKHApKTsKJiM0MzsJcC5hcHBfZGF0YQkJPSBhcHBfZGF0YTsKIAlwLnVzZXJfY2FsbF9JRAkJPSB1c2VyX2NhbGxfSUQ7CiAJcC50eF90b3RhbF9sZW4JCT0gdHhfdG90YWxfbGVuOwogCXAuaW50ZXJydXB0aWJpbGl0eQk9IGludGVycnVwdGliaWxpdHk7CkBAIC01OTUsMTAgJiM0Mzs1OTgsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbikKIAkJZmFsbHRocm91Z2g7CiAJY2FzZSBSWFJQQ19TRVJWRVJfQk9VTkQ6CiAJY2FzZSBSWFJQQ19TRVJWRVJfTElTVEVOSU5HOgotCQlpZiAobS0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19PT0IpCi0JCQlyZXQgPSByeHJwY19zZW5kbXNnX29vYihyeCwgbSwgbGVuKTsKLQkJZWxzZQotCQkJcmV0ID0gcnhycGNfZG9fc2VuZG1zZyhyeCwgbSwgbGVuKTsKJiM0MzsJCXJldCA9IHJ4cnBjX2RvX3NlbmRtc2cocngsIG0sIGxlbik7CiAJCS8qIFRoZSBzb2NrZXQgaGFzIGJlZW4gdW5sb2NrZWQgKi8KIAkJZ290byBvdXQ7CiAJZGVmYXVsdDoKQEAgLTYzMyw3ICYjNDM7NjMzLDcgQEAgc3RhdGljIGludCByeHJwY19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCQkgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbikKIHsKIAlzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLSZndDtzayk7Ci0JdW5zaWduZWQgaW50IG1pbl9zZWNfbGV2ZWwsIHZhbDsKJiM0MzsJdW5zaWduZWQgaW50IG1pbl9zZWNfbGV2ZWw7CiAJdTE2IHNlcnZpY2VfdXBncmFkZVsyXTsKIAlpbnQgcmV0OwogCkBAIC03MTAsMjMgJiM0Mzs3MTAsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAogCQljYXNlIFJYUlBDX01BTkFHRV9SRVNQT05TRToKIAkJCXJldCA9IC1FSU5WQUw7Ci0JCQlpZiAob3B0bGVuICE9IHNpemVvZih1bnNpZ25lZCBpbnQpKQotCQkJCWdvdG8gZXJyb3I7Ci0JCQlyZXQgPSAtRUlTQ09OTjsKLQkJCWlmIChyeC0mZ3Q7c2suc2tfc3RhdGUgIT0gUlhSUENfVU5CT1VORCkKLQkJCQlnb3RvIGVycm9yOwotCQkJcmV0ID0gY29weV9zYWZlX2Zyb21fc29ja3B0cigmYW1wO3ZhbCwgc2l6ZW9mKHZhbCksCi0JCQkJCQkgICAgIG9wdHZhbCwgb3B0bGVuKTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byBlcnJvcjsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlpZiAodmFsICZndDsgMSkKLQkJCQlnb3RvIGVycm9yOwotCQkJaWYgKHZhbCkKLQkJCQlzZXRfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCAmYW1wO3J4LSZndDtmbGFncyk7Ci0JCQllbHNlCi0JCQkJY2xlYXJfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCAmYW1wO3J4LSZndDtmbGFncyk7Ci0JCQlnb3RvIHN1Y2Nlc3M7CiYjNDM7CQkJZ290byBlcnJvcjsKIAogCQlkZWZhdWx0OgogCQkJYnJlYWs7CkBAIC04MzUsOCAmIzQzOzgxOSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAogCXJ4LSZndDtjYWxscyA9IFJCX1JPT1Q7CiAKIAlzcGluX2xvY2tfaW5pdCgmYW1wO3J4LSZndDtpbmNvbWluZ19sb2NrKTsKLQlza2JfcXVldWVfaGVhZF9pbml0KCZhbXA7cngtJmd0O3JlY3Ztc2dfb29icSk7Ci0JcngtJmd0O3BlbmRpbmdfb29icSA9IFJCX1JPT1Q7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtyeC0mZ3Q7c29ja19jYWxscyk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtyeC0mZ3Q7dG9fYmVfYWNjZXB0ZWQpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7cngtJmd0O3JlY3Ztc2dfcSk7CkBAIC04ODQsMjMgJiM0Mzs4NjYsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBmbGFncykKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogUHVyZ2UgdGhlIG91dC1vZi1iYW5kIHF1ZXVlLgotICovCi1zdGF0aWMgdm9pZCByeHJwY19wdXJnZV9vb2JfcXVldWUoc3RydWN0IHNvY2sgKnNrKQotewotCXN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNrKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpKSkKLQkJcnhycGNfa2VybmVsX2ZyZWVfb29iKHNrYik7Ci0Jd2hpbGUgKCFSQl9FTVBUWV9ST09UKCZhbXA7cngtJmd0O3BlbmRpbmdfb29icSkpIHsKLQkJc2tiID0gcmJfZW50cnkocngtJmd0O3BlbmRpbmdfb29icS5yYl9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiwgcmJub2RlKTsKLQkJcmJfZXJhc2UoJmFtcDtza2ItJmd0O3Jibm9kZSwgJmFtcDtyeC0mZ3Q7cGVuZGluZ19vb2JxKTsKLQkJcnhycGNfa2VybmVsX2ZyZWVfb29iKHNrYik7Ci0JfQotfQotCiAvKgogICogUnhSUEMgc29ja2V0IGRlc3RydWN0b3IKICAqLwpAQCAtOTA4LDcgJiM0Mzs4NzMsNiBAQCBzdGF0aWMgdm9pZCByeHJwY19zb2NrX2Rlc3RydWN0b3Ioc3RydWN0IHNvY2sgKnNrKQogewogCV9lbnRlcigmIzM0OyVwJiMzNDssIHNrKTsKIAotCXJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzayk7CiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSk7CiAKIAlXQVJOX09OKHJlZmNvdW50X3JlYWQoJmFtcDtzay0mZ3Q7c2tfd21lbV9hbGxvYykpOwpAQCAtOTYxLDcgJiM0Mzs5MjUsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlbGVhc2Vfc29jayhzdHJ1Y3Qgc29jayAqc2spCiAJcnhycGNfZGlzY2FyZF9wcmVhbGxvYyhyeCk7CiAJcnhycGNfcmVsZWFzZV9jYWxsc19vbl9zb2NrZXQocngpOwogCWZsdXNoX3dvcmtxdWV1ZShyeHJwY193b3JrcXVldWUpOwotCXJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzayk7CiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSk7CiAKIAlyeHJwY191bnVzZV9sb2NhbChyeC0mZ3Q7bG9jYWwsIHJ4cnBjX2xvY2FsX3VudXNlX3JlbGVhc2Vfc29jayk7CmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYXItaW50ZXJuYWwuaCBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oCmluZGV4IDg2NWYwNWZlMzdhYjk2Li44Mzg1OGM0NWZhNGE0MyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKQEAgLTE3MSw5ICYjNDM7MTcxLDYgQEAgc3RydWN0IHJ4cnBjX3NvY2sgewogCWNvbnN0IHN0cnVjdCByeHJwY19rZXJuZWxfb3BzICphcHBfb3BzOwkvKiBUYWJsZSBvZiBrZXJuZWwgYXBwIG5vdGlmaWNhdGlvbiBmdW5jcyAqLwogCXN0cnVjdCByeHJwY19sb2NhbAkqbG9jYWw7CQkvKiBsb2NhbCBlbmRwb2ludCAqLwogCXN0cnVjdCByeHJwY19iYWNrbG9nCSpiYWNrbG9nOwkvKiBQcmVhbGxvY2F0aW9uIGZvciBzZXJ2aWNlcyAqLwotCXN0cnVjdCBza19idWZmX2hlYWQJcmVjdm1zZ19vb2JxOwkvKiBPT0IgbWVzc2FnZXMgZm9yIHJlY3Ztc2cgdG8gcGljayB1cCAqLwotCXN0cnVjdCByYl9yb290CQlwZW5kaW5nX29vYnE7CS8qIE9PQiBtZXNzYWdlcyBhd2FpdGluZyB1c2Vyc3BhY2UgdG8gcmVzcG9uZCB0byAqLwotCXU2NAkJCW9vYl9pZF9jb3VudGVyOwkvKiBPT0IgbWVzc2FnZSBJRCBjb3VudGVyICovCiAJc3BpbmxvY2tfdAkJaW5jb21pbmdfbG9jazsJLyogSW5jb21pbmcgY2FsbCB2cyBzZXJ2aWNlIHNodXRkb3duIGxvY2sgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXNvY2tfY2FsbHM7CS8qIExpc3Qgb2YgY2FsbHMgb3duZWQgYnkgdGhpcyBzb2NrZXQgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXRvX2JlX2FjY2VwdGVkOwkvKiBjYWxscyBhd2FpdGluZyBhY2NlcHRhbmNlICovCkBAIC0xODQsNyAmIzQzOzE4MSw2IEBAIHN0cnVjdCByeHJwY19zb2NrIHsKIAlzdHJ1Y3QgcmJfcm9vdAkJY2FsbHM7CQkvKiBVc2VyIElEIC0mZ3Q7IGNhbGwgbWFwcGluZyAqLwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogI2RlZmluZSBSWFJQQ19TT0NLX0NPTk5FQ1RFRAkJMAkvKiBjb25uZWN0X3NyeCBpcyBzZXQgKi8KLSNkZWZpbmUgUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UJMQkvKiBVc2VyIHdhbnRzIHRvIG1hbmFnZSBSRVNQT05TRSBwYWNrZXRzICovCiAJcndsb2NrX3QJCWNhbGxfbG9jazsJLyogbG9jayBmb3IgY2FsbHMgKi8KIAl1MzIJCQltaW5fc2VjX2xldmVsOwkvKiBtaW5pbXVtIHNlY3VyaXR5IGxldmVsICovCiAjZGVmaW5lIFJYUlBDX1NFQ1VSSVRZX01BWAlSWFJQQ19TRUNVUklUWV9FTkNSWVBUCkBAIC0yNDEsNyAmIzQzOzIzNyw2IEBAIHN0cnVjdCByeHJwY19za2JfcHJpdiB7CiAJCQl1OAkJcmVhc29uOwkJLyogUmVhc29uIGZvciBhY2sgKi8KIAkJfSBhY2s7CiAJCXN0cnVjdCB7Ci0JCQlzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubjsJLyogQ29ubmVjdGlvbiByZWZlcnJlZCB0byAqLwogCQkJdW5pb24gewogCQkJCXUzMiByeGthZF9ub25jZTsKIAkJCX07CkBAIC0zMTAsMTcgJiM0MzszMDUsNiBAQCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgewogCWJvb2wgKCp2YWxpZGF0ZV9jaGFsbGVuZ2UpKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpOwogCi0JLyogRmlsbCBvdXQgdGhlIGNtc2cgZm9yIHJlY3Ztc2coKSB0byBwYXNzIG9uIGEgY2hhbGxlbmdlIHRvIHVzZXJzcGFjZS4KLQkgKiBUaGUgc2VjdXJpdHkgY2xhc3MgZ2V0cyB0byBhZGQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KLQkgKi8KLQlpbnQgKCpjaGFsbGVuZ2VfdG9fcmVjdm1zZykoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCi0JCQkJICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICAgIHN0cnVjdCBtc2doZHIgKm1zZyk7Ci0KLQkvKiBQYXJzZSBzZW5kbXNnKCkgY29udHJvbCBtZXNzYWdlIGFuZCByZXNwb25kIHRvIGNoYWxsZW5nZS4gKi8KLQlpbnQgKCpzZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLAotCQkJCQkgICAgc3RydWN0IG1zZ2hkciAqbXNnKTsKLQogCS8qIHJlc3BvbmQgdG8gYSBjaGFsbGVuZ2UgKi8KIAlpbnQgKCpyZXNwb25kX3RvX2NoYWxsZW5nZSkoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpOwpAQCAtNTE2LDYgJiM0Mzs1MDAsNyBAQCBzdHJ1Y3QgcnhycGNfYnVuZGxlIHsKIAlzdHJ1Y3QgcnhycGNfbG9jYWwJKmxvY2FsOwkJLyogUmVwcmVzZW50YXRpb24gb2YgbG9jYWwgZW5kcG9pbnQgKi8KIAlzdHJ1Y3QgcnhycGNfcGVlcgkqcGVlcjsJCS8qIFJlbW90ZSBlbmRwb2ludCAqLwogCXN0cnVjdCBrZXkJCSprZXk7CQkvKiBTZWN1cml0eSBkZXRhaWxzICovCiYjNDM7CXN0cnVjdCBrZXkJCSphcHBfZGF0YTsJLyogU2VjdXJpdHkgcmVzcG9uc2UgYXBwIGRhdGEgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXByb2NfbGluazsJLyogTGluayBpbiBuZXQtJmd0O2J1bmRsZV9wcm9jX2xpc3QgKi8KIAljb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5OwkvKiBhcHBsaWVkIHNlY3VyaXR5IG1vZHVsZSAqLwogCXJlZmNvdW50X3QJCXJlZjsKQEAgLTY0Miw2ICYjNDM7NjI3LDcgQEAgZW51bSByeHJwY19jYWxsX2ZsYWcgewogCVJYUlBDX0NBTExfVFhfTEFTVCwJCS8qIExhc3QgcGFja2V0IGluIFR4IGJ1ZmZlciAoYXQgcnh0eF90b3ApICovCiAJUlhSUENfQ0FMTF9UWF9BTExfQUNLRUQsCS8qIExhc3QgcGFja2V0IGhhcyBiZWVuIGhhcmQtYWNrZWQgKi8KIAlSWFJQQ19DQUxMX1RYX05PX01PUkUsCQkvKiBObyBtb3JlIGRhdGEgdG8gdHJhbnNtaXQgKE1TR19NT1JFIGRlYXNzZXJ0ZWQpICovCiYjNDM7CVJYUlBDX0NBTExfVFhfRVJST1IsCQkvKiBUZXJtaW5hbCBlcnJvcjsgY2FsbCBuZWVkcyBhYm9ydCAqLwogCVJYUlBDX0NBTExfU0VORF9QSU5HLAkJLyogQSBwaW5nIHdpbGwgbmVlZCB0byBiZSBzZW50ICovCiAJUlhSUENfQ0FMTF9SRVRSQU5TX1RJTUVPVVQsCS8qIFJldHJhbnNtaXNzaW9uIGR1ZSB0byB0aW1lb3V0IG9jY3VycmVkICovCiAJUlhSUENfQ0FMTF9CRUdBTl9SWF9USU1FUiwJLyogV2UgYmVnYW4gdGhlIGV4cGVjdF9yeF9ieSB0aW1lciAqLwpAQCAtNzE5LDYgJiM0Mzs3MDUsNyBAQCBzdHJ1Y3QgcnhycGNfY2FsbCB7CiAJc3RydWN0IHJ4cnBjX3NvY2sgX19yY3UJKnNvY2tldDsJLyogc29ja2V0IHJlc3BvbnNpYmxlICovCiAJc3RydWN0IHJ4cnBjX25ldAkqcnhuZXQ7CQkvKiBOZXR3b3JrIG5hbWVzcGFjZSB0byB3aGljaCBjYWxsIGJlbG9uZ3MgKi8KIAlzdHJ1Y3Qga2V5CQkqa2V5OwkJLyogU2VjdXJpdHkgZGV0YWlscyAqLwomIzQzOwlzdHJ1Y3Qga2V5CQkqYXBwX2RhdGE7CS8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovCiAJY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5ICpzZWN1cml0eTsJLyogYXBwbGllZCBzZWN1cml0eSBtb2R1bGUgKi8KIAlzdHJ1Y3QgbXV0ZXgJCXVzZXJfbXV0ZXg7CS8qIFVzZXIgYWNjZXNzIG11dGV4ICovCiAJc3RydWN0IHNvY2thZGRyX3J4cnBjCWRlc3Rfc3J4OwkvKiBEZXN0aW5hdGlvbiBhZGRyZXNzICovCkBAIC05MTMsNiAmIzQzOzkwMCw3IEBAIGVudW0gcnhycGNfY29tbWFuZCB7CiB9OwogCiBzdHJ1Y3QgcnhycGNfY2FsbF9wYXJhbXMgewomIzQzOwlzdHJ1Y3Qga2V5CQkqYXBwX2RhdGE7CS8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovCiAJczY0CQkJdHhfdG90YWxfbGVuOwkvKiBUb3RhbCBUeCBkYXRhIGxlbmd0aCAoaWYgc2VuZCBkYXRhKSAqLwogCXVuc2lnbmVkIGxvbmcJCXVzZXJfY2FsbF9JRDsJLyogVXNlciYjMzk7cyBjYWxsIElEICovCiAJc3RydWN0IHsKQEAgLTEzNzcsMTMgJiM0MzsxMzY1LDYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcnhycGNfbmV0ICpyeHJwY19uZXQoc3RydWN0IG5ldCAqbmV0KQogCXJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIHJ4cnBjX25ldF9pZCk7CiB9CiAKLS8qCi0gKiBvb2IuYwotICovCi1ib29sIHJ4cnBjX25vdGlmeV9zb2NrZXRfb29iKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXZvaWQgcnhycGNfYWRkX3BlbmRpbmdfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1pbnQgcnhycGNfc2VuZG1zZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pOwotCiAvKgogICogb3V0cHV0LmMKICAqLwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmMgYi9uZXQvcnhycGMvY2FsbF9vYmplY3QuYwppbmRleCA4MTdlZDlhY2I5MWU2MS4uOWY2MTMwZDkwYzRjYTggMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9jYWxsX29iamVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9jYWxsX29iamVjdC5jCkBAIC0yMTEsNiAmIzQzOzIxMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfYWxsb2NfY2xpZW50X2NhbGwoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LAogCWNhbGwtJmd0O2ludGVycnVwdGliaWxpdHkJPSBwLSZndDtpbnRlcnJ1cHRpYmlsaXR5OwogCWNhbGwtJmd0O3R4X3RvdGFsX2xlbgk9IHAtJmd0O3R4X3RvdGFsX2xlbjsKIAljYWxsLSZndDtrZXkJCT0ga2V5X2dldChjcC0mZ3Q7a2V5KTsKJiM0MzsJY2FsbC0mZ3Q7YXBwX2RhdGEJCT0ga2V5X2dldChwLSZndDthcHBfZGF0YSk7CiAJY2FsbC0mZ3Q7cGVlcgkJPSByeHJwY19nZXRfcGVlcihjcC0mZ3Q7cGVlciwgcnhycGNfcGVlcl9nZXRfY2FsbCk7CiAJY2FsbC0mZ3Q7bG9jYWwJCT0gcnhycGNfZ2V0X2xvY2FsKGNwLSZndDtsb2NhbCwgcnhycGNfbG9jYWxfZ2V0X2NhbGwpOwogCWNhbGwtJmd0O3NlY3VyaXR5X2xldmVsCT0gY3AtJmd0O3NlY3VyaXR5X2xldmVsOwpAQCAtNjk3LDYgJiM0Mzs2OTgsNyBAQCBzdGF0aWMgdm9pZCByeHJwY19kZXN0cm95X2NhbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXJ4cnBjX3B1dF9wZWVyKGNhbGwtJmd0O3BlZXIsIHJ4cnBjX3BlZXJfcHV0X2NhbGwpOwogCXJ4cnBjX3B1dF9sb2NhbChjYWxsLSZndDtsb2NhbCwgcnhycGNfbG9jYWxfcHV0X2NhbGwpOwogCWtleV9wdXQoY2FsbC0mZ3Q7a2V5KTsKJiM0MzsJa2V5X3B1dChjYWxsLSZndDthcHBfZGF0YSk7CiAJY2FsbF9yY3UoJmFtcDtjYWxsLSZndDtyY3UsIHJ4cnBjX3JjdV9mcmVlX2NhbGwpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jIGIvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYwppbmRleCA2YWZiNTQzNzNlYmJmOS4uNmU0MDIzMTJlMTQ1YzAgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9jYWxsX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYwpAQCAtNyw2ICYjNDM7Nyw2MSBAQAogCiAjaW5jbHVkZSAmIzM0O2FyLWludGVybmFsLmgmIzM0OwogCiYjNDM7LyoKJiM0MzsgKiBQb3N0IGEgY2FsbCBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2UuICBGdXJ0aGVyCiYjNDM7ICogbm90aWZpY2F0aW9ucyBhcmUgc3VwcHJlc3NlZCBieSBwdXR0aW5nIHJlY3Ztc2dfbGluayBvbiBhIGR1bW15IHF1ZXVlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9fcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByeHJwY19zb2NrICpyeDsKJiM0MzsJc3RydWN0IHNvY2sgKnNrOwomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoUlhSUENfQ0FMTF9SRUxFQVNFRCwgJmFtcDtjYWxsLSZndDtmbGFncykpIHsKJiM0MzsJCXJ4cnBjX3NlZV9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9yZWxlYXNlZCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwomIzQzOwlyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLSZndDtzb2NrZXQpOwomIzQzOwlzayA9ICZhbXA7cngtJmd0O3NrOwomIzQzOwlpZiAocnggJmFtcDsmYW1wOyBzay0mZ3Q7c2tfc3RhdGUgJmx0OyBSWFJQQ19DTE9TRSkgewomIzQzOwkJaWYgKGNhbGwtJmd0O25vdGlmeV9yeCkgewomIzQzOwkJCXNwaW5fbG9ja19pcnEoJmFtcDtjYWxsLSZndDtub3RpZnlfbG9jayk7CiYjNDM7CQkJY2FsbC0mZ3Q7bm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLSZndDt1c2VyX2NhbGxfSUQpOwomIzQzOwkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2NhbGwtJmd0O25vdGlmeV9sb2NrKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJc3Bpbl9sb2NrX2lycSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2spOwomIzQzOwkJCWlmIChsaXN0X2VtcHR5KCZhbXA7Y2FsbC0mZ3Q7cmVjdm1zZ19saW5rKSkgewomIzQzOwkJCQlyeHJwY19nZXRfY2FsbChjYWxsLCByeHJwY19jYWxsX2dldF9ub3RpZnlfc29ja2V0KTsKJiM0MzsJCQkJbGlzdF9hZGRfdGFpbCgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaywgJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKTsKJiM0MzsJCQl9CiYjNDM7CQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cngtJmd0O3JlY3Ztc2dfbG9jayk7CiYjNDM7CiYjNDM7CQkJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKJiM0MzsJCQkJX2RlYnVnKCYjMzQ7Y2FsbCAlcHMmIzM0Oywgc2stJmd0O3NrX2RhdGFfcmVhZHkpOwomIzQzOwkJCQlzay0mZ3Q7c2tfZGF0YV9yZWFkeShzayk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXIKJiM0MzsgKiBub3RpZmljYXRpb25zIGFyZSBzdXBwcmVzc2VkIGJ5IHB1dHRpbmcgcmVjdm1zZ19saW5rIG9uIGEgZHVtbXkgcXVldWUuCiYjNDM7ICovCiYjNDM7dm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKQomIzQzO3sKJiM0MzsJaWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkpIHsKJiM0MzsJCXJ4cnBjX3NlZV9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9za2lwcGVkKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlfX3J4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7CiYjNDM7fQomIzQzOwogLyoKICAqIFRyYW5zaXRpb24gYSBjYWxsIHRvIHRoZSBjb21wbGV0ZSBzdGF0ZS4KICAqLwpAQCAtMjUsNyAmIzQzOzgwLDcgQEAgYm9vbCByeHJwY19zZXRfY2FsbF9jb21wbGV0aW9uKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCXJ4cnBjX3NldF9jYWxsX3N0YXRlKGNhbGwsIFJYUlBDX0NBTExfQ09NUExFVEUpOwogCXRyYWNlX3J4cnBjX2NhbGxfY29tcGxldGUoY2FsbCk7CiAJd2FrZV91cCgmYW1wO2NhbGwtJmd0O3dhaXRxKTsKLQlyeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpOwomIzQzOwlfX3J4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7CiAJcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX2NsaWVudC5jIGIvbmV0L3J4cnBjL2Nvbm5fY2xpZW50LmMKaW5kZXggNDg1MTlmMGRlMTg1MzkuLmRkNzk2MzBkMzA2Njk4IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvY29ubl9jbGllbnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY29ubl9jbGllbnQuYwpAQCAtODEsNiAmIzQzOzgxLDcgQEAgc3RhdGljIHN0cnVjdCByeHJwY19idW5kbGUgKnJ4cnBjX2FsbG9jX2J1bmRsZShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwKIAkJYnVuZGxlLSZndDtsb2NhbAkJPSBjYWxsLSZndDtsb2NhbDsKIAkJYnVuZGxlLSZndDtwZWVyCQk9IHJ4cnBjX2dldF9wZWVyKGNhbGwtJmd0O3BlZXIsIHJ4cnBjX3BlZXJfZ2V0X2J1bmRsZSk7CiAJCWJ1bmRsZS0mZ3Q7a2V5CQk9IGtleV9nZXQoY2FsbC0mZ3Q7a2V5KTsKJiM0MzsJCWJ1bmRsZS0mZ3Q7YXBwX2RhdGEJPSBrZXlfZ2V0KGNhbGwtJmd0O2FwcF9kYXRhKTsKIAkJYnVuZGxlLSZndDtzZWN1cml0eQk9IGNhbGwtJmd0O3NlY3VyaXR5OwogCQlidW5kbGUtJmd0O2V4Y2x1c2l2ZQk9IHRlc3RfYml0KFJYUlBDX0NBTExfRVhDTFVTSVZFLCAmYW1wO2NhbGwtJmd0O2ZsYWdzKTsKIAkJYnVuZGxlLSZndDt1cGdyYWRlCQk9IHRlc3RfYml0KFJYUlBDX0NBTExfVVBHUkFERSwgJmFtcDtjYWxsLSZndDtmbGFncyk7CkBAIC0xMTgsNiAmIzQzOzExOSw3IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX2ZyZWVfYnVuZGxlKHN0cnVjdCByeHJwY19idW5kbGUgKmJ1bmRsZSkKIAl3cml0ZV91bmxvY2soJmFtcDtidW5kbGUtJmd0O2xvY2FsLSZndDtyeG5ldC0mZ3Q7Y29ubl9sb2NrKTsKIAlyeHJwY19wdXRfcGVlcihidW5kbGUtJmd0O3BlZXIsIHJ4cnBjX3BlZXJfcHV0X2J1bmRsZSk7CiAJa2V5X3B1dChidW5kbGUtJmd0O2tleSk7CiYjNDM7CWtleV9wdXQoYnVuZGxlLSZndDthcHBfZGF0YSk7CiAJa2ZyZWUoYnVuZGxlKTsKIH0KIApAQCAtMjc0LDYgJiM0MzsyNzYsNyBAQCBpbnQgcnhycGNfbG9va191cF9idW5kbGUoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIGdmcF90IGdmcCkKICNkZWZpbmUgY21wKFgsIFkpICgobG9uZykoWCkgLSAobG9uZykoWSkpCiAJCWRpZmYgPSAoY21wKGJ1bmRsZS0mZ3Q7cGVlciwgY2FsbC0mZ3Q7cGVlcikgPzoKIAkJCWNtcChidW5kbGUtJmd0O2tleSwgY2FsbC0mZ3Q7a2V5KSA/OgomIzQzOwkJCWNtcChidW5kbGUtJmd0O2FwcF9kYXRhLCBjYWxsLSZndDthcHBfZGF0YSkgPzoKIAkJCWNtcChidW5kbGUtJmd0O3NlY3VyaXR5X2xldmVsLCBjYWxsLSZndDtzZWN1cml0eV9sZXZlbCkgPzoKIAkJCWNtcChidW5kbGUtJmd0O3VwZ3JhZGUsIHVwZ3JhZGUpKTsKICN1bmRlZiBjbXAKQEAgLTMwMyw2ICYjNDM7MzA2LDcgQEAgaW50IHJ4cnBjX2xvb2tfdXBfYnVuZGxlKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBnZnBfdCBnZnApCiAjZGVmaW5lIGNtcChYLCBZKSAoKGxvbmcpKFgpIC0gKGxvbmcpKFkpKQogCQlkaWZmID0gKGNtcChidW5kbGUtJmd0O3BlZXIsIGNhbGwtJmd0O3BlZXIpID86CiAJCQljbXAoYnVuZGxlLSZndDtrZXksIGNhbGwtJmd0O2tleSkgPzoKJiM0MzsJCQljbXAoYnVuZGxlLSZndDthcHBfZGF0YSwgY2FsbC0mZ3Q7YXBwX2RhdGEpID86CiAJCQljbXAoYnVuZGxlLSZndDtzZWN1cml0eV9sZXZlbCwgY2FsbC0mZ3Q7c2VjdXJpdHlfbGV2ZWwpID86CiAJCQljbXAoYnVuZGxlLSZndDt1cGdyYWRlLCB1cGdyYWRlKSk7CiAjdW5kZWYgY21wCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY29ubl9ldmVudC5jIGIvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuYwppbmRleCA2MTFjNzkwYmM2ZDBjZS4uOTE0NmI5ZDRjMmFjNTAgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9jb25uX2V2ZW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuYwpAQCAtMjc5LDEwICYjNDM7Mjc5LDcgQEAgc3RhdGljIGludCByeHJwY19wcm9jZXNzX2V2ZW50KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogCiAJc3dpdGNoIChzcC0mZ3Q7aGRyLnR5cGUpIHsKIAljYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX0NIQUxMRU5HRToKLQkJcmV0ID0gY29ubi0mZ3Q7c2VjdXJpdHktJmd0O3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNvbm4sIHNrYik7Ci0JCXNwLSZndDtjaGFsbC5jb25uID0gTlVMTDsKLQkJcnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTsKLQkJcmV0dXJuIHJldDsKJiM0MzsJCXJldHVybiBjb25uLSZndDtzZWN1cml0eS0mZ3Q7cmVzcG9uZF90b19jaGFsbGVuZ2UoY29ubiwgc2tiKTsKIAogCWNhc2UgUlhSUENfUEFDS0VUX1RZUEVfUkVTUE9OU0U6CiAJCXNwaW5fbG9ja19pcnEoJmFtcDtjb25uLSZndDtzdGF0ZV9sb2NrKTsKQEAgLTQyNSw2NiAmIzQzOzQyMiw2IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJcnhycGNfcXVldWVfY29ubihjb25uLCByeHJwY19jb25uX3F1ZXVlX3J4X3dvcmspOwogfQogCi0vKgotICogUG9zdCBhIENIQUxMRU5HRSBwYWNrZXQgdG8gdGhlIHNvY2tldCBvZiBvbmUgb2YgYSBjb25uZWN0aW9uJiMzOTtzIGNhbGxzIHNvIHRoYXQKLSAqIGl0IGNhbiBnZXQgYXBwbGljYXRpb24gZGF0YSB0byBpbmNsdWRlIGluIHRoZSBwYWNrZXQsIHBvc3NpYmx5IHF1ZXJ5aW5nCi0gKiB1c2Vyc3BhY2UuCi0gKi8KLXN0YXRpYyBib29sIHJ4cnBjX3Bvc3RfY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAotCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTsKLQlzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCA9IE5VTEw7Ci0Jc3RydWN0IHJ4cnBjX3NvY2sgKnJ4OwotCWJvb2wgcmVzcG9uZCA9IGZhbHNlLCBxdWV1ZWQgPSBmYWxzZTsKLQotCXNwLSZndDtjaGFsbC5jb25uID0KLQkJcnhycGNfZ2V0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9nZXRfY2hhbGxlbmdlX2lucHV0KTsKLQotCWlmICghY29ubi0mZ3Q7c2VjdXJpdHktJmd0O2NoYWxsZW5nZV90b19yZWN2bXNnKSB7Ci0JCXJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGNvbm4tJmd0O2NoYW5uZWxzKTsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKGNvbm4tJmd0O2NoYW5uZWxzW2ldLmNhbGwpIHsKLQkJCWNhbGwgPSBjb25uLSZndDtjaGFubmVsc1tpXS5jYWxsOwotCQkJcnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC0mZ3Q7c29ja2V0KTsKLQkJCWlmICghcngpIHsKLQkJCQljYWxsID0gTlVMTDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJcmVzcG9uZCA9IHRydWU7Ci0JCQlpZiAodGVzdF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsICZhbXA7cngtJmd0O2ZsYWdzKSkKLQkJCQlicmVhazsKLQkJCWNhbGwgPSBOVUxMOwotCQl9Ci0JfQotCi0JaWYgKCFyZXNwb25kKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyeHJwY19wdXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQpOwotCQlzcC0mZ3Q7Y2hhbGwuY29ubiA9IE5VTEw7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoY2FsbCkKLQkJcXVldWVkID0gcnhycGNfbm90aWZ5X3NvY2tldF9vb2IoY2FsbCwgc2tiKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQlpZiAoY2FsbCAmYW1wOyZhbXA7ICFxdWV1ZWQpIHsKLQkJcnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTsKLQkJc3AtJmd0O2NoYWxsLmNvbm4gPSBOVUxMOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKCFjYWxsKQotCQlyeHJwY19wb3N0X3BhY2tldF90b19jb25uKGNvbm4sIHNrYik7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KIC8qCiAgKiBJbnB1dCBhIGNvbm5lY3Rpb24tbGV2ZWwgcGFja2V0LgogICovCkBAIC01MTMsNyAmIzQzOzQ1MCw4IEBAIGJvb2wgcnhycGNfaW5wdXRfY29ubl9wYWNrZXQoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpCiAJCX0KIAkJaWYgKCFjb25uLSZndDtzZWN1cml0eS0mZ3Q7dmFsaWRhdGVfY2hhbGxlbmdlKGNvbm4sIHNrYikpCiAJCQlyZXR1cm4gZmFsc2U7Ci0JCXJldHVybiByeHJwY19wb3N0X2NoYWxsZW5nZShjb25uLCBza2IpOwomIzQzOwkJcnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihjb25uLCBza2IpOwomIzQzOwkJcmV0dXJuIHRydWU7CiAKIAljYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX1JFU1BPTlNFOgogCQlpZiAocnhycGNfaXNfY29ubl9hYm9ydGVkKGNvbm4pKSB7CmRpZmYgLS1naXQgYS9uZXQvcnhycGMvaW5zZWN1cmUuYyBiL25ldC9yeHJwYy9pbnNlY3VyZS5jCmluZGV4IDBiMzkwNDZiZGM2MTZhLi5jMDgzYzgyYzRlN2YzZiAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2luc2VjdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2luc2VjdXJlLmMKQEAgLTQ3LDEyICYjNDM7NDcsNiBAQCBzdGF0aWMgYm9vbCBub25lX3ZhbGlkYXRlX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCBub25lX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkJICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KIHN0YXRpYyBpbnQgbm9uZV92ZXJpZnlfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQkJc3RydWN0IHNrX2J1ZmYgKnJlc3BvbnNlX3NrYiwKIAkJCQl2b2lkICpyZXNwb25zZSwgdW5zaWduZWQgaW50IGxlbikKQEAgLTg4LDcgJiM0Mzs4Miw2IEBAIGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeHJwY19ub19zZWN1cml0eSA9IHsKIAkuc2VjdXJlX3BhY2tldAkJCT0gbm9uZV9zZWN1cmVfcGFja2V0LAogCS52ZXJpZnlfcGFja2V0CQkJPSBub25lX3ZlcmlmeV9wYWNrZXQsCiAJLnZhbGlkYXRlX2NoYWxsZW5nZQkJPSBub25lX3ZhbGlkYXRlX2NoYWxsZW5nZSwKLQkuc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZQk9IG5vbmVfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSwKIAkudmVyaWZ5X3Jlc3BvbnNlCQk9IG5vbmVfdmVyaWZ5X3Jlc3BvbnNlLAogCS5jbGVhcgkJCQk9IG5vbmVfY2xlYXIsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2tleS5jIGIvbmV0L3J4cnBjL2tleS5jCmluZGV4IGEwYWE3OGQ4OTI4OTdmLi4xNmJhYjcyZTZmMDc3NyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2tleS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9rZXkuYwpAQCAtODkzLDMgJiM0Mzs4OTMsNDAgQEAgc3RhdGljIGxvbmcgcnhycGNfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksCiAJX2xlYXZlKCYjMzQ7ID0gJXp1JiMzNDssIHNpemUpOwogCXJldHVybiBzaXplOwogfQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkgLSBRdWVyeSBwYXJhbWV0ZXJzIGZyb20gYW4gcnhycGMga2V5CiYjNDM7ICogQGtleTogVGhlIGtleSB0byBxdWVyeQomIzQzOyAqIEBfc2VjdXJpdHlfaW5kZXg6IFdoZXJlIHRvIHJldHVybiB0aGUgc2VjdXJpdHkgaW5kZXgKJiM0MzsgKiBAX2tyYjVfZW5jdHlwZTogV2hlcmUgdG8gcmV0dXJuIHRoZSBrcmI1IGVuY3J5cHRpb24gdHlwZSBpZiBhcHBsaWNhYmxlCiYjNDM7ICoKJiM0MzsgKiBRdWVyeSBhbiByeHJwYyBhdXRoZW50aWNhdGlvbiBrZXksIGV4dHJhY3RpbmcgdGhlIHNlY3VyaXR5IGluZGV4IGZyb20gdGhlCiYjNDM7ICogZmlyc3QgdG9rZW4gdGhlcmVpbi4KJiM0MzsgKi8KJiM0Mzt2b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoY29uc3Qgc3RydWN0IGtleSAqa2V5LCB1OCAqX3NlY3VyaXR5X2luZGV4LAomIzQzOwkJCSAgICB1MzIgKl9rcmI1X2VuY3R5cGUpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnhycGNfa2V5X3Rva2VuICp0b2tlbjsKJiM0MzsKJiM0MzsJdG9rZW4gPSBrZXktJmd0O3BheWxvYWQuZGF0YVswXTsKJiM0MzsJaWYgKCF0b2tlbikgewomIzQzOwkJKl9zZWN1cml0eV9pbmRleCA9IDA7CiYjNDM7CQkqX2tyYjVfZW5jdHlwZSA9IDA7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJKl9zZWN1cml0eV9pbmRleCA9IHRva2VuLSZndDtzZWN1cml0eV9pbmRleDsKJiM0MzsJc3dpdGNoICh0b2tlbi0mZ3Q7c2VjdXJpdHlfaW5kZXgpIHsKJiM0MzsJY2FzZSBSWFJQQ19TRUNVUklUWV9SWEtBRDoKJiM0MzsJCSpfa3JiNV9lbmN0eXBlID0gMDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOgomIzQzOwkJKl9rcmI1X2VuY3R5cGUgPSB0b2tlbi0mZ3Q7cnhnay0mZ3Q7ZW5jdHlwZTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJV0FSTl9PTl9PTkNFKDEpOwomIzQzOwkJKl9rcmI1X2VuY3R5cGUgPSAwOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfa2V5KTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9vb2IuYyBiL25ldC9yeHJwYy9vb2IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgwZWUyNDg3ZDA5NDEuLjAwMDAwMDAwMDAwMDAwCi0tLSBhL25ldC9yeHJwYy9vb2IuYwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDM4NyAmIzQzOzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKLS8qIE91dCBvZiBiYW5kIG1lc3NhZ2UgaGFuZGxpbmcgKGUuZy4gY2hhbGxlbmdlLXJlc3BvbnNlKQotICoKLSAqIENvcHlyaWdodCAoQykgMjAyNSBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAmIzM0OzogJiMzNDsgZm10Ci0KLSNpbmNsdWRlICZsdDtsaW51eC9uZXQuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9nZnAuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9zaWduYWwuaCZndDsKLSNpbmNsdWRlICZsdDtuZXQvc29jay5oJmd0OwotI2luY2x1ZGUgJmx0O25ldC9hZl9yeHJwYy5oJmd0OwotI2luY2x1ZGUgJiMzNDthci1pbnRlcm5hbC5oJiMzNDsKLQotZW51bSByeHJwY19vb2JfY29tbWFuZCB7Ci0JUlhSUENfT09CX0NNRF9VTlNFVCwKLQlSWFJQQ19PT0JfQ01EX1JFU1BPTkQsCi19IF9fbW9kZShieXRlKTsKLQotc3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgewotCXU2NAkJCW9vYl9pZDsJCS8qIElEIG51bWJlciBvZiBtZXNzYWdlIGlmIHJlcGx5ICovCi0JczMyCQkJYWJvcnRfY29kZTsKLQllbnVtIHJ4cnBjX29vYl9jb21tYW5kCWNvbW1hbmQ7Ci0JYm9vbAkJCWhhdmVfb29iX2lkOjE7Ci19OwotCi0vKgotICogUG9zdCBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZQotICogYXNzb2NpYXRlZCB3aXRoIGEgcmVmZXJlbmNlIGNhbGwuCi0gKi8KLWJvb2wgcnhycGNfbm90aWZ5X3NvY2tldF9vb2Ioc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpOwotCXN0cnVjdCByeHJwY19zb2NrICpyeDsKLQlzdHJ1Y3Qgc29jayAqc2s7Ci0JYm9vbCBxdWV1ZWQgPSBmYWxzZTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQotCXJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtJmd0O3NvY2tldCk7Ci0JaWYgKHJ4KSB7Ci0JCXNrID0gJmFtcDtyeC0mZ3Q7c2s7Ci0JCXNwaW5fbG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKLQotCQlpZiAoc2stJmd0O3NrX3N0YXRlICZsdDsgUlhSUENfQ0xPU0UpIHsKLQkJCXNrYi0mZ3Q7c2tiX21zdGFtcF9ucyA9IHJ4LSZndDtvb2JfaWRfY291bnRlciYjNDM7JiM0Mzs7Ci0JCQlyeHJwY19nZXRfc2tiKHNrYiwgcnhycGNfc2tiX2dldF9wb3N0X29vYik7Ci0JCQlza2JfcXVldWVfdGFpbCgmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEsIHNrYik7Ci0JCQlxdWV1ZWQgPSB0cnVlOwotCi0JCQl0cmFjZV9yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwtJmd0O2RlYnVnX2lkLCBzcC0mZ3Q7aGRyLnNlcmlhbCk7Ci0JCQlpZiAocngtJmd0O2FwcF9vcHMpCi0JCQkJcngtJmd0O2FwcF9vcHMtJmd0O25vdGlmeV9vb2Ioc2ssIHNrYik7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKLQkJaWYgKHF1ZXVlZCAmYW1wOyZhbXA7ICFyeC0mZ3Q7YXBwX29wcyAmYW1wOyZhbXA7ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpCi0JCQlzay0mZ3Q7c2tfZGF0YV9yZWFkeShzayk7Ci0JfQotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIHF1ZXVlZDsKLX0KLQotLyoKLSAqIExvY2F0ZSB0aGUgT09CIG1lc3NhZ2UgdG8gcmVzcG9uZCB0byBieSBpdHMgSUQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfZmluZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHU2NCBvb2JfaWQpCi17Ci0Jc3RydWN0IHJiX25vZGUgKnA7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCXAgPSByeC0mZ3Q7cGVuZGluZ19vb2JxLnJiX25vZGU7Ci0Jd2hpbGUgKHApIHsKLQkJc2tiID0gcmJfZW50cnkocCwgc3RydWN0IHNrX2J1ZmYsIHJibm9kZSk7Ci0KLQkJaWYgKG9vYl9pZCAmbHQ7IHNrYi0mZ3Q7c2tiX21zdGFtcF9ucykKLQkJCXAgPSBwLSZndDtyYl9sZWZ0OwotCQllbHNlIGlmIChvb2JfaWQgJmd0OyBza2ItJmd0O3NrYl9tc3RhbXBfbnMpCi0JCQlwID0gcC0mZ3Q7cmJfcmlnaHQ7Ci0JCWVsc2UKLQkJCXJldHVybiBza2I7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBBZGQgYW4gT09CIG1lc3NhZ2UgaW50byB0aGUgcGVuZGluZy1yZXNwb25zZSBzZXQuICBXZSBhbHdheXMgYXNzaWduIHRoZSBuZXh0Ci0gKiB2YWx1ZSBmcm9tIGEgNjQtYml0IGNvdW50ZXIgdG8gdGhlIG9vYl9pZCwgc28ganVzdCBhc3N1bWUgd2UmIzM5O3JlIGFsd2F5cyBnb2luZwotICogdG8gYmUgb24gdGhlIHJpZ2h0LWhhbmQgZWRnZSBvZiB0aGUgdHJlZSBhbmQgdGhhdCB0aGUgY291bnRlciB3b24mIzM5O3Qgd3JhcC4KLSAqIFRoZSB0cmVlIGlzIGFsc28gZ2l2ZW4gYSByZWYgdG8gdGhlIG1lc3NhZ2UuCi0gKi8KLXZvaWQgcnhycGNfYWRkX3BlbmRpbmdfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqKnBwID0gJmFtcDtyeC0mZ3Q7cGVuZGluZ19vb2JxLnJiX25vZGUsICpwID0gTlVMTDsKLQotCXdoaWxlICgqcHApIHsKLQkJcCA9ICpwcDsKLQkJcHAgPSAmYW1wOygqcHApLSZndDtyYl9yaWdodDsKLQl9Ci0KLQlyYl9saW5rX25vZGUoJmFtcDtza2ItJmd0O3Jibm9kZSwgcCwgcHApOwotCXJiX2luc2VydF9jb2xvcigmYW1wO3NrYi0mZ3Q7cmJub2RlLCAmYW1wO3J4LSZndDtwZW5kaW5nX29vYnEpOwotfQotCi0vKgotICogRXh0cmFjdCBjb250cm9sIG1lc3NhZ2VzIGZyb20gdGhlIHNlbmRtc2coKSBjb250cm9sIGJ1ZmZlci4KLSAqLwotc3RhdGljIGludCByeHJwY19zZW5kbXNnX29vYl9jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgKnApCi17Ci0Jc3RydWN0IGNtc2doZHIgKmNtc2c7Ci0JaW50IGxlbjsKLQotCWlmIChtc2ctJmd0O21zZ19jb250cm9sbGVuID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZm9yX2VhY2hfY21zZ2hkcihjbXNnLCBtc2cpIHsKLQkJaWYgKCFDTVNHX09LKG1zZywgY21zZykpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlsZW4gPSBjbXNnLSZndDtjbXNnX2xlbiAtIHNpemVvZihzdHJ1Y3QgY21zZ2hkcik7Ci0JCV9kZWJ1ZygmIzM0O0NNU0cgJWQsICVkLCAlZCYjMzQ7LAotCQkgICAgICAgY21zZy0mZ3Q7Y21zZ19sZXZlbCwgY21zZy0mZ3Q7Y21zZ190eXBlLCBsZW4pOwotCi0JCWlmIChjbXNnLSZndDtjbXNnX2xldmVsICE9IFNPTF9SWFJQQykKLQkJCWNvbnRpbnVlOwotCi0JCXN3aXRjaCAoY21zZy0mZ3Q7Y21zZ190eXBlKSB7Ci0JCWNhc2UgUlhSUENfT09CX0lEOgotCQkJaWYgKGxlbiAhPSBzaXplb2YocC0mZ3Q7b29iX2lkKSB8fCBwLSZndDtoYXZlX29vYl9pZCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCW1lbWNweSgmYW1wO3AtJmd0O29vYl9pZCwgQ01TR19EQVRBKGNtc2cpLCBzaXplb2YocC0mZ3Q7b29iX2lkKSk7Ci0JCQlwLSZndDtoYXZlX29vYl9pZCA9IHRydWU7Ci0JCQlicmVhazsKLQkJY2FzZSBSWFJQQ19SRVNQT05EOgotCQkJaWYgKHAtJmd0O2NvbW1hbmQgIT0gUlhSUENfT09CX0NNRF9VTlNFVCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXAtJmd0O2NvbW1hbmQgPSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQ7Ci0JCQlicmVhazsKLQkJY2FzZSBSWFJQQ19BQk9SVDoKLQkJCWlmIChsZW4gIT0gc2l6ZW9mKHAtJmd0O2Fib3J0X2NvZGUpIHx8IHAtJmd0O2Fib3J0X2NvZGUpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQltZW1jcHkoJmFtcDtwLSZndDthYm9ydF9jb2RlLCBDTVNHX0RBVEEoY21zZyksIHNpemVvZihwLSZndDthYm9ydF9jb2RlKSk7Ci0JCQlpZiAocC0mZ3Q7YWJvcnRfY29kZSA9PSAwKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCWNhc2UgUlhSUENfUkVTUF9SWEdLX0FQUERBVEE6Ci0JCQlpZiAocC0mZ3Q7Y29tbWFuZCAhPSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0Jc3dpdGNoIChwLSZndDtjb21tYW5kKSB7Ci0JY2FzZSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQ6Ci0JCWlmICghcC0mZ3Q7aGF2ZV9vb2JfaWQpCi0JCQlyZXR1cm4gLUVCQURTTFQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogQWxsb3cgdXNlcnNwYWNlIHRvIHJlc3BvbmQgdG8gYW4gT09CIHVzaW5nIHNlbmRtc2coKS4KLSAqLwotc3RhdGljIGludCByeHJwY19yZXNwb25kX3RvX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsCi0JCQkJc3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgKnAsCi0JCQkJc3RydWN0IG1zZ2hkciAqbXNnKQotewotCXN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uOwotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3A7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgcmV0OwotCi0Jc2tiID0gcnhycGNfZmluZF9wZW5kaW5nX29vYihyeCwgcC0mZ3Q7b29iX2lkKTsKLQlpZiAoc2tiKQotCQlyYl9lcmFzZSgmYW1wO3NrYi0mZ3Q7cmJub2RlLCAmYW1wO3J4LSZndDtwZW5kaW5nX29vYnEpOwotCXJlbGVhc2Vfc29jaygmYW1wO3J4LSZndDtzayk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRUJBRFNMVDsKLQotCXNwID0gcnhycGNfc2tiKHNrYik7Ci0KLQlzd2l0Y2ggKHAtJmd0O2NvbW1hbmQpIHsKLQljYXNlIFJYUlBDX09PQl9DTURfUkVTUE9ORDoKLQkJcmV0ID0gLUVQUk9UTzsKLQkJaWYgKHNrYi0mZ3Q7bWFyayAhPSBSWFJQQ19PT0JfQ0hBTExFTkdFKQotCQkJYnJlYWs7Ci0JCWNvbm4gPSBzcC0mZ3Q7Y2hhbGwuY29ubjsKLQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCWlmICghY29ubi0mZ3Q7c2VjdXJpdHktJmd0O3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UpCi0JCQlicmVhazsKLQkJaWYgKHAtJmd0O2Fib3J0X2NvZGUpIHsKLQkJCXJ4cnBjX2Fib3J0X2Nvbm4oY29ubiwgTlVMTCwgcC0mZ3Q7YWJvcnRfY29kZSwgLUVDT05OQUJPUlRFRCwKLQkJCQkJIHJ4cnBjX2Fib3J0X3Jlc3BvbnNlX3NlbmRtc2cpOwotCQkJcmV0ID0gMDsKLQkJfSBlbHNlIHsKLQkJCXJldCA9IGNvbm4tJmd0O3NlY3VyaXR5LSZndDtzZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHNrYiwgbXNnKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKHNrYi0mZ3Q7bWFyaykgewotCWNhc2UgUlhSUENfT09CX0NIQUxMRU5HRToKLQkJcnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtJmd0O2NoYWxsLmNvbm4sIHJ4cnBjX2Nvbm5fcHV0X29vYik7Ci0JCWJyZWFrOwotCX0KLQlyeHJwY19mcmVlX3NrYihza2IsIHJ4cnBjX3NrYl9wdXRfb29iKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogU2VuZCBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlIG9yIHJlc3BvbmQgdG8gYSByZWNlaXZlZCBvdXQtb2YtYmFuZCBtZXNzYWdlLgotICogLSBjYWxsZXIgZ2l2ZXMgdXMgdGhlIHNvY2tldCBsb2NrCi0gKiAtIHRoZSBzb2NrZXQgbWF5IGJlIGVpdGhlciBhIGNsaWVudCBzb2NrZXQgb3IgYSBzZXJ2ZXIgc29ja2V0Ci0gKi8KLWludCByeHJwY19zZW5kbXNnX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyBwID0ge307Ci0JaW50IHJldDsKLQotCV9lbnRlcigmIzM0OyYjMzQ7KTsKLQotCXJldCA9IHJ4cnBjX3NlbmRtc2dfb29iX2Ntc2cobXNnLCAmYW1wO3ApOwotCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIGVycm9yX3JlbGVhc2Vfc29jazsKLQotCWlmIChwLmhhdmVfb29iX2lkKQotCQlyZXR1cm4gcnhycGNfcmVzcG9uZF90b19vb2IocngsICZhbXA7cCwgbXNnKTsKLQotCXJlbGVhc2Vfc29jaygmYW1wO3J4LSZndDtzayk7Ci0KLQlzd2l0Y2ggKHAuY29tbWFuZCkgewotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQotCV9sZWF2ZSgmIzM0OyA9ICVkJiMzNDssIHJldCk7Ci0JcmV0dXJuIHJldDsKLQotZXJyb3JfcmVsZWFzZV9zb2NrOgotCXJlbGVhc2Vfc29jaygmYW1wO3J4LSZndDtzayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiByeHJwY19rZXJuZWxfcXVlcnlfb29iIC0gUXVlcnkgdGhlIHBhcmFtZXRlcnMgb2YgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZQotICogQG9vYjogVGhlIG1lc3NhZ2UgdG8gcXVlcnkKLSAqIEBfcGVlcjogV2hlcmUgdG8gcmV0dXJuIHRoZSBwZWVyIHJlY29yZAotICogQF9wZWVyX2FwcGRhdGE6IFRoZSBhcHBsaWNhdGlvbiBkYXRhIGF0dGFjaGVkIHRvIGEgcGVlciByZWNvcmQKLSAqCi0gKiBFeHRyYWN0IHVzZWZ1bCBwYXJhbWV0ZXJzIGZyb20gYW4gb3V0LW9mLWJhbmQgbWVzc2FnZS4gIFRoZSBzb3VyY2UgcGVlcgotICogcGFyYW1ldGVycyBhcmUgcmV0dXJuZWQgdGhyb3VnaCB0aGUgYXJndW1lbnQgbGlzdCBhbmQgdGhlIG1lc3NhZ2UgdHlwZSBpcwotICogcmV0dXJuZWQuCi0gKgotICogUmV0dXJuOgotICogKiAlUlhSUENfT09CX0NIQUxMRU5HRSAtIENoYWxsZW5nZSB3YW50aW5nIGEgcmVzcG9uc2UuCi0gKi8KLWVudW0gcnhycGNfb29iX3R5cGUgcnhycGNfa2VybmVsX3F1ZXJ5X29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iLAotCQkJCQkgICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLAotCQkJCQkgICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhKQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Iob29iKTsKLQllbnVtIHJ4cnBjX29vYl90eXBlIHR5cGUgPSBvb2ItJmd0O21hcms7Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6Ci0JCSpfcGVlcgkJPSBzcC0mZ3Q7Y2hhbGwuY29ubi0mZ3Q7cGVlcjsKLQkJKl9wZWVyX2FwcGRhdGEJPSBzcC0mZ3Q7Y2hhbGwuY29ubi0mZ3Q7cGVlci0mZ3Q7YXBwX2RhdGE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVdBUk5fT05fT05DRSgxKTsKLQkJKl9wZWVyCQk9IE5VTEw7Ci0JCSpfcGVlcl9hcHBkYXRhCT0gMDsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHR5cGU7Ci19Ci1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2IpOwotCi0vKioKLSAqIHJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYiAtIERlcXVldWUgYW5kIHJldHVybiB0aGUgZnJvbnQgT09CIG1lc3NhZ2UKLSAqIEBzb2NrOiBUaGUgc29ja2V0IHRvIHF1ZXJ5Ci0gKiBAX3R5cGU6IFdoZXJlIHRvIHJldHVybiB0aGUgbWVzc2FnZSB0eXBlCi0gKgotICogRGVxdWV1ZSB0aGUgZnJvbnQgT09CIG1lc3NhZ2UsIGlmIHRoZXJlIGlzIG9uZSwgYW5kIHJldHVybiBpdCBhbmQKLSAqIGl0cyB0eXBlLgotICoKLSAqIFJldHVybjogVGhlIHNrX2J1ZmYgcmVwcmVzZW50aW5nIHRoZSBPT0IgbWVzc2FnZSBvciAlTlVMTCBpZiB0aGUgcXVldWUgd2FzCi0gKiBlbXB0eS4KLSAqLwotc3RydWN0IHNrX2J1ZmYgKnJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCQkJCQkgZW51bSByeHJwY19vb2JfdHlwZSAqX3R5cGUpCi17Ci0Jc3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay0mZ3Q7c2spOwotCXN0cnVjdCBza19idWZmICpvb2I7Ci0KLQlvb2IgPSBza2JfZGVxdWV1ZSgmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpOwotCWlmIChvb2IpCi0JCSpfdHlwZSA9IG9vYi0mZ3Q7bWFyazsKLQlyZXR1cm4gb29iOwotfQotRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2IpOwotCi0vKioKLSAqIHJ4cnBjX2tlcm5lbF9mcmVlX29vYiAtIEZyZWUgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZQotICogQG9vYjogVGhlIE9PQiBtZXNzYWdlIHRvIGZyZWUKLSAqCi0gKiBGcmVlIGFuIE9PQiBtZXNzYWdlIGFsb25nIHdpdGggYW55IHJlc291cmNlcyBpdCBob2xkcy4KLSAqLwotdm9pZCByeHJwY19rZXJuZWxfZnJlZV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYikKLXsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKG9vYik7Ci0KLQlzd2l0Y2ggKG9vYi0mZ3Q7bWFyaykgewotCWNhc2UgUlhSUENfT09CX0NIQUxMRU5HRToKLQkJcnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtJmd0O2NoYWxsLmNvbm4sIHJ4cnBjX2Nvbm5fcHV0X29vYik7Ci0JCWJyZWFrOwotCX0KLQotCXJ4cnBjX2ZyZWVfc2tiKG9vYiwgcnhycGNfc2tiX3B1dF9wdXJnZV9vb2IpOwotfQotRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfZnJlZV9vb2IpOwotCi0vKioKLSAqIHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UgLSBRdWVyeSB0aGUgcGFyYW1ldGVycyBvZiBhIGNoYWxsZW5nZQotICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byBxdWVyeQotICogQF9wZWVyOiBXaGVyZSB0byByZXR1cm4gdGhlIHBlZXIgcmVjb3JkCi0gKiBAX3BlZXJfYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgYXR0YWNoZWQgdG8gYSBwZWVyIHJlY29yZAotICogQF9zZXJ2aWNlX2lkOiBXaGVyZSB0byByZXR1cm4gdGhlIGNvbm5lY3Rpb24gc2VydmljZSBJRAotICogQF9zZWN1cml0eV9pbmRleDogV2hlcmUgdG8gcmV0dXJuIHRoZSBjb25uZWN0aW9uIHNlY3VyaXR5IGluZGV4Ci0gKgotICogRXh0cmFjdCB1c2VmdWwgcGFyYW1ldGVycyBmcm9tIGEgQ0hBTExFTkdFIG1lc3NhZ2UuCi0gKi8KLXZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLAotCQkJCSAgc3RydWN0IHJ4cnBjX3BlZXIgKipfcGVlciwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsCi0JCQkJICB1MTYgKl9zZXJ2aWNlX2lkLCB1OCAqX3NlY3VyaXR5X2luZGV4KQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTsKLQotCSpfcGVlcgkJPSBzcC0mZ3Q7Y2hhbGwuY29ubi0mZ3Q7cGVlcjsKLQkqX3BlZXJfYXBwZGF0YQk9IHNwLSZndDtjaGFsbC5jb25uLSZndDtwZWVyLSZndDthcHBfZGF0YTsKLQkqX3NlcnZpY2VfaWQJPSBzcC0mZ3Q7aGRyLnNlcnZpY2VJZDsKLQkqX3NlY3VyaXR5X2luZGV4ID0gc3AtJmd0O2hkci5zZWN1cml0eUluZGV4OwotfQotRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKTsKLQotLyoqCi0gKiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZSAtIEFsbG93IGEga2VybmVsIHNlcnZpY2UgdG8gcmVqZWN0IGEgY2hhbGxlbmdlCi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIGJlIHJlamVjdGVkCi0gKiBAYWJvcnRfY29kZTogVGhlIGFib3J0IGNvZGUgdG8gc3RpY2sgaW50byB0aGUgQUJPUlQgcGFja2V0Ci0gKiBAZXJyb3I6IExvY2FsIGVycm9yIHZhbHVlCi0gKiBAd2h5OiBJbmRpY2F0aW9uIGFzIHRvIHdoeS4KLSAqCi0gKiBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHJlamVjdCBhIGNoYWxsZW5nZSBieSBhYm9ydGluZyB0aGUgY29ubmVjdGlvbiBpZgotICogaXQmIzM5O3Mgc3RpbGwgaW4gYW4gYWJvcnRhYmxlIHN0YXRlLiAgVGhlIGVycm9yIGlzIHJldHVybmVkIHNvIHRoaXMgZnVuY3Rpb24KLSAqIGNhbiBiZSB1c2VkIHdpdGggYSByZXR1cm4gc3RhdGVtZW50LgotICoKLSAqIFJldHVybjogVGhlICVlcnJvciBwYXJhbWV0ZXIuCi0gKi8KLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSwKLQkJCQkgIGludCBlcnJvciwgZW51bSByeHJwY19hYm9ydF9yZWFzb24gd2h5KQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTsKLQotCV9lbnRlcigmIzM0O3sleH0sJWQsJWQsJXUmIzM0Oywgc3AtJmd0O2hkci5zZXJpYWwsIGFib3J0X2NvZGUsIGVycm9yLCB3aHkpOwotCi0JcnhycGNfYWJvcnRfY29ubihzcC0mZ3Q7Y2hhbGwuY29ubiwgTlVMTCwgYWJvcnRfY29kZSwgZXJyb3IsIHdoeSk7Ci0JcmV0dXJuIGVycm9yOwotfQotRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZSk7CmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcHJvYy5jIGIvbmV0L3J4cnBjL3Byb2MuYwppbmRleCBlOWEyN2ZhN2IyNWQ4Yi4uZjMwMDQ5MWIwNmJkYWMgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9wcm9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3Byb2MuYwpAQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX2J1bmRsZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIAkJc2VxX3B1dHMoc2VxLAogCQkJICYjMzQ7UHJvdG8gTG9jYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0OwogCQkJICYjMzQ7IFJlbW90ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDsKLQkJCSAmIzM0OyBTdklEIFJlZiBBY3QgRmxnIEtleSAgICAgIHwmIzM0OwomIzQzOwkJCSAmIzM0OyBTdklEIFJlZiBBY3QgRmxnIEtleSAgICAgIEFwcERhdGEgIHwmIzM0OwogCQkJICYjMzQ7IEJ1bmRsZSAgIENvbm5fMCAgIENvbm5fMSAgIENvbm5fMiAgIENvbm5fM1xuJiMzNDsKIAkJCSApOwogCQlyZXR1cm4gMDsKQEAgLTI1MCw3ICYjNDM7MjUwLDcgQEAgc3RhdGljIGludCByeHJwY19idW5kbGVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiAJc2NucHJpbnRmKHJidWZmLCBzaXplb2YocmJ1ZmYpLCAmIzM0OyVwSVNwYyYjMzQ7LCAmYW1wO2J1bmRsZS0mZ3Q7cGVlci0mZ3Q7c3J4LnRyYW5zcG9ydCk7CiAJc2VxX3ByaW50ZihzZXEsCiAJCSAgICYjMzQ7VURQICAgJS00Ny40N3MgJS00Ny40N3MgJTR4ICUzdSAlM2QmIzM0OwotCQkgICAmIzM0OyAlYyVjJWMgJTA4eCB8ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eFxuJiMzNDssCiYjNDM7CQkgICAmIzM0OyAlYyVjJWMgJTA4eCAlMDh4IHwgJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4XG4mIzM0OywKIAkJICAgbGJ1ZmYsCiAJCSAgIHJidWZmLAogCQkgICBidW5kbGUtJmd0O3NlcnZpY2VfaWQsCkBAIC0yNjAsNiAmIzQzOzI2MCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfYnVuZGxlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogCQkgICBidW5kbGUtJmd0O2V4Y2x1c2l2ZSA/ICYjMzk7ZSYjMzk7IDogJiMzOTstJiMzOTssCiAJCSAgIGJ1bmRsZS0mZ3Q7dXBncmFkZSA/ICYjMzk7dSYjMzk7IDogJiMzOTstJiMzOTssCiAJCSAgIGtleV9zZXJpYWwoYnVuZGxlLSZndDtrZXkpLAomIzQzOwkJICAga2V5X3NlcmlhbChidW5kbGUtJmd0O2FwcF9kYXRhKSwKIAkJICAgYnVuZGxlLSZndDtkZWJ1Z19pZCwKIAkJICAgYnVuZGxlLSZndDtjb25uX2lkc1swXSwKIAkJICAgYnVuZGxlLSZndDtjb25uX2lkc1sxXSwKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jCmluZGV4IGVmY2JhNGIyZTc0ZjBjLi44YzQ1NzE5ODJlZGM0NSAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3JlY3Ztc2cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcmVjdm1zZy5jCkBAIC0xNywxMyAmIzQzOzE3LDEyIEBACiAjaW5jbHVkZSAmIzM0O2FyLWludGVybmFsLmgmIzM0OwogCiAvKgotICogUG9zdCBhIGNhbGwgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlLiAgRnVydGhlcgotICogbm90aWZpY2F0aW9ucyBhcmUgc3VwcHJlc3NlZCBieSBwdXR0aW5nIHJlY3Ztc2dfbGluayBvbiBhIGR1bW15IHF1ZXVlLgomIzQzOyAqIFJlcXVldWUgYSBjYWxsIGZvciByZWN2bXNnKCkgdG8gcGljayB1cC4KICAqLwotdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKQomIzQzO3N0YXRpYyB2b2lkIHJ4cnBjX3JlcXVldWVfY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKIHsKLQlzdHJ1Y3QgcnhycGNfc29jayAqcng7Ci0Jc3RydWN0IHNvY2sgKnNrOwomIzQzOwlzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLSZndDtzayk7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9ICZhbXA7cngtJmd0O3NrOwogCiAJX2VudGVyKCYjMzQ7JWQmIzM0OywgY2FsbC0mZ3Q7ZGVidWdfaWQpOwogCkBAIC0zMiwzMSAmIzQzOzMxLDE4IEBAIHZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKIAkJcmV0dXJuOwogCX0KIAotCXJjdV9yZWFkX2xvY2soKTsKLQotCXJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtJmd0O3NvY2tldCk7Ci0Jc2sgPSAmYW1wO3J4LSZndDtzazsKLQlpZiAocnggJmFtcDsmYW1wOyBzay0mZ3Q7c2tfc3RhdGUgJmx0OyBSWFJQQ19DTE9TRSkgewotCQlpZiAoY2FsbC0mZ3Q7bm90aWZ5X3J4KSB7Ci0JCQlzcGluX2xvY2tfaXJxKCZhbXA7Y2FsbC0mZ3Q7bm90aWZ5X2xvY2spOwotCQkJY2FsbC0mZ3Q7bm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLSZndDt1c2VyX2NhbGxfSUQpOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y2FsbC0mZ3Q7bm90aWZ5X2xvY2spOwotCQl9IGVsc2UgewotCQkJc3Bpbl9sb2NrX2lycSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2spOwotCQkJaWYgKGxpc3RfZW1wdHkoJmFtcDtjYWxsLSZndDtyZWN2bXNnX2xpbmspKSB7Ci0JCQkJcnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7Ci0JCQkJbGlzdF9hZGRfdGFpbCgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaywgJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2spOwomIzQzOwlzcGluX2xvY2tfaXJxKCZhbXA7cngtJmd0O3JlY3Ztc2dfbG9jayk7CiYjNDM7CWlmIChsaXN0X2VtcHR5KCZhbXA7Y2FsbC0mZ3Q7cmVjdm1zZ19saW5rKSkgewomIzQzOwkJcnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7CiYjNDM7CQlsaXN0X2FkZF90YWlsKCZhbXA7Y2FsbC0mZ3Q7cmVjdm1zZ19saW5rLCAmYW1wO3J4LSZndDtyZWN2bXNnX3EpOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2lycSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2spOwogCi0JCQlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkgewotCQkJCV9kZWJ1ZygmIzM0O2NhbGwgJXBzJiMzNDssIHNrLSZndDtza19kYXRhX3JlYWR5KTsKLQkJCQlzay0mZ3Q7c2tfZGF0YV9yZWFkeShzayk7Ci0JCQl9Ci0JCX0KJiM0MzsJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKJiM0MzsJCV9kZWJ1ZygmIzM0O2NhbGwgJXBzJiMzNDssIHNrLSZndDtza19kYXRhX3JlYWR5KTsKJiM0MzsJCXNrLSZndDtza19kYXRhX3JlYWR5KHNrKTsKIAl9CiAKLQlyY3VfcmVhZF91bmxvY2soKTsKIAlfbGVhdmUoJiMzNDsmIzM0Oyk7CiB9CiAKQEAgLTIxNSw2MSAmIzQzOzIwMSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ191c2VyX2lkKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3QgbXNnaGRyICptc2csCiAJfQogfQogCi0vKgotICogRGVhbCB3aXRoIGEgQ0hBTExFTkdFIHBhY2tldC4KLSAqLwotc3RhdGljIGludCByeHJwY19yZWN2bXNnX2NoYWxsZW5nZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCi0JCQkJICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwgdW5zaWduZWQgaW50IGZsYWdzKQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTsKLQlzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiA9IHNwLSZndDtjaGFsbC5jb25uOwotCi0JcmV0dXJuIGNvbm4tJmd0O3NlY3VyaXR5LSZndDtjaGFsbGVuZ2VfdG9fcmVjdm1zZyhjb25uLCBjaGFsbGVuZ2UsIG1zZyk7Ci19Ci0KLS8qCi0gKiBQcm9jZXNzIE9PQiBwYWNrZXRzLiAgQ2FsbGVkIHdpdGggdGhlIHNvY2tldCBsb2NrZWQuCi0gKi8KLXN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19vb2Ioc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAotCQkJICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay0mZ3Q7c2spOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JYm9vbCBuZWVkX3Jlc3BvbnNlID0gZmFsc2U7Ci0JaW50IHJldDsKLQotCXNrYiA9IHNrYl9wZWVrKCZhbXA7cngtJmd0O3JlY3Ztc2dfb29icSk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRUFHQUlOOwotCXJ4cnBjX3NlZV9za2Ioc2tiLCByeHJwY19za2Jfc2VlX3JlY3Ztc2cpOwotCi0JcmV0ID0gcHV0X2Ntc2cobXNnLCBTT0xfUlhSUEMsIFJYUlBDX09PQl9JRCwgc2l6ZW9mKHU2NCksCi0JCSAgICAgICAmYW1wO3NrYi0mZ3Q7c2tiX21zdGFtcF9ucyk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7Ci0KLQlzd2l0Y2ggKChlbnVtIHJ4cnBjX29vYl90eXBlKXNrYi0mZ3Q7bWFyaykgewotCWNhc2UgUlhSUENfT09CX0NIQUxMRU5HRToKLQkJbmVlZF9yZXNwb25zZSA9IHRydWU7Ci0JCXJldCA9IHJ4cnBjX3JlY3Ztc2dfY2hhbGxlbmdlKHNvY2ssIG1zZywgc2tiLCBmbGFncyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVdBUk5fT05DRSgxLCAmIzM0O3JlY3Ztc2coKSBjYW4mIzM5O3QgcHJvY2VzcyB1bmtub3duIE9PQiB0eXBlICV1XG4mIzM0OywKLQkJCSAgc2tiLSZndDttYXJrKTsKLQkJcmV0ID0gLUVJTzsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKCEoZmxhZ3MgJmFtcDsgTVNHX1BFRUspKSB7Ci0JCXNrYl91bmxpbmsoc2tiLCAmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpOwotCQlpZiAobmVlZF9yZXNwb25zZSkKLQkJCXJ4cnBjX2FkZF9wZW5kaW5nX29vYihyeCwgc2tiKTsKLQkJZWxzZQotCQkJcnhycGNfZnJlZV9za2Ioc2tiLCByeHJwY19za2JfcHV0X29vYik7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KIC8qCiAgKiBEZWxpdmVyIG1lc3NhZ2VzIHRvIGEgY2FsbC4gIFRoaXMga2VlcHMgcHJvY2Vzc2luZyBwYWNrZXRzIHVudGlsIHRoZSBidWZmZXIKICAqIGlzIGZpbGxlZCBhbmQgd2UgZmluZCBlaXRoZXIgbW9yZSBEQVRBIChyZXR1cm5zIDApIG9yIHRoZSBlbmQgb2YgdGhlIERBVEEKQEAgLTI4MSw3ICYjNDM7MjEyLDYgQEAgc3RhdGljIGludCByeHJwY19yZWN2bXNnX2RhdGEoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsCiAJCQkgICAgICBzaXplX3QgbGVuLCBpbnQgZmxhZ3MsIHNpemVfdCAqX29mZnNldCkKIHsKIAlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwOwotCXN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stJmd0O3NrKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXJ4cnBjX3NlcV90IHNlcSA9IDA7CiAJc2l6ZV90IHJlbWFpbjsKQEAgLTM3NiwxMyAmIzQzOzMwNiw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCiAJCWlmICghKGZsYWdzICZhbXA7IE1TR19QRUVLKSkKIAkJCXJ4cnBjX3JvdGF0ZV9yeF93aW5kb3coY2FsbCk7Ci0KLQkJaWYgKCFyeC0mZ3Q7YXBwX29wcyAmYW1wOyZhbXA7Ci0JCSAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKCZhbXA7cngtJmd0O3JlY3Ztc2dfb29icSkpIHsKLQkJCXRyYWNlX3J4cnBjX3JlY3ZkYXRhKGNhbGwsIHJ4cnBjX3JlY3Ztc2dfb29icSwgc2VxLAotCQkJCQkgICAgIHJ4X3BrdF9vZmZzZXQsIHJ4X3BrdF9sZW4sIHJldCk7Ci0JCQlicmVhazsKLQkJfQogCX0KIAogb3V0OgpAQCAtNDMwLDE0ICYjNDM7MzUzLDEyIEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAkvKiBSZXR1cm4gaW1tZWRpYXRlbHkgaWYgYSBjbGllbnQgc29ja2V0IGhhcyBubyBvdXRzdGFuZGluZyBjYWxscyAqLwogCWlmIChSQl9FTVBUWV9ST09UKCZhbXA7cngtJmd0O2NhbGxzKSAmYW1wOyZhbXA7CiAJICAgIGxpc3RfZW1wdHkoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKSAmYW1wOyZhbXA7Ci0JICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpICZhbXA7JmFtcDsKIAkgICAgcngtJmd0O3NrLnNrX3N0YXRlICE9IFJYUlBDX1NFUlZFUl9MSVNURU5JTkcpIHsKIAkJcmVsZWFzZV9zb2NrKCZhbXA7cngtJmd0O3NrKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKSAmYW1wOyZhbXA7Ci0JICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpKSB7CiYjNDM7CWlmIChsaXN0X2VtcHR5KCZhbXA7cngtJmd0O3JlY3Ztc2dfcSkpIHsKIAkJcmV0ID0gLUVXT1VMREJMT0NLOwogCQlpZiAodGltZW8gPT0gMCkgewogCQkJY2FsbCA9IE5VTEw7CkBAIC00NTMsOCAmIzQzOzM3NCw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAkJaWYgKHJldCkKIAkJCWdvdG8gd2FpdF9lcnJvcjsKIAotCQlpZiAobGlzdF9lbXB0eSgmYW1wO3J4LSZndDtyZWN2bXNnX3EpICZhbXA7JmFtcDsKLQkJICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpKSB7CiYjNDM7CQlpZiAobGlzdF9lbXB0eSgmYW1wO3J4LSZndDtyZWN2bXNnX3EpKSB7CiAJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQkJZ290byB3YWl0X2ludGVycnVwdGVkOwogCQkJdHJhY2VfcnhycGNfcmVjdm1zZygwLCByeHJwY19yZWN2bXNnX3dhaXQsIDApOwpAQCAtNDY0LDE1ICYjNDM7Mzg0LDYgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCQlnb3RvIHRyeV9hZ2FpbjsKIAl9CiAKLQkvKiBEZWFsIHdpdGggT09CIG1lc3NhZ2VzIGJlZm9yZSB3ZSBjb25zaWRlciBnZXR0aW5nIG5vcm1hbCBkYXRhLiAqLwotCWlmICghc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKCZhbXA7cngtJmd0O3JlY3Ztc2dfb29icSkpIHsKLQkJcmV0ID0gcnhycGNfcmVjdm1zZ19vb2Ioc29jaywgbXNnLCBmbGFncyk7Ci0JCXJlbGVhc2Vfc29jaygmYW1wO3J4LSZndDtzayk7Ci0JCWlmIChyZXQgPT0gLUVBR0FJTikKLQkJCWdvdG8gdHJ5X2FnYWluOwotCQlnb3RvIGVycm9yX3RyYWNlOwotCX0KLQogCS8qIEZpbmQgdGhlIG5leHQgY2FsbCBhbmQgZGVxdWV1ZSBpdCBpZiB3ZSYjMzk7cmUgbm90IGp1c3QgcGVla2luZy4gIElmIHdlCiAJICogZG8gZGVxdWV1ZSBpdCwgdGhhdCBjb21lcyB3aXRoIGEgcmVmIHRoYXQgd2Ugd2lsbCBuZWVkIHRvIHJlbGVhc2UuCiAJICogV2UgYWxzbyB3YW50IHRvIHdlZWQgb3V0IGNhbGxzIHRoYXQgZ290IHJlcXVldWVkIHdoaWxzdCB3ZSB3ZXJlCkBAIC00ODMsOCAmIzQzOzM5NCw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAljYWxsID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgcnhycGNfY2FsbCwgcmVjdm1zZ19saW5rKTsKIAogCWlmICghcnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSAmYW1wOyZhbXA7Ci0JICAgIHNrYl9xdWV1ZV9lbXB0eSgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfcXVldWUpICZhbXA7JmFtcDsKLQkgICAgc2tiX3F1ZXVlX2VtcHR5KCZhbXA7cngtJmd0O3JlY3Ztc2dfb29icSkpIHsKJiM0MzsJICAgIHNrYl9xdWV1ZV9lbXB0eSgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfcXVldWUpKSB7CiAJCWxpc3RfZGVsX2luaXQoJmFtcDtjYWxsLSZndDtyZWN2bXNnX2xpbmspOwogCQlzcGluX3VubG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKIAkJcmVsZWFzZV9zb2NrKCZhbXA7cngtJmd0O3NrKTsKQEAgLTU2MSw3ICYjNDM7NDcxLDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCiAJaWYgKCEoZmxhZ3MgJmFtcDsgTVNHX1BFRUspICZhbXA7JmFtcDsKIAkgICAgIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfcXVldWUpKQotCQlyeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpOwomIzQzOwkJcnhycGNfcmVxdWV1ZV9jYWxsKHNvY2ssIGNhbGwpOwogCWdvdG8gbm90X3lldF9jb21wbGV0ZTsKIAogY2FsbF9mYWlsZWQ6CmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcnhnay5jIGIvbmV0L3J4cnBjL3J4Z2suYwppbmRleCA3N2E2N2FjZTFkMjQ4MS4uYzY0ZWY5Njc2M2FlMmQgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9yeGdrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3J4Z2suYwpAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2V5LXR5cGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7a2V5cy91c2VyLXR5cGUuaCZndDsKICNpbmNsdWRlICYjMzQ7YXItaW50ZXJuYWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3J4Z2tfY29tbW9uLmgmIzM0OwogCkBAIC03MzQsMzcgJiM0Mzs3MzUsNiBAQCBzdGF0aWMgYm9vbCByeGdrX3ZhbGlkYXRlX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyoqCi0gKiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UgLSBRdWVyeSBSeEdLLXNwZWNpZmljIGNoYWxsZW5nZSBwYXJhbWV0ZXJzCi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHBhY2tldCB0byBxdWVyeQotICoKLSAqIFJldHVybjogVGhlIEtlcmJlcm9zIDUgZW5jb2RpbmcgdHlwZSBmb3IgdGhlIGNoYWxsZW5nZWQgY29ubmVjdGlvbi4KLSAqLwotdTMyIHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTsKLQotCXJldHVybiBzcC0mZ3Q7Y2hhbGwuY29ubi0mZ3Q7cnhnay5lbmN0eXBlOwotfQotRVhQT1JUX1NZTUJPTChyeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UpOwotCi0vKgotICogRmlsbCBvdXQgdGhlIGNvbnRyb2wgbWVzc2FnZSB0byBwYXNzIHRvIHVzZXJzcGFjZSB0byBpbmZvcm0gYWJvdXQgdGhlCi0gKiBjaGFsbGVuZ2UuCi0gKi8KLXN0YXRpYyBpbnQgcnhna19jaGFsbGVuZ2VfdG9fcmVjdm1zZyhzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKLQkJCQkgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpCi17Ci0Jc3RydWN0IHJ4Z2tfY2hhbGxlbmdlIGNoYWxsOwotCi0JY2hhbGwuYmFzZS5zZXJ2aWNlX2lkCQk9IGNvbm4tJmd0O3NlcnZpY2VfaWQ7Ci0JY2hhbGwuYmFzZS5zZWN1cml0eV9pbmRleAk9IGNvbm4tJmd0O3NlY3VyaXR5X2l4OwotCWNoYWxsLmVuY3R5cGUJCQk9IGNvbm4tJmd0O3J4Z2suZW5jdHlwZTsKLQotCXJldHVybiBwdXRfY21zZyhtc2csIFNPTF9SWFJQQywgUlhSUENfQ0hBTExFTkdFRCwgc2l6ZW9mKGNoYWxsKSwgJmFtcDtjaGFsbCk7Ci19Ci0KIC8qCiAgKiBJbnNlcnQgdGhlIHJlcXVpc2l0ZSBhbW91bnQgb2YgWERSIHBhZGRpbmcgZm9yIHRoZSBsZW5ndGggZ2l2ZW4uCiAgKi8KQEAgLTgzNyw3ICYjNDM7ODA3LDcgQEAgc3RhdGljIG5vaW5saW5lIHNzaXplX3Qgcnhna19pbnNlcnRfcmVzcG9uc2VfaGVhZGVyKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb24KICAqLwogc3RhdGljIHNzaXplX3Qgcnhna19jb25zdHJ1Y3RfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKIAkJCQkJICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJCSAgICBjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEsCiYjNDM7CQkJCQkgICAgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKmFwcGRhdGEsCiAJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcG9uc2UsCiAJCQkJCSAgICBzaXplX3Qgb2Zmc2V0KQogewpAQCAtODU5LDIwICYjNDM7ODI5LDIwIEBAIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiAtRVBST1RPOwogCi0JYS5hcHBkYXRhX2xlbiA9IGh0b25sKGFwcGRhdGEtJmd0O2xlbik7CiYjNDM7CWEuYXBwZGF0YV9sZW4gPSBodG9ubChhcHBkYXRhLSZndDtkYXRhbGVuKTsKIAogCXJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsICZhbXA7YSwgc2l6ZW9mKGEpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAlvZmZzZXQgJiM0Mzs9IHNpemVvZihhKTsKIAotCWlmIChhcHBkYXRhLSZndDtsZW4pIHsKLQkJcmV0ID0gc2tiX3N0b3JlX2JpdHMocmVzcG9uc2UsIG9mZnNldCwgYXBwZGF0YS0mZ3Q7ZGF0YSwgYXBwZGF0YS0mZ3Q7bGVuKTsKJiM0MzsJaWYgKGFwcGRhdGEtJmd0O2RhdGFsZW4pIHsKJiM0MzsJCXJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIGFwcGRhdGEtJmd0O2RhdGEsIGFwcGRhdGEtJmd0O2RhdGFsZW4pOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7Ci0JCW9mZnNldCAmIzQzOz0gYXBwZGF0YS0mZ3Q7bGVuOwomIzQzOwkJb2Zmc2V0ICYjNDM7PSBhcHBkYXRhLSZndDtkYXRhbGVuOwogCi0JCXJldCA9IHJ4Z2tfcGFkX291dChyZXNwb25zZSwgYXBwZGF0YS0mZ3Q7bGVuLCBvZmZzZXQpOwomIzQzOwkJcmV0ID0gcnhna19wYWRfb3V0KHJlc3BvbnNlLCBhcHBkYXRhLSZndDtkYXRhbGVuLCBvZmZzZXQpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7CiAJCW9mZnNldCAmIzQzOz0gcmV0OwpAQCAtODkwLDcgJiM0Mzs4NjAsNyBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogCXJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsICZhbXA7Yiwgc2l6ZW9mKGIpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKLQlyZXR1cm4gc2l6ZW9mKGEpICYjNDM7IHhkcl9yb3VuZF91cChhcHBkYXRhLSZndDtsZW4pICYjNDM7IHNpemVvZihiKTsKJiM0MzsJcmV0dXJuIHNpemVvZihhKSAmIzQzOyB4ZHJfcm91bmRfdXAoYXBwZGF0YS0mZ3Q7ZGF0YWxlbikgJiM0Mzsgc2l6ZW9mKGIpOwogfQogCiBzdGF0aWMgc3NpemVfdCByeGdrX2VuY3J5cHRfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKQEAgLTkyMyw3ICYjNDM7ODkzLDcgQEAgc3RhdGljIHNzaXplX3Qgcnhna19lbmNyeXB0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAgKi8KIHN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQkJICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpCiYjNDM7CQkJCSAgIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICphcHBkYXRhKQogewogCXN0cnVjdCByeHJwY19za2JfcHJpdiAqY3NwLCAqcnNwOwogCXN0cnVjdCByeGdrX2NvbnRleHQgKmdrOwpAQCAtOTM2LDExICYjNDM7OTA2LDExIEBAIHN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJaWYgKElTX0VSUihnaykpCiAJCXJldHVybiBQVFJfRVJSKGdrKTsKIAotCWF1dGhfbGVuID0gMjAgJiM0MzsgKDQgJiM0MzsgYXBwZGF0YS0mZ3Q7bGVuKSAmIzQzOyAxMiAmIzQzOyAoMSAmIzQzOyA0KSAqIDQ7CiYjNDM7CWF1dGhfbGVuID0gMjAgJiM0MzsgeGRyX29iamVjdF9sZW4oYXBwZGF0YS0mZ3Q7ZGF0YWxlbikgJiM0MzsgMTIgJiM0MzsgKDEgJiM0MzsgNCkgKiA0OwogCWF1dGh4X2xlbiA9IGNyeXB0b19rcmI1X2hvd19tdWNoX2J1ZmZlcihnay0mZ3Q7a3JiNSwgS1JCNV9FTkNSWVBUX01PREUsCiAJCQkJCQlhdXRoX2xlbiwgJmFtcDthdXRoX29mZnNldCk7CiAJbGVuID0gc2l6ZW9mKHN0cnVjdCByeHJwY193aXJlX2hlYWRlcikgJiM0MzsKLQkJOCAmIzQzOyAoNCAmIzQzOyB4ZHJfcm91bmRfdXAoZ2stJmd0O2tleS0mZ3Q7dGlja2V0LmxlbikpICYjNDM7ICg0ICYjNDM7IGF1dGh4X2xlbik7CiYjNDM7CQk4ICYjNDM7IHhkcl9vYmplY3RfbGVuKGdrLSZndDtrZXktJmd0O3RpY2tldC5sZW4pICYjNDM7IHhkcl9vYmplY3RfbGVuKGF1dGh4X2xlbik7CiAKIAlyZXNwb25zZSA9IGFsbG9jX3NrYl93aXRoX2ZyYWdzKDAsIGxlbiwgMCwgJmFtcDtyZXQsIEdGUF9OT0ZTKTsKIAlpZiAoIXJlc3BvbnNlKQpAQCAtMTAxMSw2NiAmIzQzOzk4MSw0NCBAQCBzdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogICogUmVzcG9uZCB0byBhIGNoYWxsZW5nZSBwYWNrZXQuCiAgKi8KIHN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKLQkJCQkgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICAgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpCiYjNDM7CQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSkKIHsKLQlfZW50ZXIoJiMzNDt7JWQsJXh9JiMzNDssIGNvbm4tJmd0O2RlYnVnX2lkLCBrZXlfc2VyaWFsKGNvbm4tJmd0O2tleSkpOwomIzQzOwlzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCBkdW1teSA9IHt9LCAqYXBwZGF0YSA9ICZhbXA7ZHVtbXk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CV9lbnRlcigmIzM0O3slZCwldSwleCwleH0mIzM0OywKJiM0MzsJICAgICAgIGNvbm4tJmd0O2RlYnVnX2lkLCBjb25uLSZndDtzZXJ2aWNlX2lkLAomIzQzOwkgICAgICAga2V5X3NlcmlhbChjb25uLSZndDtrZXkpLCBrZXlfc2VyaWFsKGNvbm4tJmd0O2J1bmRsZS0mZ3Q7YXBwX2RhdGEpKTsKIAogCWlmIChrZXlfdmFsaWRhdGUoY29ubi0mZ3Q7a2V5KSAmbHQ7IDApCiAJCXJldHVybiByeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIFJYR0tfRVhQSVJFRCwgLUVQUk9UTywKIAkJCQkJcnhna19hYm9ydF9jaGFsbF9rZXlfZXhwaXJlZCk7CiAKLQlyZXR1cm4gcnhna19jb25zdHJ1Y3RfcmVzcG9uc2UoY29ubiwgY2hhbGxlbmdlLCBhcHBkYXRhKTsKLX0KLQotc3RhdGljIGludCByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlX25vX2FwcGRhdGEoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCi0JCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKQotewotCXN0cnVjdCBrcmI1X2J1ZmZlciBhcHBkYXRhID0ge307Ci0KLQlyZXR1cm4gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShjb25uLCBjaGFsbGVuZ2UsICZhbXA7YXBwZGF0YSk7Ci19Ci0KLS8qKgotICogcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UgLSBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHdpdGggYXBwZGF0YQotICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byByZXNwb25kIHRvCi0gKiBAYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgUkVTUE9OU0UgYXV0aGVudGljYXRvcgotICoKLSAqIEFsbG93IGEga2VybmVsIGFwcGxpY2F0aW9uIHRvIHJlc3BvbmQgdG8gYSBDSEFMTEVOR0Ugd2l0aCBhcHBsaWNhdGlvbiBkYXRhCi0gKiB0byBiZSBpbmNsdWRlZCBpbiB0aGUgUnhHSyBSRVNQT05TRSBBdXRoZW50aWNhdG9yLgotICoKLSAqIFJldHVybjogJTAgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KLSAqLwotaW50IHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICAgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpCi17Ci0Jc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTsKLQotCXJldHVybiByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNzcC0mZ3Q7Y2hhbGwuY29ubiwgY2hhbGxlbmdlLCBhcHBkYXRhKTsKLX0KLUVYUE9SVF9TWU1CT0wocnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UpOwotCi0vKgotICogUGFyc2Ugc2VuZG1zZygpIGNvbnRyb2wgbWVzc2FnZSBhbmQgcmVzcG9uZCB0byBjaGFsbGVuZ2UuICBXZSBuZWVkIHRvIHNlZSBpZgotICogdGhlcmUmIzM5O3MgYW4gYXBwZGF0YSB0byBmaXNoIG91dC4KLSAqLwotc3RhdGljIGludCByeGdrX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkJICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpCi17Ci0Jc3RydWN0IGtyYjVfYnVmZmVyIGFwcGRhdGEgPSB7fTsKLQlzdHJ1Y3QgY21zZ2hkciAqY21zZzsKLQotCWZvcl9lYWNoX2Ntc2doZHIoY21zZywgbXNnKSB7Ci0JCWlmIChjbXNnLSZndDtjbXNnX2xldmVsICE9IFNPTF9SWFJQQyB8fAotCQkgICAgY21zZy0mZ3Q7Y21zZ190eXBlICE9IFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBKQotCQkJY29udGludWU7Ci0JCWlmIChhcHBkYXRhLmRhdGEpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYXBwZGF0YS5kYXRhID0gQ01TR19EQVRBKGNtc2cpOwotCQlhcHBkYXRhLmxlbiA9IGNtc2ctJmd0O2Ntc2dfbGVuIC0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKTsKJiM0MzsJaWYgKGNvbm4tJmd0O2J1bmRsZS0mZ3Q7YXBwX2RhdGEpIHsKJiM0MzsJCXN0cnVjdCBrZXkgKmFwcF9rZXkgPSBjb25uLSZndDtidW5kbGUtJmd0O2FwcF9kYXRhOwomIzQzOwomIzQzOwkJLyogVGhlIHdyb25nIHNvcnQgb2Yga2V5IHNob3VsZG4mIzM5O3QgZ2V0IHRoaXMgZmFyLiAqLwomIzQzOwkJaWYgKFdBUk5fT05fT05DRShhcHBfa2V5LSZndDt0eXBlICE9ICZhbXA7a2V5X3R5cGVfdXNlciAmYW1wOyZhbXA7CiYjNDM7CQkJCSBhcHBfa2V5LSZndDt0eXBlICE9ICZhbXA7a2V5X3R5cGVfbG9nb24pKQomIzQzOwkJCXJldHVybiByeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIFJYR0tfRVhQSVJFRCwgLUVLRVlSRUpFQ1RFRCwKJiM0MzsJCQkJCQlyeGdrX2Fib3J0X2NoYWxsX2JhZF9hcHBfa2V5KTsKJiM0MzsKJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJCWFwcGRhdGEgPSAoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKikKJiM0MzsJCQl1c2VyX2tleV9wYXlsb2FkX3JjdShjb25uLSZndDtidW5kbGUtJmd0O2FwcF9kYXRhKTsKJiM0MzsJCWlmIChhcHBkYXRhICZhbXA7JmFtcDsgIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO2FwcGRhdGEtJmd0O3JlZikpCiYjNDM7CQkJYXBwZGF0YSA9IE5VTEw7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCWlmICghYXBwZGF0YSkKJiM0MzsJCQlyZXR1cm4gcnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBSWEdLX0VYUElSRUQsIC1FS0VZUkVWT0tFRCwKJiM0MzsJCQkJCQlyeGdrX2Fib3J0X2NoYWxsX2tleV9leHBpcmVkKTsKIAl9CiAKLQlyZXR1cm4gcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlLCAmYW1wO2FwcGRhdGEpOwomIzQzOwlyZXQgPSByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShjb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpOwomIzQzOwomIzQzOwlpZiAoYXBwZGF0YSAhPSAmYW1wO2R1bW15KQomIzQzOwkJcHV0X3VzZXJfa2V5X3BheWxvYWQoYXBwZGF0YSk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0xMzQ2LDkgJiM0MzsxMjk0LDcgQEAgY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHJ4Z2tfeWZzID0gewogCS5mcmVlX2NhbGxfY3J5cHRvCQk9IHJ4Z2tfZnJlZV9jYWxsX2NyeXB0bywKIAkuaXNzdWVfY2hhbGxlbmdlCQk9IHJ4Z2tfaXNzdWVfY2hhbGxlbmdlLAogCS52YWxpZGF0ZV9jaGFsbGVuZ2UJCT0gcnhna192YWxpZGF0ZV9jaGFsbGVuZ2UsCi0JLmNoYWxsZW5nZV90b19yZWN2bXNnCQk9IHJ4Z2tfY2hhbGxlbmdlX3RvX3JlY3Ztc2csCi0JLnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UJPSByeGdrX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UsCi0JLnJlc3BvbmRfdG9fY2hhbGxlbmdlCQk9IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2Vfbm9fYXBwZGF0YSwKJiM0MzsJLnJlc3BvbmRfdG9fY2hhbGxlbmdlCQk9IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UsCiAJLnZlcmlmeV9yZXNwb25zZQkJPSByeGdrX3ZlcmlmeV9yZXNwb25zZSwKIAkuY2xlYXIJCQkJPSByeGdrX2NsZWFyLAogCS5kZWZhdWx0X2RlY29kZV90aWNrZXQJCT0gcnhna195ZnNfZGVjb2RlX3RpY2tldCwKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeGthZC5jIGIvbmV0L3J4cnBjL3J4a2FkLmMKaW5kZXggY2E5ZjBlODJjYjlhYzcuLmU1NWJmY2ExMGUxYTk0IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvcnhrYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcnhrYWQuYwpAQCAtNzQ4LDMyICYjNDM7NzQ4LDYgQEAgc3RhdGljIGludCByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogUnhLQUQgZG9lcyBhdXRvbWF0aWMgcmVzcG9uc2Ugb25seSBhcyB0aGVyZSYjMzk7cyBub3RoaW5nIHRvIG1hbmFnZSB0aGF0IGlzbiYjMzk7dAotICogYWxyZWFkeSBpbiB0aGUga2V5LgotICovCi1zdGF0aWMgaW50IHJ4a2FkX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkJICAgICAgc3RydWN0IG1zZ2hkciAqbXNnKQotewotCXJldHVybiAtRUlOVkFMOwotfQotCi0vKioKLSAqIHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZSAtIFJlc3BvbmQgdG8gYSBjaGFsbGVuZ2Ugd2l0aCBhcHBkYXRhCi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHJlc3BvbmQgdG8KLSAqCi0gKiBBbGxvdyBhIGtlcm5lbCBhcHBsaWNhdGlvbiB0byByZXNwb25kIHRvIGEgQ0hBTExFTkdFLgotICoKLSAqIFJldHVybjogJTAgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KLSAqLwotaW50IHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqY3NwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7Ci0KLQlyZXR1cm4gcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2UoY3NwLSZndDtjaGFsbC5jb25uLCBjaGFsbGVuZ2UpOwotfQotRVhQT1JUX1NZTUJPTChyeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UpOwotCiAvKiBEZWNyeXB0IGRhdGEgaW4tcGxhY2UgdXNpbmcgREVTLVBDQkMuICBAbGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4LiAqLwogVklTSUJMRV9JRl9LVU5JVCB2b2lkIGRlc19wY2JjX2RlY3J5cHRfaW5wbGFjZShjb25zdCBzdHJ1Y3QgZGVzX2N0eCAqa2V5LAogCQkJCQkgICAgICAgX19sZTY0IGl2LCB1OCAqZGF0YSwgc2l6ZV90IGxlbikKQEAgLTExMzQsNyAmIzQzOzExMDgsNiBAQCBjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgcnhrYWQgPSB7CiAJLmZyZWVfY2FsbF9jcnlwdG8JCT0gcnhrYWRfZnJlZV9jYWxsX2NyeXB0bywKIAkuaXNzdWVfY2hhbGxlbmdlCQk9IHJ4a2FkX2lzc3VlX2NoYWxsZW5nZSwKIAkudmFsaWRhdGVfY2hhbGxlbmdlCQk9IHJ4a2FkX3ZhbGlkYXRlX2NoYWxsZW5nZSwKLQkuc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZQk9IHJ4a2FkX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UsCiAJLnJlc3BvbmRfdG9fY2hhbGxlbmdlCQk9IHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLAogCS52ZXJpZnlfcmVzcG9uc2UJCT0gcnhrYWRfdmVyaWZ5X3Jlc3BvbnNlLAogCS5jbGVhcgkJCQk9IHJ4a2FkX2NsZWFyLApkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3NlbmRtc2cuYyBiL25ldC9yeHJwYy9zZW5kbXNnLmMKaW5kZXggZWQyYzlhNTEwMDVhZGUuLmIzZjc2NWZkNDFiYzcwIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvc2VuZG1zZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9zZW5kbXNnLmMKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2tleXMvdXNlci10eXBlLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtuZXQvc29jay5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9hZl9yeHJwYy5oJmd0OwpAQCAtMzIwLDggJiM0MzszMjEsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX2FsbG9jX3R4cXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAkJCSAgIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCQkJICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAotCQkJICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsCi0JCQkgICBib29sICpfZHJvcHBlZF9sb2NrKQomIzQzOwkJCSAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KQomIzQzOwlfX3JlbGVhc2VzKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCkKIHsKIAlzdHJ1Y3QgcnhycGNfdHhidWYgKnR4YjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO3J4LSZndDtzazsKQEAgLTMzMCwyMyAmIzQzOzMzMSwzMSBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsCiAJYm9vbCBtb3JlID0gbXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX01PUkU7CiAJaW50IHJldCwgY29waWVkID0gMDsKIAotCWlmICh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CWlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpKSkgewogCQl0cmFjZV9yeHJwY19hYm9ydChjYWxsLSZndDtkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsCiAJCQkJICBjYWxsLSZndDtjaWQsIGNhbGwtJmd0O2NhbGxfaWQsIGNhbGwtJmd0O3J4X2NvbnN1bWVkLAogCQkJCSAgMCwgLUVQUk9UTyk7Ci0JCXJldHVybiAtRVBST1RPOwomIzQzOwkJcmV0ID0gLUVQUk9UTzsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwlpZiAodW5saWtlbHkodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgJmFtcDtjYWxsLSZndDtmbGFncykpKSB7CiYjNDM7CQl0cmFjZV9yeHJwY19hYm9ydChjYWxsLSZndDtkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ190eF9lcnJvciwKJiM0MzsJCQkJICBjYWxsLSZndDtjaWQsIGNhbGwtJmd0O2NhbGxfaWQsIGNhbGwtJmd0O3J4X2NvbnN1bWVkLAomIzQzOwkJCQkgIDAsIC1FSU8pOwomIzQzOwkJcmV0ID0gLUVJTzsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAl0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7CiAKIAlyZXQgPSByeHJwY193YWl0X3RvX2JlX2Nvbm5lY3RlZChjYWxsLCAmYW1wO3RpbWVvKTsKIAlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKIAogCWlmIChjYWxsLSZndDtjb25uLSZndDtzdGF0ZSA9PSBSWFJQQ19DT05OX0NMSUVOVF9VTlNFQ1VSRUQpIHsKIAkJcmV0ID0gcnhycGNfaW5pdF9jbGllbnRfY29ubl9zZWN1cml0eShjYWxsLSZndDtjb25uKTsKIAkJaWYgKHJldCAmbHQ7IDApCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAkvKiB0aGlzIHNob3VsZCBiZSBpbiBwb2xsICovCkBAIC00NDAsMTIgJiM0Mzs0NDksMjEgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LAogCQkvKiBhZGQgdGhlIHBhY2tldCB0byB0aGUgc2VuZCBxdWV1ZSBpZiBpdCYjMzk7cyBub3cgZnVsbCAqLwogCQlpZiAoIXR4Yi0mZ3Q7c3BhY2UgfHwKIAkJICAgIChtc2dfZGF0YV9sZWZ0KG1zZykgPT0gMCAmYW1wOyZhbXA7ICFtb3JlKSkgewomIzQzOwkJCS8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZAomIzQzOwkJCSAqIGhhdmUgY29ycnVwdGVkIHRoZSB0eGJ1ZiBjb250ZW50IHdpdGggYSBwYXJ0aWFsCiYjNDM7CQkJICogZW5jcnlwdC4gIEFzc3VtZSB0aGF0IEVOT01FTSBpcyByZXRyeWFibGUsIGJ1dAomIzQzOwkJCSAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlyZXQgPSBjYWxsLSZndDtzZWN1cml0eS0mZ3Q7c2VjdXJlX3BhY2tldChjYWxsLCB0eGIpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQkJCWlmIChyZXQgPT0gLUVOT01FTSkKJiM0MzsJCQkJCWdvdG8gbWF5YmVfZXJyb3JfcmV3aW5kOwomIzQzOwkJCQlzZXRfYml0KFJYUlBDX0NBTExfVFhfRVJST1IsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJCQlnb3RvIG91dF90eGI7CiYjNDM7CQkJfQomIzQzOwogCQkJaWYgKG1zZ19kYXRhX2xlZnQobXNnKSA9PSAwICZhbXA7JmFtcDsgIW1vcmUpCiAJCQkJdHhiLSZndDtmbGFncyB8PSBSWFJQQ19MQVNUX1BBQ0tFVDsKLQotCQkJcmV0ID0gY2FsbC0mZ3Q7c2VjdXJpdHktJmd0O3NlY3VyZV9wYWNrZXQoY2FsbCwgdHhiKTsKLQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCWdvdG8gb3V0OwogCQkJcnhycGNfcXVldWVfcGFja2V0KHJ4LCBjYWxsLCB0eGIsIG5vdGlmeV9lbmRfdHgpOwogCQkJdHhiID0gTlVMTDsKIAkJfQpAQCAtNDUzLDQ4ICYjNDM7NDcxLDcyIEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAogc3VjY2VzczoKIAlyZXQgPSBjb3BpZWQ7Ci0JaWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgJmFtcDsmYW1wOwotCSAgICBjYWxsLSZndDtlcnJvciAmbHQ7IDApCi0JCXJldCA9IGNhbGwtJmd0O2Vycm9yOwotb3V0OgomIzQzO291dF90eGI6CiAJY2FsbC0mZ3Q7dHhfcGVuZGluZyA9IHR4YjsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtjYWxsLSZndDt1c2VyX211dGV4KTsKIAlfbGVhdmUoJiMzNDsgPSAlZCYjMzQ7LCByZXQpOwogCXJldHVybiByZXQ7CiAKIGNhbGxfdGVybWluYXRlZDoKIAlyeHJwY19wdXRfdHhidWYodHhiLCByeHJwY190eGJ1Zl9wdXRfc2VuZF9hYm9ydGVkKTsKLQlfbGVhdmUoJiMzNDsgPSAlZCYjMzQ7LCBjYWxsLSZndDtlcnJvcik7Ci0JcmV0dXJuIGNhbGwtJmd0O2Vycm9yOwotCiYjNDM7CWNhbGwtJmd0O3R4X3BlbmRpbmcgPSBOVUxMOwomIzQzOwlyZXQgPSBjYWxsLSZndDtlcnJvcjsKJiM0MzsJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzO21heWJlX2Vycm9yX3Jld2luZDoKJiM0MzsJLyogSWYgd2UgZ290IGEgcmV0cnlhYmxlIGVycm9yIGFmdGVyIGNvcHlpbmcgYWxsIHRoZSBzdXBwbGllZCBkYXRhIGludG8KJiM0MzsJICogdGhlIGxhc3QgcGFja2V0LCB3ZSBuZWVkIHRvIHJld2luZCB0aGUgYnVmZmVyIGJ5IG9uZSBieXRlIHNvIHRoZQomIzQzOwkgKiBjYWxsZXIga25vd3MgdGhleSBuZWVkIHRvIHJldHJ5LgomIzQzOwkgKi8KJiM0MzsJaWYgKGNvcGllZCAmYW1wOyZhbXA7ICFtb3JlICZhbXA7JmFtcDsgIW1zZ19kYXRhX2xlZnQobXNnKSkgewomIzQzOwkJdHhiLSZndDtzcGFjZSAgJiM0Mzs9IDE7CiYjNDM7CQl0eGItJmd0O2xlbiAgICAtPSAxOwomIzQzOwkJdHhiLSZndDtvZmZzZXQgLT0gMTsKJiM0MzsJCWNvcGllZCAgICAgIC09IDE7CiYjNDM7CQlpZiAoY2FsbC0mZ3Q7dHhfdG90YWxfbGVuICE9IC0xKQomIzQzOwkJCWNhbGwtJmd0O3R4X3RvdGFsX2xlbiAmIzQzOz0gMTsKJiM0MzsJCWlvdl9pdGVyX3JldmVydCgmYW1wO21zZy0mZ3Q7bXNnX2l0ZXIsIDEpOwomIzQzOwl9CiBtYXliZV9lcnJvcjoKLQlpZiAoY29waWVkKQomIzQzOwlpZiAoY29waWVkKSB7CiYjNDM7CQlpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY2FsbC0mZ3Q7ZXJyb3IgJmx0OyAwKSB7CiYjNDM7CQkJcmV0ID0gY2FsbC0mZ3Q7ZXJyb3I7CiYjNDM7CQkJZ290byBvdXRfdW5sb2NrOwomIzQzOwkJfQogCQlnb3RvIHN1Y2Nlc3M7Ci0JZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZ290byBvdXRfdHhiOwogCiBlZmF1bHQ6CiAJcmV0ID0gLUVGQVVMVDsKLQlnb3RvIG91dDsKJiM0MzsJZ290byBvdXRfdHhiOwogCiB3YWl0X2Zvcl9zcGFjZToKIAlyZXQgPSAtRUFHQUlOOwogCWlmIChtc2ctJmd0O21zZ19mbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpCiAJCWdvdG8gbWF5YmVfZXJyb3I7CiYjNDM7CWNhbGwtJmd0O3R4X3BlbmRpbmcgPSB0eGI7CiYjNDM7CXR4YiA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7Ci0JKl9kcm9wcGVkX2xvY2sgPSB0cnVlOwomIzQzOwogCXJldCA9IHJ4cnBjX3dhaXRfZm9yX3R4X3dpbmRvdyhyeCwgY2FsbCwgJmFtcDt0aW1lbywKIAkJCQkgICAgICAgbXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX1dBSVRBTEwpOwogCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIG1heWJlX2Vycm9yOwomIzQzOwkJZ290byBvdXRfbm9sb2NrOwogCWlmIChjYWxsLSZndDtpbnRlcnJ1cHRpYmlsaXR5ID09IFJYUlBDX0lOVEVSUlVQVElCTEUpIHsKIAkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpICZsdDsgMCkgewogCQkJcmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTsKLQkJCWdvdG8gbWF5YmVfZXJyb3I7CiYjNDM7CQkJZ290byBvdXRfbm9sb2NrOwogCQl9CiAJfSBlbHNlIHsKIAkJbXV0ZXhfbG9jaygmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpOwogCX0KLQkqX2Ryb3BwZWRfbG9jayA9IGZhbHNlOwogCWdvdG8gcmVsb2FkOwomIzQzO291dF9ub2xvY2s6CiYjNDM7CV9sZWF2ZSgmIzM0OyA9ICVkIFtpbnRyXSYjMzQ7LCByZXQpOwomIzQzOwlyZXR1cm4gY29waWVkID86IHJldDsKIH0KIAogLyoKQEAgLTUwMyw2ICYjNDM7NTQ1LDggQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LAogc3RhdGljIGludCByeHJwY19zZW5kbXNnX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfc2VuZF9wYXJhbXMgKnApCiB7CiAJc3RydWN0IGNtc2doZHIgKmNtc2c7CiYjNDM7CWtleV9zZXJpYWxfdCBrZXlfaWQ7CiYjNDM7CWtleV9yZWZfdCBrZXk7CiAJYm9vbCBnb3RfdXNlcl9JRCA9IGZhbHNlOwogCWludCBsZW47CiAKQEAgLTU4Nyw2ICYjNDM7NjMxLDIzIEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zICpwKQogCQkJCXJldHVybiAtRVJBTkdFOwogCQkJYnJlYWs7CiAKJiM0MzsJCWNhc2UgUlhSUENfUkVTUE9OU0VfQVBQREFUQToKJiM0MzsJCQlpZiAobGVuICE9IHNpemVvZihrZXlfc2VyaWFsX3QpKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQlpZiAocC0mZ3Q7Y2FsbC5hcHBfZGF0YSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJa2V5X2lkID0gKihrZXlfc2VyaWFsX3QgKilDTVNHX0RBVEEoY21zZyk7CiYjNDM7CQkJa2V5ID0gbG9va3VwX3VzZXJfa2V5KGtleV9pZCwgMCwgS0VZX05FRURfU0VBUkNIKTsKJiM0MzsJCQlpZiAoSVNfRVJSKGtleSkpCiYjNDM7CQkJCXJldHVybiBQVFJfRVJSKGtleSk7CiYjNDM7CQkJaWYgKGtleV9yZWZfdG9fcHRyKGtleSktJmd0O3R5cGUgIT0gJmFtcDtrZXlfdHlwZV91c2VyICZhbXA7JmFtcDsKJiM0MzsJCQkgICAga2V5X3JlZl90b19wdHIoa2V5KS0mZ3Q7dHlwZSAhPSAmYW1wO2tleV90eXBlX2xvZ29uKSB7CiYjNDM7CQkJCWtleV9yZWZfcHV0KGtleSk7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsJCQlwLSZndDtjYWxsLmFwcF9kYXRhID0ga2V5X3JlZl90b19wdHIoa2V5KTsKJiM0MzsJCQlicmVhazsKJiM0MzsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC02OTUsOCAmIzQzOzc1NiwxMCBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIAkJCWdvdG8gZXJyb3JfcmVsZWFzZV9zb2NrOwogCQljYWxsID0gcnhycGNfbmV3X2NsaWVudF9jYWxsX2Zvcl9zZW5kbXNnKHJ4LCBtc2csICZhbXA7cCk7CiAJCS8qIFRoZSBzb2NrZXQgaXMgbm93IHVubG9ja2VkLi4uICovCi0JCWlmIChJU19FUlIoY2FsbCkpCiYjNDM7CQlpZiAoSVNfRVJSKGNhbGwpKSB7CiYjNDM7CQkJa2V5X3B1dChwLmNhbGwuYXBwX2RhdGEpOwogCQkJcmV0dXJuIFBUUl9FUlIoY2FsbCk7CiYjNDM7CQl9CiAJCS8qIC4uLiBhbmQgd2UgaGF2ZSB0aGUgY2FsbCBsb2NrLiAqLwogCQlwLmNhbGwubnJfdGltZW91dHMgPSAwOwogCQlyZXQgPSAwOwpAQCAtNzY5LDggJiM0Mzs4MzIsOCBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIAkJcmV0ID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBSWFJQQ19DTURfU0VORF9EQVRBOgotCQlyZXQgPSByeHJwY19zZW5kX2RhdGEocngsIGNhbGwsIG1zZywgbGVuLCBOVUxMLCAmYW1wO2Ryb3BwZWRfbG9jayk7Ci0JCWJyZWFrOwomIzQzOwkJcmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4LCBjYWxsLCBtc2csIGxlbiwgTlVMTCk7CiYjNDM7CQlnb3RvIGVycm9yX3B1dDsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwogCQlicmVhazsKQEAgLTc4MSwxMSAmIzQzOzg0NCwxMyBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7CiBlcnJvcl9wdXQ6CiAJcnhycGNfcHV0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9wdXRfc2VuZG1zZyk7CiYjNDM7CWtleV9wdXQocC5jYWxsLmFwcF9kYXRhKTsKIAlfbGVhdmUoJiMzNDsgPSAlZCYjMzQ7LCByZXQpOwogCXJldHVybiByZXQ7CiAKIGVycm9yX3JlbGVhc2Vfc29jazoKIAlyZWxlYXNlX3NvY2soJmFtcDtyeC0mZ3Q7c2spOwomIzQzOwlrZXlfcHV0KHAuY2FsbC5hcHBfZGF0YSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtODA4LDcgJiM0Mzs4NzMsNiBAQCBpbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwKIAkJCSAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAkJCSAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KQogewotCWJvb2wgZHJvcHBlZF9sb2NrID0gZmFsc2U7CiAJaW50IHJldDsKIAogCV9lbnRlcigmIzM0O3slZH0sJiMzNDssIGNhbGwtJmd0O2RlYnVnX2lkKTsKQEAgLTgxOSwxMiAmIzQzOzg4MywxMCBAQCBpbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwKIAltdXRleF9sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7CiAKIAlyZXQgPSByeHJwY19zZW5kX2RhdGEocnhycGNfc2soc29jay0mZ3Q7c2spLCBjYWxsLCBtc2csIGxlbiwKLQkJCSAgICAgIG5vdGlmeV9lbmRfdHgsICZhbXA7ZHJvcHBlZF9sb2NrKTsKJiM0MzsJCQkgICAgICBub3RpZnlfZW5kX3R4KTsKIAlpZiAocmV0ID09IC1FU0hVVERPV04pCiAJCXJldCA9IGNhbGwtJmd0O2Vycm9yOwogCi0JaWYgKCFkcm9wcGVkX2xvY2spCi0JCW11dGV4X3VubG9jaygmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpOwogCV9sZWF2ZSgmIzM0OyA9ICVkJiMzNDssIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmMgYi9uZXQvcnhycGMvc2VydmVyX2tleS5jCmluZGV4IDNlZmUxMDRiMTkzMGNiLi5mYzZmNDc4ZTE3NjJhNyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3NlcnZlcl9rZXkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvc2VydmVyX2tleS5jCkBAIC0xNzMsNDMgJiM0MzsxNzMsMyBAQCBpbnQgcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBrZXkgKmtleXJpbmcpCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wocnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyk7Ci0KLS8qKgotICogcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlIC0gU2V0IHRoZSBtYW5hZ2UtcmVzcG9uc2UgZmxhZyBmb3IgYSBrZXJuZWwgc2VydmljZQotICogQHNrOiBUaGUgc29ja2V0IHRvIHNldCB0aGUga2V5cmluZyBvbgotICogQHNldDogVHJ1ZSB0byBzZXQsIGZhbHNlIHRvIGNsZWFyIHRoZSBmbGFnCi0gKgotICogU2V0IHRoZSBmbGFnIG9uIGFuIHJ4cnBjIHNvY2tldCB0byBzYXkgdGhhdCB0aGUgY2FsbGVyIHdhbnRzIHRvIG1hbmFnZSB0aGUKLSAqIFJFU1BPTlNFIHBhY2tldCBhbmQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGl0IG1heSBjb250YWluLiAgU2V0dGluZyB0aGlzCi0gKiBtZWFucyB0aGF0IHJlY3Ztc2coKSB3aWxsIHJldHVybiBtZXNzYWdlcyB3aXRoIFJYUlBDX0NIQUxMRU5HRUQgaW4gdGhlCi0gKiBjb250cm9sIG1lc3NhZ2UgYnVmZmVyIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNoYWxsZW5nZS4KLSAqCi0gKiBUaGUgdXNlciBzaG91bGQgcmVzcG9uZCB0byB0aGUgY2hhbGxlbmdlIGJ5IHBhc3NpbmcgUlhSUENfUkVTUE9ORCBvcgotICogUlhSUENfUkVTUE9ORF9BQk9SVCBjb250cm9sIG1lc3NhZ2VzIHdpdGggc2VuZG1zZygpIHRvIHRoZSBzYW1lIGNhbGwuCi0gKiBTdXBwbGVtZW50YXJ5IGNvbnRyb2wgbWVzc2FnZXMsIHN1Y2ggYXMgUlhSUENfUkVTUF9SWEdLX0FQUERBVEEsIG1heSBiZQotICogaW5jbHVkZWQgdG8gaW5kaWNhdGUgdGhlIHBhcnRzIHRoZSB1c2VyIHdhbnRzIHRvIHN1cHBseS4KLSAqCi0gKiBUaGUgc2VydmVyIHdpbGwgYmUgcGFzc2VkIHRoZSByZXNwb25zZSBkYXRhIHdpdGggYSBSWFJQQ19SRVNQT05ERUQgY29udHJvbAotICogbWVzc2FnZSB3aGVuIGl0IGdldHMgdGhlIGZpcnN0IGRhdGEgZnJvbSBlYWNoIGNhbGwuCi0gKgotICogTm90ZSB0aGF0IHRoaXMgaXMgb25seSBob25vdXJlZCBieSBzZWN1cml0eSBjbGFzc2VzIHRoYXQgbmVlZCBhdXhpbGlhcnkgZGF0YQotICogKGUuZy4gUnhHSykuICBUaG9zZSB0aGF0IGRvbiYjMzk7dCBvZmZlciB0aGUgZmFjaWxpdHkgKGUuZy4gUnhLQUQpIHJlc3BvbmQKLSAqIHdpdGhvdXQgY29uc3VsdGluZyB1c2Vyc3BhY2UuCi0gKgotICogUmV0dXJuOiBUaGUgcHJldmlvdXMgc2V0dGluZy4KLSAqLwotaW50IHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc2V0KQotewotCXN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNrKTsKLQlpbnQgcmV0OwotCi0JbG9ja19zb2NrKHNrKTsKLQlyZXQgPSAhIXRlc3RfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCAmYW1wO3J4LSZndDtmbGFncyk7Ci0JaWYgKHNldCkKLQkJc2V0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgJmFtcDtyeC0mZ3Q7ZmxhZ3MpOwotCWVsc2UKLQkJY2xlYXJfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCAmYW1wO3J4LSZndDtmbGFncyk7Ci0JcmVsZWFzZV9zb2NrKHNrKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChyeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2UpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMKaW5kZXggNmY4OGI1MDdmOTI3OTEuLjkwYzFiZDVkN2RmZWNmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMKQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIGludCB1c2VyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApCiAJdXBheWxvYWQgPSBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCBkYXRhbGVuKTsKIAlpZiAoIXVwYXlsb2FkKQogCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7dXBheWxvYWQtJmd0O3JlZiwgMSk7CiAKIAkvKiBhdHRhY2ggdGhlIGRhdGEgKi8KIAlwcmVwLSZndDtxdW90YWxlbiA9IGRhdGFsZW47CkBAIC04OCwxMiAmIzQzOzg5LDIyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfZnJlZV9wcmVwYXJzZSk7CiAKIHN0YXRpYyB2b2lkIHVzZXJfZnJlZV9wYXlsb2FkX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7Ci0Jc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQ7CiYjNDM7CXN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkID0KJiM0MzsJCWNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCwgcmN1KTsKIAotCXBheWxvYWQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQsIHJjdSk7CiAJa2ZyZWVfc2Vuc2l0aXZlKHBheWxvYWQpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBGcmVlIGEgdXNlciBkZWZpbmVkIGtleSBwYXlsb2FkLgomIzQzOyAqLwomIzQzO3ZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpCiYjNDM7ewomIzQzOwlpZiAocGF5bG9hZCAmYW1wOyZhbXA7IHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3BheWxvYWQtJmd0O3JlZikpCiYjNDM7CQljYWxsX3JjdSgmYW1wO3BheWxvYWQtJmd0O3JjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocHV0X3VzZXJfa2V5X3BheWxvYWQpOwomIzQzOwogLyoKICAqIHVwZGF0ZSBhIHVzZXIgZGVmaW5lZCBrZXkKICAqIC0gdGhlIGtleSYjMzk7cyBzZW1hcGhvcmUgaXMgd3JpdGUtbG9ja2VkCkBAIC0xMTUsOCAmIzQzOzEyNiw3IEBAIGludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApCiAJcmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgcHJlcC0mZ3Q7cGF5bG9hZC5kYXRhWzBdKTsKIAlwcmVwLSZndDtwYXlsb2FkLmRhdGFbMF0gPSBOVUxMOwogCi0JaWYgKHphcCkKLQkJY2FsbF9yY3UoJmFtcDt6YXAtJmd0O3JjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTsKJiM0MzsJcHV0X3VzZXJfa2V5X3BheWxvYWQoemFwKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNlcl91cGRhdGUpOwpAQCAtMTM0LDcgJiM0MzsxNDQsNyBAQCB2b2lkIHVzZXJfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSkKIAogCWlmICh1cGF5bG9hZCkgewogCQlyY3VfYXNzaWduX2tleXBvaW50ZXIoa2V5LCBOVUxMKTsKLQkJY2FsbF9yY3UoJmFtcDt1cGF5bG9hZC0mZ3Q7cmN1LCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3UpOwomIzQzOwkJcHV0X3VzZXJfa2V5X3BheWxvYWQodXBheWxvYWQpOwogCX0KIH0KIApAQCAtMTQ3LDkgJiM0MzsxNTcsOCBAQCB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpCiB7CiAJc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkID0ga2V5LSZndDtwYXlsb2FkLmRhdGFbMF07CiAKLQlrZnJlZV9zZW5zaXRpdmUodXBheWxvYWQpOwomIzQzOwlwdXRfdXNlcl9rZXlfcGF5bG9hZCh1cGF5bG9hZCk7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfZGVzdHJveSk7CiAKIC8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0OTQ3CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiByeHJwYyBhbmQgYWZzIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgYHJ4cnBjYCBhbmQgYGFmc2AgaW50ZXJhY3QsIHNwZWNpZmljYWxseSB3aXRoIE9PQiBtZXNzYWdlIGhhbmRsaW5nLiBJdCYjMzk7cyByaXBwZWQgb3V0IGBvb2IuY2AgZnJvbSBgbmV0L3J4cnBjL2AgYW5kIHJlcGxhY2VkIHRoZSBvbGQgY2hhbGxlbmdlLXJlc3BvbnNlIG1lY2hhbmlzbSBpbiBgcnhycGNgIChzcGVjaWZpY2FsbHkgZm9yIFJ4R0ssIGludGVyZXN0aW5nLi4uKSBhbmQgcmVmYWN0b3JlZCBgYWZzYCB0byB1c2UgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIGFuZCBrZXlzIGluc3RlYWQgb2YgdGhhdCBvbGQgT09CIG1ldGhvZC4gRnVuY3Rpb25hbGx5LCBpdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBjb3JlIG5ldHdvcmtpbmcgYW5kIGZpbGVzeXN0ZW0gY29tcG9uZW50cyAtIGByeHJwY2AgYW5kIGBhZnNgIGFyZW4mIzM5O3QganVzdCB0b3lzLCB0aGV5JiMzOTtyZSBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZS4KCk15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgY29kZSByZWFjaGFibGU/IFRoYW5rZnVsbHksIGByeHJwY2AgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBBRl9SWFJQQyBzb2NrZXRzIC0gYWNjZXNzaWJsZSB0aHJvdWdoIHR5cGljYWwgbmV0d29ya2luZyBpbnRlcmFjdGlvbnMuIGBhZnNgIGlzIGEgZmlsZXN5c3RlbSwgc28gbW91bnQgcG9pbnRzIGFuZCBmaWxlIG9wZXJhdGlvbnMgYXJlIG91ciBlbnRyeSBwb2ludHMgdGhlcmUuIEV4Y2VsbGVudCAtIGJvdGggYXJlIHdpdGhpbiByZWFjaCBpbiBzdGFuZGFyZCBRRU1VIHNldHVwcywgdGhhdCBtYWtlcyB0aGlzIHNpZ25pZmljYW50bHkgZWFzaWVyIHRvIGRlYWwgd2l0aCwgcmF0aGVyIHRoYW4gaGF2aW5nIHRvIGp1bXAgdGhyb3VnaCBob29wcyB3aXRoIHNwZWNpYWxpemVkIGNvbmZpZ3VyYXRpb25zLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGp1aWN5IGJpdHMgdG8gaGl0IHdpdGggZnV6emluZy4gSW4gYG5ldC9yeHJwYy9gLCBJJiMzOTttIGxvb2tpbmcgYXQ6CiogICBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgIC0gSXQmIzM5O3MgYmVlbiBtb2RpZmllZCB0byByZWNlaXZlIGFuIGBhcHBfZGF0YWAga2V5LCBzbyBkZWZpbml0ZWx5IHByaW1lIGZ1enppbmcgY2FuZGlkYXRlLgoqICAgYHJ4cnBjX2RvX3NlbmRtc2dgLCBgcnhycGNfc2VuZF9kYXRhYCwgYW5kIGByeHJwY19yZWN2bXNnYCAtIGNsYXNzaWMgbmV0d29ya2luZyBmdW5jdGlvbnMsIG5vdyB3aXRoIHBvdGVudGlhbGx5IGFsdGVyZWQgYmVoYXZpb3IuCiogICBgcnhycGNfa2VybmVsX3F1ZXJ5X2tleWAgLSBhICpuZXcqIGZ1bmN0aW9uLiBBbnl0aGluZyBuZXcgaXMgYWxtb3N0IGNlcnRhaW5seSB3b3J0aCBhIGNsb3NlIGxvb2suCiogICBgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZWAgLSB0aGlzIGxpa2VseSBoYW5kbGVzIHRoYXQgY2hhbGxlbmdlLXJlc3BvbnNlIGxvZ2ljLgoKSW4gYGZzL2Fmcy9gLCB0aGUgbGlzdCBpczoKKiAgIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCAtIGtleSBwYXJ0IG9mIHRoZSByZXBsYWNlbWVudCwgYWJzb2x1dGVseSB3b3J0aCBhIHNob3QuCiogICBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgIC0gc3RhbmRhcmQgZmlsZXN5c3RlbSBlbnRyeSwgY291bGQgcmV2ZWFsIGludGVyZXN0aW5nIGlzc3Vlcy4KCkNvbmZpZ3VyYXRpb24td2lzZSwgSSYjMzk7bGwgbmVlZCBgQ09ORklHX0FGX1JYUlBDYCBhbmQgYENPTkZJR19BRlNfRlNgLCBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwgb2YgY291cnNlLCBgQ09ORklHX1JYS0FEYCBpcyBuZWVkZWQgdG8gd29yayB0aGUgUlhLQUQgZmVhdHVyZXMuIE5vdywgd2FpdCBhIG1pbnV0ZSwgYENPTkZJR19SWEdLYC4uLiBpcyB0aGF0IGV2ZW4gZW5hYmxlZCBpbiBvdXIgc3RhbmRhcmQga2VybmVsPyBOZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0OyBJIGNhbiYjMzk7dCBzdGFydCB0ZXN0aW5nIHdpdGhvdXQga25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJYR0smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL0tjb25maWc9NTg9Y29uZmlnIFJYS0FEXG4tLVxubmV0L3J4cnBjL0tjb25maWctNjUtXG5uZXQvcnhycGMvS2NvbmZpZzo2Njpjb25maWcgUlhHS1xubmV0L3J4cnBjL0tjb25maWctNjctXHRib29sIFwmIzM0O1J4UlBDIEdTU0FQSSBzZWN1cml0eVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTY5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBjaGVjayBjb25maXJtZWQgYENPTkZJR19SWEdLYCBpcyBlbmFibGVkIOKAkyBnb29kLiBOb3csIGxldCYjMzk7cyBwaXZvdCB0byB0aGUgZmlsZSBzeXN0ZW0gYW5kIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgc3RhdGUgb2YgYENPTkZJR19BRlNfRlNgIGFuZCBgQ09ORklHX0FGX1JYUlBDYC4gVGhlc2UsIGFsb25nIHdpdGggUlhHSywgd2lsbCBwcm92aWRlIGEgY3J1Y2lhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwmIzM5O3MgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSByZWdhcmRpbmcgZGlzdHJpYnV0ZWQgZmlsZSBzeXN0ZW1zIGFuZCByZW1vdGUgcHJvY2VkdXJlIGNhbGxzLiBTcGVjaWZpY2FsbHksIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBBRlMgYW5kIFJYUlBDIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoYXQgYXJjaGl0ZWN0dXJlIGlzIGNvbmZpZ3VyZWQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUZTX0ZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9hZnMvS2NvbmZpZzoyOmNvbmZpZyBBRlNfRlNcbmZzL2Fmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKVwmIzM0O1xuLS1cbmZzL2Fmcy9LY29uZmlnPTE3PWNvbmZpZyBBRlNfREVCVUdcbi0tXG5mcy9hZnMvS2NvbmZpZy0yNi1cbmZzL2Fmcy9LY29uZmlnOjI3OmNvbmZpZyBBRlNfRlNDQUNIRVxuZnMvYWZzL0tjb25maWctMjgtXHRib29sIFwmIzM0O1Byb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjMwNAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgdGhlIGBDT05GSUdfQUZfUlhSUENgIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgcmlnaHQgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBDT05GSUdfQUZfUlhSUENgIHNldHRpbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBhcyBhIGNydWNpYWwgZmxhZyByZWxhdGVkIHRvIHRoZSBSWC1SUEMgKFJlbW90ZSBQcm9jZWR1cmUgQ2FsbCkgbmV0d29ya2luZyBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgc3lzdGVtLiBJcyBpdCBlbmFibGVkPyBEaXNhYmxlZD8gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmZsaWN0cz8gTXkgcHJpbWFyeSBnb2FsIGlzIHRvIGFzc2VzcyBpdHMgaW1wYWN0IG9uIHRoZSBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBvdmVyYWxsIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRhcmdldCBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGlzIGNvbmZpZ3VyYXRpb24mIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRl9SWFJQQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvS2NvbmZpZy01LVxubmV0L3J4cnBjL0tjb25maWc6Njpjb25maWcgQUZfUlhSUENcbm5ldC9yeHJwYy9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtSeFJQQyBzZXNzaW9uIHNvY2tldHNcJiMzNDtcbi0tXG5uZXQvcnhycGMvS2NvbmZpZz0yNT1pZiBBRl9SWFJQQ1xubmV0L3J4cnBjL0tjb25maWctMjYtXG5uZXQvcnhycGMvS2NvbmZpZzoyNzpjb25maWcgQUZfUlhSUENfSVBWNlxubmV0L3J4cnBjL0tjb25maWctMjgtXHRib29sIFwmIzM0O0lQdjYgc3VwcG9ydCBmb3IgUnhSUENcJiMzNDtcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy0zMy1cbm5ldC9yeHJwYy9LY29uZmlnOjM0OmNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfTE9TU1xubmV0L3J4cnBjL0tjb25maWctMzUtXHRib29sIFwmIzM0O0luamVjdCBwYWNrZXQgbG9zcyBpbnRvIFJ4UlBDIHBhY2tldCBzdHJlYW1cJiMzNDtcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy0zOS1cbm5ldC9yeHJwYy9LY29uZmlnOjQwOmNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcbm5ldC9yeHJwYy9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtJbmplY3QgZGVsYXkgaW50byBwYWNrZXQgcmVjZXB0aW9uXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWctNDktXG5uZXQvcnhycGMvS2NvbmZpZzo1MDpjb25maWcgQUZfUlhSUENfREVCVUdcbm5ldC9yeHJwYy9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtSeFJQQyBkeW5hbWljIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnPTg5PWNvbmZpZyBSWFBFUkZcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy05NS1cbm5ldC9yeHJwYy9LY29uZmlnOjk2OmNvbmZpZyBBRl9SWFJQQ19LVU5JVF9URVNUXG5uZXQvcnhycGMvS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O1J4UlBDIGNyeXB0byBLVW5pdCB0ZXN0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjg4NwoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uZmlndXJhdGlvbnMgYW5kIHRoZWlyIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMsIGFzIGlmIGl0JiMzOTtzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBzZXQgb2YgY29uZmlndXJhdGlvbnM6IGBBRl9SWFJQQ2AsIGBBRlNfRlNgLCBgUlhLQURgLCBhbmQgYFJYR0tgLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRoYXQgdGhpcyBzbWVsbHMgbGlrZSBBRlMgKEFuZHJldyBGaWxlIFN5c3RlbSkgb3Igc29tZXRoaW5nIGhlYXZpbHkgcmVsYXRlZC4gVGhlIGBSWGAgcHJlZml4ZXMgYXJlIGEgZGVhZCBnaXZlYXdheSBmb3IgdGhlIFJlbGlhYmxlIFggKFJYKSBwcm90b2NvbCwgaW50ZWdyYWwgdG8gQUZTLiBgQUZTX0ZTYCBjbGVhcmx5IHBvaW50cyB0byB0aGUgZmlsZSBzeXN0ZW0gY29tcG9uZW50LiBgUlhLQURgIGxpa2VseSBpbnZvbHZlcyBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiB1c2VkIGluIHRoaXMgY29udGV4dC4gQW5kIEkmIzM5O20gcHJldHR5IGNlcnRhaW4gYFJYR0tgIGlzIGxpbmtlZCB0byB0aGUgUlggR2F0ZUtlZXBlci4KCkdpdmVuIHRoYXQgYHVzZXJfZGVmaW5lZC5jYCBoYXMgYmVlbiB0b3VjaGVkLCB0aGF0JiMzOTtzIHRoZSBjcnVjaWFsIGhpbnQuIFNpbmNlIHRoZSBjb25maWdzIGFyZSByZWxhdGVkIHRvIEFGUywgSSBuZWVkIHRvIGxvb2sgYXQgYEtFWVNgIHRvIHNlZSBob3cga2V5cyBhcmUgYmVpbmcgaGFuZGxlZCwgc2luY2UgYHVzZXJfZGVmaW5lZC5jYCB0b3VjaGVzIGFyZSBmcmVxdWVudGx5IHJlbGF0ZWQgdG8gc3BlY2lmaWMgdXNlciBzZXR1cHMsIG9yIGFjY2VzcyByZWxhdGVkIGxvZ2ljLiBTbywgbGV0JiMzOTtzIGV4cGxvcmUgdGhhdCBxdWlja2x5LiBJIGJldCB0aGUgYEtFWVNgIGNvbmZpZyBwbGF5cyBhIHJvbGUgaGVyZSwgcG9zc2libHkgZm9yIHNvbWUgY3VzdG9tIEFGUy1yZWxhdGVkIHNlY3VyaXR5IG9yIGtleSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS0VZUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWc9MjQyPWNvbmZpZyBOU1BJUkVfVElNRVJcbi0tXG5kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWctMjQ3LVxuZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnOjI0ODpjb25maWcgS0VZU1RPTkVfVElNRVJcbmRyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZy0yNDktXHRib29sIFwmIzM0O0tleXN0b25lIHRpbWVyIGRyaXZlclwmIzM0OyBpZiBDT01QSUxFX1RFU1Rcbi0tXG5kcml2ZXJzL2lycWNoaXAvS2NvbmZpZz0zOTg9Y29uZmlnIElSUV9DUk9TU0JBUlxuLS1cbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTQwNS1cbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnOjQwNjpjb25maWcgS0VZU1RPTkVfSVJRXG5kcml2ZXJzL2lycWNoaXAvS2NvbmZpZy00MDctXHR0cmlzdGF0ZSBcJiMzNDtLZXlzdG9uZSAyIElSUSBjb250cm9sbGVyIElQXCYjMzQ7XG4tLVxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc9MTEyPWNvbmZpZyBEQThYWF9SRU1PVEVQUk9DXG4tLVxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWctMTMyLVxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc6MTMzOmNvbmZpZyBLRVlTVE9ORV9SRU1PVEVQUk9DXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZy0xMzQtXHR0cmlzdGF0ZSBcJiMzNDtLZXlzdG9uZSBSZW1vdGVwcm9jIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3NvYy90aS9LY29uZmlnPTk9aWYgU09DX1RJXG5kcml2ZXJzL3NvYy90aS9LY29uZmlnLTEwLVxuZHJpdmVycy9zb2MvdGkvS2NvbmZpZzoxMTpjb25maWcgS0VZU1RPTkVfTkFWSUdBVE9SX1FNU1NcbmRyaXZlcnMvc29jL3RpL0tjb25maWctMTItXHR0cmlzdGF0ZSBcJiMzNDtLZXlzdG9uZSBRdWV1ZSBNYW5hZ2VyIFN1YiBTeXN0ZW1cJiMzNDtcbi0tXG5kcml2ZXJzL3NvYy90aS9LY29uZmlnLTIyLVxuZHJpdmVycy9zb2MvdGkvS2NvbmZpZzoyMzpjb25maWcgS0VZU1RPTkVfTkFWSUdBVE9SX0RNQVxuZHJpdmVycy9zb2MvdGkvS2NvbmZpZy0yNC1cdHRyaXN0YXRlIFwmIzM0O1RJIEtleXN0b25lIE5hdmlnYXRvciBQYWNrZXQgRE1BIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZz0yMz1jb25maWcgRlNMX1VTQjJfT1RHXG4tLVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMzAtXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzozMTpjb25maWcgS0VZU1RPTkVfVVNCX1BIWVxuZHJpdmVycy91c2IvcGh5L0tjb25maWctMzItXHR0cmlzdGF0ZSBcJiMzNDtLZXlzdG9uZSBVU0IgUEhZIERyaXZlclwmIzM0O1xuLS1cbnNlY3VyaXR5L2tleXMvS2NvbmZpZy01LVxuc2VjdXJpdHkva2V5cy9LY29uZmlnOjY6bWVudWNvbmZpZyBLRVlTXG5zZWN1cml0eS9rZXlzL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIGFjY2VzcyBrZXkgcmV0ZW50aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5zZWN1cml0eS9rZXlzL0tjb25maWc9MjQ9aWYgS0VZU1xuc2VjdXJpdHkva2V5cy9LY29uZmlnLTI1LVxuc2VjdXJpdHkva2V5cy9LY29uZmlnOjI2OmNvbmZpZyBLRVlTX1JFUVVFU1RfQ0FDSEVcbnNlY3VyaXR5L2tleXMvS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRlbXBvcmFyeSBjYWNoaW5nIG9mIHRoZSBsYXN0IHJlcXVlc3Rfa2V5KCkgcmVzdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3ODIyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXM6IEtleSBGdW5jdGlvbnMgZm9yIFJvYnVzdG5lc3MqKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIGZ1enppbmcgdGhpcyBgcnhycGNgIGltcGxlbWVudGF0aW9uLCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCB3ZSBuZWVkIHRoZSBgS0VZU2AgZnVuY3Rpb25hbGl0eSBhcyBhIGJhc2VsaW5lIOKAkyBubyBxdWVzdGlvbiBhYm91dCB0aGF0LiBOb3csIHdoZXJlIGRvIHdlIHN0YXJ0PyBXZSYjMzk7dmUgZ290IHRvIHBpbnBvaW50IHRoZSBmdW5jdGlvbnMgdGhhdCByZXByZXNlbnQgdGhlIG1vc3QgY3JpdGljYWwgYXR0YWNrIHN1cmZhY2VzLiBBZnRlciBhIHF1aWNrIHJldmlldywgSSYjMzk7dmUgaWRlbnRpZmllZCBhIGZldyBrZXkgY2FuZGlkYXRlcyBmb3IgZnV6emluZzogYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCwgYHJ4cnBjX3NlbmRfZGF0YWAsIGByeHJwY19yZWN2bXNnYCwgYHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXlgLCBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAsIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCBhbmQgYHJ4cnBjX2RvX3NlbmRtc2dgLiBUaGVzZSBhbGwgc2VlbSBsaWtlIGxvZ2ljYWwgZW50cnkgcG9pbnRzLCBuZXR3b3JrIGludGVyYWN0aW9uIHBvaW50cywgYW5kIHNlbnNpdGl2ZSBkYXRhIHByb2Nlc3NpbmcgYXJlYXMuIE5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBzZWUgaWYgYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCBpcyBleHBvcnRlZCBhcyB0aGF0IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipyeHJwY19rZXJuZWxfYmVnaW5fY2FsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvYWZfcnhycGMuYz0zNDE9c3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3J4cnBjL2FmX3J4cnBjLmMtMzk3LX1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjM5ODpFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKTtcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTM5OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyODEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKlZlcmlmeWluZyBLZXJuZWwgU3ltYm9sIEV4cG9ydCoqCgpZZXMsIHRoYXQmIzM5O3MgY29ycmVjdCwgY29uZmlybWVkLgoKTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlIGByeHJwY19rZXJuZWxfcXVlcnlfa2V5YCBzeW1ib2wgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgYnkgdGhlIGtlcm5lbC4gVGhpcyBpcyBlc3NlbnRpYWwsIGlzbiYjMzk7dCBpdD8gQmVmb3JlIEkgZXZlbiBjb25zaWRlciBhbnkgZnVydGhlciBhY3Rpb25zLCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUuIEkgY2FuJiMzOTt0IHByb2NlZWQgd2l0aG91dCBjb25maXJtaW5nIHRoYXQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcHJlcmVxdWlzaXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipyeHJwY19rZXJuZWxfcXVlcnlfa2V5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yeHJwYy9rZXkuYz05MDY9dm9pZCByeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgdTggKl9zZWN1cml0eV9pbmRleCxcbi0tXG5uZXQvcnhycGMva2V5LmMtOTMxLX1cbm5ldC9yeHJwYy9rZXkuYzo5MzI6RVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfa2V5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1MzUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkNoZWNraW5nIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCoqCgpZZXMuIE9rYXksIHRoYXQmIzM5O3Mgd2hhdCBJIHdhcyB0aGlua2luZy4gTGV0JiMzOTtzIGdldCByaWdodCB0byBpdCBhbmQgY2hlY2sgdGhlIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUga2V5IGVsZW1lbnQgSSBuZWVkIHRvIHZlcmlmeSBoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2NtX3NlY3VyaXR5LmM9Mjg9c3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19yeGdrX2NtX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGVuY3R5cGUpXG4tLVxuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMjA3LSAqL1xuZnMvYWZzL2NtX3NlY3VyaXR5LmM6MjA4OmludCBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBrZXkgKmtleSlcbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTIwOS17XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTA4Nj1leHRlcm4gYm9vbCBhZnNfY21faW5jb21pbmdfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKik7XG4tLVxuZnMvYWZzL2ludGVybmFsLmgtMTA5MC0gKi9cbmZzL2Fmcy9pbnRlcm5hbC5oOjEwOTE6aW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KTtcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwOTItI2lmZGVmIENPTkZJR19SWEdLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTA1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgUG90ZW50aWFsIENhbmRpZGF0ZXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIGR5bmFtaWMg4oCTIHRoYXQmIzM5O3MgYSBrZXkgcG9zaXRpdmUuIEEgc3RhdGljIHNvbHV0aW9uIGlzIHJhcmVseSB0aGUgbW9zdCBlbGVnYW50LCBvciB0aGUgbW9zdCBlZmZlY3RpdmUsIGZvciB0aGlzIHR5cGUgb2YgcHJvYmxlbS4gU28sIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vdCogc3RhdGljIGltbWVkaWF0ZWx5IGVsZXZhdGVzIGl0cyBwb3RlbnRpYWwuIE15IG1lbnRhbCBjaGVja2xpc3QgdGlja3MgYSBib3ggdGhlcmUuIE5vdywgbGV0JiMzOTtzIHNlZSBob3cgaXQgYWN0dWFsbHkgYmVoYXZlcy4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2VgIG1vcmUgY2xvc2VseS4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBoaW50cyBhdCB0aGUgY3J1Y2lhbCBhcmVhIHdlIG5lZWQgdG8gdW5kZXJzdGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhna19yZXNwb25kX3RvX2NoYWxsZW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvcnhnay5jPTg5ND1zdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9yeHJwYy9yeGdrLmMtOTgyLSAqL1xubmV0L3J4cnBjL3J4Z2suYzo5ODM6c3RhdGljIGludCByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxubmV0L3J4cnBjL3J4Z2suYy05ODQtXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4tLVxubmV0L3J4cnBjL3J4Z2suYz0xMjgwPWNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGdrX3lmcyA9IHtcbi0tXG5uZXQvcnhycGMvcnhnay5jLTEyOTYtXHQudmFsaWRhdGVfY2hhbGxlbmdlXHRcdD0gcnhna192YWxpZGF0ZV9jaGFsbGVuZ2UsXG5uZXQvcnhycGMvcnhnay5jOjEyOTc6XHQucmVzcG9uZF90b19jaGFsbGVuZ2VcdFx0PSByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxubmV0L3J4cnBjL3J4Z2suYy0xMjk4LVx0LnZlcmlmeV9yZXNwb25zZVx0XHQ9IHJ4Z2tfdmVyaWZ5X3Jlc3BvbnNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTM1MQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipBbmFseXppbmcgdGhlIFN0YXRpYyBDYWxsYmFjayBpbiByeGdrX3lmcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBzdGF0aWMgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBiZWluZyB1c2VkIGFzIGEgY2FsbGJhY2sgd2l0aGluIGByeGdrX3lmc2AuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZyBmb3IgbWUuIFN0YXRpYyBmdW5jdGlvbnMsIGJ5IHRoZWlyIG5hdHVyZSwgYXJlIHRpZWQgdG8gdGhlIGNvbXBpbGF0aW9uIHVuaXQgdGhleSYjMzk7cmUgZGVmaW5lZCBpbi4gVGhhdCYjMzk7cyBmaW5lIGluIHNvbWUgY2FzZXMsIGJ1dCB3aGVuIHlvdSYjMzk7cmUgZGVhbGluZyB3aXRoIGNhbGxiYWNrcywgZXNwZWNpYWxseSBpbiBhIHN5c3RlbSBhcyBjb21wbGV4IGFzIHRoaXMsIGl0IGludHJvZHVjZXMgbGltaXRhdGlvbnMuIEl0IHdvdWxkIGJlIGNsZWFuZXIsIG1vcmUgZmxleGlibGUsIGFuZCBwb3RlbnRpYWxseSBtb3JlIHJvYnVzdCBpZiB3ZSBjb3VsZCBhdm9pZCB0aGUgc3RhdGljIGNvbnN0cmFpbnQgaGVyZS4gVXNpbmcgc29tZXRoaW5nIG5vbi1zdGF0aWMgd291bGQgcHJvdmlkZSBncmVhdGVyIG9wcG9ydHVuaXRpZXMgZm9yIGN1c3RvbWl6YXRpb24sIG9yIHJldXNlLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSYjMzk7cyBhbiBhbHRlcm5hdGl2ZSB0byBkb2luZyB0aGlzLCBvciBpZiB3ZSBjYW4gbWFrZSBkbyB3aXRoIGByeHJwY19kb19zZW5kbXNnYCBhbmQgYHJ4cnBjX3JlY3Ztc2dgCgpTbywgbGV0JiMzOTtzIGRpdmUgaW50byBgcnhycGNfZG9fc2VuZG1zZ2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGl0IHRvIHNlZSBpZiBpdCBjYW4gYmUgYWRhcHRlZCBvciBpZiBpdCBwcm92aWRlcyBhIGJldHRlciBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHJ4cnBjX2RvX3NlbmRtc2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL2FyLWludGVybmFsLmg9MTQ4MD1ib29sIHJ4cnBjX3Byb3Bvc2VfYWJvcnQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHMzMiBhYm9ydF9jb2RlLCBpbnQgZXJyb3IsXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xNDgxLVx0XHRcdCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpO1xubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTQ4MjppbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqLCBzdHJ1Y3QgbXNnaGRyICosIHNpemVfdCk7XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xNDgzLVxuLS1cbm5ldC9yeHJwYy9zZW5kbXNnLmM9NjcwPXJ4cnBjX25ld19jbGllbnRfY2FsbF9mb3Jfc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvcnhycGMvc2VuZG1zZy5jLTcyMC0gKi9cbm5ldC9yeHJwYy9zZW5kbXNnLmM6NzIxOmludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxubmV0L3J4cnBjL3NlbmRtc2cuYy03MjIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTk0NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipUaGUgRHluYW1pYyBOYXR1cmUgb2YgdGhlIFRhc2sqKgoKVGhpcyBpc24mIzM5O3QgYSBmaXhlZCBwcm9ibGVtOyBpdCYjMzk7cyBldm9sdmluZy4gSXQmIzM5O3Mgbm90IGEgY2FzZSBvZiBhcHBseWluZyBhIGtub3duIHNvbHV0aW9uIGRpcmVjdGx5LCB0aGVyZSYjMzk7cyBsaWtlbHkgc29tZSBlbGVtZW50IG9mIGR5bmFtaXNtIHRvIGNvbnNpZGVyLiBUaGUgYXNzdW1wdGlvbiBvZiBzdGFzaXMgaXMgZGFuZ2Vyb3VzLCBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBhcHByb2FjaCB0aGUgcHJvYmxlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgY3VycmVudGx5IGJlaGF2aW5nLiBJIG5lZWQgdG8gY29uc2lkZXIgdGhhdCB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbSBpcyBub3QgY29uc3RhbnQuCgpNeSBhdHRlbnRpb24gaW1tZWRpYXRlbHkgdHVybnMgdG8gYHJ4cnBjX3NlbmRfZGF0YWAuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIsIHRvIGFzc2VzcyBob3cgdGhlIHN5c3RlbSBpcyBhY3R1YWxseSBiZWhhdmluZy4gSXQmIzM5O3MgdGhlIGNyaXRpY2FsIHBvaW50IHdoZXJlIHRoZSBkYXRhIGlzIGxpa2VseSBtb3ZpbmcsIGFuZCB3aGVyZSBhbnkgaW5oZXJlbnQgdmFyaWFiaWxpdHkgd2lsbCBsaWtlbHkgYmUgb2JzZXJ2YWJsZS4gSSB3aWxsIGdvIHRoZXJlIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J4cnBjX3NlbmRfZGF0YSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oPTE4NzA9VFJBQ0VfRVZFTlQocnhycGNfcmV0cmFuc21pdCxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmgtMTg3MS1cdCAgICBUUF9QUk9UTyhzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmg6MTg3MjpcdFx0ICAgICBzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSAqcmVxLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaC0xODczLVx0XHQgICAgIHN0cnVjdCByeHJwY190eGJ1ZiAqdHhiKSxcbi0tXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaD05NjI9c3RydWN0IHJ4cnBjX3R4cXVldWUge1xuLS1cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTk4Ni0gKi9cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oOjk4NzpzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSB7XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC05ODgtXHRrdGltZV90XHRcdFx0bm93O1x0XHQvKiBDdXJyZW50IHRpbWUgKi9cbi0tXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaD0xMzc1PWludCByeHJwY19zZW5kX2Fib3J0X3BhY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqKTtcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oOjEzNzY6dm9pZCByeHJwY19zZW5kX2RhdGFfcGFja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSAqcmVxKTtcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEzNzctdm9pZCByeHJwY19zZW5kX2Nvbm5fYWJvcnQoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4pO1xuLS1cbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmM9NjA9c3RhdGljIGJvb2wgcnhycGNfcmV0cmFuc21pdF9kYXRhKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYzo2MTpcdFx0XHRcdCAgc3RydWN0IHJ4cnBjX3NlbmRfZGF0YV9yZXEgKnJlcSlcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmMtNjIte1xuLS1cbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmMtNzItXHR0eGItXHUwMDNlZmxhZ3MgfD0gUlhSUENfVFhCVUZfUkVTRU5UO1xubmV0L3J4cnBjL2NhbGxfZXZlbnQuYzo3MzpcdHJ4cnBjX3NlbmRfZGF0YV9wYWNrZXQoY2FsbCwgcmVxKTtcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmMtNzQtXHRyeHJwY19pbmNfc3RhdChjYWxsLVx1MDAzZXJ4bmV0LCBzdGF0X3R4X2RhdGFfcmV0cmFucyk7XG4tLVxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYz04Nj1zdGF0aWMgdm9pZCByeHJwY19yZXNlbmQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jLTg3LXtcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmM6ODg6XHRzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSByZXEgPSB7XG5uZXQvcnhycGMvY2FsbF9ldmVudC5jLTg5LVx0XHQubm93XHQ9IGt0aW1lX2dldF9yZWFsKCksXG4tLVxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYz0xMzE9dm9pZCByeHJwY19yZXNlbmRfdGxwKHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYy0xMzIte1xubmV0L3J4cnBjL2NhbGxfZXZlbnQuYzoxMzM6XHRzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSByZXEgPSB7XG5uZXQvcnhycGMvY2FsbF9ldmVudC5jLTEzNC1cdFx0Lm5vd1x0XHQ9IGt0aW1lX2dldF9yZWFsKCksXG4tLVxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYz0xOTQ9c3RhdGljIHZvaWQgcnhycGNfdHJhbnNtaXRfZnJlc2hfZGF0YShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgdW5zaWduZWQgaW50IGxpbWl0LFxuLS1cbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmMtMjA1LVx0d2hpbGUgKHNwYWNlIFx1MDAzZSAwKSB7XG5uZXQvcnhycGMvY2FsbF9ldmVudC5jOjIwNjpcdFx0c3RydWN0IHJ4cnBjX3NlbmRfZGF0YV9yZXEgcmVxID0ge1xubmV0L3J4cnBjL2NhbGxfZXZlbnQuYy0yMDctXHRcdFx0Lm5vd1x0PSBrdGltZV9nZXRfcmVhbCgpLFxuLS1cbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmMtMjU2LVx0XHRzcGFjZSAtPSByZXEubjtcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmM6MjU3Olx0XHRyeHJwY19zZW5kX2RhdGFfcGFja2V0KGNhbGwsIFx1MDAyNnJlcSk7XG5uZXQvcnhycGMvY2FsbF9ldmVudC5jLTI1OC1cdH1cbi0tXG5uZXQvcnhycGMvb3V0cHV0LmM9NDI2PXN0YXRpYyBzaXplX3QgcnhycGNfcHJlcGFyZV9kYXRhX3N1YnBhY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbm5ldC9yeHJwYy9vdXRwdXQuYzo0Mjc6XHRcdFx0XHRcdCAgIHN0cnVjdCByeHJwY19zZW5kX2RhdGFfcmVxICpyZXEsXG5uZXQvcnhycGMvb3V0cHV0LmMtNDI4LVx0XHRcdFx0XHQgICBzdHJ1Y3QgcnhycGNfdHhidWYgKnR4Yixcbi0tXG5uZXQvcnhycGMvb3V0cHV0LmM9NTIwPXN0YXRpYyB1bnNpZ25lZCBpbnQgcnhycGNfcHJlcGFyZV90eHF1ZXVlKHN0cnVjdCByeHJwY190eHF1ZXVlICp0cSxcbm5ldC9yeHJwYy9vdXRwdXQuYzo1MjE6XHRcdFx0XHRcdCAgc3RydWN0IHJ4cnBjX3NlbmRfZGF0YV9yZXEgKnJlcSlcbm5ldC9yeHJwYy9vdXRwdXQuYy01MjIte1xuLS1cbm5ldC9yeHJwYy9vdXRwdXQuYz01MzU9c3RhdGljIHNpemVfdCByeHJwY19wcmVwYXJlX2RhdGFfcGFja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxubmV0L3J4cnBjL291dHB1dC5jOjUzNjpcdFx0XHRcdFx0c3RydWN0IHJ4cnBjX3NlbmRfZGF0YV9yZXEgKnJlcSxcbm5ldC9yeHJwYy9vdXRwdXQuYy01MzctXHRcdFx0XHRcdHN0cnVjdCByeHJwY193aXJlX2hlYWRlciAqd2hkcilcbi0tXG5uZXQvcnhycGMvb3V0cHV0LmMtNjM4LSAqL1xubmV0L3J4cnBjL291dHB1dC5jOjYzOTp2b2lkIHJ4cnBjX3NlbmRfZGF0YV9wYWNrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHN0cnVjdCByeHJwY19zZW5kX2RhdGFfcmVxICpyZXEpXG5uZXQvcnhycGMvb3V0cHV0LmMtNjQwLXtcbi0tXG5uZXQvcnhycGMvc2VuZG1zZy5jPTIzMD1zdGF0aWMgdm9pZCByeHJwY19ub3RpZnlfZW5kX3R4KHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG4tLVxubmV0L3J4cnBjL3NlbmRtc2cuYy0yMzgtICogUXVldWUgYSBEQVRBIHBhY2tldCBmb3IgdHJhbnNtaXNzaW9uLCBzZXQgdGhlIHJlc2VuZCB0aW1lb3V0IGFuZCBzZW5kXG5uZXQvcnhycGMvc2VuZG1zZy5jOjIzOTogKiB0aGUgcGFja2V0IGltbWVkaWF0ZWx5LiAgUmV0dXJucyB0aGUgZXJyb3IgZnJvbSByeHJwY19zZW5kX2RhdGFfcGFja2V0KClcbm5ldC9yeHJwYy9zZW5kbXNnLmMtMjQwLSAqIGluIGNhc2UgdGhlIGNhbGxlciB3YW50cyB0byBkbyBzb21ldGhpbmcgd2l0aCBpdC5cbi0tXG5uZXQvcnhycGMvc2VuZG1zZy5jPTI4Mj1zdGF0aWMgaW50IHJ4cnBjX2FsbG9jX3R4cXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbi0tXG5uZXQvcnhycGMvc2VuZG1zZy5jLTMyMC0gKi9cbm5ldC9yeHJwYy9zZW5kbXNnLmM6MzIxOnN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbm5ldC9yeHJwYy9zZW5kbXNnLmMtMzIyLVx0XHRcdCAgIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuLS1cbm5ldC9yeHJwYy9zZW5kbXNnLmM9NzIxPWludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9yeHJwYy9zZW5kbXNnLmMtODM0LVx0Y2FzZSBSWFJQQ19DTURfU0VORF9EQVRBOlxubmV0L3J4cnBjL3NlbmRtc2cuYzo4MzU6XHRcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeCwgY2FsbCwgbXNnLCBsZW4sIE5VTEwpO1xubmV0L3J4cnBjL3NlbmRtc2cuYy04MzYtXHRcdGdvdG8gZXJyb3JfcHV0O1xuLS1cbm5ldC9yeHJwYy9zZW5kbXNnLmM9ODcyPWludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuLS1cbm5ldC9yeHJwYy9zZW5kbXNnLmMtODg0LVxubmV0L3J4cnBjL3NlbmRtc2cuYzo4ODU6XHRyZXQgPSByeHJwY19zZW5kX2RhdGEocnhycGNfc2soc29jay1cdTAwM2VzayksIGNhbGwsIG1zZywgbGVuLFxubmV0L3J4cnBjL3NlbmRtc2cuYy04ODYtXHRcdFx0ICAgICAgbm90aWZ5X2VuZF90eCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTMwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBSeFJQQyBLZXJuZWwgRnVuY3Rpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBSeFJQQyBjb2RlIGFuZCBtYWtpbmcgc29tZSBvYnNlcnZhdGlvbnMgYWJvdXQgZGF0YSB0cmFuc21pc3Npb24uIFRoZSBmdW5jdGlvbiBgcnhycGNfc2VuZF9kYXRhYCBpcyBtYXJrZWQgYXMgc3RhdGljLCBtZWFuaW5nIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIENvbnRyYXN0IHRoYXQgd2l0aCBgcnhycGNfZG9fc2VuZG1zZ2AsIHdoaWNoIGlzICpub3QqIHN0YXRpYywgaW1wbHlpbmcgaXQmIzM5O3MgcG90ZW50aWFsbHkgZXhwb3NlZCB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIG9yIGV2ZW4gdG8gbG9hZGFibGUgbW9kdWxlcy4gVGhlbiB0aGVyZSYjMzk7cyBgcnhycGNfa2VybmVsX3NlbmRfZGF0YWAsIHdoaWNoIGlzIHNwZWNpZmljYWxseSAqZXhwb3J0ZWQqLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIGNvcmUgUnhSUEMgbW9kdWxlLCBsaWtlbHkgcHJvdmlkaW5nIGEgd2F5IGZvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyB0byB0cmFuc21pdCBkYXRhIHRocm91Z2ggdGhlIFJ4UlBDIHByb3RvY29sLiBHaXZlbiB0aGUgZGlmZmVyZW5jZXMgYW5kIHZpc2liaWxpdHksIEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBpcyBwYXNzZWQgYW5kIHdoZXJlIGl0IGlzIGJlaW5nIHVzZWQgaW4gdGhlIHByb2Nlc3MuIFdpdGggdGhlIGRpZmZlcmVuY2VzIGluIG1pbmQsIGxldCYjMzk7cyBzaGlmdCBnZWFycyBhbmQgdGFrZSBhIGxvb2sgYXQgYHJ4cnBjX3JlY3Ztc2dgIGFuZCB0cmFjZSB0aGUgbGlmZWN5Y2xlIG9mIG1lc3NhZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgcnhycGNfcmVjdm1zZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvYXItaW50ZXJuYWwuaD0xNDI1PXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqKTtcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oOjE0MjY6aW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbXNnaGRyICosIHNpemVfdCwgaW50KTtcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTE0MjctXG4tLVxubmV0L3J4cnBjL3JlY3Ztc2cuYz0yMj1zdGF0aWMgdm9pZCByeHJwY19yZXF1ZXVlX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4tLVxubmV0L3J4cnBjL3JlY3Ztc2cuYy01MS0gKi9cbm5ldC9yeHJwYy9yZWN2bXNnLmM6NTI6c3RhdGljIGludCByeHJwY19yZWN2bXNnX3Rlcm0oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHN0cnVjdCBtc2doZHIgKm1zZylcbm5ldC9yeHJwYy9yZWN2bXNnLmMtNTMte1xuLS1cbm5ldC9yeHJwYy9yZWN2bXNnLmM9MTQzPXN0YXRpYyBpbnQgcnhycGNfdmVyaWZ5X2RhdGEoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3J4cnBjL3JlY3Ztc2cuYy0xODQtICovXG5uZXQvcnhycGMvcmVjdm1zZy5jOjE4NTpzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfdXNlcl9pZChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IG1zZ2hkciAqbXNnLFxubmV0L3J4cnBjL3JlY3Ztc2cuYy0xODYtXHRcdFx0XHQgaW50IGZsYWdzKVxuLS1cbm5ldC9yeHJwYy9yZWN2bXNnLmMtMjA5LSAqL1xubmV0L3J4cnBjL3JlY3Ztc2cuYzoyMTA6c3RhdGljIGludCByeHJwY19yZWN2bXNnX2RhdGEoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG5uZXQvcnhycGMvcmVjdm1zZy5jLTIxMS1cdFx0XHQgICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5uZXQvcnhycGMvcmVjdm1zZy5jLTMyOS0gKi9cbm5ldC9yeHJwYy9yZWN2bXNnLmM6MzMwOmludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC9yeHJwYy9yZWN2bXNnLmMtMzMxLVx0XHQgIGludCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI3MTAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqTmF2aWdhdGluZyB0aGUgYHJ4cnBjYCBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgcnhycGNgIGNvZGUsIGFuZCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgYHJ4cnBjX3JlY3Ztc2dgIGlzbiYjMzk7dCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gcmVtZW1iZXIgYXMgSSB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIHBvdGVudGlhbCBpc3N1ZXMuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmAuIFRoaXMgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcG9pbnQgdG8gZGl2ZSBpbiBhbmQgdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0sIGFuZCBob3cgdGhlIGRhdGEgdWx0aW1hdGVseSBtYWtlcyBpdCB0byB0aGUgdGFyZ2V0LiBJJiMzOTtsbCBmb2N1cyBvbiBob3cgaXQgY2FsbHMgYHJ4cnBjYCBmdW5jdGlvbnMgYW5kIGFueSBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3aGVyZSBgcnhycGNfcmVjdm1zZ2AgbWlnaHQgYmUgY2FsbGVkIGluZGlyZWN0bHksIGlmIHRoZSBjYWxsIGlzIGNvbmRpdGlvbmFsLCBhbmQgdGhlIGFyZ3VtZW50cyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2ZzX3Byb2JlLmM9MTM4PXZvaWQgYWZzX2ZpbGVzZXJ2ZXJfcHJvYmVfcmVzdWx0KHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbi0tXG5mcy9hZnMvZnNfcHJvYmUuYy0yMzctICovXG5mcy9hZnMvZnNfcHJvYmUuYzoyMzg6aW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG5mcy9hZnMvZnNfcHJvYmUuYy0yMzktXHRcdFx0ICAgIHN0cnVjdCBhZnNfYWRkcl9saXN0ICpuZXdfYWxpc3QsIHN0cnVjdCBrZXkgKmtleSlcbi0tXG5mcy9hZnMvaW50ZXJuYWwuaD0xMjQwPWV4dGVybiB2b2lkIGFmc19maWxlc2VydmVyX3Byb2JlX3Jlc3VsdChzdHJ1Y3QgYWZzX2NhbGwgKik7XG5mcy9hZnMvaW50ZXJuYWwuaDoxMjQxOmludCBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxuZnMvYWZzL2ludGVybmFsLmgtMTI0Mi1cdFx0XHQgICAgc3RydWN0IGFmc19hZGRyX2xpc3QgKm5ld19hbGlzdCwgc3RydWN0IGtleSAqa2V5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxODIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyB0aGUgRHluYW1pYyBOYXR1cmUgb2YgRmlsZSBTZXJ2ZXIgUHJvYmluZyoqCgpSaWdodCwgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYCBpc24mIzM5O3QgYSBzdGF0aWMgdmFyaWFibGUgb3IgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIEl0IGhhcyBzb21lIGJlaGF2aW9yIGFuZCBsaWtlbHkgcmVhY3RzIHRvIGNlcnRhaW4gcGFyYW1ldGVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBkeW5hbWljIG5hdHVyZS4gSXQgaXNuJiMzOTt0IGEgc2ltcGxlIGxvb2t1cC4KClNpbmNlIGl0IGhhcyBhIGR5bmFtaWMgYXNwZWN0LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGhvdyBmaWxlIHNlcnZlcnMgYXJlIGFjdHVhbGx5IGNyZWF0ZWQgd2l0aGluIHRoaXMgQUZTIGNvbnRleHQuIFRoZSBtb3N0IGxpa2VseSBwYXRoIHRvIGludmVzdGlnYXRlIGhvdyBpdCBpcyBpbml0aWFsaXplZCBvciB1cGRhdGVkLCBnaXZlbiB0aGF0IHVuZGVyc3RhbmRpbmcsIGlzIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYC4gSSBleHBlY3QgdG8gZmluZCBjbHVlcyB0aGVyZSBhYm91dCB3aGF0IG1ha2VzIGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmAgd29yaywgb3IgaG93IGl0IGlzIHRyaWdnZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2NtX3NlY3VyaXR5LmM9Mjg9c3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19yeGdrX2NtX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGVuY3R5cGUpXG4tLVxuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMjA3LSAqL1xuZnMvYWZzL2NtX3NlY3VyaXR5LmM6MjA4OmludCBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBrZXkgKmtleSlcbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTIwOS17XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTA4Nj1leHRlcm4gYm9vbCBhZnNfY21faW5jb21pbmdfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKik7XG4tLVxuZnMvYWZzL2ludGVybmFsLmgtMTA5MC0gKi9cbmZzL2Fmcy9pbnRlcm5hbC5oOjEwOTE6aW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KTtcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwOTItI2lmZGVmIENPTkZJR19SWEdLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjQ0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIER5bmFtaWMgTmF0dXJlIG9mIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCoqCgpBbHJpZ2h0LCBzbyBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAgaXNuJiMzOTt0IHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgaW5mbHVlbmNpbmcgaXRzIHN0YXRlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBzZWN1cml0eSBhc3BlY3RzIG9mIHVzZXItZGVmaW5lZCBjb25maWd1cmF0aW9ucy4gSSBzdXNwZWN0IHRoYXQgZWl0aGVyIGB1c2VyX3ByZXBhcnNlYCBvciBgdXNlcl91cGRhdGVgIGluIGBzZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jYCBtaWdodCBiZSB0aGUga2V5LiBUaGV54oCZcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4geW91JiMzOTtyZSBkZWFsaW5nIHdpdGggZHluYW1pYyBjaGFuZ2VzIGluZmx1ZW5jZWQgYnkgdXNlciBpbnB1dCBvciBydW50aW1lIHVwZGF0ZXMgd2l0aGluIHRoYXQgc3BlY2lmaWMgYXJlYSBvZiB0aGUgY29kZWJhc2UuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgdHJhY2luZyBiYWNrIHRoZSBpbmZsdWVuY2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhvc2UgZnVuY3Rpb25zIGFyZSBkb2luZyBhbmQgaWYgdGhleSBoYXZlIGFueSBpbnRlcmFjdGlvbiB3aXRoIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHVzZXJfcHJlcGFyc2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oPTM3PXN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQ7XG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtMzgtXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmg6Mzk6ZXh0ZXJuIGludCB1c2VyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oLTQwLWV4dGVybiB2b2lkIHVzZXJfZnJlZV9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTU0PUVYUE9SVF9TWU1CT0xfR1BMKGtleV90eXBlX2xvZ29uKTtcbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTU4LSAqL1xuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzo1OTppbnQgdXNlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy02MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MTAxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBEeW5hbWljIE5hdHVyZSBvZiBgdXNlcl9wcmVwYXJzZWAqKgoKT2theSwgc28gYHVzZXJfcHJlcGFyc2VgIGlzbiYjMzk7dCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBjb21wb25lbnRzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBwdXRfdXNlcl9rZXlfcGF5bG9hZGAuIFRoYXQgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3csIGdpdmVuIHRoZSBjb250ZXh0LiBJJiMzOTttIHRoaW5raW5nIEkgY2FuIHN0YXJ0IHRoZXJlIHRvIHRyYWNlIHdoYXQgaXMgZ29pbmcgb24gd2l0aCB0aGUgdXNlciYjMzk7cyBpbnB1dCBiZWZvcmUgb3RoZXIgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaD00MD1leHRlcm4gdm9pZCB1c2VyX2ZyZWVfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmg6NDE6dm9pZCBwdXRfdXNlcl9rZXlfcGF5bG9hZChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZCk7XG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtNDItZXh0ZXJuIGludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xuLS1cbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM9OTA9c3RhdGljIHZvaWQgdXNlcl9mcmVlX3BheWxvYWRfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEwMC0gKi9cbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTAxOnZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEwMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NDkwCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBgcHV0X3VzZXJfa2V5X3BheWxvYWRgLCBhbmQgSSYjMzk7dmUgcXVpY2tseSByZWFsaXplZCBpdCYjMzk7cyAqbm90KiBhIHN0YXRpYyBlbnRpdHkuIFRoaXMgbWVhbnMgaXRzIGluZmx1ZW5jZSBpc24mIzM5O3QgbGltaXRlZCB0byBhIHNpbmdsZSwgcHJlZGljdGFibGUgbG9jYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHNwZWNpZmljIHN5bWJvbHMgd2hlcmUgaXQgbWlnaHQgaW50ZXJzZWN0IHdpdGggdGhlIHN5c3RlbSYjMzk7cyBmb2N1czogYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCwgYHJ4cnBjX2RvX3NlbmRtc2dgLCBgcnhycGNfcmVjdm1zZ2AsIGByeHJwY19rZXJuZWxfcXVlcnlfa2V5YCwgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgLCBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGtleSB0YXJnZXQsIGBwdXRfdXNlcl9rZXlfcGF5bG9hZGAgaXRzZWxmLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXlgIGlzIHVzZWQgZWxzZXdoZXJlIGluIHRoZSBzeXN0ZW0uIEdpdmVuIHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQsIEkgYW50aWNpcGF0ZSB0aGF0IGl0ICpjYW4qIGJlIGNhbGxlZCBleHRlcm5hbGx5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBhY3R1YWwgdXNhZ2UuCgpOZXh0LCBJJiMzOTtsbCB0dXJuIG15IGF0dGVudGlvbiB0byBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgIGJlY2F1c2UgSSByZWNhbGwgaXQgYXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGtlcm5lbC1sZXZlbCBpbnRlcmFjdGlvbnMgd2l0aCByeHJwYy4gVGhpcyBtYWtlcyBpdCBhIGhpZ2gtcHJvYmFiaWxpdHkgdGFyZ2V0IGZvciBleGFtaW5pbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIGtleSBtYW5hZ2VtZW50LgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucyBhZ2FpbiB0byBjbGFyaWZ5IHRoZWlyIGRlcGVuZGVuY2llcy4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBjaGVja2luZzoKKiAgIGBBRl9SWFJQQ2AKKiAgIGBBRlNfRlNgCiogICBgUlhLQURgCiogICBgUlhHS2AKKiAgIGBLRVlTYAoKQWgsIGBSWEdLYCAoUlhSUEMgS2VyYmVyb3MgS2V5KSBkZXBlbmRzIG9uIGBBRl9SWFJQQ2AuIFRoYXQmIzM5O3MgYW4gaW1wb3J0YW50IHJlbGF0aW9uc2hpcCB0byBjb25zaWRlci4gSSBzaG91bGQgdmVyaWZ5IHRoaXMgYnkgY29uc3VsdGluZyBgbmV0L3J4cnBjL0tjb25maWdgIGZvciB0aGUgYFJYR0tgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIHNob3VsZCBoaWdobGlnaHQgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRoYXQgbWF5IGltcGFjdCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSWEdLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yeHJwYy9LY29uZmlnPTU4PWNvbmZpZyBSWEtBRFxuLS1cbm5ldC9yeHJwYy9LY29uZmlnLTY1LVxubmV0L3J4cnBjL0tjb25maWc6NjY6Y29uZmlnIFJYR0tcbm5ldC9yeHJwYy9LY29uZmlnLTY3LVx0Ym9vbCBcJiMzNDtSeFJQQyBHU1NBUEkgc2VjdXJpdHlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUyMTYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBEZXBlbmRlbmNpZXMgZm9yIFJYR0sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBSWEdLYCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgd2hlcmUgZG9lcyBpdCBsaXZlPyBXaGF0JiMzOTtzIGl0cyBlY29zeXN0ZW0gbGlrZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyB0byBncmFzcCBpdHMgcG90ZW50aWFsIGltcGFjdCBhbmQgdnVsbmVyYWJpbGl0aWVzLiBJcyBpdCBhIGNvcmUgbGlicmFyeT8gQSB3cmFwcGVyIGFyb3VuZCBzb21ldGhpbmcgZWxzZT8gT3IgZG9lcyBpdCBzaXQgaW4gYW4gaXNvbGF0ZWQgY29ybmVyIG9mIHRoZSBjb2RlYmFzZT8KCkkgbmVlZCB0byBxdWlja2x5IG1hcCBvdXQgdGhlIGFyY2hpdGVjdHVyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaW50ZXJuYWwgcGFja2FnZXMsIGV4dGVybmFsIGxpYnJhcmllcywgb3Igc29tZSBjb21iaW5hdGlvbj8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgbW9zdCBvYnZpb3VzOiBpdHMgaW1tZWRpYXRlIGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIGFueSBrbm93biBpc3N1ZXMgd2l0aCB0aG9zZSBwYWNrYWdlcz8gSGF2ZSB3ZSBhdWRpdGVkIHRoZW0gcmVjZW50bHk/CgpCZXlvbmQgdGhlIGluaXRpYWwgbGlzdCwgSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCAqdHJhbnNpdGl2ZSogZGVwZW5kZW5jaWVzLiBUaGUgJiMzNDtkZXBlbmRlbmN5IG9mIGEgZGVwZW5kZW5jeSYjMzQ7IHByb2JsZW0uIFRob3NlIGNhbiBiZSBpbnNpZGlvdXMuIFdlIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmb3IgY29uZmxpY3RzLCB2ZXJzaW9uIG1pc21hdGNoZXMsIGFuZCBzZWN1cml0eSByaXNrcy4gSSBzaG91bGQgZmxhZyBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIG5vIGxvbmdlciBhY3RpdmVseSBtYWludGFpbmVkLgoKU28sIHRoZSBnYW1lIHBsYW4gaXM6IGxpc3QgdGhlIGRpcmVjdCBkZXBzLCBkcmlsbCBkb3duIGludG8gdHJhbnNpdGl2ZSBkZXBzLCBpZGVudGlmeSB0aGUgY3JpdGljYWwgb25lcywgY2hlY2sgZm9yIHZ1bG5lcmFiaWxpdGllcy4gVGhlbiBJJiMzOTtsbCBzdGFydCB0aGlua2luZyBhYm91dCBhbnkgaW1wbGljYXRpb25zIG9uIHRoZSBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSwgd2hpY2ggd2lsbCByZXF1aXJlIGNhcmVmdWwgYW5hbHlzaXMgb2YgaXRzIHVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uLipSWEdLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU1MjMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgbmV0L3J4cnBjL0tjb25maWcgZmlsZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0L3J4cnBjL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGBjb25maWcgUlhHS2Agc2V0dGluZy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdG8gZW5hYmxlIHRoZSBSWFJQQyBrZXJuZWwgbW9kdWxlIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQga25vYnMgYXJlIGF2YWlsYWJsZSBhbmQgaG93IHRoZXkmIzM5O3JlIGludGVuZGVkIHRvIHdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29uZmlndXJhdGlvbiBzZXR0aW5nIGZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBQcm92aWRlIGtlcmJlcm9zIDQgYW5kIEFGUyBrYXNlcnZlciBzZWN1cml0eSBoYW5kbGluZyBmb3IgQUZfUlhSUENcbiAgNjI6XHRcdCAgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZSBrZXkgcmV0ZW50aW9uIHNlcnZpY2UuXG4gIDYzOlx0XG4gIDY0Olx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0LlxuICA2NTpcdFxuICA2NjpcdGNvbmZpZyBSWEdLXG4gIDY3Olx0XHRib29sIFwmIzM0O1J4UlBDIEdTU0FQSSBzZWN1cml0eVwmIzM0O1xuICA2ODpcdFx0c2VsZWN0IENSWVBUT19LUkI1XG4gIDY5Olx0XHRzZWxlY3QgQ1JZUFRPX01BTkFHRVJcbiAgNzA6XHRcdHNlbGVjdCBDUllQVE9fS1JCNUVOQ1xuICA3MTpcdFx0c2VsZWN0IENSWVBUT19BVVRIRU5DXG4gIDcyOlx0XHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXG4gIDczOlx0XHRzZWxlY3QgQ1JZUFRPX0hBU0hfSU5GT1xuICA3NDpcdFx0c2VsZWN0IENSWVBUT19ITUFDXG4gIDc1Olx0XHRzZWxlY3QgQ1JZUFRPX0NNQUNcbiAgNzY6XHRcdHNlbGVjdCBDUllQVE9fU0hBMVxuICA3NzpcdFx0c2VsZWN0IENSWVBUT19TSEEyNTZcbiAgNzg6XHRcdHNlbGVjdCBDUllQVE9fU0hBNTEyXG4gIDc5Olx0XHRzZWxlY3QgQ1JZUFRPX0NCQ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTk2NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyBEZXBlbmRlbmNpZXMgYW5kIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIGFuZCBpdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB3aGF0IGl0IHJlbGllcyBvbiwgbm8gZXhwbGljaXQgYGRlcGVuZHMgb25gIGNsYXVzZSBpcyB2aXNpYmxlLiBCdXQgSSBzZWUgaXQmIzM5O3MgbmVzdGVkIHdpdGhpbiBhbiBgaWYgQUZfUlhSUENgIGJsb2NrLiBUaGlzIHRlbGxzIG1lIHRoYXQgaXQmIzM5O3MgbGlrZWx5IGNvbm5lY3RlZCB0byB0aGUgUnhSUEMgYWRkcmVzcyBmYW1pbHkgc3VwcG9ydC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBjb25maWcgQUZTX0ZTYC4gVGhpcyBpcyBwcm9iYWJseSB3aGVyZSB0aGUga2V5IGRlcGVuZGVuY3kgbGllcy4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLCBzcGVjaWZpY2FsbHkgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhlIGZpbGUgc3lzdGVtLCBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgdHJ1ZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgaGVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBjb250ZXh0IGFuZCBpbXBhY3Qgb24gaXRzIGV4ZWN1dGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEFGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0c2VsZWN0IEFGX1JYUlBDXG4gICA2Olx0XHRzZWxlY3QgRE5TX1JFU09MVkVSXG4gICA3Olx0XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuICAgODpcdFx0c2VsZWN0IENSWVBUT19LUkI1XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBnZXQgYW4gZXhwZXJpbWVudGFsIEFuZHJldyBGaWxlIFN5c3RlbVxuICAxMTpcdFx0ICBkcml2ZXIuIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHVuc2VjdXJlZCByZWFkLW9ubHkgQUZTIGFjY2Vzcy5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBBRlNfREVCVUdcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7QUZTIGR5bmFtaWMgZGVidWdnaW5nXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEFGU19GU1xuICAyMDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjQ2OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBGaWxlc3lzdGVtIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBBRlNfRlNgIGlzIGJ1aWx0IHRvIGxlYW4gb24gdGhlIGBJTkVUYCBmdW5jdGlvbmFsaXR5LCB3aGljaCBtYWtlcyBzZW5zZSwgaXQgbGlrZWx5IG5lZWRzIHNvbWUgbmV0d29yayBjb25uZWN0aXZpdHkuIEFuZCwgb2YgY291cnNlLCBpdCYjMzk7cyBzZWxlY3RpbmcgYEFGX1JYUlBDYC4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyOiBzaW5jZSBgQUZTX0ZTYCBpcyB1c2luZyBgSU5FVGAsIHdlIGhhdmUgdG8gYmUgc3VyZSBpdCYjMzk7cyBlbmFibGVkLiBHZW5lcmFsbHksIGBJTkVUYCBpcyBhbHJlYWR5IGVuYWJsZWQgYnV0IHdlIHNob3VsZCB2ZXJpZnkuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcmVsYXRlZCBjb21wb25lbnRzLi4uIEkgbmVlZCB0byBjb25zaWRlciBgS0VZU2AuIEkmIzM5O2xsIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgaXQgdG8gc2VlIGlmIGl0IGNhdXNlcyBhbnkgaXNzdWVzIHdpdGggYEFGU19GU2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c2VjdXJpdHkva2V5cy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgS2V5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIEtFWVNcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGFjY2VzcyBrZXkgcmV0ZW50aW9uIHN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBBU1NPQ0lBVElWRV9BUlJBWVxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyBzdXBwb3J0IGZvciByZXRhaW5pbmcgYXV0aGVudGljYXRpb24gdG9rZW5zIGFuZFxuICAxMTpcdFx0ICBhY2Nlc3Mga2V5cyBpbiB0aGUga2VybmVsLlxuICAxMjpcdFxuICAxMzpcdFx0ICBJdCBhbHNvIGluY2x1ZGVzIHByb3Zpc2lvbiBvZiBtZXRob2RzIGJ5IHdoaWNoIHN1Y2gga2V5cyBtaWdodCBiZVxuICAxNDpcdFx0ICBhc3NvY2lhdGVkIHdpdGggYSBwcm9jZXNzIHNvIHRoYXQgbmV0d29yayBmaWxlc3lzdGVtcywgZW5jcnlwdGlvblxuICAxNTpcdFx0ICBzdXBwb3J0IGFuZCB0aGUgbGlrZSBjYW4gZmluZCB0aGVtLlxuICAxNjpcdFxuICAxNzpcdFx0ICBGdXJ0aGVybW9yZSwgYSBzcGVjaWFsIHR5cGUgb2Yga2V5IGlzIGF2YWlsYWJsZSB0aGF0IGFjdHMgYXMga2V5cmluZzpcbiAgMTg6XHRcdCAgYSBzZWFyY2hhYmxlIHNlcXVlbmNlIG9mIGtleXMuIEVhY2ggcHJvY2VzcyBpcyBlcXVpcHBlZCB3aXRoIGFjY2Vzc1xuICAxOTpcdFx0ICB0byBmaXZlIHN0YW5kYXJkIGtleXJpbmdzOiBVSUQtc3BlY2lmaWMsIEdJRC1zcGVjaWZpYywgc2Vzc2lvbixcbiAgMjA6XHRcdCAgcHJvY2VzcyBhbmQgdGhyZWFkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk2OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipDb25maWd1cmF0aW9uIERpbGVtbWEqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTt2ZSBnb3QgYEFGX1JYUlBDYCwgYEFGU19GU2AsIGBSWEtBRGAsIGBSWEdLYCwgYW5kIGBLRVlTYC4gVGhlIGlzc3VlIGlzLCBgS0VZU2AgaXMgYSBib29sZWFuLCBzdHJhaWdodCBhbmQgc2ltcGxlLiBIb3dldmVyLCBpdCBzZWVtcyB0aGF0IGBSWEtBRGAgaXMgYWxzbyBhIGJvb2xlYW4gKm5lc3RlZCogd2l0aGluIGBBRl9SWFJQQ2AuIFNvLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBkdWFsaXR5IG9mIHRoYXQgcGFydGljdWxhciBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdGNvbmZpZyBBRl9SWFJQQ19ERUJVR1xuICA1MTpcdFx0Ym9vbCBcJiMzNDtSeFJQQyBkeW5hbWljIGRlYnVnZ2luZ1wmIzM0O1xuICA1MjpcdFx0aGVscFxuICA1MzpcdFx0ICBTYXkgWSBoZXJlIHRvIG1ha2UgcnVudGltZSBjb250cm9sbGFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIGFwcGVhci5cbiAgNTQ6XHRcbiAgNTU6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QuXG4gIDU2Olx0XG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIFJYS0FEXG4gIDU5Olx0XHRib29sIFwmIzM0O1J4UlBDIEtlcmJlcm9zIHNlY3VyaXR5XCYjMzQ7XG4gIDYwOlx0XHRoZWxwXG4gIDYxOlx0XHQgIFByb3ZpZGUga2VyYmVyb3MgNCBhbmQgQUZTIGthc2VydmVyIHNlY3VyaXR5IGhhbmRsaW5nIGZvciBBRl9SWFJQQ1xuICA2MjpcdFx0ICB0aHJvdWdoIHRoZSB1c2Ugb2YgdGhlIGtleSByZXRlbnRpb24gc2VydmljZS5cbiAgNjM6XHRcbiAgNjQ6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QuXG4gIDY1Olx0XG4gIDY2Olx0Y29uZmlnIFJYR0tcbiAgNjc6XHRcdGJvb2wgXCYjMzQ7UnhSUEMgR1NTQVBJIHNlY3VyaXR5XCYjMzQ7XG4gIDY4Olx0XHRzZWxlY3QgQ1JZUFRPX0tSQjVcbiAgNjk6XHRcdHNlbGVjdCBDUllQVE9fTUFOQUdFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzQzMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUlhSUEMgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFJYUlBDIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIEkmIzM5O3ZlIGdvdCBgUlhLQURgIGFuZCBgUlhHS2Agd2hpY2ggYXJlIHN0cmFpZ2h0Zm9yd2FyZCBib29sZWFuIHZhbHVlcywgYW5kIHRoZW4gdGhlcmUgYXJlIGBBRl9SWFJQQ2AgYW5kIGBBRlNfRlNgIHdoaWNoIGFyZSB0cmlzdGF0ZS4gQWxzbywgYEtFWVNgIGlzIGEgYm9vbGVhbi4KCk5vdywgSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgbWFwIHRvIGFjdHVhbCBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2VlaW5nIHdoZXJlIGBDT05GSUdfUlhHS2AgYW5kIGBDT05GSUdfUlhLQURgIGFyZSBkZWZpbmVkIGFuZCB1c2VkLiBMb29rcyBsaWtlIGBDT05GSUdfUlhHS2AgaXMgcmVmZXJlbmNlZCBpbiBib3RoIGBmcy9hZnMvY21fc2VjdXJpdHkuY2AgYW5kIGBmcy9hZnMvaW50ZXJuYWwuaGAuIGBDT05GSUdfUlhLQURgIGlzIG9ubHkgdXNlZCBpbiBgZnMvYWZzL2NtX3NlY3VyaXR5LmNgLiBJbnRlcmVzdGluZy4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gZGVlcGVyLiBJIGtub3cgdGhlcmUgYXJlIGRlZGljYXRlZCBmaWxlcyBsaWtlIGBuZXQvcnhycGMvcnhrYWQuY2AgYW5kIGBuZXQvcnhycGMvcnhnay5jYCwgc28gSSYjMzk7bGwgY2hlY2sgdGhvc2UuIFllcCwgdGhvc2Ugc291cmNlcyBhcmUgY29tcGlsZWQgaWYgYm90aCBgUlhLQURgIGFuZCBgUlhHS2AgYXJlIGVuYWJsZWQuIEdvb2QuIFNlZW1zIHRvIGZvbGxvdyB0aGUgc3RhbmRhcmQgcGF0dGVybi4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgYG5ldC9yeHJwYy9NYWtlZmlsZWAgdG8gc2VlIGhvdyBldmVyeXRoaW5nIGZpdHMgdG9nZXRoZXIgYXQgdGhlIGJ1aWxkIGxldmVsLiBUaGF0IHNob3VsZCBzb2xpZGlmeSB0aGUgZGVwZW5kZW5jeSB0cmVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgTGludXgga2VybmVsIFJ4UlBDXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19BRl9SWFJQQykgJiM0Mzs9IHJ4cnBjLm9cbiAgIDc6XHRcbiAgIDg6XHRyeHJwYy15IDo9IFxcXG4gICA5Olx0XHRhZl9yeHJwYy5vIFxcXG4gIDEwOlx0XHRjYWxsX2FjY2VwdC5vIFxcXG4gIDExOlx0XHRjYWxsX2V2ZW50Lm8gXFxcbiAgMTI6XHRcdGNhbGxfb2JqZWN0Lm8gXFxcbiAgMTM6XHRcdGNhbGxfc3RhdGUubyBcXFxuICAxNDpcdFx0Y29ubl9jbGllbnQubyBcXFxuICAxNTpcdFx0Y29ubl9ldmVudC5vIFxcXG4gIDE2Olx0XHRjb25uX29iamVjdC5vIFxcXG4gIDE3Olx0XHRjb25uX3NlcnZpY2UubyBcXFxuICAxODpcdFx0aW5wdXQubyBcXFxuICAxOTpcdFx0aW5wdXRfcmFjay5vIFxcXG4gIDIwOlx0XHRpbnNlY3VyZS5vIFxcXG4gIDIxOlx0XHRpb190aHJlYWQubyBcXFxuICAyMjpcdFx0a2V5Lm8gXFxcbiAgMjM6XHRcdGxvY2FsX2V2ZW50Lm8gXFxcbiAgMjQ6XHRcdGxvY2FsX29iamVjdC5vIFxcXG4gIDI1Olx0XHRtaXNjLm8gXFxcbiAgMjY6XHRcdG5ldF9ucy5vIFxcXG4gIDI3Olx0XHRvdXRwdXQubyBcXFxuICAyODpcdFx0cGVlcl9ldmVudC5vIFxcXG4gIDI5Olx0XHRwZWVyX29iamVjdC5vIFxcXG4gIDMwOlx0XHRyZWN2bXNnLm8gXFxcbiAgMzE6XHRcdHJ0dC5vIFxcXG4gIDMyOlx0XHRzZWN1cml0eS5vIFxcXG4gIDMzOlx0XHRzZW5kbXNnLm8gXFxcbiAgMzQ6XHRcdHNlcnZlcl9rZXkubyBcXFxuICAzNTpcdFx0c2tidWZmLm8gXFxcbiAgMzY6XHRcdHR4YnVmLm8gXFxcbiAgMzc6XHRcdHV0aWxzLm9cbiAgMzg6XHRcbiAgMzk6XHRyeHJwYy0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gcHJvYy5vXG4gIDQwOlx0cnhycGMtJChDT05GSUdfUlhLQUQpICYjNDM7PSByeGthZC5vIGZjcnlwdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NDAyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gY29uZmlybWluZyB0aGF0IGByeGthZC5vYCBhbmQgYHJ4Z2sub2AgYXJlIGluZGVlZCBjb21waWxlZCBjb25kaXRpb25hbGx5LCB0aWVkIHRvIHRoZSBgQ09ORklHX1JYS0FEYCBhbmQgYENPTkZJR19SWEdLYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0IG1ha2VzIHNlbnNlLCBzdGFuZGFyZCBwcmFjdGljZSBmb3IgbW9kdWxhcml0eS4gTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4uLiBobW0sIEkgZG9uJiMzOTt0IHNlZSBgcnhnay5vYCBwb3BwaW5nIHVwIGluIHRoZSBpbml0aWFsIGxpbmVzIG9mIHRoZSBidWlsZCBwcm9jZXNzLiBUaGF0JiMzOTtzIGEgbGl0dGxlIHVudXN1YWwsIG1heWJlIHRoZXJlJiMzOTtzIGEgZGlmZmVyZW50IGluY2x1c2lvbiBtZWNoYW5pc20gYXQgcGxheT8gVGltZSB0byBrZWVwIGRpZ2dpbmcgYW5kIGV4cGFuZCB0aGUgc2VhcmNoIGNyaXRlcmlhIHRvIGdldCBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mga2VlcCByZWFkaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRyeHJwYy0kKENPTkZJR19SWEtBRCkgJiM0Mzs9IHJ4a2FkLm8gZmNyeXB0Lm9cbiAgNDE6XHRyeHJwYy0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGwub1xuICA0MjpcdHJ4cnBjLSQoQ09ORklHX1JYR0spICYjNDM7PSBcXFxuICA0MzpcdFx0cnhnay5vIFxcXG4gIDQ0Olx0XHRyeGdrX2FwcC5vIFxcXG4gIDQ1Olx0XHRyeGdrX2tkZi5vXG4gIDQ2Olx0XG4gIDQ3Olx0b2JqLSQoQ09ORklHX1JYUEVSRikgJiM0Mzs9IHJ4cGVyZi5vXG4gIDQ4Olx0b2JqLSQoQ09ORklHX0tVTklUKSAmIzQzOz0gdGVzdHMvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4ODE5CgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDEyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFJ4UlBDIEtleSBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgeWVzLCB0aGUgYFJYR0tgIGNvbmZpZyBpcyBkZWZpbml0ZWx5IGluIHBsYXkuIExldCYjMzk7cyBzZWUuLi4KClJpZ2h0LCB0aGUgY29uZmlndXJhdGlvbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhcmUgYEFGX1JYUlBDYCwgYEFGU19GU2AsIGBSWEtBRGAsIGBSWEdLYCwgYW5kIGBLRVlTYC4gR290IGl0LiBOb3csIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSBsaWtlIHRoZXkmIzM5O3ZlIGJlZW4gdG91Y2hlZCBhbmQgYXJlIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHPigKYgYXQgZmlyc3QgZ2xhbmNlLCBJIHNhdyBhIGZldzogYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCwgYHJ4cnBjX2RvX3NlbmRtc2dgLCBgcnhycGNfcmVjdm1zZ2AsIGByeHJwY19rZXJuZWxfcXVlcnlfa2V5YCwgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgLCBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgLCBhbmQgYHB1dF91c2VyX2tleV9wYXlsb2FkYC4KCkxldCBtZSB0aGlua+KApiBgcHV0X3VzZXJfa2V5X3BheWxvYWRgLiBBaCwgdGhhdCYjMzk7cyBqdXN0IGEgc2ltcGxlIHJlZmNvdW50IGRlY3JlbWVudCBhbmQgZnJlZSDigJMgbm90IHRoZSBtb3N0IGNvbXBsZXggZnVuY3Rpb24sIGJ1dCBkZWZpbml0ZWx5IHBhcnQgb2YgdGhlIHBhdGNoLCBzbyBpdCYjMzk7cyB3b3J0aCBub3RpbmcsIEkgc3VwcG9zZS4gQW5kIGByeHJwY19rZXJuZWxfcXVlcnlfa2V5YCwgc2ltaWxhci4gSSYjMzk7bSB3b25kZXJpbmcgaWYgc29tZXRoaW5nIGxpa2UgYHJ4cnBjX3NlbmRfZGF0YWAgaXMgYmVpbmcgdXNlZCBpbiB0aGUgc2VuZCBwYXRoLCBidXQgaXQmIzM5O3Mgc3RhdGljLCBzbyBpdCBjYW4mIzM5O3QgYmUgdXNlZCwgYW5kIGByeHJwY19yZWN2bXNnX2RhdGFgIGlzIHN0YXRpYyB0b28uIFNvIHdlJiMzOTtyZSBsZWZ0IHdpdGggbm9uLXN0YXRpYyBlbnRyeSBwb2ludHM6IGByeHJwY19kb19zZW5kbXNnYCBhbmQgYHJ4cnBjX3JlY3Ztc2dgIHNpbmNlIHRob3NlIGFyZSB0aGUgdG9wLWxldmVsIGZ1bmN0aW9ucy4KCkFuZCB0aGVuIHRoZXJlJiMzOTtzIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCB3aGljaCBJIGFsc28gc2VlLCBidXQgdGhhdCBvbmUgaXMgYWxzbyBzdGF0aWMuIEdpdmVuIHRoZSBwcm9tcHQsIEkgc2hvdWxkIHN0aWNrIHRvIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHVubGVzcyB0aGVyZSYjMzk7cyBhIHJlYWxseSBnb29kIHJlYXNvbi4gT2theSwgc28gdGhhdCB0cmltcyBkb3duIHRoZSBsaXN0IHRvIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAsIGByeHJwY19kb19zZW5kbXNnYCwgYHJ4cnBjX3JlY3Ztc2dgLCBgcnhycGNfa2VybmVsX3F1ZXJ5X2tleWAsIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCwgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYCwgYW5kIGBwdXRfdXNlcl9rZXlfcGF5bG9hZGAuCgpTaW5jZSB0aGUgcGF0Y2ggY2hhbmdlZCB0aGUgYHVzZXJfcHJlcGFyc2VgIGFuZCBgdXNlcl91cGRhdGVgLCB3aGljaCBzZWVtIHRvIGJlIGludm9sdmVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcmVmY291bnQsIHRob3NlIHNob3VsZCBhbHNvIGJlIGFkZGVkLgoKTm93LCBjb25zaWRlcmluZyB0aGUgY29tcGxleGl0eSBhbmQgcG90ZW50aWFsIGZvciB2dWxuZXJhYmlsaXRpZXMsIGByeHJwY19rZXJuZWxfcXVlcnlfa2V5YCBpcyBwcm9iYWJseSBhIHNpbXBsZSBnZXR0ZXIg4oCTIHBlcmhhcHMgbm90IGEgaGlnaC1wcmlvcml0eSBmdXp6IHRhcmdldC4gYHJ4cnBjX2RvX3NlbmRtc2dgIGFuZCBgcnhycGNfcmVjdm1zZ2AgYXJlIGRlZmluaXRlbHkgY3J1Y2lhbCwgYXMgYXJlIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCBhbmQgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYC4KCkFscmlnaHQsIGxldCYjMzk7cyB6b29tIG91dCBhbmQgcmV2aWV3IHRoZSBvdmVyYWxsIHBpY3R1cmUuIFRoaXMgcGF0Y2jigKYgaXQgcmVtb3ZlcyB0aGUgT09CIG1lc3NhZ2UgaGFuZGxpbmcuIFRoYXQmIzM5O3MgYSBiaWcgc2hpZnQsIHNvIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggT09COiBgcnhycGNfa2VybmVsX3F1ZXJ5X29vYmAsIGV0Yy4gYXJlIG91dC4gQW5kIGl0IGFkZHMgYHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXlgIHRvIGFjY2VzcyB0aGUga2V5LiBJdCBtb2RpZmllcyBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgIHRvIHRha2UgdGhlIGFwcGRhdGEga2V5LCBhbmQgaXQgY2hhbmdlcyBgcnhycGNfZG9fc2VuZG1zZ2AgdG8gaGFuZGxlIGBSWFJQQ19SRVNQT05TRV9BUFBEQVRBYCBtZXNzYWdlcy4gUGx1cywgYHJ4cnBjX3JlY3Ztc2dgIGxvc2VzIE9PQiBoYW5kbGluZy4gYHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2VgIHVzZXMgYXBwZGF0YSwgYW5kIHRoZSBBRlMgYXBwZGF0YSBjcmVhdGlvbiBpcyBpbiBwbGF5LCBhcyBpcyB0aGUgcHJvYmluZy4gQW5kIGZpbmFsbHksIGB1c2VyX2RlZmluZWQuY2AgZ2V0cyBhIHJlZmNvdW50LgoKVGFraW5nIGFsbCB0aGF0IGluLCB0aGUgZmluYWwgbGlzdCBvZiBmdW5jdGlvbnMgSSB3YW50IHRvIGZvY3VzIG9uIGxvb2tzIGxpa2UgdGhpczogYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCwgYHJ4cnBjX2RvX3NlbmRtc2dgLCBgcnhycGNfcmVjdm1zZ2AsIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCwgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYCwgYHVzZXJfcHJlcGFyc2VgLCBgdXNlcl91cGRhdGVgIGFuZCBgcHV0X3VzZXJfa2V5X3BheWxvYWRgLgoKU28sIHRvIHN1bW1hcml6ZSwgdGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBSeFJQQyBPT0IgaGFuZGxpbmcgd2l0aCBhIGtleS1iYXNlZCBjaGFsbGVuZ2UgcmVzcG9uc2Ugc2NoZW1lLiBJdCBtb2RpZmllcyBjb3JlIHNlbmQvcmVjdiBwYXRocywgQUZTIHNlcnZlciBwcm9iaW5nLCBhbmQgdXNlci1kZWZpbmVkIGtleXMuIFRoZXNlIGFyZSBjcml0aWNhbCBmdW5jdGlvbmFsIGNoYW5nZXMgd2l0aGluIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gY29kZSBhbmQgc2hvdWxkIGFic29sdXRlbHkgYmUgZnV6emVkLgoKSGVyZSYjMzk7cyB0aGUgZGF0YSBmb3IgdGhlIGZ1enppbmcgcnVuLgoKV29ydGhGdXp6aW5nOiB0cnVlCkZvY3VzU3ltYm9sczoKLSBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgCi0gYHJ4cnBjX2RvX3NlbmRtc2dgCi0gYHJ4cnBjX3JlY3Ztc2dgCi0gYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgCi0gYGFmc19mc19wcm9iZV9maWxlc2VydmVyYAotIGB1c2VyX3ByZXBhcnNlYAotIGB1c2VyX3VwZGF0ZWAKLSBgcHV0X3VzZXJfa2V5X3BheWxvYWRgCkVuYWJsZUNvbmZpZ3M6Ci0gYEFGX1JYUgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtBRlNfRlMmIzM0OywKICAgICYjMzQ7UlhLQUQmIzM0OywKICAgICYjMzQ7UlhHSyYjMzQ7LAogICAgJiMzNDtLRVlTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnhycGNfa2VybmVsX2JlZ2luX2NhbGwmIzM0OywKICAgICYjMzQ7cnhycGNfZG9fc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyeHJwY19yZWN2bXNnJiMzNDssCiAgICAmIzM0O2Fmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEmIzM0OywKICAgICYjMzQ7YWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXImIzM0OywKICAgICYjMzQ7dXNlcl9wcmVwYXJzZSYjMzQ7LAogICAgJiMzNDt1c2VyX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtwdXRfdXNlcl9rZXlfcGF5bG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyB0aGUgb3V0LW9mLWJhbmQgKE9PQikgbWVzc2FnZSBoYW5kbGluZyBpbiBSeFJQQyB3aXRoIGEga2V5LWJhc2VkIGFwcHJvYWNoIGZvciBjaGFsbGVuZ2UtcmVzcG9uc2UsIHNwZWNpZmljYWxseSBmb3IgUnhHSy4gSXQgbW9kaWZpZXMgY29yZSBSeFJQQyBzZW5kL3JlY3YgcGF0aHMsIEFGUyBzZXJ2ZXIgcHJvYmluZywgYW5kIGFkZHMgcmVmY291bnRpbmcgdG8gdXNlci1kZWZpbmVkIGtleXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGX1JYUlBDJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtSWEtBRCYjMzQ7LAogICAgJiMzNDtSWEdLJiMzNDssCiAgICAmIzM0O0tFWVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyeHJwY19rZXJuZWxfYmVnaW5fY2FsbCYjMzQ7LAogICAgJiMzNDtyeHJwY19kb19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3J4cnBjX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7YWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YSYjMzQ7LAogICAgJiMzNDthZnNfZnNfcHJvYmVfZmlsZXNlcnZlciYjMzQ7LAogICAgJiMzNDt1c2VyX3ByZXBhcnNlJiMzNDssCiAgICAmIzM0O3VzZXJfdXBkYXRlJiMzNDssCiAgICAmIzM0O3B1dF91c2VyX2tleV9wYXlsb2FkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBvdXQtb2YtYmFuZCAoT09CKSBtZXNzYWdlIGhhbmRsaW5nIGluIFJ4UlBDIHdpdGggYSBrZXktYmFzZWQgYXBwcm9hY2ggZm9yIGNoYWxsZW5nZS1yZXNwb25zZSwgc3BlY2lmaWNhbGx5IGZvciBSeEdLLiBJdCBtb2RpZmllcyBjb3JlIFJ4UlBDIHNlbmQvcmVjdiBwYXRocywgQUZTIHNlcnZlciBwcm9iaW5nLCBhbmQgYWRkcyByZWZjb3VudGluZyB0byB1c2VyLWRlZmluZWQga2V5cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBhbmQgZmlsZXN5c3RlbSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjEwOjU1LjMyMjg2NTg0NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTQxNTc0Mzk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJSWEtBRFwiLFxuICAgIFwiUlhHS1wiLFxuICAgIFwiS0VZU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsXCIsXG4gICAgXCJyeHJwY19kb19zZW5kbXNnXCIsXG4gICAgXCJyeHJwY19yZWN2bXNnXCIsXG4gICAgXCJhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhXCIsXG4gICAgXCJhZnNfZnNfcHJvYmVfZmlsZXNlcnZlclwiLFxuICAgIFwidXNlcl9wcmVwYXJzZVwiLFxuICAgIFwidXNlcl91cGRhdGVcIixcbiAgICBcInB1dF91c2VyX2tleV9wYXlsb2FkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIG91dC1vZi1iYW5kIChPT0IpIG1lc3NhZ2UgaGFuZGxpbmcgaW4gUnhSUEMgd2l0aCBhIGtleS1iYXNlZCBhcHByb2FjaCBmb3IgY2hhbGxlbmdlLXJlc3BvbnNlLCBzcGVjaWZpY2FsbHkgZm9yIFJ4R0suIEl0IG1vZGlmaWVzIGNvcmUgUnhSUEMgc2VuZC9yZWN2IHBhdGhzLCBBRlMgc2VydmVyIHByb2JpbmcsIGFuZCBhZGRzIHJlZmNvdW50aW5nIHRvIHVzZXItZGVmaW5lZCBrZXlzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBuZXR3b3JrIGFuZCBmaWxlc3lzdGVtIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMToxMDo1NS4zMjI4NzM1MjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzAwMzAzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3OGE2MmIwZDEyN2UzMjFiOTM3ZDcyOTM0N2E5YjlkOTRmMjQ2N2ViXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDI2IDAxOjEwOjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jbV9zZWN1cml0eS5jIGIvZnMvYWZzL2NtX3NlY3VyaXR5LmNcXG5pbmRleCAxMDMxNjhjNzBkZDRkZi4uYjA5OGY0OGIxMGU1MWQgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2NtX3NlY3VyaXR5LmNcXG4rKysgYi9mcy9hZnMvY21fc2VjdXJpdHkuY1xcbkBAIC02LDcgKzYsOSBAQFxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXktdHlwZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjY3J5cHRvL2tyYjUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2tleXMvdXNlci10eXBlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYWZzX2NtLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJhZnNfZnMuaFxcXCJcXG5AQCAtMTksMTk1ICsyMSwzOSBAQFxcbiAjZGVmaW5lIHhkcl9sZW5fb2JqZWN0KHgpICg0ICsgcm91bmRfdXAoKHgpLCBzaXplb2YoX19iZTMyKSkpXFxuIFxcbiAjaWZkZWYgQ09ORklHX1JYR0tcXG4tc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyKTtcXG4tI2VuZGlmXFxuLVxcbiAvKlxcbi0gKiBSZXNwb25kIHRvIGFuIFJ4R0sgY2hhbGxlbmdlLCBhZGRpbmcgYXBwZGF0YS5cXG4rICogQXMgdGhlIFlGUyBSeEdLIGFwcGRhdGEgdG8gYmUgcGFzc2VkIGluIHRoZSBZRlMuRlMtc2VydmljZSBSRVNQT05TRSBwYWNrZXQsXFxuKyAqIGNyZWF0ZSBhIEdTUyB0b2tlbiB0byB1c2UgYXMgYSB0aWNrZXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlc2VydmVyLlxcbiAgKi9cXG4tc3RhdGljIGludCBhZnNfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcXG4te1xcbi0jaWZkZWYgQ09ORklHX1JYR0tcXG4tXFx0c3RydWN0IGtyYjVfYnVmZmVyIGFwcGRhdGEgPSB7fTtcXG4tXFx0c3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcjtcXG4tI2VuZGlmXFxuLVxcdHN0cnVjdCByeHJwY19wZWVyICpwZWVyO1xcbi1cXHR1bnNpZ25lZCBsb25nIHBlZXJfZGF0YTtcXG4tXFx0dTE2IHNlcnZpY2VfaWQ7XFxuLVxcdHU4IHNlY3VyaXR5X2luZGV4O1xcbi1cXG4tXFx0cnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFxcdTAwMjZwZWVyLCBcXHUwMDI2cGVlcl9kYXRhLFxcbi1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZzZXJ2aWNlX2lkLCBcXHUwMDI2c2VjdXJpdHlfaW5kZXgpO1xcbi1cXG4tXFx0X2VudGVyKFxcXCIldSwldVxcXCIsIHNlcnZpY2VfaWQsIHNlY3VyaXR5X2luZGV4KTtcXG4tXFxuLVxcdHN3aXRjaCAoc2VydmljZV9pZCkge1xcbi1cXHRcXHQvKiBXZSBkb24ndCBzZW5kIENNX1NFUlZJQ0UgUlBDcywgc28gZG9uJ3QgZXhwZWN0IGEgY2hhbGxlbmdlXFxuLVxcdFxcdCAqIHRoZXJlZnJvbS5cXG4tXFx0XFx0ICovXFxuLVxcdGNhc2UgRlNfU0VSVklDRTpcXG4tXFx0Y2FzZSBWTF9TRVJWSUNFOlxcbi1cXHRjYXNlIFlGU19GU19TRVJWSUNFOlxcbi1cXHRjYXNlIFlGU19WTF9TRVJWSUNFOlxcbi1cXHRcXHRicmVhaztcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0cHJfd2FybihcXFwiQ2FuJ3QgcmVzcG9uZCB0byB1bmtub3duIGNoYWxsZW5nZSAldToldVxcXCIsXFxuLVxcdFxcdFxcdHNlcnZpY2VfaWQsIHNlY3VyaXR5X2luZGV4KTtcXG4tXFx0XFx0cmV0dXJuIHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKGNoYWxsZW5nZSwgUlhfVVNFUl9BQk9SVCwgLUVQUk9UTyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzKTtcXG4tXFx0fVxcbi1cXG4tXFx0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xcbi0jaWZkZWYgQ09ORklHX1JYS0FEXFxuLVxcdGNhc2UgUlhSUENfU0VDVVJJVFlfUlhLQUQ6XFxuLVxcdFxcdHJldHVybiByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlKTtcXG4tI2VuZGlmXFxuLVxcbi0jaWZkZWYgQ09ORklHX1JYR0tcXG4tXFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9SWEdLOlxcbi1cXHRcXHRyZXR1cm4gcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlLCBcXHUwMDI2YXBwZGF0YSk7XFxuLVxcbi1cXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxcbi1cXHRcXHRzd2l0Y2ggKHNlcnZpY2VfaWQpIHtcXG4tXFx0XFx0Y2FzZSBGU19TRVJWSUNFOlxcbi1cXHRcXHRjYXNlIFlGU19GU19TRVJWSUNFOlxcbi1cXHRcXHRcXHRzZXJ2ZXIgPSAoc3RydWN0IGFmc19zZXJ2ZXIgKilwZWVyX2RhdGE7XFxuLVxcdFxcdFxcdGlmICghc2VydmVyLVxcdTAwM2VjbV9yeGdrX2FwcGRhdGEuZGF0YSkge1xcbi1cXHRcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWNtX3Rva2VuX2xvY2spO1xcbi1cXHRcXHRcXHRcXHRpZiAoIXNlcnZlci1cXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpXFxuLVxcdFxcdFxcdFxcdFxcdGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKGNoYWxsZW5nZSwgc2VydmVyKTtcXG4tXFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWNtX3Rva2VuX2xvY2spO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmIChzZXJ2ZXItXFx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKVxcbi1cXHRcXHRcXHRcXHRhcHBkYXRhID0gc2VydmVyLVxcdTAwM2VjbV9yeGdrX2FwcGRhdGE7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHJldHVybiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UsIFxcdTAwMjZhcHBkYXRhKTtcXG4tI2VuZGlmXFxuLVxcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXR1cm4gcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UoY2hhbGxlbmdlLCBSWF9VU0VSX0FCT1JULCAtRVBST1RPLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGFmc19hYm9ydF91bnN1cHBvcnRlZF9zZWNfY2xhc3MpO1xcbi1cXHR9XFxuLX1cXG4tXFxuLS8qXFxuLSAqIFByb2Nlc3MgdGhlIE9PQiBtZXNzYWdlIHF1ZXVlLCBwcm9jZXNzaW5nIGNoYWxsZW5nZSBwYWNrZXRzLlxcbi0gKi9cXG4tdm9pZCBhZnNfcHJvY2Vzc19vb2JfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi17XFxuLVxcdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFmc19uZXQsIHJ4X29vYl93b3JrKTtcXG4tXFx0c3RydWN0IHNrX2J1ZmYgKm9vYjtcXG4tXFx0ZW51bSByeHJwY19vb2JfdHlwZSB0eXBlO1xcbi1cXG4tXFx0d2hpbGUgKFJFQURfT05DRShuZXQtXFx1MDAzZWxpdmUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAgICAob29iID0gcnhycGNfa2VybmVsX2RlcXVldWVfb29iKG5ldC1cXHUwMDNlc29ja2V0LCBcXHUwMDI2dHlwZSkpKSB7XFxuLVxcdFxcdHN3aXRjaCAodHlwZSkge1xcbi1cXHRcXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XFxuLVxcdFxcdFxcdGFmc19yZXNwb25kX3RvX2NoYWxsZW5nZShvb2IpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRyeHJwY19rZXJuZWxfZnJlZV9vb2Iob29iKTtcXG4tXFx0fVxcbi19XFxuLVxcbi0jaWZkZWYgQ09ORklHX1JYR0tcXG4tLypcXG4tICogQ3JlYXRlIGEgc2VjdXJpdGllcyBrZXlyaW5nIGZvciB0aGUgY2FjaGUgbWFuYWdlciBhbmQgYXR0YWNoIGEga2V5IHRvIGl0IGZvclxcbi0gKiB0aGUgUnhHSyB0b2tlbnMgd2Ugd2FudCB0byB1c2UgdG8gc2VjdXJlIHRoZSBjYWxsYmFjayBjb25uZWN0aW9uIGJhY2sgZnJvbVxcbi0gKiB0aGUgZmlsZXNlcnZlci5cXG4tICovXFxuLWludCBhZnNfY3JlYXRlX3Rva2VuX2tleShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpXFxuLXtcXG4tXFx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNTtcXG4tXFx0c3RydWN0IGtleSAqcmluZztcXG4tXFx0a2V5X3JlZl90IGtleTtcXG4tXFx0Y2hhciBLMFszMl0sICpkZXNjO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0cmluZyA9IGtleXJpbmdfYWxsb2MoXFxcImthZnNcXFwiLFxcbi1cXHRcXHRcXHQgICAgIEdMT0JBTF9ST09UX1VJRCwgR0xPQkFMX1JPT1RfR0lELCBjdXJyZW50X2NyZWQoKSxcXG4tXFx0XFx0XFx0ICAgICBLRVlfUE9TX1NFQVJDSCB8IEtFWV9QT1NfV1JJVEUgfFxcbi1cXHRcXHRcXHQgICAgIEtFWV9VU1JfVklFVyB8IEtFWV9VU1JfUkVBRCB8IEtFWV9VU1JfU0VBUkNILFxcbi1cXHRcXHRcXHQgICAgIEtFWV9BTExPQ19OT1RfSU5fUVVPVEEsXFxuLVxcdFxcdFxcdCAgICAgTlVMTCwgTlVMTCk7XFxuLVxcdGlmIChJU19FUlIocmluZykpXFxuLVxcdFxcdHJldHVybiBQVFJfRVJSKHJpbmcpO1xcbi1cXG4tXFx0cmV0ID0gcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzb2NrZXQtXFx1MDAzZXNrLCByaW5nKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4tXFx0cmV0ID0gLUVOT1BLRztcXG4tXFx0a3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZShLUkI1X0VOQ1RZUEVfQUVTMTI4X0NUU19ITUFDX1NIQTFfOTYpO1xcbi1cXHRpZiAoIWtyYjUpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4tXFx0aWYgKFdBUk5fT05fT05DRShrcmI1LVxcdTAwM2VrZXlfbGVuIFxcdTAwM2Ugc2l6ZW9mKEswKSkpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4tXFx0cmV0ID0gLUVOT01FTTtcXG4tXFx0ZGVzYyA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCBcXFwiJXU6JXU6JXU6JXVcXFwiLFxcbi1cXHRcXHRcXHQgWUZTX0NNX1NFUlZJQ0UsIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLLCAxLCBrcmI1LVxcdTAwM2VldHlwZSk7XFxuLVxcdGlmICghZGVzYylcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHR3YWl0X2Zvcl9yYW5kb21fYnl0ZXMoKTtcXG4tXFx0Z2V0X3JhbmRvbV9ieXRlcyhLMCwga3JiNS1cXHUwMDNla2V5X2xlbik7XFxuLVxcbi1cXHRrZXkgPSBrZXlfY3JlYXRlKG1ha2Vfa2V5X3JlZihyaW5nLCB0cnVlKSxcXG4tXFx0XFx0XFx0IFxcXCJyeHJwY19zXFxcIiwgZGVzYyxcXG4tXFx0XFx0XFx0IEswLCBrcmI1LVxcdTAwM2VrZXlfbGVuLFxcbi1cXHRcXHRcXHQgS0VZX1BPU19WSUVXIHwgS0VZX1BPU19SRUFEIHwgS0VZX1BPU19TRUFSQ0ggfCBLRVlfVVNSX1ZJRVcsXFxuLVxcdFxcdFxcdCBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBKTtcXG4tXFx0a2ZyZWUoZGVzYyk7XFxuLVxcdGlmIChJU19FUlIoa2V5KSkge1xcbi1cXHRcXHRyZXQgPSBQVFJfRVJSKGtleSk7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuLVxcbi1cXHRuZXQtXFx1MDAzZWZzX2NtX3Rva2VuX2tleSA9IGtleV9yZWZfdG9fcHRyKGtleSk7XFxuLVxcdHJldCA9IDA7XFxuLW91dDpcXG4tXFx0a2V5X3B1dChyaW5nKTtcXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4tLypcXG4tICogQ3JlYXRlIGFuIFlGUyBSeEdLIEdTUyB0b2tlbiB0byB1c2UgYXMgYSB0aWNrZXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlc2VydmVyLlxcbi0gKi9cXG4tc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyKVxcbitzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX3J4Z2tfY21fYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCB1MzIgZW5jdHlwZSlcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICpjb25uX2tyYjUsICp0b2tlbl9rcmI1O1xcbiBcXHRjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKnRva2VuX2tleTtcXG4gXFx0c3RydWN0IGNyeXB0b19hZWFkICphZWFkO1xcbiBcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7XFxuIFxcdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBzZXJ2ZXItXFx1MDAzZWNlbGwtXFx1MDAzZW5ldDtcXG4tXFx0Y29uc3Qgc3RydWN0IGtleSAqa2V5ID0gbmV0LVxcdTAwM2Vmc19jbV90b2tlbl9rZXk7XFxuLVxcdHNpemVfdCBrZXlzaXplLCB1dWlkc2l6ZSwgYXV0aHNpemUsIHRva3NpemUsIGVuY3NpemUsIGNvbnRzaXplLCBhZGF0YXNpemUsIG9mZnNldDtcXG4rXFx0Y29uc3Qgc3RydWN0IGtleSAqY21fa2V5ID0gbmV0LVxcdTAwM2Vmc19jbV90b2tlbl9rZXk7XFxuK1xcdHN0cnVjdCBrZXkgKmFwcGRhdGFfa2V5ID0gTlVMTDtcXG4rXFx0c2l6ZV90IGtleXNpemUsIHV1aWRzaXplLCBhdXRoc2l6ZSwgdG9rc2l6ZSwgZW5jc2l6ZSwgY29udHNpemU7XFxuK1xcdHNpemVfdCBhZGF0YXNpemUsIG9mZnNldDtcXG4gXFx0X19iZTMyIGNhcHNbMV0gPSB7XFxuIFxcdFxcdFswXSA9IGh0b25sKEFGU19DQVBfRVJST1JfVFJBTlNMQVRJT04pLFxcbiBcXHR9O1xcbiBcXHRfX2JlMzIgKnhkcjtcXG4gXFx0dm9pZCAqYXBwZGF0YSwgKkswLCAqZW5jYmFzZTtcXG4tXFx0dTMyIGVuY3R5cGU7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAoIWtleSlcXG4rXFx0aWYgKCFjbV9rZXkpXFxuIFxcdFxcdHJldHVybiAtRU5PS0VZO1xcbiBcXG4gXFx0LyogQXNzdW1lIHRoYXQgdGhlIGZpbGVzZXJ2ZXIgaXMgaGFwcHkgdG8gdXNlIHRoZSBzYW1lIGVuY29kaW5nIHR5cGUgYXNcXG4gXFx0ICogd2Ugd2VyZSB0b2xkIHRvIHVzZSBieSB0aGUgdG9rZW4gb2J0YWluZWQgYnkgdGhlIHVzZXIuXFxuIFxcdCAqL1xcbi1cXHRlbmN0eXBlID0gcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSk7XFxuLVxcbiBcXHRjb25uX2tyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZW5jdHlwZSk7XFxuIFxcdGlmICghY29ubl9rcmI1KVxcbiBcXHRcXHRyZXR1cm4gLUVOT1BLRztcXG4tXFx0dG9rZW5fa3JiNSA9IGtleS1cXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xcbi1cXHR0b2tlbl9rZXkgPSAoY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICopXFx1MDAyNmtleS1cXHUwMDNlcGF5bG9hZC5kYXRhWzJdO1xcbitcXHR0b2tlbl9rcmI1ID0gY21fa2V5LVxcdTAwM2VwYXlsb2FkLmRhdGFbMF07XFxuK1xcdHRva2VuX2tleSA9IChjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKilcXHUwMDI2Y21fa2V5LVxcdTAwM2VwYXlsb2FkLmRhdGFbMl07XFxuIFxcbiBcXHQvKiBzdHJ1Y3Qgcnhna19rZXkge1xcbiBcXHQgKlxcdGFmc191aW50MzJcXHRlbmN0eXBlO1xcbkBAIC0yMzUsNyArODEsNyBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuIFxcdCAqXFx0c3RydWN0IFJYR0tfQXV0aE5hbWVcXHRpZGVudGl0aWVzXFx1MDAzY1xcdTAwM2U7XFxuIFxcdCAqIH07XFxuIFxcdCAqL1xcbi1cXHR0b2tzaXplID0ga2V5c2l6ZSArIDggKyA0ICsgNCArIDggKyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7XFxuK1xcdHRva3NpemUgPSBrZXlzaXplICsgNCArIDggKyA0ICsgNCArIDggKyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7XFxuIFxcbiBcXHRvZmZzZXQgPSAwO1xcbiBcXHRlbmNzaXplID0gY3J5cHRvX2tyYjVfaG93X211Y2hfYnVmZmVyKHRva2VuX2tyYjUsIEtSQjVfRU5DUllQVF9NT0RFLCB0b2tzaXplLCBcXHUwMDI2b2Zmc2V0KTtcXG5AQCAtMzI3LDkgKzE3MywyMyBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG91dF9hZWFkO1xcbiBcXG4tXFx0c2VydmVyLVxcdTAwM2VjbV9yeGdrX2FwcGRhdGEubGVuICA9IGFkYXRhc2l6ZTtcXG4tXFx0c2VydmVyLVxcdTAwM2VjbV9yeGdrX2FwcGRhdGEuZGF0YSA9IGFwcGRhdGE7XFxuLVxcdGFwcGRhdGEgPSBOVUxMO1xcbitcXHRhcHBkYXRhX2tleSA9IGtleV9hbGxvYyhcXHUwMDI2a2V5X3R5cGVfdXNlciwgXFxcInJ4cnBjOiBhZnMgcnhnayBhcHBkYXRhXFxcIixcXG4rXFx0XFx0XFx0XFx0R0xPQkFMX1JPT1RfVUlELCBHTE9CQUxfUk9PVF9HSUQsIGN1cnJlbnRfY3JlZCgpLFxcbitcXHRcXHRcXHRcXHRLRVlfUE9TX1ZJRVcgfCBLRVlfUE9TX1NFQVJDSCB8IEtFWV9VU1JfVklFVyxcXG4rXFx0XFx0XFx0XFx0S0VZX0FMTE9DX05PVF9JTl9RVU9UQSwgTlVMTCk7XFxuK1xcdGlmIChJU19FUlIoYXBwZGF0YV9rZXkpKSB7XFxuK1xcdFxcdHJldCA9IFBUUl9FUlIoYXBwZGF0YV9rZXkpO1xcbitcXHRcXHRnb3RvIG91dF9hZWFkO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBrZXlfaW5zdGFudGlhdGVfYW5kX2xpbmsoYXBwZGF0YV9rZXksIGFwcGRhdGEsIGFkYXRhc2l6ZSwgTlVMTCwgTlVMTCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGtleV9wdXQoYXBwZGF0YV9rZXkpO1xcbitcXHRcXHRnb3RvIG91dF9hZWFkO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTdG9yZSB0aGUgYXBwZGF0YSBiZWZvcmUgdGhlIGtleSBwb2ludGVyICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZXlmc19yeGdrX2FwcGRhdGEsIGFwcGRhdGFfa2V5KTtcXG4gXFxuIG91dF9hZWFkOlxcbiBcXHRjcnlwdG9fZnJlZV9hZWFkKGFlYWQpO1xcbkBAIC0zMzksMyArMTk5LDExNiBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19SWEdLICovXFxuK1xcbisvKlxcbisgKiBDcmVhdGUgdGhlIGFwcGxpY2F0aW9uIGRhdGEgdG8gZ28gaW4gYSBSRVNQT05TRSBwYWNrZXQgYSBzZXJ2ZXIncyBDSEFMTEVOR0VcXG4rICogZnJvbSB0aGUgcGFyYW1ldGVycyBjb250YWluZWQgaW4gYSBrZXkuICBUaGUga2V5IHNwZWNpZmllcyB0aGUgc2VjdXJpdHlcXG4rICogaW5kZXggYW5kIG90aGVyIGFwcHJvcHJpYXRlIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZW5jb2RpbmcgdHlwZSBmb3IgUnhHSy5cXG4rICovXFxuK2ludCBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBrZXkgKmtleSlcXG4re1xcbitcXHR1MzIga3JiNV9lbmN0eXBlO1xcbitcXHRpbnQgcmV0O1xcbitcXHR1OCBzZWN1cml0eV9pbmRleDtcXG4rXFxuK1xcdGlmICgha2V5KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoa2V5LCBcXHUwMDI2c2VjdXJpdHlfaW5kZXgsIFxcdTAwMjZrcmI1X2VuY3R5cGUpO1xcbitcXG4rXFx0X2VudGVyKFxcXCIldSwldVxcXCIsIHNlY3VyaXR5X2luZGV4LCBrcmI1X2VuY3R5cGUpO1xcbitcXG4rXFx0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xcbisjaWZkZWYgQ09ORklHX1JYR0tcXG4rXFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcXG4rXFx0XFx0LyogUmVhZCB0aGUga2V5IHBvaW50ZXIgYmVmb3JlIHRoZSBhcHBkYXRhICovXFxuK1xcdFxcdGlmIChzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZXlmc19yeGdrX2FwcGRhdGEpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gMDtcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2c2VydmVyLVxcdTAwM2VjbV90b2tlbl9sb2NrKTtcXG4rXFxuK1xcdHN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHtcXG4rI2lmZGVmIENPTkZJR19SWEdLXFxuK1xcdGNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6XFxuK1xcdFxcdC8qIFJlYWQgdGhlIGtleSBwb2ludGVyIGJlZm9yZSB0aGUgYXBwZGF0YSAqL1xcbitcXHRcXHRpZiAoc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2c2VydmVyLVxcdTAwM2V5ZnNfcnhna19hcHBkYXRhKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdHJldCA9IGFmc19jcmVhdGVfeWZzX3J4Z2tfY21fYXBwZGF0YShzZXJ2ZXIsIGtyYjVfZW5jdHlwZSk7XFxuK1xcdFxcdGJyZWFrO1xcbisjZW5kaWZcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2c2VydmVyLVxcdTAwM2VjbV90b2tlbl9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rI2lmZGVmIENPTkZJR19SWEdLXFxuKy8qXFxuKyAqIENyZWF0ZSBhIHNlY3VyaXRpZXMga2V5cmluZyBmb3IgdGhlIGNhY2hlIG1hbmFnZXIgYW5kIGF0dGFjaCBhIGtleSB0byBpdCBmb3JcXG4rICogdGhlIFJ4R0sgdG9rZW5zIHdlIHdhbnQgdG8gdXNlIHRvIHNlY3VyZSB0aGUgY2FsbGJhY2sgY29ubmVjdGlvbiBiYWNrIGZyb21cXG4rICogdGhlIGZpbGVzZXJ2ZXIuXFxuKyAqL1xcbitpbnQgYWZzX2NyZWF0ZV90b2tlbl9rZXkoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29ja2V0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmtyYjU7XFxuK1xcdHN0cnVjdCBrZXkgKnJpbmc7XFxuK1xcdGtleV9yZWZfdCBrZXk7XFxuK1xcdGNoYXIgSzBbMzJdLCAqZGVzYztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJpbmcgPSBrZXlyaW5nX2FsbG9jKFxcXCJrYWZzXFxcIixcXG4rXFx0XFx0XFx0ICAgICBHTE9CQUxfUk9PVF9VSUQsIEdMT0JBTF9ST09UX0dJRCwgY3VycmVudF9jcmVkKCksXFxuK1xcdFxcdFxcdCAgICAgS0VZX1BPU19TRUFSQ0ggfCBLRVlfUE9TX1dSSVRFIHxcXG4rXFx0XFx0XFx0ICAgICBLRVlfVVNSX1ZJRVcgfCBLRVlfVVNSX1JFQUQgfCBLRVlfVVNSX1NFQVJDSCxcXG4rXFx0XFx0XFx0ICAgICBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLFxcbitcXHRcXHRcXHQgICAgIE5VTEwsIE5VTEwpO1xcbitcXHRpZiAoSVNfRVJSKHJpbmcpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihyaW5nKTtcXG4rXFxuK1xcdHJldCA9IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc29ja2V0LVxcdTAwM2VzaywgcmluZyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IC1FTk9QS0c7XFxuK1xcdGtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoS1JCNV9FTkNUWVBFX0FFUzEyOF9DVFNfSE1BQ19TSEExXzk2KTtcXG4rXFx0aWYgKCFrcmI1KVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0Uoa3JiNS1cXHUwMDNla2V5X2xlbiBcXHUwMDNlIHNpemVvZihLMCkpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IC1FTk9NRU07XFxuK1xcdGRlc2MgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgXFxcIiV1OiV1OiV1OiV1XFxcIixcXG4rXFx0XFx0XFx0IFlGU19DTV9TRVJWSUNFLCBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSywgMSwga3JiNS1cXHUwMDNlZXR5cGUpO1xcbitcXHRpZiAoIWRlc2MpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0d2FpdF9mb3JfcmFuZG9tX2J5dGVzKCk7XFxuK1xcdGdldF9yYW5kb21fYnl0ZXMoSzAsIGtyYjUtXFx1MDAzZWtleV9sZW4pO1xcbitcXG4rXFx0a2V5ID0ga2V5X2NyZWF0ZShtYWtlX2tleV9yZWYocmluZywgdHJ1ZSksXFxuK1xcdFxcdFxcdCBcXFwicnhycGNfc1xcXCIsIGRlc2MsXFxuK1xcdFxcdFxcdCBLMCwga3JiNS1cXHUwMDNla2V5X2xlbixcXG4rXFx0XFx0XFx0IEtFWV9QT1NfVklFVyB8IEtFWV9QT1NfUkVBRCB8IEtFWV9QT1NfU0VBUkNIIHwgS0VZX1VTUl9WSUVXLFxcbitcXHRcXHRcXHQgS0VZX0FMTE9DX05PVF9JTl9RVU9UQSk7XFxuK1xcdGtmcmVlKGRlc2MpO1xcbitcXHRpZiAoSVNfRVJSKGtleSkpIHtcXG4rXFx0XFx0cmV0ID0gUFRSX0VSUihrZXkpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0bmV0LVxcdTAwM2Vmc19jbV90b2tlbl9rZXkgPSBrZXlfcmVmX3RvX3B0cihrZXkpO1xcbitcXHRyZXQgPSAwO1xcbitvdXQ6XFxuK1xcdGtleV9wdXQocmluZyk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rI2VuZGlmIC8qIENPTkZJR19SWEdLICovXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc19wcm9iZS5jIGIvZnMvYWZzL2ZzX3Byb2JlLmNcXG5pbmRleCBhOTFhZDE5MzhkMDc4OC4uZTI2ZjdmMWUzMGEyM2EgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2ZzX3Byb2JlLmNcXG4rKysgYi9mcy9hZnMvZnNfcHJvYmUuY1xcbkBAIC0yNDEsOSArMjQxLDE0IEBAIGludCBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxcbiBcXHRzdHJ1Y3QgYWZzX2VuZHBvaW50X3N0YXRlICplc3RhdGUsICpvbGQ7XFxuIFxcdHN0cnVjdCBhZnNfYWRkcl9saXN0ICpvbGRfYWxpc3QgPSBOVUxMLCAqYWxpc3Q7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdW5wcm9iZWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRfZW50ZXIoXFxcIiVwVVxcXCIsIFxcdTAwMjZzZXJ2ZXItXFx1MDAzZXV1aWQpO1xcbiBcXG4rXFx0cmV0ID0gYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzZXJ2ZXIsIGtleSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0ZXN0YXRlID0ga3phbGxvY19vYmooKmVzdGF0ZSk7XFxuIFxcdGlmICghZXN0YXRlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxcbmluZGV4IDYwMWYwMWU1YzE1ZmNjLi5lZjdiZDlmOTQzZTBhNiAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxcbisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oXFxuQEAgLTI4Myw3ICsyODMsNiBAQCBzdHJ1Y3QgYWZzX25ldCB7XFxuIFxcdHN0cnVjdCBzb2NrZXRcXHRcXHQqc29ja2V0O1xcbiBcXHRzdHJ1Y3QgYWZzX2NhbGxcXHRcXHQqc3BhcmVfaW5jb21pbmdfY2FsbDtcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0Y2hhcmdlX3ByZWFsbG9jYXRpb25fd29yaztcXG4tXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0cnhfb29iX3dvcms7XFxuIFxcdHN0cnVjdCBtdXRleFxcdFxcdHNvY2tldF9tdXRleDtcXG4gXFx0YXRvbWljX3RcXHRcXHRucl9vdXRzdGFuZGluZ19jYWxscztcXG4gXFx0YXRvbWljX3RcXHRcXHRucl9zdXBlcmJsb2NrcztcXG5AQCAtNTQ4LDcgKzU0Nyw3IEBAIHN0cnVjdCBhZnNfc2VydmVyIHtcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0ZGVzdHJveWVyO1xcdC8qIFdvcmsgaXRlbSB0byB0cnkgYW5kIGRlc3Ryb3kgYSBzZXJ2ZXIgKi9cXG4gXFx0c3RydWN0IHRpbWVyX2xpc3RcXHR0aW1lcjtcXHRcXHQvKiBNYW5hZ2VtZW50IHRpbWVyICovXFxuIFxcdHN0cnVjdCBtdXRleFxcdFxcdGNtX3Rva2VuX2xvY2s7XFx0LyogTG9jayBnb3Zlcm5pbmcgY3JlYXRpb24gb2YgYXBwZGF0YSAqL1xcbi1cXHRzdHJ1Y3Qga3JiNV9idWZmZXJcXHRjbV9yeGdrX2FwcGRhdGE7IC8qIEFwcGRhdGEgdG8gYmUgaW5jbHVkZWQgaW4gUkVTUE9OU0UgcGFja2V0ICovXFxuK1xcdHN0cnVjdCBrZXlcXHRcXHQqeWZzX3J4Z2tfYXBwZGF0YTsgLyogQXBwZGF0YSB0byBiZSBpbmNsdWRlZCBpbiBSRVNQT05TRSBwYWNrZXQgKi9cXG4gXFx0dGltZTY0X3RcXHRcXHR1bnVzZV90aW1lO1xcdC8qIFRpbWUgYXQgd2hpY2ggbGFzdCB1bnVzZWQgKi9cXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGZsYWdzO1xcbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfUkVTUE9ORElORyAwXFx0XFx0LyogVGhlIHNlcnZlciBpcyByZXNwb25kaW5nICovXFxuQEAgLTEwODksNyArMTA4OCw3IEBAIGV4dGVybiBib29sIGFmc19jbV9pbmNvbWluZ19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqKTtcXG4gLypcXG4gICogY21fc2VjdXJpdHkuY1xcbiAgKi9cXG4tdm9pZCBhZnNfcHJvY2Vzc19vb2JfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4raW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KTtcXG4gI2lmZGVmIENPTkZJR19SWEdLXFxuIGludCBhZnNfY3JlYXRlX3Rva2VuX2tleShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpO1xcbiAjZWxzZVxcbkBAIC0xNDE2LDIxICsxNDE1LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19zZWVfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGVudW0gYWZzX2NhbGxfdHJhY2Ugd2h5KVxcbiBcXHRcXHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXFxuLVxcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnApXFxuLXtcXG4tXFx0c3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtXFx1MDAzZWVzdGF0ZS1cXHUwMDNlYWRkcmVzc2VzO1xcbi1cXG4tXFx0b3AtXFx1MDAzZWNhbGxcXHQ9IGNhbGw7XFxuLVxcdG9wLVxcdTAwM2V0eXBlXFx0PSBjYWxsLVxcdTAwM2V0eXBlO1xcbi1cXHRjYWxsLVxcdTAwM2VvcFxcdD0gb3A7XFxuLVxcdGNhbGwtXFx1MDAzZWtleVxcdD0gb3AtXFx1MDAzZWtleTtcXG4tXFx0Y2FsbC1cXHUwMDNlaW50clxcdD0gIShvcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBRlNfT1BFUkFUSU9OX1VOSU5UUik7XFxuLVxcdGNhbGwtXFx1MDAzZXBlZXJcXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cXHUwMDNlYWRkcnNbb3AtXFx1MDAzZWFkZHJfaW5kZXhdLnBlZXIpO1xcbi1cXHRjYWxsLVxcdTAwM2VzZXJ2aWNlX2lkID0gb3AtXFx1MDAzZXNlcnZlci1cXHUwMDNlc2VydmljZV9pZDtcXG4tXFx0YWZzX21ha2VfY2FsbChjYWxsLCBnZnApO1xcbi19XFxuLVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2V4dHJhY3RfYmVnaW4oc3RydWN0IGFmc19jYWxsICpjYWxsLCB2b2lkICpidWYsIHNpemVfdCBzaXplKVxcbiB7XFxuIFxcdGNhbGwtXFx1MDAzZWlvdl9sZW4gPSBzaXplO1xcbkBAIC0xNzYyLDYgKzE3NDYsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKkFGU19WTk9ERV9UT19JKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlKVxcbiBcXHRyZXR1cm4gXFx1MDAyNnZub2RlLVxcdTAwM2VuZXRmcy5pbm9kZTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXFxuK1xcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnApXFxuK3tcXG4rXFx0c3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtXFx1MDAzZWVzdGF0ZS1cXHUwMDNlYWRkcmVzc2VzO1xcbitcXG4rXFx0b3AtXFx1MDAzZWNhbGxcXHQ9IGNhbGw7XFxuK1xcdG9wLVxcdTAwM2V0eXBlXFx0PSBjYWxsLVxcdTAwM2V0eXBlO1xcbitcXHRjYWxsLVxcdTAwM2VvcFxcdD0gb3A7XFxuK1xcdGNhbGwtXFx1MDAzZXNlcnZlclxcdD0gYWZzX3VzZV9zZXJ2ZXIob3AtXFx1MDAzZXNlcnZlciwgZmFsc2UsIGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NhbGwpO1xcbitcXHRjYWxsLVxcdTAwM2VrZXlcXHQ9IG9wLVxcdTAwM2VrZXk7XFxuK1xcdGNhbGwtXFx1MDAzZWludHJcXHQ9ICEob3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQUZTX09QRVJBVElPTl9VTklOVFIpO1xcbitcXHRjYWxsLVxcdTAwM2VwZWVyXFx0PSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtXFx1MDAzZWFkZHJzW29wLVxcdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcXG4rXFx0Y2FsbC1cXHUwMDNlc2VydmljZV9pZCA9IG9wLVxcdTAwM2VzZXJ2ZXItXFx1MDAzZXNlcnZpY2VfaWQ7XFxuK1xcdGFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTtcXG4rfVxcbitcXG4gLypcXG4gICogTm90ZSB0aGF0IGEgZGVudHJ5IGdvdCBjaGFuZ2VkLiAgV2UgbmVlZCB0byBzZXQgZF9mc2RhdGEgdG8gdGhlIGRhdGEgdmVyc2lvblxcbiAgKiBudW1iZXIgZGVyaXZlZCBmcm9tIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4gIEl0IGRvZXNuJ3QgbWF0dGVyIGlmXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9tYWluLmMgYi9mcy9hZnMvbWFpbi5jXFxuaW5kZXggN2E4ODNjNTk5NzZmZjIuLjYzNTNmZWFhNWZiNGI1IDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9tYWluLmNcXG4rKysgYi9mcy9hZnMvbWFpbi5jXFxuQEAgLTczLDcgKzczLDYgQEAgc3RhdGljIGludCBfX25ldF9pbml0IGFmc19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXRfbnMpXFxuIFxcdGdlbmVyYXRlX3JhbmRvbV91dWlkKCh1bnNpZ25lZCBjaGFyICopXFx1MDAyNm5ldC1cXHUwMDNldXVpZCk7XFxuIFxcbiBcXHRJTklUX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNlY2hhcmdlX3ByZWFsbG9jYXRpb25fd29yaywgYWZzX2NoYXJnZV9wcmVhbGxvY2F0aW9uKTtcXG4tXFx0SU5JVF9XT1JLKFxcdTAwMjZuZXQtXFx1MDAzZXJ4X29vYl93b3JrLCBhZnNfcHJvY2Vzc19vb2JfcXVldWUpO1xcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZuZXQtXFx1MDAzZXNvY2tldF9tdXRleCk7XFxuIFxcbiBcXHRuZXQtXFx1MDAzZWNlbGxzID0gUkJfUk9PVDtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3J4cnBjLmMgYi9mcy9hZnMvcnhycGMuY1xcbmluZGV4IGQ4MjkxNjY1N2EzZGRmLi5jZjc1ODhhMDJmMzA1MyAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvcnhycGMuY1xcbisrKyBiL2ZzL2Fmcy9yeHJwYy5jXFxuQEAgLTI1LDE0ICsyNSwxMiBAQCBzdGF0aWMgdm9pZCBhZnNfcHJvY2Vzc19hc3luY19jYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcXG4gc3RhdGljIHZvaWQgYWZzX3J4X25ld19jYWxsKHN0cnVjdCBzb2NrICosIHN0cnVjdCByeHJwY19jYWxsICosIHVuc2lnbmVkIGxvbmcpO1xcbiBzdGF0aWMgdm9pZCBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbChzdHJ1Y3QgcnhycGNfY2FsbCAqLCB1bnNpZ25lZCBsb25nKTtcXG4gc3RhdGljIHZvaWQgYWZzX3J4X2F0dGFjaChzdHJ1Y3QgcnhycGNfY2FsbCAqcnhjYWxsLCB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCk7XFxuLXN0YXRpYyB2b2lkIGFmc19yeF9ub3RpZnlfb29iKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9vYik7XFxuIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY21fb3BfaWQoc3RydWN0IGFmc19jYWxsICopO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByeHJwY19rZXJuZWxfb3BzIGFmc19yeHJwY19jYWxsYmFja19vcHMgPSB7XFxuIFxcdC5ub3RpZnlfbmV3X2NhbGxcXHQ9IGFmc19yeF9uZXdfY2FsbCxcXG4gXFx0LmRpc2NhcmRfbmV3X2NhbGxcXHQ9IGFmc19yeF9kaXNjYXJkX25ld19jYWxsLFxcbiBcXHQudXNlcl9hdHRhY2hfY2FsbFxcdD0gYWZzX3J4X2F0dGFjaCxcXG4tXFx0Lm5vdGlmeV9vb2JcXHRcXHQ9IGFmc19yeF9ub3RpZnlfb29iLFxcbiB9O1xcbiBcXG4gLyogYXN5bmNocm9ub3VzIGluY29taW5nIGNhbGwgaW5pdGlhbCBwcm9jZXNzaW5nICovXFxuQEAgLTc0LDEwICs3Miw2IEBAIGludCBhZnNfb3Blbl9zb2NrZXQoc3RydWN0IGFmc19uZXQgKm5ldClcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyb3JfMjtcXG4gXFxuLVxcdHJldCA9IHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZShzb2NrZXQtXFx1MDAzZXNrLCB0cnVlKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gZXJyb3JfMjtcXG4tXFxuIFxcdHJldCA9IGFmc19jcmVhdGVfdG9rZW5fa2V5KG5ldCwgc29ja2V0KTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHByX2VycihcXFwiQ291bGRuJ3QgY3JlYXRlIFJ4R0sgQ00ga2V5OiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5AQCAtMTI4LDcgKzEyMiw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxcbiBcXHRfZW50ZXIoXFxcIlxcXCIpO1xcbiBcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bmV0LVxcdTAwM2VjaGFyZ2VfcHJlYWxsb2NhdGlvbl93b3JrKTtcXG4tXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bmV0LVxcdTAwM2VyeF9vb2Jfd29yayk7XFxuIFxcdC8qIEZ1dHVyZSB3b3JrIGl0ZW1zIHNob3VsZCBub3cgc2VlIC1cXHUwMDNlbGl2ZSBpcyBmYWxzZS4gKi9cXG4gXFxuIFxcdGtlcm5lbF9saXN0ZW4obmV0LVxcdTAwM2Vzb2NrZXQsIDApO1xcbkBAIC0xNDksNyArMTQyLDYgQEAgdm9pZCBhZnNfY2xvc2Vfc29ja2V0KHN0cnVjdCBhZnNfbmV0ICpuZXQpXFxuIFxcbiBcXHRrZXJuZWxfc29ja19zaHV0ZG93bihuZXQtXFx1MDAzZXNvY2tldCwgU0hVVF9SRFdSKTtcXG4gXFx0Zmx1c2hfd29ya3F1ZXVlKGFmc19hc3luY19jYWxscyk7XFxuLVxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNm5ldC1cXHUwMDNlcnhfb29iX3dvcmspO1xcbiBcXHRuZXQtXFx1MDAzZXNvY2tldC1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJfZGF0YSA9IE5VTEw7XFxuIFxcdHNvY2tfcmVsZWFzZShuZXQtXFx1MDAzZXNvY2tldCk7XFxuIFxcdGtleV9wdXQobmV0LVxcdTAwM2Vmc19jbV90b2tlbl9rZXkpO1xcbkBAIC0zNDcsNiArMzM5LDcgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxcbiBcXHRzdHJ1Y3QgcnhycGNfY2FsbCAqcnhjYWxsO1xcbiBcXHRzdHJ1Y3QgbXNnaGRyIG1zZztcXG4gXFx0c3RydWN0IGt2ZWMgaW92WzFdO1xcbitcXHRzdHJ1Y3Qga2V5ICphcHBfZGF0YSA9IE5VTEw7XFxuIFxcdHNpemVfdCBsZW47XFxuIFxcdHM2NCB0eF90b3RhbF9sZW47XFxuIFxcdGludCByZXQ7XFxuQEAgLTM3OCw4ICszNzEsMjYgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxcbiBcXHRcXHRjYWxsLVxcdTAwM2Vkcm9wX3JlZiA9IHRydWU7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChjYWxsLVxcdTAwM2VrZXkgXFx1MDAyNlxcdTAwMjYgY2FsbC1cXHUwMDNlc2VydmVyKSB7XFxuK1xcdFxcdHUzMiBrcmI1X2VuY3R5cGUgPSAwO1xcbitcXHRcXHR1OCBzZWN1cml0eV9pbmRleCA9IDA7XFxuK1xcbitcXHRcXHRyeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNhbGwtXFx1MDAzZWtleSwgXFx1MDAyNnNlY3VyaXR5X2luZGV4LCBcXHUwMDI2a3JiNV9lbmN0eXBlKTtcXG4rXFx0XFx0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xcbisjaWZkZWYgQ09ORklHX1JYR0tcXG4rXFx0XFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcXG4rXFx0XFx0XFx0LyogUmVhZCB0aGUga2V5IHBvaW50ZXIgYmVmb3JlIHRoZSBhcHBkYXRhICovXFxuK1xcdFxcdFxcdGFwcF9kYXRhID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2Y2FsbC1cXHUwMDNlc2VydmVyLVxcdTAwM2V5ZnNfcnhna19hcHBkYXRhKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHQvKiBjcmVhdGUgYSBjYWxsICovXFxuLVxcdHJ4Y2FsbCA9IHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKGNhbGwtXFx1MDAzZW5ldC1cXHUwMDNlc29ja2V0LCBjYWxsLVxcdTAwM2VwZWVyLCBjYWxsLVxcdTAwM2VrZXksXFxuK1xcdHJ4Y2FsbCA9IHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKGNhbGwtXFx1MDAzZW5ldC1cXHUwMDNlc29ja2V0LCBjYWxsLVxcdTAwM2VwZWVyLFxcbitcXHRcXHRcXHRcXHRcXHQgY2FsbC1cXHUwMDNla2V5LCBhcHBfZGF0YSxcXG4gXFx0XFx0XFx0XFx0XFx0ICh1bnNpZ25lZCBsb25nKWNhbGwsXFxuIFxcdFxcdFxcdFxcdFxcdCB0eF90b3RhbF9sZW4sXFxuIFxcdFxcdFxcdFxcdFxcdCBjYWxsLVxcdTAwM2VtYXhfbGlmZXNwYW4sXFxuQEAgLTk4MywxNCArOTk0LDMgQEAgbm9pbmxpbmUgaW50IGFmc19wcm90b2NvbF9lcnJvcihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXFxuIFxcdFxcdGNhbGwtXFx1MDAzZXVubWFyc2hhbGxpbmdfZXJyb3IgPSB0cnVlO1xcbiBcXHRyZXR1cm4gLUVCQURNU0c7XFxuIH1cXG4tXFxuLS8qXFxuLSAqIFdha2UgdXAgT09CIG5vdGlmaWNhdGlvbiBwcm9jZXNzaW5nLlxcbi0gKi9cXG4tc3RhdGljIHZvaWQgYWZzX3J4X25vdGlmeV9vb2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb29iKVxcbi17XFxuLVxcdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBzay1cXHUwMDNlc2tfdXNlcl9kYXRhO1xcbi1cXG4tXFx0aWYgKFJFQURfT05DRShuZXQtXFx1MDAzZWxpdmUpKVxcbi1cXHRcXHRxdWV1ZV93b3JrKGFmc193cSwgXFx1MDAyNm5ldC1cXHUwMDNlcnhfb29iX3dvcmspO1xcbi19XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZXJ2ZXIuYyBiL2ZzL2Fmcy9zZXJ2ZXIuY1xcbmluZGV4IDBmZTE2MmVhMmEzNmRiLi40YzNhN2JkMGY3ZDg2NiAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvc2VydmVyLmNcXG4rKysgYi9mcy9hZnMvc2VydmVyLmNcXG5AQCAtMzk4LDcgKzM5OCw3IEBAIHN0YXRpYyB2b2lkIGFmc19zZXJ2ZXJfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbiBcXHRhZnNfcHV0X2VuZHBvaW50X3N0YXRlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItXFx1MDAzZWVuZHBvaW50X3N0YXRlKSxcXG4gXFx0XFx0XFx0ICAgICAgIGFmc19lc3RhdGVfdHJhY2VfcHV0X3NlcnZlcik7XFxuIFxcdGFmc19wdXRfY2VsbChzZXJ2ZXItXFx1MDAzZWNlbGwsIGFmc19jZWxsX3RyYWNlX3B1dF9zZXJ2ZXIpO1xcbi1cXHRrZnJlZShzZXJ2ZXItXFx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKTtcXG4rXFx0a2V5X3B1dChzZXJ2ZXItXFx1MDAzZXlmc19yeGdrX2FwcGRhdGEpO1xcbiBcXHRrZnJlZShzZXJ2ZXIpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2tleXMvdXNlci10eXBlLmggYi9pbmNsdWRlL2tleXMvdXNlci10eXBlLmhcXG5pbmRleCAzODZjMzE0MzI3ODk5NS4uNzAwMmE5OTNhNDcyMjggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oXFxuKysrIGIvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oXFxuQEAgLTI2LDYgKzI2LDcgQEBcXG4gICovXFxuIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIHtcXG4gXFx0c3RydWN0IHJjdV9oZWFkXFx0cmN1O1xcdFxcdC8qIFJDVSBkZXN0cnVjdG9yICovXFxuK1xcdHJlZmNvdW50X3RcXHRyZWY7XFxuIFxcdHVuc2lnbmVkIHNob3J0XFx0ZGF0YWxlbjtcXHQvKiBsZW5ndGggb2YgdGhpcyBkYXRhICovXFxuIFxcdGNoYXJcXHRcXHRkYXRhW10gX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpOyAvKiBhY3R1YWwgZGF0YSAqL1xcbiB9O1xcbkBAIC0zNyw2ICszOCw3IEBAIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQ7XFxuIFxcbiBleHRlcm4gaW50IHVzZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XFxuIGV4dGVybiB2b2lkIHVzZXJfZnJlZV9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcXG4rdm9pZCBwdXRfdXNlcl9rZXlfcGF5bG9hZChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZCk7XFxuIGV4dGVybiBpbnQgdXNlcl91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcXG4gZXh0ZXJuIHZvaWQgdXNlcl9yZXZva2Uoc3RydWN0IGtleSAqa2V5KTtcXG4gZXh0ZXJuIHZvaWQgdXNlcl9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmggYi9pbmNsdWRlL25ldC9hZl9yeHJwYy5oXFxuaW5kZXggMGZiNGM0MWM5YmJmNTUuLmE5YjhlMWJhNjdlZjhkIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmhcXG4rKysgYi9pbmNsdWRlL25ldC9hZl9yeHJwYy5oXFxuQEAgLTU1LDYgKzU1LDcgQEAgdm9pZCByeHJwY19rZXJuZWxfc2V0X25vdGlmaWNhdGlvbnMoc3RydWN0IHNvY2tldCAqc29jayxcXG4gc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByeHJwY19wZWVyICpwZWVyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2V5ICprZXksXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrZXkgKmFwcF9kYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgczY0IHR4X3RvdGFsX2xlbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgdTMyIGhhcmRfdGltZW91dCxcXG5AQCAtOTEsMjQgKzkyLDggQEAgYm9vbCByeHJwY19rZXJuZWxfY2hlY2tfbGlmZShjb25zdCBzdHJ1Y3Qgc29ja2V0ICosIGNvbnN0IHN0cnVjdCByeHJwY19jYWxsICopO1xcbiBcXG4gaW50IHJ4cnBjX3NvY2tfc2V0X21pbl9zZWN1cml0eV9sZXZlbChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCB2YWwpO1xcbiBpbnQgcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qga2V5ICopO1xcbi1pbnQgcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzZXQpO1xcbi1cXG4tZW51bSByeHJwY19vb2JfdHlwZSByeHJwY19rZXJuZWxfcXVlcnlfb29iKHN0cnVjdCBza19idWZmICpvb2IsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEpO1xcbi1zdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfa2VybmVsX2RlcXVldWVfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLVxcdFxcdFxcdFxcdFxcdCBlbnVtIHJ4cnBjX29vYl90eXBlICpfdHlwZSk7XFxuLXZvaWQgcnhycGNfa2VybmVsX2ZyZWVfb29iKHN0cnVjdCBza19idWZmICpvb2IpO1xcbi12b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxcbi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsXFxuLVxcdFxcdFxcdFxcdCAgdTE2ICpfc2VydmljZV9pZCwgdTggKl9zZWN1cml0eV9pbmRleCk7XFxuLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSxcXG4tXFx0XFx0XFx0XFx0ICBpbnQgZXJyb3IsIGVudW0gcnhycGNfYWJvcnRfcmVhc29uIHdoeSk7XFxuLWludCByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSk7XFxuLXUzMiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSk7XFxuLWludCByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSk7XFxuK3ZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2tleShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHU4ICpfc2VjdXJpdHlfaW5kZXgsXFxuK1xcdFxcdFxcdCAgICB1MzIgKl9rcmI1X2VuY3R5cGUpO1xcbiB1OCByeHJwY19rZXJuZWxfcXVlcnlfY2FsbF9zZWN1cml0eShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG4gXFx0XFx0XFx0XFx0ICAgIHUxNiAqX3NlcnZpY2VfaWQsIHUzMiAqX2VuY3R5cGUpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxcbmluZGV4IDFiM2M0OGI1NTkxZGZkLi4wNGIwYmI2ODJiODEwMSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXFxuQEAgLTE0OCw2ICsxNDgsNyBAQCBlbnVtIHlmc19jbV9vcGVyYXRpb24ge1xcbiBcXHRFTShhZnNfc2VydmVyX3RyYWNlX3VudXNlX3NsaXN0X2lzb3J0LFxcdFxcXCJVTlUgaXNvcnRcXFwiKSBcXFxcXFxuIFxcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXBkYXRlLFxcdFxcdFxcXCJVUERBVEUgICBcXFwiKSBcXFxcXFxuIFxcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2J5X3V1aWQsXFx0XFxcIlVTRSB1dWlkIFxcXCIpIFxcXFxcXG4rXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCxcXHRcXHRcXFwiVVNFIGNhbGwgXFxcIikgXFxcXFxcbiBcXHRFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9jbV9jYWxsLFxcdFxcXCJVU0UgY20tY2xcXFwiKSBcXFxcXFxuIFxcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dldF9jYXBzLFxcdFxcXCJVU0UgZ2NhcHNcXFwiKSBcXFxcXFxuIFxcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dpdmVfdXBfY2IsXFx0XFxcIlVTRSBndnVwY1xcXCIpIFxcXFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcXG5pbmRleCA3MDRhMTBkZTY2NzAwNC4uZDNhMzE0NzM5ZDA3ZTAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcXG5AQCAtNzgsNiArNzgsNyBAQFxcbiBcXHRFTShyeGdrX2Fib3J0XzJfc2hvcnRfZW5jZGF0YSxcXHRcXHRcXFwicnhnazItc2hvcnQtZW5jZGF0YVxcXCIpXFx0XFxcXFxcbiBcXHRFTShyeGdrX2Fib3J0XzJfc2hvcnRfaGVhZGVyLFxcdFxcdFxcXCJyeGdrMi1zaG9ydC1oZHJcXFwiKVxcdFxcXFxcXG4gXFx0RU0ocnhna19hYm9ydF9iYWRfa2V5X251bWJlcixcXHRcXHRcXFwicnhnay1iYWQta2V5LW51bVxcXCIpXFx0XFxcXFxcbitcXHRFTShyeGdrX2Fib3J0X2NoYWxsX2JhZF9hcHBfa2V5LFxcdFxcXCJyeGdrLWNoYWxsLWJhZC1hcHAta2V5XFxcIilcXFxcXFxuIFxcdEVNKHJ4Z2tfYWJvcnRfY2hhbGxfa2V5X2V4cGlyZWQsXFx0XFxcInJ4Z2stY2hhbGwta2V5LWV4cFxcXCIpXFx0XFxcXFxcbiBcXHRFTShyeGdrX2Fib3J0X2NoYWxsX25vX2tleSxcXHRcXHRcXFwicnhnay1jaGFsbC1ub2tleVxcXCIpXFx0XFxcXFxcbiBcXHRFTShyeGdrX2Fib3J0X2NoYWxsX3Nob3J0LFxcdFxcdFxcXCJyeGdrLWNoYWxsLXNob3J0XFxcIilcXHRcXFxcXFxuQEAgLTE0OCw2ICsxNDksNyBAQFxcbiBcXHRFTShyeHJwY19lcHJvdG9fd3Jvbmdfc2VjdXJpdHksXFx0XFx0XFxcIndyb25nLXNlY1xcXCIpXFx0XFx0XFxcXFxcbiBcXHRFTShyeHJwY19yZWN2bXNnX2V4Y2Vzc19kYXRhLFxcdFxcdFxcXCJyZWN2bXNnLWV4Y2Vzc1xcXCIpXFx0XFxcXFxcbiBcXHRFTShyeHJwY19yZWN2bXNnX3Nob3J0X2RhdGEsXFx0XFx0XFxcInJlY3Ztc2ctc2hvcnRcXFwiKVxcdFxcXFxcXG4rXFx0RU0ocnhycGNfc2VuZG1zZ190eF9lcnJvcixcXHRcXHRcXFwidHgtZXJyb3JcXFwiKVxcdFxcdFxcXFxcXG4gXFx0RV8ocnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsXFx0XFx0XFxcInNlbmRtc2ctbGF0ZVxcXCIpXFxuIFxcbiAjZGVmaW5lIHJ4cnBjX2NhbGxfcG9rZV90cmFjZXMgXFxcXFxcbkBAIC0yNjIsNyArMjY0LDYgQEBcXG4gXFx0RU0ocnhycGNfY29ubl9mcmVlLFxcdFxcdFxcdFxcXCJGUkVFICAgICAgICBcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2Nvbm5fZ2V0X2FjdGl2YXRlX2NhbGwsXFx0XFxcIkdFVCBhY3QtY2FsbFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY29ubl9nZXRfY2FsbF9pbnB1dCxcXHRcXHRcXFwiR0VUIGlucC1jYWxsXFxcIikgXFxcXFxcbi1cXHRFTShyeHJwY19jb25uX2dldF9jaGFsbGVuZ2VfaW5wdXQsXFx0XFxcIkdFVCBpbnAtY2hhbFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY29ubl9nZXRfY29ubl9pbnB1dCxcXHRcXHRcXFwiR0VUIGlucC1jb25uXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jb25uX2dldF9pZGxlLFxcdFxcdFxcdFxcXCJHRVQgaWRsZSAgICBcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2Nvbm5fZ2V0X3Bva2VfYWJvcnQsXFx0XFx0XFxcIkdFVCBway1hYm9ydFxcXCIpIFxcXFxcXG5AQCAtMjc0LDcgKzI3NSw2IEBAXFxuIFxcdEVNKHJ4cnBjX2Nvbm5fbmV3X3NlcnZpY2UsXFx0XFx0XFxcIk5FVyBzZXJ2aWNlIFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY29ubl9wdXRfY2FsbCxcXHRcXHRcXHRcXFwiUFVUIGNhbGwgICAgXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jb25uX3B1dF9jYWxsX2lucHV0LFxcdFxcdFxcXCJQVVQgaW5wLWNhbGxcXFwiKSBcXFxcXFxuLVxcdEVNKHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCxcXHRcXFwiUFVUIGlucC1jaGFsXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jb25uX3B1dF9jb25uX2lucHV0LFxcdFxcdFxcXCJQVVQgaW5wLWNvbm5cXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2Nvbm5fcHV0X2Rpc2NhcmRfaWRsZSxcXHRcXHRcXFwiUFVUIGRpc2MtaWRsXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jb25uX3B1dF9sb2NhbF9kZWFkLFxcdFxcdFxcXCJQVVQgbG9jLWRlYWRcXFwiKSBcXFxcXFxuQEAgLTM0Miw2ICszNDIsNyBAQFxcbiBcXHRFTShyeHJwY19jYWxsX3NlZV9kaXN0cmlidXRlX2Vycm9yLFxcdFxcXCJTRUUgZGlzdC1lcnJcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2NhbGxfc2VlX2lucHV0LFxcdFxcdFxcXCJTRUUgaW5wdXQgICBcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9yZWxlYXNlZCxcXHRcXFwiU0VFIG5meS1ybHNkXFxcIikgXFxcXFxcbitcXHRFTShyeHJwY19jYWxsX3NlZV9ub3RpZnlfc2tpcHBlZCxcXHRcXFwiU0VFIG5meS1za2lwXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnLFxcdFxcdFxcXCJTRUUgcmVjdm1zZyBcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2NhbGxfc2VlX3JlY3Ztc2dfcmVxdWV1ZSxcXHRcXFwiU0VFIHJlY3YtcnF1XFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWVfZmlyc3QsIFxcXCJTRUUgcmVjdi1ycUZcXFwiKSBcXFxcXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmhcXG5pbmRleCBkOTczNWFiZDRjNzkxMC4uN2Q2YTUwMTUxOTMxMTIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaFxcbkBAIC01OCwxMSArNTgsNyBAQCBlbnVtIHJ4cnBjX2Ntc2dfdHlwZSB7XFxuIFxcdFJYUlBDX1RYX0xFTkdUSFxcdFxcdD0gMTIsXFx0LyogLXMtOiBUb3RhbCBsZW5ndGggb2YgVHggZGF0YSAqL1xcbiBcXHRSWFJQQ19TRVRfQ0FMTF9USU1FT1VUXFx0PSAxMyxcXHQvKiAtcy06IFNldCBvbmUgb3IgbW9yZSBjYWxsIHRpbWVvdXRzICovXFxuIFxcdFJYUlBDX0NIQVJHRV9BQ0NFUFRcXHQ9IDE0LFxcdC8qIFNzLTogQ2hhcmdlIHRoZSBhY2NlcHQgcG9vbCB3aXRoIGEgdXNlciBjYWxsIElEICovXFxuLVxcdFJYUlBDX09PQl9JRFxcdFxcdD0gMTUsXFx0LyogLXNyOiBPT0IgbWVzc2FnZSBJRCAqL1xcbi1cXHRSWFJQQ19DSEFMTEVOR0VEXFx0PSAxNixcXHQvKiBDLXI6IEluZm8gb24gYSByZWNlaXZlZCBDSEFMTEVOR0UgKi9cXG4tXFx0UlhSUENfUkVTUE9ORFxcdFxcdD0gMTcsXFx0LyogQ3MtOiBSZXNwb25kIHRvIGEgY2hhbGxlbmdlICovXFxuLVxcdFJYUlBDX1JFU1BPTkRFRFxcdFxcdD0gMTgsXFx0LyogUy1yOiBEYXRhIHJlY2VpdmVkIGluIFJFU1BPTlNFICovXFxuLVxcdFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBXFx0PSAxOSxcXHQvKiBDcy06IFJFU1BPTlNFOiBSeEdLIGFwcCBkYXRhIHRvIGluY2x1ZGUgKi9cXG4rXFx0UlhSUENfUkVTUE9OU0VfQVBQREFUQVxcdD0gMjAsXFx0LyogQ3MtOiBVc2VyIGtleSBob2xkaW5nIGFwcCBkYXRhIGZvciBSRVNQT05TRSAqL1xcbiBcXHRSWFJQQ19fU1VQUE9SVEVEXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXFxuaW5kZXggYzNjOGMzMjQwZWY5NDYuLmFhM2MwNThmNDA5NTU5IDEwMDY0NFxcbi0tLSBhL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXFxuKysrIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcXG5AQCAtMjA4LDYgKzIwOCw3IEBAIGRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxcbiBcXHRcXHRrbGVhdmUoXFxcIiA9IC1FTk9NRU1cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZ1cGF5bG9hZC1cXHUwMDNlcmVmLCAxKTtcXG4gXFxuIFxcdHVwYXlsb2FkLVxcdTAwM2VkYXRhbGVuID0gcmVzdWx0X2xlbjtcXG4gXFx0bWVtY3B5KHVwYXlsb2FkLVxcdTAwM2VkYXRhLCBkYXRhLCByZXN1bHRfbGVuKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL01ha2VmaWxlIGIvbmV0L3J4cnBjL01ha2VmaWxlXFxuaW5kZXggZjk5NGY5ZjMwYTI5ZDQuLmY3YTVlMGE1OTJlZTEzIDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9NYWtlZmlsZVxcbisrKyBiL25ldC9yeHJwYy9NYWtlZmlsZVxcbkBAIC0yNCw3ICsyNCw2IEBAIHJ4cnBjLXkgOj0gXFxcXFxcbiBcXHRsb2NhbF9vYmplY3QubyBcXFxcXFxuIFxcdG1pc2MubyBcXFxcXFxuIFxcdG5ldF9ucy5vIFxcXFxcXG4tXFx0b29iLm8gXFxcXFxcbiBcXHRvdXRwdXQubyBcXFxcXFxuIFxcdHBlZXJfZXZlbnQubyBcXFxcXFxuIFxcdHBlZXJfb2JqZWN0Lm8gXFxcXFxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYWZfcnhycGMuYyBiL25ldC9yeHJwYy9hZl9yeHJwYy5jXFxuaW5kZXggOWFiMGYyMmM4ODFlYzUuLjlkNWNlMWM3YWQwZDIyIDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9hZl9yeHJwYy5jXFxuKysrIGIvbmV0L3J4cnBjL2FmX3J4cnBjLmNcXG5AQCAtMzE4LDYgKzMxOCw3IEBAIEVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3B1dF9wZWVyKTtcXG4gICogQHNvY2s6IFRoZSBzb2NrZXQgb24gd2hpY2ggdG8gbWFrZSB0aGUgY2FsbFxcbiAgKiBAcGVlcjogVGhlIHBlZXIgdG8gY29udGFjdFxcbiAgKiBAa2V5OiBUaGUgc2VjdXJpdHkgY29udGV4dCB0byB1c2UgKGRlZmF1bHRzIHRvIHNvY2tldCBzZXR0aW5nKVxcbisgKiBAYXBwX2RhdGE6IFRoZSBzZWN1cml0eSByZXNwb25zZSBhcHBsaWNhdGlvbiBkYXRhIChvciBOVUxMKVxcbiAgKiBAdXNlcl9jYWxsX0lEOiBUaGUgSUQgdG8gdXNlXFxuICAqIEB0eF90b3RhbF9sZW46IFRvdGFsIGxlbmd0aCBvZiBkYXRhIHRvIHRyYW5zbWl0IGR1cmluZyB0aGUgY2FsbCAob3IgLTEpXFxuICAqIEBoYXJkX3RpbWVvdXQ6IFRoZSBtYXhpbXVtIGxpZmVzcGFuIG9mIHRoZSBjYWxsIGluIHNlY1xcbkBAIC0zNDAsNiArMzQxLDcgQEAgRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcHV0X3BlZXIpO1xcbiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrZXkgKmtleSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGtleSAqYXBwX2RhdGEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgdXNlcl9jYWxsX0lELFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzNjQgdHhfdG90YWxfbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHQgICB1MzIgaGFyZF90aW1lb3V0LFxcbkBAIC0zNjgsNiArMzcwLDcgQEAgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdFxcdGtleSA9IE5VTEw7IC8qIGEgbm8tc2VjdXJpdHkga2V5ICovXFxuIFxcbiBcXHRtZW1zZXQoXFx1MDAyNnAsIDAsIHNpemVvZihwKSk7XFxuK1xcdHAuYXBwX2RhdGFcXHRcXHQ9IGFwcF9kYXRhO1xcbiBcXHRwLnVzZXJfY2FsbF9JRFxcdFxcdD0gdXNlcl9jYWxsX0lEO1xcbiBcXHRwLnR4X3RvdGFsX2xlblxcdFxcdD0gdHhfdG90YWxfbGVuO1xcbiBcXHRwLmludGVycnVwdGliaWxpdHlcXHQ9IGludGVycnVwdGliaWxpdHk7XFxuQEAgLTU5NSwxMCArNTk4LDcgQEAgc3RhdGljIGludCByeHJwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBsZW4pXFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRjYXNlIFJYUlBDX1NFUlZFUl9CT1VORDpcXG4gXFx0Y2FzZSBSWFJQQ19TRVJWRVJfTElTVEVOSU5HOlxcbi1cXHRcXHRpZiAobS1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX09PQilcXG4tXFx0XFx0XFx0cmV0ID0gcnhycGNfc2VuZG1zZ19vb2IocngsIG0sIGxlbik7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0cmV0ID0gcnhycGNfZG9fc2VuZG1zZyhyeCwgbSwgbGVuKTtcXG4rXFx0XFx0cmV0ID0gcnhycGNfZG9fc2VuZG1zZyhyeCwgbSwgbGVuKTtcXG4gXFx0XFx0LyogVGhlIHNvY2tldCBoYXMgYmVlbiB1bmxvY2tlZCAqL1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0ZGVmYXVsdDpcXG5AQCAtNjMzLDcgKzYzMyw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRcXHRcXHQgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVxcdTAwM2Vzayk7XFxuLVxcdHVuc2lnbmVkIGludCBtaW5fc2VjX2xldmVsLCB2YWw7XFxuK1xcdHVuc2lnbmVkIGludCBtaW5fc2VjX2xldmVsO1xcbiBcXHR1MTYgc2VydmljZV91cGdyYWRlWzJdO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5AQCAtNzEwLDIzICs3MTAsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gXFxuIFxcdFxcdGNhc2UgUlhSUENfTUFOQUdFX1JFU1BPTlNFOlxcbiBcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRpZiAob3B0bGVuICE9IHNpemVvZih1bnNpZ25lZCBpbnQpKVxcbi1cXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbi1cXHRcXHRcXHRyZXQgPSAtRUlTQ09OTjtcXG4tXFx0XFx0XFx0aWYgKHJ4LVxcdTAwM2Vzay5za19zdGF0ZSAhPSBSWFJQQ19VTkJPVU5EKVxcbi1cXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbi1cXHRcXHRcXHRyZXQgPSBjb3B5X3NhZmVfZnJvbV9zb2NrcHRyKFxcdTAwMjZ2YWwsIHNpemVvZih2YWwpLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIG9wdHZhbCwgb3B0bGVuKTtcXG4tXFx0XFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4tXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNlIDEpXFxuLVxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuLVxcdFxcdFxcdGlmICh2YWwpXFxuLVxcdFxcdFxcdFxcdHNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFxcdTAwMjZyeC1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdGNsZWFyX2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXFx1MDAyNnJ4LVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdFxcdGdvdG8gc3VjY2VzcztcXG4rXFx0XFx0XFx0Z290byBlcnJvcjtcXG4gXFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC04MzUsOCArODE5LDYgQEAgc3RhdGljIGludCByeHJwY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXFxuIFxcdHJ4LVxcdTAwM2VjYWxscyA9IFJCX1JPT1Q7XFxuIFxcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2cngtXFx1MDAzZWluY29taW5nX2xvY2spO1xcbi1cXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19vb2JxKTtcXG4tXFx0cngtXFx1MDAzZXBlbmRpbmdfb29icSA9IFJCX1JPT1Q7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZyeC1cXHUwMDNlc29ja19jYWxscyk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZyeC1cXHUwMDNldG9fYmVfYWNjZXB0ZWQpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfcSk7XFxuQEAgLTg4NCwyMyArODY2LDYgQEAgc3RhdGljIGludCByeHJwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZmxhZ3MpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFB1cmdlIHRoZSBvdXQtb2YtYmFuZCBxdWV1ZS5cXG4tICovXFxuLXN0YXRpYyB2b2lkIHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzdHJ1Y3Qgc29jayAqc2spXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc2spO1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi1cXG4tXFx0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfb29icSkpKVxcbi1cXHRcXHRyeHJwY19rZXJuZWxfZnJlZV9vb2Ioc2tiKTtcXG4tXFx0d2hpbGUgKCFSQl9FTVBUWV9ST09UKFxcdTAwMjZyeC1cXHUwMDNlcGVuZGluZ19vb2JxKSkge1xcbi1cXHRcXHRza2IgPSByYl9lbnRyeShyeC1cXHUwMDNlcGVuZGluZ19vb2JxLnJiX25vZGUsIHN0cnVjdCBza19idWZmLCByYm5vZGUpO1xcbi1cXHRcXHRyYl9lcmFzZShcXHUwMDI2c2tiLVxcdTAwM2VyYm5vZGUsIFxcdTAwMjZyeC1cXHUwMDNlcGVuZGluZ19vb2JxKTtcXG4tXFx0XFx0cnhycGNfa2VybmVsX2ZyZWVfb29iKHNrYik7XFxuLVxcdH1cXG4tfVxcbi1cXG4gLypcXG4gICogUnhSUEMgc29ja2V0IGRlc3RydWN0b3JcXG4gICovXFxuQEAgLTkwOCw3ICs4NzMsNiBAQCBzdGF0aWMgdm9pZCByeHJwY19zb2NrX2Rlc3RydWN0b3Ioc3RydWN0IHNvY2sgKnNrKVxcbiB7XFxuIFxcdF9lbnRlcihcXFwiJXBcXFwiLCBzayk7XFxuIFxcbi1cXHRyeHJwY19wdXJnZV9vb2JfcXVldWUoc2spO1xcbiBcXHRyeHJwY19wdXJnZV9xdWV1ZShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xcbiBcXG4gXFx0V0FSTl9PTihyZWZjb3VudF9yZWFkKFxcdTAwMjZzay1cXHUwMDNlc2tfd21lbV9hbGxvYykpO1xcbkBAIC05NjEsNyArOTI1LDYgQEAgc3RhdGljIGludCByeHJwY19yZWxlYXNlX3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRyeHJwY19kaXNjYXJkX3ByZWFsbG9jKHJ4KTtcXG4gXFx0cnhycGNfcmVsZWFzZV9jYWxsc19vbl9zb2NrZXQocngpO1xcbiBcXHRmbHVzaF93b3JrcXVldWUocnhycGNfd29ya3F1ZXVlKTtcXG4tXFx0cnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTtcXG4gXFx0cnhycGNfcHVyZ2VfcXVldWUoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG4gXFxuIFxcdHJ4cnBjX3VudXNlX2xvY2FsKHJ4LVxcdTAwM2Vsb2NhbCwgcnhycGNfbG9jYWxfdW51c2VfcmVsZWFzZV9zb2NrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmggYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxcbmluZGV4IDg2NWYwNWZlMzdhYjk2Li44Mzg1OGM0NWZhNGE0MyAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxcbisrKyBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXFxuQEAgLTE3MSw5ICsxNzEsNiBAQCBzdHJ1Y3QgcnhycGNfc29jayB7XFxuIFxcdGNvbnN0IHN0cnVjdCByeHJwY19rZXJuZWxfb3BzICphcHBfb3BzO1xcdC8qIFRhYmxlIG9mIGtlcm5lbCBhcHAgbm90aWZpY2F0aW9uIGZ1bmNzICovXFxuIFxcdHN0cnVjdCByeHJwY19sb2NhbFxcdCpsb2NhbDtcXHRcXHQvKiBsb2NhbCBlbmRwb2ludCAqL1xcbiBcXHRzdHJ1Y3QgcnhycGNfYmFja2xvZ1xcdCpiYWNrbG9nO1xcdC8qIFByZWFsbG9jYXRpb24gZm9yIHNlcnZpY2VzICovXFxuLVxcdHN0cnVjdCBza19idWZmX2hlYWRcXHRyZWN2bXNnX29vYnE7XFx0LyogT09CIG1lc3NhZ2VzIGZvciByZWN2bXNnIHRvIHBpY2sgdXAgKi9cXG4tXFx0c3RydWN0IHJiX3Jvb3RcXHRcXHRwZW5kaW5nX29vYnE7XFx0LyogT09CIG1lc3NhZ2VzIGF3YWl0aW5nIHVzZXJzcGFjZSB0byByZXNwb25kIHRvICovXFxuLVxcdHU2NFxcdFxcdFxcdG9vYl9pZF9jb3VudGVyO1xcdC8qIE9PQiBtZXNzYWdlIElEIGNvdW50ZXIgKi9cXG4gXFx0c3BpbmxvY2tfdFxcdFxcdGluY29taW5nX2xvY2s7XFx0LyogSW5jb21pbmcgY2FsbCB2cyBzZXJ2aWNlIHNodXRkb3duIGxvY2sgKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdHNvY2tfY2FsbHM7XFx0LyogTGlzdCBvZiBjYWxscyBvd25lZCBieSB0aGlzIHNvY2tldCAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0dG9fYmVfYWNjZXB0ZWQ7XFx0LyogY2FsbHMgYXdhaXRpbmcgYWNjZXB0YW5jZSAqL1xcbkBAIC0xODQsNyArMTgxLDYgQEAgc3RydWN0IHJ4cnBjX3NvY2sge1xcbiBcXHRzdHJ1Y3QgcmJfcm9vdFxcdFxcdGNhbGxzO1xcdFxcdC8qIFVzZXIgSUQgLVxcdTAwM2UgY2FsbCBtYXBwaW5nICovXFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRmbGFncztcXG4gI2RlZmluZSBSWFJQQ19TT0NLX0NPTk5FQ1RFRFxcdFxcdDBcXHQvKiBjb25uZWN0X3NyeCBpcyBzZXQgKi9cXG4tI2RlZmluZSBSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRVxcdDFcXHQvKiBVc2VyIHdhbnRzIHRvIG1hbmFnZSBSRVNQT05TRSBwYWNrZXRzICovXFxuIFxcdHJ3bG9ja190XFx0XFx0Y2FsbF9sb2NrO1xcdC8qIGxvY2sgZm9yIGNhbGxzICovXFxuIFxcdHUzMlxcdFxcdFxcdG1pbl9zZWNfbGV2ZWw7XFx0LyogbWluaW11bSBzZWN1cml0eSBsZXZlbCAqL1xcbiAjZGVmaW5lIFJYUlBDX1NFQ1VSSVRZX01BWFxcdFJYUlBDX1NFQ1VSSVRZX0VOQ1JZUFRcXG5AQCAtMjQxLDcgKzIzNyw2IEBAIHN0cnVjdCByeHJwY19za2JfcHJpdiB7XFxuIFxcdFxcdFxcdHU4XFx0XFx0cmVhc29uO1xcdFxcdC8qIFJlYXNvbiBmb3IgYWNrICovXFxuIFxcdFxcdH0gYWNrO1xcbiBcXHRcXHRzdHJ1Y3Qge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubjtcXHQvKiBDb25uZWN0aW9uIHJlZmVycmVkIHRvICovXFxuIFxcdFxcdFxcdHVuaW9uIHtcXG4gXFx0XFx0XFx0XFx0dTMyIHJ4a2FkX25vbmNlO1xcbiBcXHRcXHRcXHR9O1xcbkBAIC0zMTAsMTcgKzMwNSw2IEBAIHN0cnVjdCByeHJwY19zZWN1cml0eSB7XFxuIFxcdGJvb2wgKCp2YWxpZGF0ZV9jaGFsbGVuZ2UpKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gXFxuLVxcdC8qIEZpbGwgb3V0IHRoZSBjbXNnIGZvciByZWN2bXNnKCkgdG8gcGFzcyBvbiBhIGNoYWxsZW5nZSB0byB1c2Vyc3BhY2UuXFxuLVxcdCAqIFRoZSBzZWN1cml0eSBjbGFzcyBnZXRzIHRvIGFkZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxcbi1cXHQgKi9cXG4tXFx0aW50ICgqY2hhbGxlbmdlX3RvX3JlY3Ztc2cpKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtc2doZHIgKm1zZyk7XFxuLVxcbi1cXHQvKiBQYXJzZSBzZW5kbXNnKCkgY29udHJvbCBtZXNzYWdlIGFuZCByZXNwb25kIHRvIGNoYWxsZW5nZS4gKi9cXG4tXFx0aW50ICgqc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSkoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtc2doZHIgKm1zZyk7XFxuLVxcbiBcXHQvKiByZXNwb25kIHRvIGEgY2hhbGxlbmdlICovXFxuIFxcdGludCAoKnJlc3BvbmRfdG9fY2hhbGxlbmdlKShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpO1xcbkBAIC01MTYsNiArNTAwLDcgQEAgc3RydWN0IHJ4cnBjX2J1bmRsZSB7XFxuIFxcdHN0cnVjdCByeHJwY19sb2NhbFxcdCpsb2NhbDtcXHRcXHQvKiBSZXByZXNlbnRhdGlvbiBvZiBsb2NhbCBlbmRwb2ludCAqL1xcbiBcXHRzdHJ1Y3QgcnhycGNfcGVlclxcdCpwZWVyO1xcdFxcdC8qIFJlbW90ZSBlbmRwb2ludCAqL1xcbiBcXHRzdHJ1Y3Qga2V5XFx0XFx0KmtleTtcXHRcXHQvKiBTZWN1cml0eSBkZXRhaWxzICovXFxuK1xcdHN0cnVjdCBrZXlcXHRcXHQqYXBwX2RhdGE7XFx0LyogU2VjdXJpdHkgcmVzcG9uc2UgYXBwIGRhdGEgKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdHByb2NfbGluaztcXHQvKiBMaW5rIGluIG5ldC1cXHUwMDNlYnVuZGxlX3Byb2NfbGlzdCAqL1xcbiBcXHRjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5O1xcdC8qIGFwcGxpZWQgc2VjdXJpdHkgbW9kdWxlICovXFxuIFxcdHJlZmNvdW50X3RcXHRcXHRyZWY7XFxuQEAgLTY0Miw2ICs2MjcsNyBAQCBlbnVtIHJ4cnBjX2NhbGxfZmxhZyB7XFxuIFxcdFJYUlBDX0NBTExfVFhfTEFTVCxcXHRcXHQvKiBMYXN0IHBhY2tldCBpbiBUeCBidWZmZXIgKGF0IHJ4dHhfdG9wKSAqL1xcbiBcXHRSWFJQQ19DQUxMX1RYX0FMTF9BQ0tFRCxcXHQvKiBMYXN0IHBhY2tldCBoYXMgYmVlbiBoYXJkLWFja2VkICovXFxuIFxcdFJYUlBDX0NBTExfVFhfTk9fTU9SRSxcXHRcXHQvKiBObyBtb3JlIGRhdGEgdG8gdHJhbnNtaXQgKE1TR19NT1JFIGRlYXNzZXJ0ZWQpICovXFxuK1xcdFJYUlBDX0NBTExfVFhfRVJST1IsXFx0XFx0LyogVGVybWluYWwgZXJyb3I7IGNhbGwgbmVlZHMgYWJvcnQgKi9cXG4gXFx0UlhSUENfQ0FMTF9TRU5EX1BJTkcsXFx0XFx0LyogQSBwaW5nIHdpbGwgbmVlZCB0byBiZSBzZW50ICovXFxuIFxcdFJYUlBDX0NBTExfUkVUUkFOU19USU1FT1VULFxcdC8qIFJldHJhbnNtaXNzaW9uIGR1ZSB0byB0aW1lb3V0IG9jY3VycmVkICovXFxuIFxcdFJYUlBDX0NBTExfQkVHQU5fUlhfVElNRVIsXFx0LyogV2UgYmVnYW4gdGhlIGV4cGVjdF9yeF9ieSB0aW1lciAqL1xcbkBAIC03MTksNiArNzA1LDcgQEAgc3RydWN0IHJ4cnBjX2NhbGwge1xcbiBcXHRzdHJ1Y3QgcnhycGNfc29jayBfX3JjdVxcdCpzb2NrZXQ7XFx0Lyogc29ja2V0IHJlc3BvbnNpYmxlICovXFxuIFxcdHN0cnVjdCByeHJwY19uZXRcXHQqcnhuZXQ7XFx0XFx0LyogTmV0d29yayBuYW1lc3BhY2UgdG8gd2hpY2ggY2FsbCBiZWxvbmdzICovXFxuIFxcdHN0cnVjdCBrZXlcXHRcXHQqa2V5O1xcdFxcdC8qIFNlY3VyaXR5IGRldGFpbHMgKi9cXG4rXFx0c3RydWN0IGtleVxcdFxcdCphcHBfZGF0YTtcXHQvKiBTZWN1cml0eSByZXNwb25zZSBhcHAgZGF0YSAqL1xcbiBcXHRjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5O1xcdC8qIGFwcGxpZWQgc2VjdXJpdHkgbW9kdWxlICovXFxuIFxcdHN0cnVjdCBtdXRleFxcdFxcdHVzZXJfbXV0ZXg7XFx0LyogVXNlciBhY2Nlc3MgbXV0ZXggKi9cXG4gXFx0c3RydWN0IHNvY2thZGRyX3J4cnBjXFx0ZGVzdF9zcng7XFx0LyogRGVzdGluYXRpb24gYWRkcmVzcyAqL1xcbkBAIC05MTMsNiArOTAwLDcgQEAgZW51bSByeHJwY19jb21tYW5kIHtcXG4gfTtcXG4gXFxuIHN0cnVjdCByeHJwY19jYWxsX3BhcmFtcyB7XFxuK1xcdHN0cnVjdCBrZXlcXHRcXHQqYXBwX2RhdGE7XFx0LyogU2VjdXJpdHkgcmVzcG9uc2UgYXBwIGRhdGEgKi9cXG4gXFx0czY0XFx0XFx0XFx0dHhfdG90YWxfbGVuO1xcdC8qIFRvdGFsIFR4IGRhdGEgbGVuZ3RoIChpZiBzZW5kIGRhdGEpICovXFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHR1c2VyX2NhbGxfSUQ7XFx0LyogVXNlcidzIGNhbGwgSUQgKi9cXG4gXFx0c3RydWN0IHtcXG5AQCAtMTM3NywxMyArMTM2NSw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJ4cnBjX25ldCAqcnhycGNfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0cmV0dXJuIG5ldF9nZW5lcmljKG5ldCwgcnhycGNfbmV0X2lkKTtcXG4gfVxcbiBcXG4tLypcXG4tICogb29iLmNcXG4tICovXFxuLWJvb2wgcnhycGNfbm90aWZ5X3NvY2tldF9vb2Ioc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHN0cnVjdCBza19idWZmICpza2IpO1xcbi12b2lkIHJ4cnBjX2FkZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBza19idWZmICpza2IpO1xcbi1pbnQgcnhycGNfc2VuZG1zZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pO1xcbi1cXG4gLypcXG4gICogb3V0cHV0LmNcXG4gICovXFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jYWxsX29iamVjdC5jIGIvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmNcXG5pbmRleCA4MTdlZDlhY2I5MWU2MS4uOWY2MTMwZDkwYzRjYTggMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmNcXG4rKysgYi9uZXQvcnhycGMvY2FsbF9vYmplY3QuY1xcbkBAIC0yMTEsNiArMjExLDcgQEAgc3RhdGljIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19hbGxvY19jbGllbnRfY2FsbChzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuIFxcdGNhbGwtXFx1MDAzZWludGVycnVwdGliaWxpdHlcXHQ9IHAtXFx1MDAzZWludGVycnVwdGliaWxpdHk7XFxuIFxcdGNhbGwtXFx1MDAzZXR4X3RvdGFsX2xlblxcdD0gcC1cXHUwMDNldHhfdG90YWxfbGVuO1xcbiBcXHRjYWxsLVxcdTAwM2VrZXlcXHRcXHQ9IGtleV9nZXQoY3AtXFx1MDAzZWtleSk7XFxuK1xcdGNhbGwtXFx1MDAzZWFwcF9kYXRhXFx0XFx0PSBrZXlfZ2V0KHAtXFx1MDAzZWFwcF9kYXRhKTtcXG4gXFx0Y2FsbC1cXHUwMDNlcGVlclxcdFxcdD0gcnhycGNfZ2V0X3BlZXIoY3AtXFx1MDAzZXBlZXIsIHJ4cnBjX3BlZXJfZ2V0X2NhbGwpO1xcbiBcXHRjYWxsLVxcdTAwM2Vsb2NhbFxcdFxcdD0gcnhycGNfZ2V0X2xvY2FsKGNwLVxcdTAwM2Vsb2NhbCwgcnhycGNfbG9jYWxfZ2V0X2NhbGwpO1xcbiBcXHRjYWxsLVxcdTAwM2VzZWN1cml0eV9sZXZlbFxcdD0gY3AtXFx1MDAzZXNlY3VyaXR5X2xldmVsO1xcbkBAIC02OTcsNiArNjk4LDcgQEAgc3RhdGljIHZvaWQgcnhycGNfZGVzdHJveV9jYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0cnhycGNfcHV0X3BlZXIoY2FsbC1cXHUwMDNlcGVlciwgcnhycGNfcGVlcl9wdXRfY2FsbCk7XFxuIFxcdHJ4cnBjX3B1dF9sb2NhbChjYWxsLVxcdTAwM2Vsb2NhbCwgcnhycGNfbG9jYWxfcHV0X2NhbGwpO1xcbiBcXHRrZXlfcHV0KGNhbGwtXFx1MDAzZWtleSk7XFxuK1xcdGtleV9wdXQoY2FsbC1cXHUwMDNlYXBwX2RhdGEpO1xcbiBcXHRjYWxsX3JjdShcXHUwMDI2Y2FsbC1cXHUwMDNlcmN1LCByeHJwY19yY3VfZnJlZV9jYWxsKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcXG5pbmRleCA2YWZiNTQzNzNlYmJmOS4uNmU0MDIzMTJlMTQ1YzAgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuY1xcbisrKyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcXG5AQCAtNyw2ICs3LDYxIEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiYXItaW50ZXJuYWwuaFxcXCJcXG4gXFxuKy8qXFxuKyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXJcXG4rICogbm90aWZpY2F0aW9ucyBhcmUgc3VwcHJlc3NlZCBieSBwdXR0aW5nIHJlY3Ztc2dfbGluayBvbiBhIGR1bW15IHF1ZXVlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgX19yeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbit7XFxuK1xcdHN0cnVjdCByeHJwY19zb2NrICpyeDtcXG4rXFx0c3RydWN0IHNvY2sgKnNrO1xcbitcXG4rXFx0aWYgKHRlc3RfYml0KFJYUlBDX0NBTExfUkVMRUFTRUQsIFxcdTAwMjZjYWxsLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0cnhycGNfc2VlX2NhbGwoY2FsbCwgcnhycGNfY2FsbF9zZWVfbm90aWZ5X3JlbGVhc2VkKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcbitcXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVxcdTAwM2Vzb2NrZXQpO1xcbitcXHRzayA9IFxcdTAwMjZyeC1cXHUwMDNlc2s7XFxuK1xcdGlmIChyeCBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfc3RhdGUgXFx1MDAzYyBSWFJQQ19DTE9TRSkge1xcbitcXHRcXHRpZiAoY2FsbC1cXHUwMDNlbm90aWZ5X3J4KSB7XFxuK1xcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNhbGwtXFx1MDAzZW5vdGlmeV9sb2NrKTtcXG4rXFx0XFx0XFx0Y2FsbC1cXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVxcdTAwM2V1c2VyX2NhbGxfSUQpO1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmNhbGwtXFx1MDAzZW5vdGlmeV9sb2NrKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jayk7XFxuK1xcdFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZjYWxsLVxcdTAwM2VyZWN2bXNnX2xpbmspKSB7XFxuK1xcdFxcdFxcdFxcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xcbitcXHRcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZjYWxsLVxcdTAwM2VyZWN2bXNnX2xpbmssIFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19xKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX2xvY2spO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHtcXG4rXFx0XFx0XFx0XFx0X2RlYnVnKFxcXCJjYWxsICVwc1xcXCIsIHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5KTtcXG4rXFx0XFx0XFx0XFx0c2stXFx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXJcXG4rICogbm90aWZpY2F0aW9ucyBhcmUgc3VwcHJlc3NlZCBieSBwdXR0aW5nIHJlY3Ztc2dfbGluayBvbiBhIGR1bW15IHF1ZXVlLlxcbisgKi9cXG4rdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbit7XFxuK1xcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpKSB7XFxuK1xcdFxcdHJ4cnBjX3NlZV9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9za2lwcGVkKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRfX3J4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XFxuK31cXG4rXFxuIC8qXFxuICAqIFRyYW5zaXRpb24gYSBjYWxsIHRvIHRoZSBjb21wbGV0ZSBzdGF0ZS5cXG4gICovXFxuQEAgLTI1LDcgKzgwLDcgQEAgYm9vbCByeHJwY19zZXRfY2FsbF9jb21wbGV0aW9uKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXHRyeHJwY19zZXRfY2FsbF9zdGF0ZShjYWxsLCBSWFJQQ19DQUxMX0NPTVBMRVRFKTtcXG4gXFx0dHJhY2VfcnhycGNfY2FsbF9jb21wbGV0ZShjYWxsKTtcXG4gXFx0d2FrZV91cChcXHUwMDI2Y2FsbC1cXHUwMDNld2FpdHEpO1xcbi1cXHRyeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xcbitcXHRfX3J4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY29ubl9jbGllbnQuYyBiL25ldC9yeHJwYy9jb25uX2NsaWVudC5jXFxuaW5kZXggNDg1MTlmMGRlMTg1MzkuLmRkNzk2MzBkMzA2Njk4IDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9jb25uX2NsaWVudC5jXFxuKysrIGIvbmV0L3J4cnBjL2Nvbm5fY2xpZW50LmNcXG5AQCAtODEsNiArODEsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2J1bmRsZSAqcnhycGNfYWxsb2NfYnVuZGxlKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXHRcXHRidW5kbGUtXFx1MDAzZWxvY2FsXFx0XFx0PSBjYWxsLVxcdTAwM2Vsb2NhbDtcXG4gXFx0XFx0YnVuZGxlLVxcdTAwM2VwZWVyXFx0XFx0PSByeHJwY19nZXRfcGVlcihjYWxsLVxcdTAwM2VwZWVyLCByeHJwY19wZWVyX2dldF9idW5kbGUpO1xcbiBcXHRcXHRidW5kbGUtXFx1MDAzZWtleVxcdFxcdD0ga2V5X2dldChjYWxsLVxcdTAwM2VrZXkpO1xcbitcXHRcXHRidW5kbGUtXFx1MDAzZWFwcF9kYXRhXFx0PSBrZXlfZ2V0KGNhbGwtXFx1MDAzZWFwcF9kYXRhKTtcXG4gXFx0XFx0YnVuZGxlLVxcdTAwM2VzZWN1cml0eVxcdD0gY2FsbC1cXHUwMDNlc2VjdXJpdHk7XFxuIFxcdFxcdGJ1bmRsZS1cXHUwMDNlZXhjbHVzaXZlXFx0PSB0ZXN0X2JpdChSWFJQQ19DQUxMX0VYQ0xVU0lWRSwgXFx1MDAyNmNhbGwtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0YnVuZGxlLVxcdTAwM2V1cGdyYWRlXFx0XFx0PSB0ZXN0X2JpdChSWFJQQ19DQUxMX1VQR1JBREUsIFxcdTAwMjZjYWxsLVxcdTAwM2VmbGFncyk7XFxuQEAgLTExOCw2ICsxMTksNyBAQCBzdGF0aWMgdm9pZCByeHJwY19mcmVlX2J1bmRsZShzdHJ1Y3QgcnhycGNfYnVuZGxlICpidW5kbGUpXFxuIFxcdHdyaXRlX3VubG9jayhcXHUwMDI2YnVuZGxlLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhuZXQtXFx1MDAzZWNvbm5fbG9jayk7XFxuIFxcdHJ4cnBjX3B1dF9wZWVyKGJ1bmRsZS1cXHUwMDNlcGVlciwgcnhycGNfcGVlcl9wdXRfYnVuZGxlKTtcXG4gXFx0a2V5X3B1dChidW5kbGUtXFx1MDAzZWtleSk7XFxuK1xcdGtleV9wdXQoYnVuZGxlLVxcdTAwM2VhcHBfZGF0YSk7XFxuIFxcdGtmcmVlKGJ1bmRsZSk7XFxuIH1cXG4gXFxuQEAgLTI3NCw2ICsyNzYsNyBAQCBpbnQgcnhycGNfbG9va191cF9idW5kbGUoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcXG4gI2RlZmluZSBjbXAoWCwgWSkgKChsb25nKShYKSAtIChsb25nKShZKSlcXG4gXFx0XFx0ZGlmZiA9IChjbXAoYnVuZGxlLVxcdTAwM2VwZWVyLCBjYWxsLVxcdTAwM2VwZWVyKSA/OlxcbiBcXHRcXHRcXHRjbXAoYnVuZGxlLVxcdTAwM2VrZXksIGNhbGwtXFx1MDAzZWtleSkgPzpcXG4rXFx0XFx0XFx0Y21wKGJ1bmRsZS1cXHUwMDNlYXBwX2RhdGEsIGNhbGwtXFx1MDAzZWFwcF9kYXRhKSA/OlxcbiBcXHRcXHRcXHRjbXAoYnVuZGxlLVxcdTAwM2VzZWN1cml0eV9sZXZlbCwgY2FsbC1cXHUwMDNlc2VjdXJpdHlfbGV2ZWwpID86XFxuIFxcdFxcdFxcdGNtcChidW5kbGUtXFx1MDAzZXVwZ3JhZGUsIHVwZ3JhZGUpKTtcXG4gI3VuZGVmIGNtcFxcbkBAIC0zMDMsNiArMzA2LDcgQEAgaW50IHJ4cnBjX2xvb2tfdXBfYnVuZGxlKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBnZnBfdCBnZnApXFxuICNkZWZpbmUgY21wKFgsIFkpICgobG9uZykoWCkgLSAobG9uZykoWSkpXFxuIFxcdFxcdGRpZmYgPSAoY21wKGJ1bmRsZS1cXHUwMDNlcGVlciwgY2FsbC1cXHUwMDNlcGVlcikgPzpcXG4gXFx0XFx0XFx0Y21wKGJ1bmRsZS1cXHUwMDNla2V5LCBjYWxsLVxcdTAwM2VrZXkpID86XFxuK1xcdFxcdFxcdGNtcChidW5kbGUtXFx1MDAzZWFwcF9kYXRhLCBjYWxsLVxcdTAwM2VhcHBfZGF0YSkgPzpcXG4gXFx0XFx0XFx0Y21wKGJ1bmRsZS1cXHUwMDNlc2VjdXJpdHlfbGV2ZWwsIGNhbGwtXFx1MDAzZXNlY3VyaXR5X2xldmVsKSA/OlxcbiBcXHRcXHRcXHRjbXAoYnVuZGxlLVxcdTAwM2V1cGdyYWRlLCB1cGdyYWRlKSk7XFxuICN1bmRlZiBjbXBcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuYyBiL25ldC9yeHJwYy9jb25uX2V2ZW50LmNcXG5pbmRleCA2MTFjNzkwYmM2ZDBjZS4uOTE0NmI5ZDRjMmFjNTAgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuY1xcbisrKyBiL25ldC9yeHJwYy9jb25uX2V2ZW50LmNcXG5AQCAtMjc5LDEwICsyNzksNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3Byb2Nlc3NfZXZlbnQoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuIFxcbiBcXHRzd2l0Y2ggKHNwLVxcdTAwM2VoZHIudHlwZSkge1xcbiBcXHRjYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX0NIQUxMRU5HRTpcXG4tXFx0XFx0cmV0ID0gY29ubi1cXHUwMDNlc2VjdXJpdHktXFx1MDAzZXJlc3BvbmRfdG9fY2hhbGxlbmdlKGNvbm4sIHNrYik7XFxuLVxcdFxcdHNwLVxcdTAwM2VjaGFsbC5jb25uID0gTlVMTDtcXG4tXFx0XFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTtcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0dXJuIGNvbm4tXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VyZXNwb25kX3RvX2NoYWxsZW5nZShjb25uLCBza2IpO1xcbiBcXG4gXFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9SRVNQT05TRTpcXG4gXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y29ubi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuQEAgLTQyNSw2NiArNDIyLDYgQEAgc3RhdGljIHZvaWQgcnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0cnhycGNfcXVldWVfY29ubihjb25uLCByeHJwY19jb25uX3F1ZXVlX3J4X3dvcmspO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBQb3N0IGEgQ0hBTExFTkdFIHBhY2tldCB0byB0aGUgc29ja2V0IG9mIG9uZSBvZiBhIGNvbm5lY3Rpb24ncyBjYWxscyBzbyB0aGF0XFxuLSAqIGl0IGNhbiBnZXQgYXBwbGljYXRpb24gZGF0YSB0byBpbmNsdWRlIGluIHRoZSBwYWNrZXQsIHBvc3NpYmx5IHF1ZXJ5aW5nXFxuLSAqIHVzZXJzcGFjZS5cXG4tICovXFxuLXN0YXRpYyBib29sIHJ4cnBjX3Bvc3RfY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbi1cXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKHNrYik7XFxuLVxcdHN0cnVjdCByeHJwY19jYWxsICpjYWxsID0gTlVMTDtcXG4tXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4O1xcbi1cXHRib29sIHJlc3BvbmQgPSBmYWxzZSwgcXVldWVkID0gZmFsc2U7XFxuLVxcbi1cXHRzcC1cXHUwMDNlY2hhbGwuY29ubiA9XFxuLVxcdFxcdHJ4cnBjX2dldF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fZ2V0X2NoYWxsZW5nZV9pbnB1dCk7XFxuLVxcbi1cXHRpZiAoIWNvbm4tXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VjaGFsbGVuZ2VfdG9fcmVjdm1zZykge1xcbi1cXHRcXHRyeHJwY19wb3N0X3BhY2tldF90b19jb25uKGNvbm4sIHNrYik7XFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHR9XFxuLVxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcbi1cXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoY29ubi1cXHUwMDNlY2hhbm5lbHMpOyBpKyspIHtcXG4tXFx0XFx0aWYgKGNvbm4tXFx1MDAzZWNoYW5uZWxzW2ldLmNhbGwpIHtcXG4tXFx0XFx0XFx0Y2FsbCA9IGNvbm4tXFx1MDAzZWNoYW5uZWxzW2ldLmNhbGw7XFxuLVxcdFxcdFxcdHJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtXFx1MDAzZXNvY2tldCk7XFxuLVxcdFxcdFxcdGlmICghcngpIHtcXG4tXFx0XFx0XFx0XFx0Y2FsbCA9IE5VTEw7XFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHRyZXNwb25kID0gdHJ1ZTtcXG4tXFx0XFx0XFx0aWYgKHRlc3RfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcXHUwMDI2cngtXFx1MDAzZWZsYWdzKSlcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdGNhbGwgPSBOVUxMO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghcmVzcG9uZCkge1xcbi1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFx0XFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTtcXG4tXFx0XFx0c3AtXFx1MDAzZWNoYWxsLmNvbm4gPSBOVUxMO1xcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChjYWxsKVxcbi1cXHRcXHRxdWV1ZWQgPSByeHJwY19ub3RpZnlfc29ja2V0X29vYihjYWxsLCBza2IpO1xcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFx0aWYgKGNhbGwgXFx1MDAyNlxcdTAwMjYgIXF1ZXVlZCkge1xcbi1cXHRcXHRyeHJwY19wdXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQpO1xcbi1cXHRcXHRzcC1cXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCFjYWxsKVxcbi1cXHRcXHRyeHJwY19wb3N0X3BhY2tldF90b19jb25uKGNvbm4sIHNrYik7XFxuLVxcdHJldHVybiB0cnVlO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBJbnB1dCBhIGNvbm5lY3Rpb24tbGV2ZWwgcGFja2V0LlxcbiAgKi9cXG5AQCAtNTEzLDcgKzQ1MCw4IEBAIGJvb2wgcnhycGNfaW5wdXRfY29ubl9wYWNrZXQoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKCFjb25uLVxcdTAwM2VzZWN1cml0eS1cXHUwMDNldmFsaWRhdGVfY2hhbGxlbmdlKGNvbm4sIHNrYikpXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0cmV0dXJuIHJ4cnBjX3Bvc3RfY2hhbGxlbmdlKGNvbm4sIHNrYik7XFxuK1xcdFxcdHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTtcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRjYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX1JFU1BPTlNFOlxcbiBcXHRcXHRpZiAocnhycGNfaXNfY29ubl9hYm9ydGVkKGNvbm4pKSB7XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9pbnNlY3VyZS5jIGIvbmV0L3J4cnBjL2luc2VjdXJlLmNcXG5pbmRleCAwYjM5MDQ2YmRjNjE2YS4uYzA4M2M4MmM0ZTdmM2YgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2luc2VjdXJlLmNcXG4rKysgYi9uZXQvcnhycGMvaW5zZWN1cmUuY1xcbkBAIC00NywxMiArNDcsNiBAQCBzdGF0aWMgYm9vbCBub25lX3ZhbGlkYXRlX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbm9uZV9zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnKVxcbi17XFxuLVxcdHJldHVybiAtRUlOVkFMO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IG5vbmVfdmVyaWZ5X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVzcG9uc2Vfc2tiLFxcbiBcXHRcXHRcXHRcXHR2b2lkICpyZXNwb25zZSwgdW5zaWduZWQgaW50IGxlbilcXG5AQCAtODgsNyArODIsNiBAQCBjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgcnhycGNfbm9fc2VjdXJpdHkgPSB7XFxuIFxcdC5zZWN1cmVfcGFja2V0XFx0XFx0XFx0PSBub25lX3NlY3VyZV9wYWNrZXQsXFxuIFxcdC52ZXJpZnlfcGFja2V0XFx0XFx0XFx0PSBub25lX3ZlcmlmeV9wYWNrZXQsXFxuIFxcdC52YWxpZGF0ZV9jaGFsbGVuZ2VcXHRcXHQ9IG5vbmVfdmFsaWRhdGVfY2hhbGxlbmdlLFxcbi1cXHQuc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZVxcdD0gbm9uZV9zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxcbiBcXHQudmVyaWZ5X3Jlc3BvbnNlXFx0XFx0PSBub25lX3ZlcmlmeV9yZXNwb25zZSxcXG4gXFx0LmNsZWFyXFx0XFx0XFx0XFx0PSBub25lX2NsZWFyLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMva2V5LmMgYi9uZXQvcnhycGMva2V5LmNcXG5pbmRleCBhMGFhNzhkODkyODk3Zi4uMTZiYWI3MmU2ZjA3NzcgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2tleS5jXFxuKysrIGIvbmV0L3J4cnBjL2tleS5jXFxuQEAgLTg5MywzICs4OTMsNDAgQEAgc3RhdGljIGxvbmcgcnhycGNfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksXFxuIFxcdF9sZWF2ZShcXFwiID0gJXp1XFxcIiwgc2l6ZSk7XFxuIFxcdHJldHVybiBzaXplO1xcbiB9XFxuK1xcbisvKipcXG4rICogcnhycGNfa2VybmVsX3F1ZXJ5X2tleSAtIFF1ZXJ5IHBhcmFtZXRlcnMgZnJvbSBhbiByeHJwYyBrZXlcXG4rICogQGtleTogVGhlIGtleSB0byBxdWVyeVxcbisgKiBAX3NlY3VyaXR5X2luZGV4OiBXaGVyZSB0byByZXR1cm4gdGhlIHNlY3VyaXR5IGluZGV4XFxuKyAqIEBfa3JiNV9lbmN0eXBlOiBXaGVyZSB0byByZXR1cm4gdGhlIGtyYjUgZW5jcnlwdGlvbiB0eXBlIGlmIGFwcGxpY2FibGVcXG4rICpcXG4rICogUXVlcnkgYW4gcnhycGMgYXV0aGVudGljYXRpb24ga2V5LCBleHRyYWN0aW5nIHRoZSBzZWN1cml0eSBpbmRleCBmcm9tIHRoZVxcbisgKiBmaXJzdCB0b2tlbiB0aGVyZWluLlxcbisgKi9cXG4rdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgdTggKl9zZWN1cml0eV9pbmRleCxcXG4rXFx0XFx0XFx0ICAgIHUzMiAqX2tyYjVfZW5jdHlwZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnhycGNfa2V5X3Rva2VuICp0b2tlbjtcXG4rXFxuK1xcdHRva2VuID0ga2V5LVxcdTAwM2VwYXlsb2FkLmRhdGFbMF07XFxuK1xcdGlmICghdG9rZW4pIHtcXG4rXFx0XFx0Kl9zZWN1cml0eV9pbmRleCA9IDA7XFxuK1xcdFxcdCpfa3JiNV9lbmN0eXBlID0gMDtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQqX3NlY3VyaXR5X2luZGV4ID0gdG9rZW4tXFx1MDAzZXNlY3VyaXR5X2luZGV4O1xcbitcXHRzd2l0Y2ggKHRva2VuLVxcdTAwM2VzZWN1cml0eV9pbmRleCkge1xcbitcXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOlxcbitcXHRcXHQqX2tyYjVfZW5jdHlwZSA9IDA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxcbitcXHRcXHQqX2tyYjVfZW5jdHlwZSA9IHRva2VuLVxcdTAwM2VyeGdrLVxcdTAwM2VlbmN0eXBlO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbitcXHRcXHQqX2tyYjVfZW5jdHlwZSA9IDA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK31cXG4rRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfa2V5KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL29vYi5jIGIvbmV0L3J4cnBjL29vYi5jXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggYzgwZWUyNDg3ZDA5NDEuLjAwMDAwMDAwMDAwMDAwXFxuLS0tIGEvbmV0L3J4cnBjL29vYi5jXFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDM4NyArMCwwIEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuLS8qIE91dCBvZiBiYW5kIG1lc3NhZ2UgaGFuZGxpbmcgKGUuZy4gY2hhbGxlbmdlLXJlc3BvbnNlKVxcbi0gKlxcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjUgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxcbi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pXFxuLSAqL1xcbi1cXG4tI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbi1cXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZ2ZwLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbmV0L2FmX3J4cnBjLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcXCJhci1pbnRlcm5hbC5oXFxcIlxcbi1cXG4tZW51bSByeHJwY19vb2JfY29tbWFuZCB7XFxuLVxcdFJYUlBDX09PQl9DTURfVU5TRVQsXFxuLVxcdFJYUlBDX09PQl9DTURfUkVTUE9ORCxcXG4tfSBfX21vZGUoYnl0ZSk7XFxuLVxcbi1zdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyB7XFxuLVxcdHU2NFxcdFxcdFxcdG9vYl9pZDtcXHRcXHQvKiBJRCBudW1iZXIgb2YgbWVzc2FnZSBpZiByZXBseSAqL1xcbi1cXHRzMzJcXHRcXHRcXHRhYm9ydF9jb2RlO1xcbi1cXHRlbnVtIHJ4cnBjX29vYl9jb21tYW5kXFx0Y29tbWFuZDtcXG4tXFx0Ym9vbFxcdFxcdFxcdGhhdmVfb29iX2lkOjE7XFxuLX07XFxuLVxcbi0vKlxcbi0gKiBQb3N0IGFuIG91dC1vZi1iYW5kIG1lc3NhZ2UgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlXFxuLSAqIGFzc29jaWF0ZWQgd2l0aCBhIHJlZmVyZW5jZSBjYWxsLlxcbi0gKi9cXG4tYm9vbCByeHJwY19ub3RpZnlfc29ja2V0X29vYihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKHNrYik7XFxuLVxcdHN0cnVjdCByeHJwY19zb2NrICpyeDtcXG4tXFx0c3RydWN0IHNvY2sgKnNrO1xcbi1cXHRib29sIHF1ZXVlZCA9IGZhbHNlO1xcbi1cXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXG4tXFx0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cXHUwMDNlc29ja2V0KTtcXG4tXFx0aWYgKHJ4KSB7XFxuLVxcdFxcdHNrID0gXFx1MDAyNnJ4LVxcdTAwM2VzaztcXG4tXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jayk7XFxuLVxcbi1cXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlIFxcdTAwM2MgUlhSUENfQ0xPU0UpIHtcXG4tXFx0XFx0XFx0c2tiLVxcdTAwM2Vza2JfbXN0YW1wX25zID0gcngtXFx1MDAzZW9vYl9pZF9jb3VudGVyKys7XFxuLVxcdFxcdFxcdHJ4cnBjX2dldF9za2Ioc2tiLCByeHJwY19za2JfZ2V0X3Bvc3Rfb29iKTtcXG4tXFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEsIHNrYik7XFxuLVxcdFxcdFxcdHF1ZXVlZCA9IHRydWU7XFxuLVxcbi1cXHRcXHRcXHR0cmFjZV9yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwtXFx1MDAzZWRlYnVnX2lkLCBzcC1cXHUwMDNlaGRyLnNlcmlhbCk7XFxuLVxcdFxcdFxcdGlmIChyeC1cXHUwMDNlYXBwX29wcylcXG4tXFx0XFx0XFx0XFx0cngtXFx1MDAzZWFwcF9vcHMtXFx1MDAzZW5vdGlmeV9vb2Ioc2ssIHNrYik7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jayk7XFxuLVxcdFxcdGlmIChxdWV1ZWQgXFx1MDAyNlxcdTAwMjYgIXJ4LVxcdTAwM2VhcHBfb3BzIFxcdTAwMjZcXHUwMDI2ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXFxuLVxcdFxcdFxcdHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcXG4tXFx0fVxcbi1cXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdHJldHVybiBxdWV1ZWQ7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIExvY2F0ZSB0aGUgT09CIG1lc3NhZ2UgdG8gcmVzcG9uZCB0byBieSBpdHMgSUQuXFxuLSAqL1xcbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnJ4cnBjX2ZpbmRfcGVuZGluZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCB1NjQgb29iX2lkKVxcbi17XFxuLVxcdHN0cnVjdCByYl9ub2RlICpwO1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi1cXG4tXFx0cCA9IHJ4LVxcdTAwM2VwZW5kaW5nX29vYnEucmJfbm9kZTtcXG4tXFx0d2hpbGUgKHApIHtcXG4tXFx0XFx0c2tiID0gcmJfZW50cnkocCwgc3RydWN0IHNrX2J1ZmYsIHJibm9kZSk7XFxuLVxcbi1cXHRcXHRpZiAob29iX2lkIFxcdTAwM2Mgc2tiLVxcdTAwM2Vza2JfbXN0YW1wX25zKVxcbi1cXHRcXHRcXHRwID0gcC1cXHUwMDNlcmJfbGVmdDtcXG4tXFx0XFx0ZWxzZSBpZiAob29iX2lkIFxcdTAwM2Ugc2tiLVxcdTAwM2Vza2JfbXN0YW1wX25zKVxcbi1cXHRcXHRcXHRwID0gcC1cXHUwMDNlcmJfcmlnaHQ7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0cmV0dXJuIHNrYjtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIE5VTEw7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIEFkZCBhbiBPT0IgbWVzc2FnZSBpbnRvIHRoZSBwZW5kaW5nLXJlc3BvbnNlIHNldC4gIFdlIGFsd2F5cyBhc3NpZ24gdGhlIG5leHRcXG4tICogdmFsdWUgZnJvbSBhIDY0LWJpdCBjb3VudGVyIHRvIHRoZSBvb2JfaWQsIHNvIGp1c3QgYXNzdW1lIHdlJ3JlIGFsd2F5cyBnb2luZ1xcbi0gKiB0byBiZSBvbiB0aGUgcmlnaHQtaGFuZCBlZGdlIG9mIHRoZSB0cmVlIGFuZCB0aGF0IHRoZSBjb3VudGVyIHdvbid0IHdyYXAuXFxuLSAqIFRoZSB0cmVlIGlzIGFsc28gZ2l2ZW4gYSByZWYgdG8gdGhlIG1lc3NhZ2UuXFxuLSAqL1xcbi12b2lkIHJ4cnBjX2FkZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLXtcXG4tXFx0c3RydWN0IHJiX25vZGUgKipwcCA9IFxcdTAwMjZyeC1cXHUwMDNlcGVuZGluZ19vb2JxLnJiX25vZGUsICpwID0gTlVMTDtcXG4tXFxuLVxcdHdoaWxlICgqcHApIHtcXG4tXFx0XFx0cCA9ICpwcDtcXG4tXFx0XFx0cHAgPSBcXHUwMDI2KCpwcCktXFx1MDAzZXJiX3JpZ2h0O1xcbi1cXHR9XFxuLVxcbi1cXHRyYl9saW5rX25vZGUoXFx1MDAyNnNrYi1cXHUwMDNlcmJub2RlLCBwLCBwcCk7XFxuLVxcdHJiX2luc2VydF9jb2xvcihcXHUwMDI2c2tiLVxcdTAwM2VyYm5vZGUsIFxcdTAwMjZyeC1cXHUwMDNlcGVuZGluZ19vb2JxKTtcXG4tfVxcbi1cXG4tLypcXG4tICogRXh0cmFjdCBjb250cm9sIG1lc3NhZ2VzIGZyb20gdGhlIHNlbmRtc2coKSBjb250cm9sIGJ1ZmZlci5cXG4tICovXFxuLXN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19vb2JfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19vb2JfcGFyYW1zICpwKVxcbi17XFxuLVxcdHN0cnVjdCBjbXNnaGRyICpjbXNnO1xcbi1cXHRpbnQgbGVuO1xcbi1cXG4tXFx0aWYgKG1zZy1cXHUwMDNlbXNnX2NvbnRyb2xsZW4gPT0gMClcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbi1cXHRmb3JfZWFjaF9jbXNnaGRyKGNtc2csIG1zZykge1xcbi1cXHRcXHRpZiAoIUNNU0dfT0sobXNnLCBjbXNnKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbi1cXHRcXHRsZW4gPSBjbXNnLVxcdTAwM2VjbXNnX2xlbiAtIHNpemVvZihzdHJ1Y3QgY21zZ2hkcik7XFxuLVxcdFxcdF9kZWJ1ZyhcXFwiQ01TRyAlZCwgJWQsICVkXFxcIixcXG4tXFx0XFx0ICAgICAgIGNtc2ctXFx1MDAzZWNtc2dfbGV2ZWwsIGNtc2ctXFx1MDAzZWNtc2dfdHlwZSwgbGVuKTtcXG4tXFxuLVxcdFxcdGlmIChjbXNnLVxcdTAwM2VjbXNnX2xldmVsICE9IFNPTF9SWFJQQylcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRzd2l0Y2ggKGNtc2ctXFx1MDAzZWNtc2dfdHlwZSkge1xcbi1cXHRcXHRjYXNlIFJYUlBDX09PQl9JRDpcXG4tXFx0XFx0XFx0aWYgKGxlbiAhPSBzaXplb2YocC1cXHUwMDNlb29iX2lkKSB8fCBwLVxcdTAwM2VoYXZlX29vYl9pZClcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdFxcdG1lbWNweShcXHUwMDI2cC1cXHUwMDNlb29iX2lkLCBDTVNHX0RBVEEoY21zZyksIHNpemVvZihwLVxcdTAwM2Vvb2JfaWQpKTtcXG4tXFx0XFx0XFx0cC1cXHUwMDNlaGF2ZV9vb2JfaWQgPSB0cnVlO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBSWFJQQ19SRVNQT05EOlxcbi1cXHRcXHRcXHRpZiAocC1cXHUwMDNlY29tbWFuZCAhPSBSWFJQQ19PT0JfQ01EX1VOU0VUKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0XFx0cC1cXHUwMDNlY29tbWFuZCA9IFJYUlBDX09PQl9DTURfUkVTUE9ORDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgUlhSUENfQUJPUlQ6XFxuLVxcdFxcdFxcdGlmIChsZW4gIT0gc2l6ZW9mKHAtXFx1MDAzZWFib3J0X2NvZGUpIHx8IHAtXFx1MDAzZWFib3J0X2NvZGUpXFxuLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnAtXFx1MDAzZWFib3J0X2NvZGUsIENNU0dfREFUQShjbXNnKSwgc2l6ZW9mKHAtXFx1MDAzZWFib3J0X2NvZGUpKTtcXG4tXFx0XFx0XFx0aWYgKHAtXFx1MDAzZWFib3J0X2NvZGUgPT0gMClcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBOlxcbi1cXHRcXHRcXHRpZiAocC1cXHUwMDNlY29tbWFuZCAhPSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQpXFxuLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXG4tXFx0c3dpdGNoIChwLVxcdTAwM2Vjb21tYW5kKSB7XFxuLVxcdGNhc2UgUlhSUENfT09CX0NNRF9SRVNQT05EOlxcbi1cXHRcXHRpZiAoIXAtXFx1MDAzZWhhdmVfb29iX2lkKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVCQURTTFQ7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIEFsbG93IHVzZXJzcGFjZSB0byByZXNwb25kIHRvIGFuIE9PQiB1c2luZyBzZW5kbXNnKCkuXFxuLSAqL1xcbi1zdGF0aWMgaW50IHJ4cnBjX3Jlc3BvbmRfdG9fb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgKnAsXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBtc2doZHIgKm1zZylcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubjtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcDtcXG4tXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHNrYiA9IHJ4cnBjX2ZpbmRfcGVuZGluZ19vb2IocngsIHAtXFx1MDAzZW9vYl9pZCk7XFxuLVxcdGlmIChza2IpXFxuLVxcdFxcdHJiX2VyYXNlKFxcdTAwMjZza2ItXFx1MDAzZXJibm9kZSwgXFx1MDAyNnJ4LVxcdTAwM2VwZW5kaW5nX29vYnEpO1xcbi1cXHRyZWxlYXNlX3NvY2soXFx1MDAyNnJ4LVxcdTAwM2Vzayk7XFxuLVxcdGlmICghc2tiKVxcbi1cXHRcXHRyZXR1cm4gLUVCQURTTFQ7XFxuLVxcbi1cXHRzcCA9IHJ4cnBjX3NrYihza2IpO1xcbi1cXG4tXFx0c3dpdGNoIChwLVxcdTAwM2Vjb21tYW5kKSB7XFxuLVxcdGNhc2UgUlhSUENfT09CX0NNRF9SRVNQT05EOlxcbi1cXHRcXHRyZXQgPSAtRVBST1RPO1xcbi1cXHRcXHRpZiAoc2tiLVxcdTAwM2VtYXJrICE9IFJYUlBDX09PQl9DSEFMTEVOR0UpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjb25uID0gc3AtXFx1MDAzZWNoYWxsLmNvbm47XFxuLVxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbi1cXHRcXHRpZiAoIWNvbm4tXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VzZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0aWYgKHAtXFx1MDAzZWFib3J0X2NvZGUpIHtcXG4tXFx0XFx0XFx0cnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBwLVxcdTAwM2VhYm9ydF9jb2RlLCAtRUNPTk5BQk9SVEVELFxcbi1cXHRcXHRcXHRcXHRcXHQgcnhycGNfYWJvcnRfcmVzcG9uc2Vfc2VuZG1zZyk7XFxuLVxcdFxcdFxcdHJldCA9IDA7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHJldCA9IGNvbm4tXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VzZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHNrYiwgbXNnKTtcXG4tXFx0XFx0fVxcbi1cXHRcXHRicmVhaztcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFxuLVxcdHN3aXRjaCAoc2tiLVxcdTAwM2VtYXJrKSB7XFxuLVxcdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcXG4tXFx0XFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtXFx1MDAzZWNoYWxsLmNvbm4sIHJ4cnBjX2Nvbm5fcHV0X29vYik7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9vb2IpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi0vKlxcbi0gKiBTZW5kIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2Ugb3IgcmVzcG9uZCB0byBhIHJlY2VpdmVkIG91dC1vZi1iYW5kIG1lc3NhZ2UuXFxuLSAqIC0gY2FsbGVyIGdpdmVzIHVzIHRoZSBzb2NrZXQgbG9ja1xcbi0gKiAtIHRoZSBzb2NrZXQgbWF5IGJlIGVpdGhlciBhIGNsaWVudCBzb2NrZXQgb3IgYSBzZXJ2ZXIgc29ja2V0XFxuLSAqL1xcbi1pbnQgcnhycGNfc2VuZG1zZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgcCA9IHt9O1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0X2VudGVyKFxcXCJcXFwiKTtcXG4tXFxuLVxcdHJldCA9IHJ4cnBjX3NlbmRtc2dfb29iX2Ntc2cobXNnLCBcXHUwMDI2cCk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVycm9yX3JlbGVhc2Vfc29jaztcXG4tXFxuLVxcdGlmIChwLmhhdmVfb29iX2lkKVxcbi1cXHRcXHRyZXR1cm4gcnhycGNfcmVzcG9uZF90b19vb2IocngsIFxcdTAwMjZwLCBtc2cpO1xcbi1cXG4tXFx0cmVsZWFzZV9zb2NrKFxcdTAwMjZyeC1cXHUwMDNlc2spO1xcbi1cXG4tXFx0c3dpdGNoIChwLmNvbW1hbmQpIHtcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFxuLVxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi1cXG4tZXJyb3JfcmVsZWFzZV9zb2NrOlxcbi1cXHRyZWxlYXNlX3NvY2soXFx1MDAyNnJ4LVxcdTAwM2Vzayk7XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuLS8qKlxcbi0gKiByeHJwY19rZXJuZWxfcXVlcnlfb29iIC0gUXVlcnkgdGhlIHBhcmFtZXRlcnMgb2YgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZVxcbi0gKiBAb29iOiBUaGUgbWVzc2FnZSB0byBxdWVyeVxcbi0gKiBAX3BlZXI6IFdoZXJlIHRvIHJldHVybiB0aGUgcGVlciByZWNvcmRcXG4tICogQF9wZWVyX2FwcGRhdGE6IFRoZSBhcHBsaWNhdGlvbiBkYXRhIGF0dGFjaGVkIHRvIGEgcGVlciByZWNvcmRcXG4tICpcXG4tICogRXh0cmFjdCB1c2VmdWwgcGFyYW1ldGVycyBmcm9tIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2UuICBUaGUgc291cmNlIHBlZXJcXG4tICogcGFyYW1ldGVycyBhcmUgcmV0dXJuZWQgdGhyb3VnaCB0aGUgYXJndW1lbnQgbGlzdCBhbmQgdGhlIG1lc3NhZ2UgdHlwZSBpc1xcbi0gKiByZXR1cm5lZC5cXG4tICpcXG4tICogUmV0dXJuOlxcbi0gKiAqICVSWFJQQ19PT0JfQ0hBTExFTkdFIC0gQ2hhbGxlbmdlIHdhbnRpbmcgYSByZXNwb25zZS5cXG4tICovXFxuLWVudW0gcnhycGNfb29iX3R5cGUgcnhycGNfa2VybmVsX3F1ZXJ5X29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhKVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Iob29iKTtcXG4tXFx0ZW51bSByeHJwY19vb2JfdHlwZSB0eXBlID0gb29iLVxcdTAwM2VtYXJrO1xcbi1cXG4tXFx0c3dpdGNoICh0eXBlKSB7XFxuLVxcdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcXG4tXFx0XFx0Kl9wZWVyXFx0XFx0PSBzcC1cXHUwMDNlY2hhbGwuY29ubi1cXHUwMDNlcGVlcjtcXG4tXFx0XFx0Kl9wZWVyX2FwcGRhdGFcXHQ9IHNwLVxcdTAwM2VjaGFsbC5jb25uLVxcdTAwM2VwZWVyLVxcdTAwM2VhcHBfZGF0YTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGRlZmF1bHQ6XFxuLVxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4tXFx0XFx0Kl9wZWVyXFx0XFx0PSBOVUxMO1xcbi1cXHRcXHQqX3BlZXJfYXBwZGF0YVxcdD0gMDtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiB0eXBlO1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3F1ZXJ5X29vYik7XFxuLVxcbi0vKipcXG4tICogcnhycGNfa2VybmVsX2RlcXVldWVfb29iIC0gRGVxdWV1ZSBhbmQgcmV0dXJuIHRoZSBmcm9udCBPT0IgbWVzc2FnZVxcbi0gKiBAc29jazogVGhlIHNvY2tldCB0byBxdWVyeVxcbi0gKiBAX3R5cGU6IFdoZXJlIHRvIHJldHVybiB0aGUgbWVzc2FnZSB0eXBlXFxuLSAqXFxuLSAqIERlcXVldWUgdGhlIGZyb250IE9PQiBtZXNzYWdlLCBpZiB0aGVyZSBpcyBvbmUsIGFuZCByZXR1cm4gaXQgYW5kXFxuLSAqIGl0cyB0eXBlLlxcbi0gKlxcbi0gKiBSZXR1cm46IFRoZSBza19idWZmIHJlcHJlc2VudGluZyB0aGUgT09CIG1lc3NhZ2Ugb3IgJU5VTEwgaWYgdGhlIHF1ZXVlIHdhc1xcbi0gKiBlbXB0eS5cXG4tICovXFxuLXN0cnVjdCBza19idWZmICpyeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2Ioc3RydWN0IHNvY2tldCAqc29jayxcXG4tXFx0XFx0XFx0XFx0XFx0IGVudW0gcnhycGNfb29iX3R5cGUgKl90eXBlKVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stXFx1MDAzZXNrKTtcXG4tXFx0c3RydWN0IHNrX2J1ZmYgKm9vYjtcXG4tXFxuLVxcdG9vYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19vb2JxKTtcXG4tXFx0aWYgKG9vYilcXG4tXFx0XFx0Kl90eXBlID0gb29iLVxcdTAwM2VtYXJrO1xcbi1cXHRyZXR1cm4gb29iO1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX2RlcXVldWVfb29iKTtcXG4tXFxuLS8qKlxcbi0gKiByeHJwY19rZXJuZWxfZnJlZV9vb2IgLSBGcmVlIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2VcXG4tICogQG9vYjogVGhlIE9PQiBtZXNzYWdlIHRvIGZyZWVcXG4tICpcXG4tICogRnJlZSBhbiBPT0IgbWVzc2FnZSBhbG9uZyB3aXRoIGFueSByZXNvdXJjZXMgaXQgaG9sZHMuXFxuLSAqL1xcbi12b2lkIHJ4cnBjX2tlcm5lbF9mcmVlX29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iKVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Iob29iKTtcXG4tXFxuLVxcdHN3aXRjaCAob29iLVxcdTAwM2VtYXJrKSB7XFxuLVxcdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcXG4tXFx0XFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtXFx1MDAzZWNoYWxsLmNvbm4sIHJ4cnBjX2Nvbm5fcHV0X29vYik7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcbi1cXHRyeHJwY19mcmVlX3NrYihvb2IsIHJ4cnBjX3NrYl9wdXRfcHVyZ2Vfb29iKTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9mcmVlX29vYik7XFxuLVxcbi0vKipcXG4tICogcnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSAtIFF1ZXJ5IHRoZSBwYXJhbWV0ZXJzIG9mIGEgY2hhbGxlbmdlXFxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgdG8gcXVlcnlcXG4tICogQF9wZWVyOiBXaGVyZSB0byByZXR1cm4gdGhlIHBlZXIgcmVjb3JkXFxuLSAqIEBfcGVlcl9hcHBkYXRhOiBUaGUgYXBwbGljYXRpb24gZGF0YSBhdHRhY2hlZCB0byBhIHBlZXIgcmVjb3JkXFxuLSAqIEBfc2VydmljZV9pZDogV2hlcmUgdG8gcmV0dXJuIHRoZSBjb25uZWN0aW9uIHNlcnZpY2UgSURcXG4tICogQF9zZWN1cml0eV9pbmRleDogV2hlcmUgdG8gcmV0dXJuIHRoZSBjb25uZWN0aW9uIHNlY3VyaXR5IGluZGV4XFxuLSAqXFxuLSAqIEV4dHJhY3QgdXNlZnVsIHBhcmFtZXRlcnMgZnJvbSBhIENIQUxMRU5HRSBtZXNzYWdlLlxcbi0gKi9cXG4tdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdCAgc3RydWN0IHJ4cnBjX3BlZXIgKipfcGVlcixcXG4tXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhLFxcbi1cXHRcXHRcXHRcXHQgIHUxNiAqX3NlcnZpY2VfaWQsIHU4ICpfc2VjdXJpdHlfaW5kZXgpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xcbi1cXG4tXFx0Kl9wZWVyXFx0XFx0PSBzcC1cXHUwMDNlY2hhbGwuY29ubi1cXHUwMDNlcGVlcjtcXG4tXFx0Kl9wZWVyX2FwcGRhdGFcXHQ9IHNwLVxcdTAwM2VjaGFsbC5jb25uLVxcdTAwM2VwZWVyLVxcdTAwM2VhcHBfZGF0YTtcXG4tXFx0Kl9zZXJ2aWNlX2lkXFx0PSBzcC1cXHUwMDNlaGRyLnNlcnZpY2VJZDtcXG4tXFx0Kl9zZWN1cml0eV9pbmRleCA9IHNwLVxcdTAwM2VoZHIuc2VjdXJpdHlJbmRleDtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UpO1xcbi1cXG4tLyoqXFxuLSAqIHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlIC0gQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byByZWplY3QgYSBjaGFsbGVuZ2VcXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byBiZSByZWplY3RlZFxcbi0gKiBAYWJvcnRfY29kZTogVGhlIGFib3J0IGNvZGUgdG8gc3RpY2sgaW50byB0aGUgQUJPUlQgcGFja2V0XFxuLSAqIEBlcnJvcjogTG9jYWwgZXJyb3IgdmFsdWVcXG4tICogQHdoeTogSW5kaWNhdGlvbiBhcyB0byB3aHkuXFxuLSAqXFxuLSAqIEFsbG93IGEga2VybmVsIHNlcnZpY2UgdG8gcmVqZWN0IGEgY2hhbGxlbmdlIGJ5IGFib3J0aW5nIHRoZSBjb25uZWN0aW9uIGlmXFxuLSAqIGl0J3Mgc3RpbGwgaW4gYW4gYWJvcnRhYmxlIHN0YXRlLiAgVGhlIGVycm9yIGlzIHJldHVybmVkIHNvIHRoaXMgZnVuY3Rpb25cXG4tICogY2FuIGJlIHVzZWQgd2l0aCBhIHJldHVybiBzdGF0ZW1lbnQuXFxuLSAqXFxuLSAqIFJldHVybjogVGhlICVlcnJvciBwYXJhbWV0ZXIuXFxuLSAqL1xcbi1pbnQgcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwgdTMyIGFib3J0X2NvZGUsXFxuLVxcdFxcdFxcdFxcdCAgaW50IGVycm9yLCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xcbi1cXG4tXFx0X2VudGVyKFxcXCJ7JXh9LCVkLCVkLCV1XFxcIiwgc3AtXFx1MDAzZWhkci5zZXJpYWwsIGFib3J0X2NvZGUsIGVycm9yLCB3aHkpO1xcbi1cXG4tXFx0cnhycGNfYWJvcnRfY29ubihzcC1cXHUwMDNlY2hhbGwuY29ubiwgTlVMTCwgYWJvcnRfY29kZSwgZXJyb3IsIHdoeSk7XFxuLVxcdHJldHVybiBlcnJvcjtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3Byb2MuYyBiL25ldC9yeHJwYy9wcm9jLmNcXG5pbmRleCBlOWEyN2ZhN2IyNWQ4Yi4uZjMwMDQ5MWIwNmJkYWMgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL3Byb2MuY1xcbisrKyBiL25ldC9yeHJwYy9wcm9jLmNcXG5AQCAtMjM4LDcgKzIzOCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfYnVuZGxlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbiBcXHRcXHRzZXFfcHV0cyhzZXEsXFxuIFxcdFxcdFxcdCBcXFwiUHJvdG8gTG9jYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiXFxuIFxcdFxcdFxcdCBcXFwiIFJlbW90ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlxcbi1cXHRcXHRcXHQgXFxcIiBTdklEIFJlZiBBY3QgRmxnIEtleSAgICAgIHxcXFwiXFxuK1xcdFxcdFxcdCBcXFwiIFN2SUQgUmVmIEFjdCBGbGcgS2V5ICAgICAgQXBwRGF0YSAgfFxcXCJcXG4gXFx0XFx0XFx0IFxcXCIgQnVuZGxlICAgQ29ubl8wICAgQ29ubl8xICAgQ29ubl8yICAgQ29ubl8zXFxcXG5cXFwiXFxuIFxcdFxcdFxcdCApO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtMjUwLDcgKzI1MCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfYnVuZGxlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbiBcXHRzY25wcmludGYocmJ1ZmYsIHNpemVvZihyYnVmZiksIFxcXCIlcElTcGNcXFwiLCBcXHUwMDI2YnVuZGxlLVxcdTAwM2VwZWVyLVxcdTAwM2VzcngudHJhbnNwb3J0KTtcXG4gXFx0c2VxX3ByaW50ZihzZXEsXFxuIFxcdFxcdCAgIFxcXCJVRFAgICAlLTQ3LjQ3cyAlLTQ3LjQ3cyAlNHggJTN1ICUzZFxcXCJcXG4tXFx0XFx0ICAgXFxcIiAlYyVjJWMgJTA4eCB8ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgXFxcIiAlYyVjJWMgJTA4eCAlMDh4IHwgJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4XFxcXG5cXFwiLFxcbiBcXHRcXHQgICBsYnVmZixcXG4gXFx0XFx0ICAgcmJ1ZmYsXFxuIFxcdFxcdCAgIGJ1bmRsZS1cXHUwMDNlc2VydmljZV9pZCxcXG5AQCAtMjYwLDYgKzI2MCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfYnVuZGxlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbiBcXHRcXHQgICBidW5kbGUtXFx1MDAzZWV4Y2x1c2l2ZSA/ICdlJyA6ICctJyxcXG4gXFx0XFx0ICAgYnVuZGxlLVxcdTAwM2V1cGdyYWRlID8gJ3UnIDogJy0nLFxcbiBcXHRcXHQgICBrZXlfc2VyaWFsKGJ1bmRsZS1cXHUwMDNla2V5KSxcXG4rXFx0XFx0ICAga2V5X3NlcmlhbChidW5kbGUtXFx1MDAzZWFwcF9kYXRhKSxcXG4gXFx0XFx0ICAgYnVuZGxlLVxcdTAwM2VkZWJ1Z19pZCxcXG4gXFx0XFx0ICAgYnVuZGxlLVxcdTAwM2Vjb25uX2lkc1swXSxcXG4gXFx0XFx0ICAgYnVuZGxlLVxcdTAwM2Vjb25uX2lkc1sxXSxcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3JlY3Ztc2cuYyBiL25ldC9yeHJwYy9yZWN2bXNnLmNcXG5pbmRleCBlZmNiYTRiMmU3NGYwYy4uOGM0NTcxOTgyZWRjNDUgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL3JlY3Ztc2cuY1xcbisrKyBiL25ldC9yeHJwYy9yZWN2bXNnLmNcXG5AQCAtMTcsMTMgKzE3LDEyIEBAXFxuICNpbmNsdWRlIFxcXCJhci1pbnRlcm5hbC5oXFxcIlxcbiBcXG4gLypcXG4tICogUG9zdCBhIGNhbGwgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlLiAgRnVydGhlclxcbi0gKiBub3RpZmljYXRpb25zIGFyZSBzdXBwcmVzc2VkIGJ5IHB1dHRpbmcgcmVjdm1zZ19saW5rIG9uIGEgZHVtbXkgcXVldWUuXFxuKyAqIFJlcXVldWUgYSBjYWxsIGZvciByZWN2bXNnKCkgdG8gcGljayB1cC5cXG4gICovXFxuLXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcXG4rc3RhdGljIHZvaWQgcnhycGNfcmVxdWV1ZV9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbiB7XFxuLVxcdHN0cnVjdCByeHJwY19zb2NrICpyeDtcXG4tXFx0c3RydWN0IHNvY2sgKnNrO1xcbitcXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVxcdTAwM2Vzayk7XFxuK1xcdHN0cnVjdCBzb2NrICpzayA9IFxcdTAwMjZyeC1cXHUwMDNlc2s7XFxuIFxcbiBcXHRfZW50ZXIoXFxcIiVkXFxcIiwgY2FsbC1cXHUwMDNlZGVidWdfaWQpO1xcbiBcXG5AQCAtMzIsMzEgKzMxLDE4IEBAIHZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcbi1cXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVxcdTAwM2Vzb2NrZXQpO1xcbi1cXHRzayA9IFxcdTAwMjZyeC1cXHUwMDNlc2s7XFxuLVxcdGlmIChyeCBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfc3RhdGUgXFx1MDAzYyBSWFJQQ19DTE9TRSkge1xcbi1cXHRcXHRpZiAoY2FsbC1cXHUwMDNlbm90aWZ5X3J4KSB7XFxuLVxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNhbGwtXFx1MDAzZW5vdGlmeV9sb2NrKTtcXG4tXFx0XFx0XFx0Y2FsbC1cXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVxcdTAwM2V1c2VyX2NhbGxfSUQpO1xcbi1cXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmNhbGwtXFx1MDAzZW5vdGlmeV9sb2NrKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jayk7XFxuLVxcdFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZjYWxsLVxcdTAwM2VyZWN2bXNnX2xpbmspKSB7XFxuLVxcdFxcdFxcdFxcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xcbi1cXHRcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZjYWxsLVxcdTAwM2VyZWN2bXNnX2xpbmssIFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19xKTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX2xvY2spO1xcbitcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19sb2NrKTtcXG4rXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfbGluaykpIHtcXG4rXFx0XFx0cnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7XFxuK1xcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfbGluaywgXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX3EpO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jayk7XFxuIFxcbi1cXHRcXHRcXHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xcbi1cXHRcXHRcXHRcXHRfZGVidWcoXFxcImNhbGwgJXBzXFxcIiwgc2stXFx1MDAzZXNrX2RhdGFfcmVhZHkpO1xcbi1cXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbitcXHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xcbitcXHRcXHRfZGVidWcoXFxcImNhbGwgJXBzXFxcIiwgc2stXFx1MDAzZXNrX2RhdGFfcmVhZHkpO1xcbitcXHRcXHRzay1cXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XFxuIFxcdH1cXG4gXFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRfbGVhdmUoXFxcIlxcXCIpO1xcbiB9XFxuIFxcbkBAIC0yMTUsNjEgKzIwMSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ191c2VyX2lkKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuIFxcdH1cXG4gfVxcbiBcXG4tLypcXG4tICogRGVhbCB3aXRoIGEgQ0hBTExFTkdFIHBhY2tldC5cXG4tICovXFxuLXN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19jaGFsbGVuZ2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xcbi1cXHRzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiA9IHNwLVxcdTAwM2VjaGFsbC5jb25uO1xcbi1cXG4tXFx0cmV0dXJuIGNvbm4tXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VjaGFsbGVuZ2VfdG9fcmVjdm1zZyhjb25uLCBjaGFsbGVuZ2UsIG1zZyk7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIFByb2Nlc3MgT09CIHBhY2tldHMuICBDYWxsZWQgd2l0aCB0aGUgc29ja2V0IGxvY2tlZC5cXG4tICovXFxuLXN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19vb2Ioc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBmbGFncylcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVxcdTAwM2Vzayk7XFxuLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLVxcdGJvb2wgbmVlZF9yZXNwb25zZSA9IGZhbHNlO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0c2tiID0gc2tiX3BlZWsoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpO1xcbi1cXHRpZiAoIXNrYilcXG4tXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuLVxcdHJ4cnBjX3NlZV9za2Ioc2tiLCByeHJwY19za2Jfc2VlX3JlY3Ztc2cpO1xcbi1cXG4tXFx0cmV0ID0gcHV0X2Ntc2cobXNnLCBTT0xfUlhSUEMsIFJYUlBDX09PQl9JRCwgc2l6ZW9mKHU2NCksXFxuLVxcdFxcdCAgICAgICBcXHUwMDI2c2tiLVxcdTAwM2Vza2JfbXN0YW1wX25zKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHRzd2l0Y2ggKChlbnVtIHJ4cnBjX29vYl90eXBlKXNrYi1cXHUwMDNlbWFyaykge1xcbi1cXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XFxuLVxcdFxcdG5lZWRfcmVzcG9uc2UgPSB0cnVlO1xcbi1cXHRcXHRyZXQgPSByeHJwY19yZWN2bXNnX2NoYWxsZW5nZShzb2NrLCBtc2csIHNrYiwgZmxhZ3MpO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJyZWN2bXNnKCkgY2FuJ3QgcHJvY2VzcyB1bmtub3duIE9PQiB0eXBlICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgIHNrYi1cXHUwMDNlbWFyayk7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIShmbGFncyBcXHUwMDI2IE1TR19QRUVLKSkge1xcbi1cXHRcXHRza2JfdW5saW5rKHNrYiwgXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpO1xcbi1cXHRcXHRpZiAobmVlZF9yZXNwb25zZSlcXG4tXFx0XFx0XFx0cnhycGNfYWRkX3BlbmRpbmdfb29iKHJ4LCBza2IpO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9vb2IpO1xcbi1cXHR9XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuIC8qXFxuICAqIERlbGl2ZXIgbWVzc2FnZXMgdG8gYSBjYWxsLiAgVGhpcyBrZWVwcyBwcm9jZXNzaW5nIHBhY2tldHMgdW50aWwgdGhlIGJ1ZmZlclxcbiAgKiBpcyBmaWxsZWQgYW5kIHdlIGZpbmQgZWl0aGVyIG1vcmUgREFUQSAocmV0dXJucyAwKSBvciB0aGUgZW5kIG9mIHRoZSBEQVRBXFxuQEAgLTI4MSw3ICsyMTIsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG4gXFx0XFx0XFx0ICAgICAgc2l6ZV90IGxlbiwgaW50IGZsYWdzLCBzaXplX3QgKl9vZmZzZXQpXFxuIHtcXG4gXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcDtcXG4tXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cXHUwMDNlc2spO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXHRyeHJwY19zZXFfdCBzZXEgPSAwO1xcbiBcXHRzaXplX3QgcmVtYWluO1xcbkBAIC0zNzYsMTMgKzMwNiw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXG4gXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBNU0dfUEVFSykpXFxuIFxcdFxcdFxcdHJ4cnBjX3JvdGF0ZV9yeF93aW5kb3coY2FsbCk7XFxuLVxcbi1cXHRcXHRpZiAoIXJ4LVxcdTAwM2VhcHBfb3BzIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xcbi1cXHRcXHRcXHR0cmFjZV9yeHJwY19yZWN2ZGF0YShjYWxsLCByeHJwY19yZWN2bXNnX29vYnEsIHNlcSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICByeF9wa3Rfb2Zmc2V0LCByeF9wa3RfbGVuLCByZXQpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBvdXQ6XFxuQEAgLTQzMCwxNCArMzUzLDEyIEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4gXFx0LyogUmV0dXJuIGltbWVkaWF0ZWx5IGlmIGEgY2xpZW50IHNvY2tldCBoYXMgbm8gb3V0c3RhbmRpbmcgY2FsbHMgKi9cXG4gXFx0aWYgKFJCX0VNUFRZX1JPT1QoXFx1MDAyNnJ4LVxcdTAwM2VjYWxscykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGxpc3RfZW1wdHkoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX3EpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICByeC1cXHUwMDNlc2suc2tfc3RhdGUgIT0gUlhSUENfU0VSVkVSX0xJU1RFTklORykge1xcbiBcXHRcXHRyZWxlYXNlX3NvY2soXFx1MDAyNnJ4LVxcdTAwM2Vzayk7XFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfcSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfb29icSkpIHtcXG4rXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX3EpKSB7XFxuIFxcdFxcdHJldCA9IC1FV09VTERCTE9DSztcXG4gXFx0XFx0aWYgKHRpbWVvID09IDApIHtcXG4gXFx0XFx0XFx0Y2FsbCA9IE5VTEw7XFxuQEAgLTQ1Myw4ICszNzQsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gd2FpdF9lcnJvcjtcXG4gXFxuLVxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19xKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xcbitcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfcSkpIHtcXG4gXFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxcbiBcXHRcXHRcXHRcXHRnb3RvIHdhaXRfaW50ZXJydXB0ZWQ7XFxuIFxcdFxcdFxcdHRyYWNlX3J4cnBjX3JlY3Ztc2coMCwgcnhycGNfcmVjdm1zZ193YWl0LCAwKTtcXG5AQCAtNDY0LDE1ICszODQsNiBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdGdvdG8gdHJ5X2FnYWluO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBEZWFsIHdpdGggT09CIG1lc3NhZ2VzIGJlZm9yZSB3ZSBjb25zaWRlciBnZXR0aW5nIG5vcm1hbCBkYXRhLiAqL1xcbi1cXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfb29icSkpIHtcXG4tXFx0XFx0cmV0ID0gcnhycGNfcmVjdm1zZ19vb2Ioc29jaywgbXNnLCBmbGFncyk7XFxuLVxcdFxcdHJlbGVhc2Vfc29jayhcXHUwMDI2cngtXFx1MDAzZXNrKTtcXG4tXFx0XFx0aWYgKHJldCA9PSAtRUFHQUlOKVxcbi1cXHRcXHRcXHRnb3RvIHRyeV9hZ2FpbjtcXG4tXFx0XFx0Z290byBlcnJvcl90cmFjZTtcXG4tXFx0fVxcbi1cXG4gXFx0LyogRmluZCB0aGUgbmV4dCBjYWxsIGFuZCBkZXF1ZXVlIGl0IGlmIHdlJ3JlIG5vdCBqdXN0IHBlZWtpbmcuICBJZiB3ZVxcbiBcXHQgKiBkbyBkZXF1ZXVlIGl0LCB0aGF0IGNvbWVzIHdpdGggYSByZWYgdGhhdCB3ZSB3aWxsIG5lZWQgdG8gcmVsZWFzZS5cXG4gXFx0ICogV2UgYWxzbyB3YW50IHRvIHdlZWQgb3V0IGNhbGxzIHRoYXQgZ290IHJlcXVldWVkIHdoaWxzdCB3ZSB3ZXJlXFxuQEAgLTQ4Myw4ICszOTQsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdGNhbGwgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCByeHJwY19jYWxsLCByZWN2bXNnX2xpbmspO1xcbiBcXG4gXFx0aWYgKCFyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBza2JfcXVldWVfZW1wdHkoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfcXVldWUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBza2JfcXVldWVfZW1wdHkoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpKSB7XFxuK1xcdCAgICBza2JfcXVldWVfZW1wdHkoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfcXVldWUpKSB7XFxuIFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfbGluayk7XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jayk7XFxuIFxcdFxcdHJlbGVhc2Vfc29jayhcXHUwMDI2cngtXFx1MDAzZXNrKTtcXG5AQCAtNTYxLDcgKzQ3MSw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4gXFxuIFxcdGlmICghKGZsYWdzIFxcdTAwMjYgTVNHX1BFRUspIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZjYWxsLVxcdTAwM2VyZWN2bXNnX3F1ZXVlKSlcXG4tXFx0XFx0cnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTtcXG4rXFx0XFx0cnhycGNfcmVxdWV1ZV9jYWxsKHNvY2ssIGNhbGwpO1xcbiBcXHRnb3RvIG5vdF95ZXRfY29tcGxldGU7XFxuIFxcbiBjYWxsX2ZhaWxlZDpcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmNcXG5pbmRleCA3N2E2N2FjZTFkMjQ4MS4uYzY0ZWY5Njc2M2FlMmQgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL3J4Z2suY1xcbisrKyBiL25ldC9yeHJwYy9yeGdrLmNcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXktdHlwZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNja2V5cy91c2VyLXR5cGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImFyLWludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJyeGdrX2NvbW1vbi5oXFxcIlxcbiBcXG5AQCAtNzM0LDM3ICs3MzUsNiBAQCBzdGF0aWMgYm9vbCByeGdrX3ZhbGlkYXRlX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UgLSBRdWVyeSBSeEdLLXNwZWNpZmljIGNoYWxsZW5nZSBwYXJhbWV0ZXJzXFxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgcGFja2V0IHRvIHF1ZXJ5XFxuLSAqXFxuLSAqIFJldHVybjogVGhlIEtlcmJlcm9zIDUgZW5jb2RpbmcgdHlwZSBmb3IgdGhlIGNoYWxsZW5nZWQgY29ubmVjdGlvbi5cXG4tICovXFxuLXUzMiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XFxuLVxcbi1cXHRyZXR1cm4gc3AtXFx1MDAzZWNoYWxsLmNvbm4tXFx1MDAzZXJ4Z2suZW5jdHlwZTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MKHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSk7XFxuLVxcbi0vKlxcbi0gKiBGaWxsIG91dCB0aGUgY29udHJvbCBtZXNzYWdlIHRvIHBhc3MgdG8gdXNlcnNwYWNlIHRvIGluZm9ybSBhYm91dCB0aGVcXG4tICogY2hhbGxlbmdlLlxcbi0gKi9cXG4tc3RhdGljIGludCByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnKVxcbi17XFxuLVxcdHN0cnVjdCByeGdrX2NoYWxsZW5nZSBjaGFsbDtcXG4tXFxuLVxcdGNoYWxsLmJhc2Uuc2VydmljZV9pZFxcdFxcdD0gY29ubi1cXHUwMDNlc2VydmljZV9pZDtcXG4tXFx0Y2hhbGwuYmFzZS5zZWN1cml0eV9pbmRleFxcdD0gY29ubi1cXHUwMDNlc2VjdXJpdHlfaXg7XFxuLVxcdGNoYWxsLmVuY3R5cGVcXHRcXHRcXHQ9IGNvbm4tXFx1MDAzZXJ4Z2suZW5jdHlwZTtcXG4tXFxuLVxcdHJldHVybiBwdXRfY21zZyhtc2csIFNPTF9SWFJQQywgUlhSUENfQ0hBTExFTkdFRCwgc2l6ZW9mKGNoYWxsKSwgXFx1MDAyNmNoYWxsKTtcXG4tfVxcbi1cXG4gLypcXG4gICogSW5zZXJ0IHRoZSByZXF1aXNpdGUgYW1vdW50IG9mIFhEUiBwYWRkaW5nIGZvciB0aGUgbGVuZ3RoIGdpdmVuLlxcbiAgKi9cXG5AQCAtODM3LDcgKzgwNyw3IEBAIHN0YXRpYyBub2lubGluZSBzc2l6ZV90IHJ4Z2tfaW5zZXJ0X3Jlc3BvbnNlX2hlYWRlcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29uXFxuICAqL1xcbiBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICphcHBkYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3BvbnNlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90IG9mZnNldClcXG4ge1xcbkBAIC04NTksMjAgKzgyOSwyMCBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuIFxcbi1cXHRhLmFwcGRhdGFfbGVuID0gaHRvbmwoYXBwZGF0YS1cXHUwMDNlbGVuKTtcXG4rXFx0YS5hcHBkYXRhX2xlbiA9IGh0b25sKGFwcGRhdGEtXFx1MDAzZWRhdGFsZW4pO1xcbiBcXG4gXFx0cmV0ID0gc2tiX3N0b3JlX2JpdHMocmVzcG9uc2UsIG9mZnNldCwgXFx1MDAyNmEsIHNpemVvZihhKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRvZmZzZXQgKz0gc2l6ZW9mKGEpO1xcbiBcXG4tXFx0aWYgKGFwcGRhdGEtXFx1MDAzZWxlbikge1xcbi1cXHRcXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBhcHBkYXRhLVxcdTAwM2VkYXRhLCBhcHBkYXRhLVxcdTAwM2VsZW4pO1xcbitcXHRpZiAoYXBwZGF0YS1cXHUwMDNlZGF0YWxlbikge1xcbitcXHRcXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBhcHBkYXRhLVxcdTAwM2VkYXRhLCBhcHBkYXRhLVxcdTAwM2VkYXRhbGVuKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdG9mZnNldCArPSBhcHBkYXRhLVxcdTAwM2VsZW47XFxuK1xcdFxcdG9mZnNldCArPSBhcHBkYXRhLVxcdTAwM2VkYXRhbGVuO1xcbiBcXG4tXFx0XFx0cmV0ID0gcnhna19wYWRfb3V0KHJlc3BvbnNlLCBhcHBkYXRhLVxcdTAwM2VsZW4sIG9mZnNldCk7XFxuK1xcdFxcdHJldCA9IHJ4Z2tfcGFkX291dChyZXNwb25zZSwgYXBwZGF0YS1cXHUwMDNlZGF0YWxlbiwgb2Zmc2V0KTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdG9mZnNldCArPSByZXQ7XFxuQEAgLTg5MCw3ICs4NjAsNyBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBcXHUwMDI2Yiwgc2l6ZW9mKGIpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdHJldHVybiBzaXplb2YoYSkgKyB4ZHJfcm91bmRfdXAoYXBwZGF0YS1cXHUwMDNlbGVuKSArIHNpemVvZihiKTtcXG4rXFx0cmV0dXJuIHNpemVvZihhKSArIHhkcl9yb3VuZF91cChhcHBkYXRhLVxcdTAwM2VkYXRhbGVuKSArIHNpemVvZihiKTtcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3Qgcnhna19lbmNyeXB0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuQEAgLTkyMyw3ICs4OTMsNyBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2VuY3J5cHRfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gICovXFxuIHN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSlcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKmFwcGRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AsICpyc3A7XFxuIFxcdHN0cnVjdCByeGdrX2NvbnRleHQgKmdrO1xcbkBAIC05MzYsMTEgKzkwNiwxMSBAQCBzdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRpZiAoSVNfRVJSKGdrKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoZ2spO1xcbiBcXG4tXFx0YXV0aF9sZW4gPSAyMCArICg0ICsgYXBwZGF0YS1cXHUwMDNlbGVuKSArIDEyICsgKDEgKyA0KSAqIDQ7XFxuK1xcdGF1dGhfbGVuID0gMjAgKyB4ZHJfb2JqZWN0X2xlbihhcHBkYXRhLVxcdTAwM2VkYXRhbGVuKSArIDEyICsgKDEgKyA0KSAqIDQ7XFxuIFxcdGF1dGh4X2xlbiA9IGNyeXB0b19rcmI1X2hvd19tdWNoX2J1ZmZlcihnay1cXHUwMDNla3JiNSwgS1JCNV9FTkNSWVBUX01PREUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGF1dGhfbGVuLCBcXHUwMDI2YXV0aF9vZmZzZXQpO1xcbiBcXHRsZW4gPSBzaXplb2Yoc3RydWN0IHJ4cnBjX3dpcmVfaGVhZGVyKSArXFxuLVxcdFxcdDggKyAoNCArIHhkcl9yb3VuZF91cChnay1cXHUwMDNla2V5LVxcdTAwM2V0aWNrZXQubGVuKSkgKyAoNCArIGF1dGh4X2xlbik7XFxuK1xcdFxcdDggKyB4ZHJfb2JqZWN0X2xlbihnay1cXHUwMDNla2V5LVxcdTAwM2V0aWNrZXQubGVuKSArIHhkcl9vYmplY3RfbGVuKGF1dGh4X2xlbik7XFxuIFxcbiBcXHRyZXNwb25zZSA9IGFsbG9jX3NrYl93aXRoX2ZyYWdzKDAsIGxlbiwgMCwgXFx1MDAyNnJldCwgR0ZQX05PRlMpO1xcbiBcXHRpZiAoIXJlc3BvbnNlKVxcbkBAIC0xMDExLDY2ICs5ODEsNDQgQEAgc3RhdGljIGludCByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gICogUmVzcG9uZCB0byBhIGNoYWxsZW5nZSBwYWNrZXQuXFxuICAqL1xcbiBzdGF0aWMgaW50IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcXG4ge1xcbi1cXHRfZW50ZXIoXFxcInslZCwleH1cXFwiLCBjb25uLVxcdTAwM2VkZWJ1Z19pZCwga2V5X3NlcmlhbChjb25uLVxcdTAwM2VrZXkpKTtcXG4rXFx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgZHVtbXkgPSB7fSwgKmFwcGRhdGEgPSBcXHUwMDI2ZHVtbXk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRfZW50ZXIoXFxcInslZCwldSwleCwleH1cXFwiLFxcbitcXHQgICAgICAgY29ubi1cXHUwMDNlZGVidWdfaWQsIGNvbm4tXFx1MDAzZXNlcnZpY2VfaWQsXFxuK1xcdCAgICAgICBrZXlfc2VyaWFsKGNvbm4tXFx1MDAzZWtleSksIGtleV9zZXJpYWwoY29ubi1cXHUwMDNlYnVuZGxlLVxcdTAwM2VhcHBfZGF0YSkpO1xcbiBcXG4gXFx0aWYgKGtleV92YWxpZGF0ZShjb25uLVxcdTAwM2VrZXkpIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJ4cnBjX2Fib3J0X2Nvbm4oY29ubiwgTlVMTCwgUlhHS19FWFBJUkVELCAtRVBST1RPLFxcbiBcXHRcXHRcXHRcXHRcXHRyeGdrX2Fib3J0X2NoYWxsX2tleV9leHBpcmVkKTtcXG4gXFxuLVxcdHJldHVybiByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShjb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2Vfbm9fYXBwZGF0YShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcXG4te1xcbi1cXHRzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9O1xcbi1cXG4tXFx0cmV0dXJuIHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UoY29ubiwgY2hhbGxlbmdlLCBcXHUwMDI2YXBwZGF0YSk7XFxuLX1cXG4tXFxuLS8qKlxcbi0gKiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZSAtIFJlc3BvbmQgdG8gYSBjaGFsbGVuZ2Ugd2l0aCBhcHBkYXRhXFxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgdG8gcmVzcG9uZCB0b1xcbi0gKiBAYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgUkVTUE9OU0UgYXV0aGVudGljYXRvclxcbi0gKlxcbi0gKiBBbGxvdyBhIGtlcm5lbCBhcHBsaWNhdGlvbiB0byByZXNwb25kIHRvIGEgQ0hBTExFTkdFIHdpdGggYXBwbGljYXRpb24gZGF0YVxcbi0gKiB0byBiZSBpbmNsdWRlZCBpbiB0aGUgUnhHSyBSRVNQT05TRSBBdXRoZW50aWNhdG9yLlxcbi0gKlxcbi0gKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuLSAqL1xcbi1pbnQgcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTtcXG4tXFxuLVxcdHJldHVybiByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNzcC1cXHUwMDNlY2hhbGwuY29ubiwgY2hhbGxlbmdlLCBhcHBkYXRhKTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MKHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKTtcXG4tXFxuLS8qXFxuLSAqIFBhcnNlIHNlbmRtc2coKSBjb250cm9sIG1lc3NhZ2UgYW5kIHJlc3BvbmQgdG8gY2hhbGxlbmdlLiAgV2UgbmVlZCB0byBzZWUgaWZcXG4tICogdGhlcmUncyBhbiBhcHBkYXRhIHRvIGZpc2ggb3V0Llxcbi0gKi9cXG4tc3RhdGljIGludCByeGdrX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpXFxuLXtcXG4tXFx0c3RydWN0IGtyYjVfYnVmZmVyIGFwcGRhdGEgPSB7fTtcXG4tXFx0c3RydWN0IGNtc2doZHIgKmNtc2c7XFxuLVxcbi1cXHRmb3JfZWFjaF9jbXNnaGRyKGNtc2csIG1zZykge1xcbi1cXHRcXHRpZiAoY21zZy1cXHUwMDNlY21zZ19sZXZlbCAhPSBTT0xfUlhSUEMgfHxcXG4tXFx0XFx0ICAgIGNtc2ctXFx1MDAzZWNtc2dfdHlwZSAhPSBSWFJQQ19SRVNQX1JYR0tfQVBQREFUQSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGlmIChhcHBkYXRhLmRhdGEpXFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRhcHBkYXRhLmRhdGEgPSBDTVNHX0RBVEEoY21zZyk7XFxuLVxcdFxcdGFwcGRhdGEubGVuID0gY21zZy1cXHUwMDNlY21zZ19sZW4gLSBzaXplb2Yoc3RydWN0IGNtc2doZHIpO1xcbitcXHRpZiAoY29ubi1cXHUwMDNlYnVuZGxlLVxcdTAwM2VhcHBfZGF0YSkge1xcbitcXHRcXHRzdHJ1Y3Qga2V5ICphcHBfa2V5ID0gY29ubi1cXHUwMDNlYnVuZGxlLVxcdTAwM2VhcHBfZGF0YTtcXG4rXFxuK1xcdFxcdC8qIFRoZSB3cm9uZyBzb3J0IG9mIGtleSBzaG91bGRuJ3QgZ2V0IHRoaXMgZmFyLiAqL1xcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGFwcF9rZXktXFx1MDAzZXR5cGUgIT0gXFx1MDAyNmtleV90eXBlX3VzZXIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0IGFwcF9rZXktXFx1MDAzZXR5cGUgIT0gXFx1MDAyNmtleV90eXBlX2xvZ29uKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHJ4cnBjX2Fib3J0X2Nvbm4oY29ubiwgTlVMTCwgUlhHS19FWFBJUkVELCAtRUtFWVJFSkVDVEVELFxcbitcXHRcXHRcXHRcXHRcXHRcXHRyeGdrX2Fib3J0X2NoYWxsX2JhZF9hcHBfa2V5KTtcXG4rXFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0XFx0YXBwZGF0YSA9IChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKVxcbitcXHRcXHRcXHR1c2VyX2tleV9wYXlsb2FkX3JjdShjb25uLVxcdTAwM2VidW5kbGUtXFx1MDAzZWFwcF9kYXRhKTtcXG4rXFx0XFx0aWYgKGFwcGRhdGEgXFx1MDAyNlxcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2YXBwZGF0YS1cXHUwMDNlcmVmKSlcXG4rXFx0XFx0XFx0YXBwZGF0YSA9IE5VTEw7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRpZiAoIWFwcGRhdGEpXFxuK1xcdFxcdFxcdHJldHVybiByeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIFJYR0tfRVhQSVJFRCwgLUVLRVlSRVZPS0VELFxcbitcXHRcXHRcXHRcXHRcXHRcXHRyeGdrX2Fib3J0X2NoYWxsX2tleV9leHBpcmVkKTtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgXFx1MDAyNmFwcGRhdGEpO1xcbitcXHRyZXQgPSByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShjb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpO1xcbitcXG4rXFx0aWYgKGFwcGRhdGEgIT0gXFx1MDAyNmR1bW15KVxcbitcXHRcXHRwdXRfdXNlcl9rZXlfcGF5bG9hZChhcHBkYXRhKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTM0Niw5ICsxMjk0LDcgQEAgY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHJ4Z2tfeWZzID0ge1xcbiBcXHQuZnJlZV9jYWxsX2NyeXB0b1xcdFxcdD0gcnhna19mcmVlX2NhbGxfY3J5cHRvLFxcbiBcXHQuaXNzdWVfY2hhbGxlbmdlXFx0XFx0PSByeGdrX2lzc3VlX2NoYWxsZW5nZSxcXG4gXFx0LnZhbGlkYXRlX2NoYWxsZW5nZVxcdFxcdD0gcnhna192YWxpZGF0ZV9jaGFsbGVuZ2UsXFxuLVxcdC5jaGFsbGVuZ2VfdG9fcmVjdm1zZ1xcdFxcdD0gcnhna19jaGFsbGVuZ2VfdG9fcmVjdm1zZyxcXG4tXFx0LnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2VcXHQ9IHJ4Z2tfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSxcXG4tXFx0LnJlc3BvbmRfdG9fY2hhbGxlbmdlXFx0XFx0PSByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlX25vX2FwcGRhdGEsXFxuK1xcdC5yZXNwb25kX3RvX2NoYWxsZW5nZVxcdFxcdD0gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZSxcXG4gXFx0LnZlcmlmeV9yZXNwb25zZVxcdFxcdD0gcnhna192ZXJpZnlfcmVzcG9uc2UsXFxuIFxcdC5jbGVhclxcdFxcdFxcdFxcdD0gcnhna19jbGVhcixcXG4gXFx0LmRlZmF1bHRfZGVjb2RlX3RpY2tldFxcdFxcdD0gcnhna195ZnNfZGVjb2RlX3RpY2tldCxcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4a2FkLmMgYi9uZXQvcnhycGMvcnhrYWQuY1xcbmluZGV4IGNhOWYwZTgyY2I5YWM3Li5lNTViZmNhMTBlMWE5NCAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvcnhrYWQuY1xcbisrKyBiL25ldC9yeHJwYy9yeGthZC5jXFxuQEAgLTc0OCwzMiArNzQ4LDYgQEAgc3RhdGljIGludCByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tLypcXG4tICogUnhLQUQgZG9lcyBhdXRvbWF0aWMgcmVzcG9uc2Ugb25seSBhcyB0aGVyZSdzIG5vdGhpbmcgdG8gbWFuYWdlIHRoYXQgaXNuJ3RcXG4tICogYWxyZWFkeSBpbiB0aGUga2V5Llxcbi0gKi9cXG4tc3RhdGljIGludCByeGthZF9zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtc2doZHIgKm1zZylcXG4te1xcbi1cXHRyZXR1cm4gLUVJTlZBTDtcXG4tfVxcbi1cXG4tLyoqXFxuLSAqIHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZSAtIFJlc3BvbmQgdG8gYSBjaGFsbGVuZ2Ugd2l0aCBhcHBkYXRhXFxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgdG8gcmVzcG9uZCB0b1xcbi0gKlxcbi0gKiBBbGxvdyBhIGtlcm5lbCBhcHBsaWNhdGlvbiB0byByZXNwb25kIHRvIGEgQ0hBTExFTkdFLlxcbi0gKlxcbi0gKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuLSAqL1xcbi1pbnQgcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTtcXG4tXFxuLVxcdHJldHVybiByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZShjc3AtXFx1MDAzZWNoYWxsLmNvbm4sIGNoYWxsZW5nZSk7XFxuLX1cXG4tRVhQT1JUX1NZTUJPTChyeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UpO1xcbi1cXG4gLyogRGVjcnlwdCBkYXRhIGluLXBsYWNlIHVzaW5nIERFUy1QQ0JDLiAgQGxlbiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOC4gKi9cXG4gVklTSUJMRV9JRl9LVU5JVCB2b2lkIGRlc19wY2JjX2RlY3J5cHRfaW5wbGFjZShjb25zdCBzdHJ1Y3QgZGVzX2N0eCAqa2V5LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgX19sZTY0IGl2LCB1OCAqZGF0YSwgc2l6ZV90IGxlbilcXG5AQCAtMTEzNCw3ICsxMTA4LDYgQEAgY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHJ4a2FkID0ge1xcbiBcXHQuZnJlZV9jYWxsX2NyeXB0b1xcdFxcdD0gcnhrYWRfZnJlZV9jYWxsX2NyeXB0byxcXG4gXFx0Lmlzc3VlX2NoYWxsZW5nZVxcdFxcdD0gcnhrYWRfaXNzdWVfY2hhbGxlbmdlLFxcbiBcXHQudmFsaWRhdGVfY2hhbGxlbmdlXFx0XFx0PSByeGthZF92YWxpZGF0ZV9jaGFsbGVuZ2UsXFxuLVxcdC5zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlXFx0PSByeGthZF9zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxcbiBcXHQucmVzcG9uZF90b19jaGFsbGVuZ2VcXHRcXHQ9IHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxcbiBcXHQudmVyaWZ5X3Jlc3BvbnNlXFx0XFx0PSByeGthZF92ZXJpZnlfcmVzcG9uc2UsXFxuIFxcdC5jbGVhclxcdFxcdFxcdFxcdD0gcnhrYWRfY2xlYXIsXFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZW5kbXNnLmMgYi9uZXQvcnhycGMvc2VuZG1zZy5jXFxuaW5kZXggZWQyYzlhNTEwMDVhZGUuLmIzZjc2NWZkNDFiYzcwIDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9zZW5kbXNnLmNcXG4rKysgYi9uZXQvcnhycGMvc2VuZG1zZy5jXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2tleXMvdXNlci10eXBlLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9hZl9yeHJwYy5oXFx1MDAzZVxcbkBAIC0zMjAsOCArMzIxLDggQEAgc3RhdGljIGludCByeHJwY19hbGxvY190eHF1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXFxuIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tXFx0XFx0XFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsXFxuLVxcdFxcdFxcdCAgIGJvb2wgKl9kcm9wcGVkX2xvY2spXFxuK1xcdFxcdFxcdCAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KVxcbitcXHRfX3JlbGVhc2VzKFxcdTAwMjZjYWxsLVxcdTAwM2V1c2VyX211dGV4KVxcbiB7XFxuIFxcdHN0cnVjdCByeHJwY190eGJ1ZiAqdHhiO1xcbiBcXHRzdHJ1Y3Qgc29jayAqc2sgPSBcXHUwMDI2cngtXFx1MDAzZXNrO1xcbkBAIC0zMzAsMjMgKzMzMSwzMSBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuIFxcdGJvb2wgbW9yZSA9IG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX01PUkU7XFxuIFxcdGludCByZXQsIGNvcGllZCA9IDA7XFxuIFxcbi1cXHRpZiAodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9OT19NT1JFLCBcXHUwMDI2Y2FsbC1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsIFxcdTAwMjZjYWxsLVxcdTAwM2VmbGFncykpKSB7XFxuIFxcdFxcdHRyYWNlX3J4cnBjX2Fib3J0KGNhbGwtXFx1MDAzZWRlYnVnX2lkLCByeHJwY19zZW5kbXNnX2xhdGVfc2VuZCxcXG4gXFx0XFx0XFx0XFx0ICBjYWxsLVxcdTAwM2VjaWQsIGNhbGwtXFx1MDAzZWNhbGxfaWQsIGNhbGwtXFx1MDAzZXJ4X2NvbnN1bWVkLFxcbiBcXHRcXHRcXHRcXHQgIDAsIC1FUFJPVE8pO1xcbi1cXHRcXHRyZXR1cm4gLUVQUk9UTztcXG4rXFx0XFx0cmV0ID0gLUVQUk9UTztcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuK1xcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX0VSUk9SLCBcXHUwMDI2Y2FsbC1cXHUwMDNlZmxhZ3MpKSkge1xcbitcXHRcXHR0cmFjZV9yeHJwY19hYm9ydChjYWxsLVxcdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ190eF9lcnJvcixcXG4rXFx0XFx0XFx0XFx0ICBjYWxsLVxcdTAwM2VjaWQsIGNhbGwtXFx1MDAzZWNhbGxfaWQsIGNhbGwtXFx1MDAzZXJ4X2NvbnN1bWVkLFxcbitcXHRcXHRcXHRcXHQgIDAsIC1FSU8pO1xcbitcXHRcXHRyZXQgPSAtRUlPO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuIFxcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgbXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbiBcXG4gXFx0cmV0ID0gcnhycGNfd2FpdF90b19iZV9jb25uZWN0ZWQoY2FsbCwgXFx1MDAyNnRpbWVvKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFxuIFxcdGlmIChjYWxsLVxcdTAwM2Vjb25uLVxcdTAwM2VzdGF0ZSA9PSBSWFJQQ19DT05OX0NMSUVOVF9VTlNFQ1VSRUQpIHtcXG4gXFx0XFx0cmV0ID0gcnhycGNfaW5pdF9jbGllbnRfY29ubl9zZWN1cml0eShjYWxsLVxcdTAwM2Vjb25uKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXG4gXFx0LyogdGhpcyBzaG91bGQgYmUgaW4gcG9sbCAqL1xcbkBAIC00NDAsMTIgKzQ0OSwyMSBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuIFxcdFxcdC8qIGFkZCB0aGUgcGFja2V0IHRvIHRoZSBzZW5kIHF1ZXVlIGlmIGl0J3Mgbm93IGZ1bGwgKi9cXG4gXFx0XFx0aWYgKCF0eGItXFx1MDAzZXNwYWNlIHx8XFxuIFxcdFxcdCAgICAobXNnX2RhdGFfbGVmdChtc2cpID09IDAgXFx1MDAyNlxcdTAwMjYgIW1vcmUpKSB7XFxuK1xcdFxcdFxcdC8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZFxcbitcXHRcXHRcXHQgKiBoYXZlIGNvcnJ1cHRlZCB0aGUgdHhidWYgY29udGVudCB3aXRoIGEgcGFydGlhbFxcbitcXHRcXHRcXHQgKiBlbmNyeXB0LiAgQXNzdW1lIHRoYXQgRU5PTUVNIGlzIHJldHJ5YWJsZSwgYnV0XFxuK1xcdFxcdFxcdCAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHJldCA9IGNhbGwtXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VzZWN1cmVfcGFja2V0KGNhbGwsIHR4Yik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChyZXQgPT0gLUVOT01FTSlcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBtYXliZV9lcnJvcl9yZXdpbmQ7XFxuK1xcdFxcdFxcdFxcdHNldF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgXFx1MDAyNmNhbGwtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfdHhiO1xcbitcXHRcXHRcXHR9XFxuK1xcbiBcXHRcXHRcXHRpZiAobXNnX2RhdGFfbGVmdChtc2cpID09IDAgXFx1MDAyNlxcdTAwMjYgIW1vcmUpXFxuIFxcdFxcdFxcdFxcdHR4Yi1cXHUwMDNlZmxhZ3MgfD0gUlhSUENfTEFTVF9QQUNLRVQ7XFxuLVxcbi1cXHRcXHRcXHRyZXQgPSBjYWxsLVxcdTAwM2VzZWN1cml0eS1cXHUwMDNlc2VjdXJlX3BhY2tldChjYWxsLCB0eGIpO1xcbi1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdFxcdHJ4cnBjX3F1ZXVlX3BhY2tldChyeCwgY2FsbCwgdHhiLCBub3RpZnlfZW5kX3R4KTtcXG4gXFx0XFx0XFx0dHhiID0gTlVMTDtcXG4gXFx0XFx0fVxcbkBAIC00NTMsNDggKzQ3MSw3MiBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuIFxcbiBzdWNjZXNzOlxcbiBcXHRyZXQgPSBjb3BpZWQ7XFxuLVxcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBjYWxsLVxcdTAwM2VlcnJvciBcXHUwMDNjIDApXFxuLVxcdFxcdHJldCA9IGNhbGwtXFx1MDAzZWVycm9yO1xcbi1vdXQ6XFxuK291dF90eGI6XFxuIFxcdGNhbGwtXFx1MDAzZXR4X3BlbmRpbmcgPSB0eGI7XFxuK291dF91bmxvY2s6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2Y2FsbC1cXHUwMDNldXNlcl9tdXRleCk7XFxuIFxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiBcXG4gY2FsbF90ZXJtaW5hdGVkOlxcbiBcXHRyeHJwY19wdXRfdHhidWYodHhiLCByeHJwY190eGJ1Zl9wdXRfc2VuZF9hYm9ydGVkKTtcXG4tXFx0X2xlYXZlKFxcXCIgPSAlZFxcXCIsIGNhbGwtXFx1MDAzZWVycm9yKTtcXG4tXFx0cmV0dXJuIGNhbGwtXFx1MDAzZWVycm9yO1xcbi1cXG4rXFx0Y2FsbC1cXHUwMDNldHhfcGVuZGluZyA9IE5VTEw7XFxuK1xcdHJldCA9IGNhbGwtXFx1MDAzZWVycm9yO1xcbitcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcbittYXliZV9lcnJvcl9yZXdpbmQ6XFxuK1xcdC8qIElmIHdlIGdvdCBhIHJldHJ5YWJsZSBlcnJvciBhZnRlciBjb3B5aW5nIGFsbCB0aGUgc3VwcGxpZWQgZGF0YSBpbnRvXFxuK1xcdCAqIHRoZSBsYXN0IHBhY2tldCwgd2UgbmVlZCB0byByZXdpbmQgdGhlIGJ1ZmZlciBieSBvbmUgYnl0ZSBzbyB0aGVcXG4rXFx0ICogY2FsbGVyIGtub3dzIHRoZXkgbmVlZCB0byByZXRyeS5cXG4rXFx0ICovXFxuK1xcdGlmIChjb3BpZWQgXFx1MDAyNlxcdTAwMjYgIW1vcmUgXFx1MDAyNlxcdTAwMjYgIW1zZ19kYXRhX2xlZnQobXNnKSkge1xcbitcXHRcXHR0eGItXFx1MDAzZXNwYWNlICArPSAxO1xcbitcXHRcXHR0eGItXFx1MDAzZWxlbiAgICAtPSAxO1xcbitcXHRcXHR0eGItXFx1MDAzZW9mZnNldCAtPSAxO1xcbitcXHRcXHRjb3BpZWQgICAgICAtPSAxO1xcbitcXHRcXHRpZiAoY2FsbC1cXHUwMDNldHhfdG90YWxfbGVuICE9IC0xKVxcbitcXHRcXHRcXHRjYWxsLVxcdTAwM2V0eF90b3RhbF9sZW4gKz0gMTtcXG4rXFx0XFx0aW92X2l0ZXJfcmV2ZXJ0KFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCAxKTtcXG4rXFx0fVxcbiBtYXliZV9lcnJvcjpcXG4tXFx0aWYgKGNvcGllZClcXG4rXFx0aWYgKGNvcGllZCkge1xcbitcXHRcXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgY2FsbC1cXHUwMDNlZXJyb3IgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdHJldCA9IGNhbGwtXFx1MDAzZWVycm9yO1xcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdH1cXG4gXFx0XFx0Z290byBzdWNjZXNzO1xcbi1cXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRnb3RvIG91dF90eGI7XFxuIFxcbiBlZmF1bHQ6XFxuIFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdGdvdG8gb3V0O1xcbitcXHRnb3RvIG91dF90eGI7XFxuIFxcbiB3YWl0X2Zvcl9zcGFjZTpcXG4gXFx0cmV0ID0gLUVBR0FJTjtcXG4gXFx0aWYgKG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKVxcbiBcXHRcXHRnb3RvIG1heWJlX2Vycm9yO1xcbitcXHRjYWxsLVxcdTAwM2V0eF9wZW5kaW5nID0gdHhiO1xcbitcXHR0eGIgPSBOVUxMO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmNhbGwtXFx1MDAzZXVzZXJfbXV0ZXgpO1xcbi1cXHQqX2Ryb3BwZWRfbG9jayA9IHRydWU7XFxuK1xcbiBcXHRyZXQgPSByeHJwY193YWl0X2Zvcl90eF93aW5kb3cocngsIGNhbGwsIFxcdTAwMjZ0aW1lbyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX1dBSVRBTEwpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBtYXliZV9lcnJvcjtcXG4rXFx0XFx0Z290byBvdXRfbm9sb2NrO1xcbiBcXHRpZiAoY2FsbC1cXHUwMDNlaW50ZXJydXB0aWJpbGl0eSA9PSBSWFJQQ19JTlRFUlJVUFRJQkxFKSB7XFxuIFxcdFxcdGlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoXFx1MDAyNmNhbGwtXFx1MDAzZXVzZXJfbXV0ZXgpIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xcbi1cXHRcXHRcXHRnb3RvIG1heWJlX2Vycm9yO1xcbitcXHRcXHRcXHRnb3RvIG91dF9ub2xvY2s7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y2FsbC1cXHUwMDNldXNlcl9tdXRleCk7XFxuIFxcdH1cXG4tXFx0Kl9kcm9wcGVkX2xvY2sgPSBmYWxzZTtcXG4gXFx0Z290byByZWxvYWQ7XFxuK291dF9ub2xvY2s6XFxuK1xcdF9sZWF2ZShcXFwiID0gJWQgW2ludHJdXFxcIiwgcmV0KTtcXG4rXFx0cmV0dXJuIGNvcGllZCA/OiByZXQ7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTUwMyw2ICs1NDUsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zICpwKVxcbiB7XFxuIFxcdHN0cnVjdCBjbXNnaGRyICpjbXNnO1xcbitcXHRrZXlfc2VyaWFsX3Qga2V5X2lkO1xcbitcXHRrZXlfcmVmX3Qga2V5O1xcbiBcXHRib29sIGdvdF91c2VyX0lEID0gZmFsc2U7XFxuIFxcdGludCBsZW47XFxuIFxcbkBAIC01ODcsNiArNjMxLDIzIEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zICpwKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbitcXHRcXHRjYXNlIFJYUlBDX1JFU1BPTlNFX0FQUERBVEE6XFxuK1xcdFxcdFxcdGlmIChsZW4gIT0gc2l6ZW9mKGtleV9zZXJpYWxfdCkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRpZiAocC1cXHUwMDNlY2FsbC5hcHBfZGF0YSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdGtleV9pZCA9ICooa2V5X3NlcmlhbF90ICopQ01TR19EQVRBKGNtc2cpO1xcbitcXHRcXHRcXHRrZXkgPSBsb29rdXBfdXNlcl9rZXkoa2V5X2lkLCAwLCBLRVlfTkVFRF9TRUFSQ0gpO1xcbitcXHRcXHRcXHRpZiAoSVNfRVJSKGtleSkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGtleSk7XFxuK1xcdFxcdFxcdGlmIChrZXlfcmVmX3RvX3B0cihrZXkpLVxcdTAwM2V0eXBlICE9IFxcdTAwMjZrZXlfdHlwZV91c2VyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBrZXlfcmVmX3RvX3B0cihrZXkpLVxcdTAwM2V0eXBlICE9IFxcdTAwMjZrZXlfdHlwZV9sb2dvbikge1xcbitcXHRcXHRcXHRcXHRrZXlfcmVmX3B1dChrZXkpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRwLVxcdTAwM2VjYWxsLmFwcF9kYXRhID0ga2V5X3JlZl90b19wdHIoa2V5KTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRkZWZhdWx0OlxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbkBAIC02OTUsOCArNzU2LDEwIEBAIGludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbiBcXHRcXHRcXHRnb3RvIGVycm9yX3JlbGVhc2Vfc29jaztcXG4gXFx0XFx0Y2FsbCA9IHJ4cnBjX25ld19jbGllbnRfY2FsbF9mb3Jfc2VuZG1zZyhyeCwgbXNnLCBcXHUwMDI2cCk7XFxuIFxcdFxcdC8qIFRoZSBzb2NrZXQgaXMgbm93IHVubG9ja2VkLi4uICovXFxuLVxcdFxcdGlmIChJU19FUlIoY2FsbCkpXFxuK1xcdFxcdGlmIChJU19FUlIoY2FsbCkpIHtcXG4rXFx0XFx0XFx0a2V5X3B1dChwLmNhbGwuYXBwX2RhdGEpO1xcbiBcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihjYWxsKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHQvKiAuLi4gYW5kIHdlIGhhdmUgdGhlIGNhbGwgbG9jay4gKi9cXG4gXFx0XFx0cC5jYWxsLm5yX3RpbWVvdXRzID0gMDtcXG4gXFx0XFx0cmV0ID0gMDtcXG5AQCAtNzY5LDggKzgzMiw4IEBAIGludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbiBcXHRcXHRyZXQgPSAwO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBSWFJQQ19DTURfU0VORF9EQVRBOlxcbi1cXHRcXHRyZXQgPSByeHJwY19zZW5kX2RhdGEocngsIGNhbGwsIG1zZywgbGVuLCBOVUxMLCBcXHUwMDI2ZHJvcHBlZF9sb2NrKTtcXG4tXFx0XFx0YnJlYWs7XFxuK1xcdFxcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeCwgY2FsbCwgbXNnLCBsZW4sIE5VTEwpO1xcbitcXHRcXHRnb3RvIGVycm9yX3B1dDtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTc4MSwxMSArODQ0LDEzIEBAIGludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNhbGwtXFx1MDAzZXVzZXJfbXV0ZXgpO1xcbiBlcnJvcl9wdXQ6XFxuIFxcdHJ4cnBjX3B1dF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfcHV0X3NlbmRtc2cpO1xcbitcXHRrZXlfcHV0KHAuY2FsbC5hcHBfZGF0YSk7XFxuIFxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiBcXG4gZXJyb3JfcmVsZWFzZV9zb2NrOlxcbiBcXHRyZWxlYXNlX3NvY2soXFx1MDAyNnJ4LVxcdTAwM2Vzayk7XFxuK1xcdGtleV9wdXQocC5jYWxsLmFwcF9kYXRhKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtODA4LDcgKzg3Myw2IEBAIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdFxcdCAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KVxcbiB7XFxuLVxcdGJvb2wgZHJvcHBlZF9sb2NrID0gZmFsc2U7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRfZW50ZXIoXFxcInslZH0sXFxcIiwgY2FsbC1cXHUwMDNlZGVidWdfaWQpO1xcbkBAIC04MTksMTIgKzg4MywxMCBAQCBpbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2Y2FsbC1cXHUwMDNldXNlcl9tdXRleCk7XFxuIFxcbiBcXHRyZXQgPSByeHJwY19zZW5kX2RhdGEocnhycGNfc2soc29jay1cXHUwMDNlc2spLCBjYWxsLCBtc2csIGxlbixcXG4tXFx0XFx0XFx0ICAgICAgbm90aWZ5X2VuZF90eCwgXFx1MDAyNmRyb3BwZWRfbG9jayk7XFxuK1xcdFxcdFxcdCAgICAgIG5vdGlmeV9lbmRfdHgpO1xcbiBcXHRpZiAocmV0ID09IC1FU0hVVERPV04pXFxuIFxcdFxcdHJldCA9IGNhbGwtXFx1MDAzZWVycm9yO1xcbiBcXG4tXFx0aWYgKCFkcm9wcGVkX2xvY2spXFxuLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y2FsbC1cXHUwMDNldXNlcl9tdXRleCk7XFxuIFxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmMgYi9uZXQvcnhycGMvc2VydmVyX2tleS5jXFxuaW5kZXggM2VmZTEwNGIxOTMwY2IuLmZjNmY0NzhlMTc2MmE3IDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmNcXG4rKysgYi9uZXQvcnhycGMvc2VydmVyX2tleS5jXFxuQEAgLTE3Myw0MyArMTczLDMgQEAgaW50IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qga2V5ICprZXlyaW5nKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wocnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyk7XFxuLVxcbi0vKipcXG4tICogcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlIC0gU2V0IHRoZSBtYW5hZ2UtcmVzcG9uc2UgZmxhZyBmb3IgYSBrZXJuZWwgc2VydmljZVxcbi0gKiBAc2s6IFRoZSBzb2NrZXQgdG8gc2V0IHRoZSBrZXlyaW5nIG9uXFxuLSAqIEBzZXQ6IFRydWUgdG8gc2V0LCBmYWxzZSB0byBjbGVhciB0aGUgZmxhZ1xcbi0gKlxcbi0gKiBTZXQgdGhlIGZsYWcgb24gYW4gcnhycGMgc29ja2V0IHRvIHNheSB0aGF0IHRoZSBjYWxsZXIgd2FudHMgdG8gbWFuYWdlIHRoZVxcbi0gKiBSRVNQT05TRSBwYWNrZXQgYW5kIHRoZSB1c2VyLWRlZmluZWQgZGF0YSBpdCBtYXkgY29udGFpbi4gIFNldHRpbmcgdGhpc1xcbi0gKiBtZWFucyB0aGF0IHJlY3Ztc2coKSB3aWxsIHJldHVybiBtZXNzYWdlcyB3aXRoIFJYUlBDX0NIQUxMRU5HRUQgaW4gdGhlXFxuLSAqIGNvbnRyb2wgbWVzc2FnZSBidWZmZXIgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhbGxlbmdlLlxcbi0gKlxcbi0gKiBUaGUgdXNlciBzaG91bGQgcmVzcG9uZCB0byB0aGUgY2hhbGxlbmdlIGJ5IHBhc3NpbmcgUlhSUENfUkVTUE9ORCBvclxcbi0gKiBSWFJQQ19SRVNQT05EX0FCT1JUIGNvbnRyb2wgbWVzc2FnZXMgd2l0aCBzZW5kbXNnKCkgdG8gdGhlIHNhbWUgY2FsbC5cXG4tICogU3VwcGxlbWVudGFyeSBjb250cm9sIG1lc3NhZ2VzLCBzdWNoIGFzIFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBLCBtYXkgYmVcXG4tICogaW5jbHVkZWQgdG8gaW5kaWNhdGUgdGhlIHBhcnRzIHRoZSB1c2VyIHdhbnRzIHRvIHN1cHBseS5cXG4tICpcXG4tICogVGhlIHNlcnZlciB3aWxsIGJlIHBhc3NlZCB0aGUgcmVzcG9uc2UgZGF0YSB3aXRoIGEgUlhSUENfUkVTUE9OREVEIGNvbnRyb2xcXG4tICogbWVzc2FnZSB3aGVuIGl0IGdldHMgdGhlIGZpcnN0IGRhdGEgZnJvbSBlYWNoIGNhbGwuXFxuLSAqXFxuLSAqIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgaG9ub3VyZWQgYnkgc2VjdXJpdHkgY2xhc3NlcyB0aGF0IG5lZWQgYXV4aWxpYXJ5IGRhdGFcXG4tICogKGUuZy4gUnhHSykuICBUaG9zZSB0aGF0IGRvbid0IG9mZmVyIHRoZSBmYWNpbGl0eSAoZS5nLiBSeEtBRCkgcmVzcG9uZFxcbi0gKiB3aXRob3V0IGNvbnN1bHRpbmcgdXNlcnNwYWNlLlxcbi0gKlxcbi0gKiBSZXR1cm46IFRoZSBwcmV2aW91cyBzZXR0aW5nLlxcbi0gKi9cXG4taW50IHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc2V0KVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNrKTtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdGxvY2tfc29jayhzayk7XFxuLVxcdHJldCA9ICEhdGVzdF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFxcdTAwMjZyeC1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRpZiAoc2V0KVxcbi1cXHRcXHRzZXRfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcXHUwMDI2cngtXFx1MDAzZWZsYWdzKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRjbGVhcl9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFxcdTAwMjZyeC1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRyZWxlYXNlX3NvY2soc2spO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKTtcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcXG5pbmRleCA2Zjg4YjUwN2Y5Mjc5MS4uOTBjMWJkNWQ3ZGZlY2YgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuY1xcbisrKyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcXG5AQCAtNjcsNiArNjcsNyBAQCBpbnQgdXNlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxcbiBcXHR1cGF5bG9hZCA9IGttYWxsb2NfZmxleCgqdXBheWxvYWQsIGRhdGEsIGRhdGFsZW4pO1xcbiBcXHRpZiAoIXVwYXlsb2FkKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZ1cGF5bG9hZC1cXHUwMDNlcmVmLCAxKTtcXG4gXFxuIFxcdC8qIGF0dGFjaCB0aGUgZGF0YSAqL1xcbiBcXHRwcmVwLVxcdTAwM2VxdW90YWxlbiA9IGRhdGFsZW47XFxuQEAgLTg4LDEyICs4OSwyMiBAQCBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2ZyZWVfcHJlcGFyc2UpO1xcbiBcXG4gc3RhdGljIHZvaWQgdXNlcl9mcmVlX3BheWxvYWRfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4ge1xcbi1cXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZDtcXG4rXFx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQgPVxcbitcXHRcXHRjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQsIHJjdSk7XFxuIFxcbi1cXHRwYXlsb2FkID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkLCByY3UpO1xcbiBcXHRrZnJlZV9zZW5zaXRpdmUocGF5bG9hZCk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIEZyZWUgYSB1c2VyIGRlZmluZWQga2V5IHBheWxvYWQuXFxuKyAqL1xcbit2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKVxcbit7XFxuK1xcdGlmIChwYXlsb2FkIFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2cGF5bG9hZC1cXHUwMDNlcmVmKSlcXG4rXFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnBheWxvYWQtXFx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwdXRfdXNlcl9rZXlfcGF5bG9hZCk7XFxuK1xcbiAvKlxcbiAgKiB1cGRhdGUgYSB1c2VyIGRlZmluZWQga2V5XFxuICAqIC0gdGhlIGtleSdzIHNlbWFwaG9yZSBpcyB3cml0ZS1sb2NrZWRcXG5AQCAtMTE1LDggKzEyNiw3IEBAIGludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuIFxcdHJjdV9hc3NpZ25fa2V5cG9pbnRlcihrZXksIHByZXAtXFx1MDAzZXBheWxvYWQuZGF0YVswXSk7XFxuIFxcdHByZXAtXFx1MDAzZXBheWxvYWQuZGF0YVswXSA9IE5VTEw7XFxuIFxcbi1cXHRpZiAoemFwKVxcbi1cXHRcXHRjYWxsX3JjdShcXHUwMDI2emFwLVxcdTAwM2VyY3UsIHVzZXJfZnJlZV9wYXlsb2FkX3JjdSk7XFxuK1xcdHB1dF91c2VyX2tleV9wYXlsb2FkKHphcCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodXNlcl91cGRhdGUpO1xcbkBAIC0xMzQsNyArMTQ0LDcgQEAgdm9pZCB1c2VyX3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpXFxuIFxcbiBcXHRpZiAodXBheWxvYWQpIHtcXG4gXFx0XFx0cmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgTlVMTCk7XFxuLVxcdFxcdGNhbGxfcmN1KFxcdTAwMjZ1cGF5bG9hZC1cXHUwMDNlcmN1LCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3UpO1xcbitcXHRcXHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh1cGF5bG9hZCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMTQ3LDkgKzE1Nyw4IEBAIHZvaWQgdXNlcl9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQgPSBrZXktXFx1MDAzZXBheWxvYWQuZGF0YVswXTtcXG4gXFxuLVxcdGtmcmVlX3NlbnNpdGl2ZSh1cGF5bG9hZCk7XFxuK1xcdHB1dF91c2VyX2tleV9wYXlsb2FkKHVwYXlsb2FkKTtcXG4gfVxcbi1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodXNlcl9kZXN0cm95KTtcXG4gXFxuIC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjEwOjU2LjM5Mzg2MTY3OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzODM0NDczOTE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJSWEtBRFwiLFxuICAgIFwiUlhHS1wiLFxuICAgIFwiS0VZU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsXCIsXG4gICAgXCJyeHJwY19kb19zZW5kbXNnXCIsXG4gICAgXCJyeHJwY19yZWN2bXNnXCIsXG4gICAgXCJhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhXCIsXG4gICAgXCJhZnNfZnNfcHJvYmVfZmlsZXNlcnZlclwiLFxuICAgIFwidXNlcl9wcmVwYXJzZVwiLFxuICAgIFwidXNlcl91cGRhdGVcIixcbiAgICBcInB1dF91c2VyX2tleV9wYXlsb2FkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIG91dC1vZi1iYW5kIChPT0IpIG1lc3NhZ2UgaGFuZGxpbmcgaW4gUnhSUEMgd2l0aCBhIGtleS1iYXNlZCBhcHByb2FjaCBmb3IgY2hhbGxlbmdlLXJlc3BvbnNlLCBzcGVjaWZpY2FsbHkgZm9yIFJ4R0suIEl0IG1vZGlmaWVzIGNvcmUgUnhSUEMgc2VuZC9yZWN2IHBhdGhzLCBBRlMgc2VydmVyIHByb2JpbmcsIGFuZCBhZGRzIHJlZmNvdW50aW5nIHRvIHVzZXItZGVmaW5lZCBrZXlzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBuZXR3b3JrIGFuZCBmaWxlc3lzdGVtIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OGE2MmIwZDEyN2UzMjFiOTM3ZDcyOTM0N2E5YjlkOTRmMjQ2N2ViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMjYgMDE6MTA6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9hZnMvY21fc2VjdXJpdHkuYyBiL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXG5pbmRleCAxMDMxNjhjNzBkZDRkZi4uYjA5OGY0OGIxMGU1MWQgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvY21fc2VjdXJpdHkuY1xuKysrIGIvZnMvYWZzL2NtX3NlY3VyaXR5LmNcbkBAIC02LDcgKzYsOSBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tleS10eXBlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NjcnlwdG8va3JiNS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNja2V5cy91c2VyLXR5cGUuaFx1MDAzZVxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJhZnNfY20uaFwiXG4gI2luY2x1ZGUgXCJhZnNfZnMuaFwiXG5AQCAtMTksMTk1ICsyMSwzOSBAQFxuICNkZWZpbmUgeGRyX2xlbl9vYmplY3QoeCkgKDQgKyByb3VuZF91cCgoeCksIHNpemVvZihfX2JlMzIpKSlcbiBcbiAjaWZkZWYgQ09ORklHX1JYR0tcbi1zdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyKTtcbi0jZW5kaWZcbi1cbiAvKlxuLSAqIFJlc3BvbmQgdG8gYW4gUnhHSyBjaGFsbGVuZ2UsIGFkZGluZyBhcHBkYXRhLlxuKyAqIEFzIHRoZSBZRlMgUnhHSyBhcHBkYXRhIHRvIGJlIHBhc3NlZCBpbiB0aGUgWUZTLkZTLXNlcnZpY2UgUkVTUE9OU0UgcGFja2V0LFxuKyAqIGNyZWF0ZSBhIEdTUyB0b2tlbiB0byB1c2UgYXMgYSB0aWNrZXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlc2VydmVyLlxuICAqL1xuLXN0YXRpYyBpbnQgYWZzX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4te1xuLSNpZmRlZiBDT05GSUdfUlhHS1xuLVx0c3RydWN0IGtyYjVfYnVmZmVyIGFwcGRhdGEgPSB7fTtcbi1cdHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXI7XG4tI2VuZGlmXG4tXHRzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcjtcbi1cdHVuc2lnbmVkIGxvbmcgcGVlcl9kYXRhO1xuLVx0dTE2IHNlcnZpY2VfaWQ7XG4tXHR1OCBzZWN1cml0eV9pbmRleDtcbi1cbi1cdHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UoY2hhbGxlbmdlLCBcdTAwMjZwZWVyLCBcdTAwMjZwZWVyX2RhdGEsXG4tXHRcdFx0XHQgICAgIFx1MDAyNnNlcnZpY2VfaWQsIFx1MDAyNnNlY3VyaXR5X2luZGV4KTtcbi1cbi1cdF9lbnRlcihcIiV1LCV1XCIsIHNlcnZpY2VfaWQsIHNlY3VyaXR5X2luZGV4KTtcbi1cbi1cdHN3aXRjaCAoc2VydmljZV9pZCkge1xuLVx0XHQvKiBXZSBkb24ndCBzZW5kIENNX1NFUlZJQ0UgUlBDcywgc28gZG9uJ3QgZXhwZWN0IGEgY2hhbGxlbmdlXG4tXHRcdCAqIHRoZXJlZnJvbS5cbi1cdFx0ICovXG4tXHRjYXNlIEZTX1NFUlZJQ0U6XG4tXHRjYXNlIFZMX1NFUlZJQ0U6XG4tXHRjYXNlIFlGU19GU19TRVJWSUNFOlxuLVx0Y2FzZSBZRlNfVkxfU0VSVklDRTpcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRwcl93YXJuKFwiQ2FuJ3QgcmVzcG9uZCB0byB1bmtub3duIGNoYWxsZW5nZSAldToldVwiLFxuLVx0XHRcdHNlcnZpY2VfaWQsIHNlY3VyaXR5X2luZGV4KTtcbi1cdFx0cmV0dXJuIHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKGNoYWxsZW5nZSwgUlhfVVNFUl9BQk9SVCwgLUVQUk9UTyxcbi1cdFx0XHRcdFx0XHQgICAgIGFmc19hYm9ydF91bnN1cHBvcnRlZF9zZWNfY2xhc3MpO1xuLVx0fVxuLVxuLVx0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xuLSNpZmRlZiBDT05GSUdfUlhLQURcbi1cdGNhc2UgUlhSUENfU0VDVVJJVFlfUlhLQUQ6XG4tXHRcdHJldHVybiByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlKTtcbi0jZW5kaWZcbi1cbi0jaWZkZWYgQ09ORklHX1JYR0tcbi1cdGNhc2UgUlhSUENfU0VDVVJJVFlfUlhHSzpcbi1cdFx0cmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgXHUwMDI2YXBwZGF0YSk7XG4tXG4tXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxuLVx0XHRzd2l0Y2ggKHNlcnZpY2VfaWQpIHtcbi1cdFx0Y2FzZSBGU19TRVJWSUNFOlxuLVx0XHRjYXNlIFlGU19GU19TRVJWSUNFOlxuLVx0XHRcdHNlcnZlciA9IChzdHJ1Y3QgYWZzX3NlcnZlciAqKXBlZXJfZGF0YTtcbi1cdFx0XHRpZiAoIXNlcnZlci1cdTAwM2VjbV9yeGdrX2FwcGRhdGEuZGF0YSkge1xuLVx0XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZzZXJ2ZXItXHUwMDNlY21fdG9rZW5fbG9jayk7XG4tXHRcdFx0XHRpZiAoIXNlcnZlci1cdTAwM2VjbV9yeGdrX2FwcGRhdGEuZGF0YSlcbi1cdFx0XHRcdFx0YWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oY2hhbGxlbmdlLCBzZXJ2ZXIpO1xuLVx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNlcnZlci1cdTAwM2VjbV90b2tlbl9sb2NrKTtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKHNlcnZlci1cdTAwM2VjbV9yeGdrX2FwcGRhdGEuZGF0YSlcbi1cdFx0XHRcdGFwcGRhdGEgPSBzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdHJldHVybiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UsIFx1MDAyNmFwcGRhdGEpO1xuLSNlbmRpZlxuLVxuLVx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuIHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKGNoYWxsZW5nZSwgUlhfVVNFUl9BQk9SVCwgLUVQUk9UTyxcbi1cdFx0XHRcdFx0XHQgICAgIGFmc19hYm9ydF91bnN1cHBvcnRlZF9zZWNfY2xhc3MpO1xuLVx0fVxuLX1cbi1cbi0vKlxuLSAqIFByb2Nlc3MgdGhlIE9PQiBtZXNzYWdlIHF1ZXVlLCBwcm9jZXNzaW5nIGNoYWxsZW5nZSBwYWNrZXRzLlxuLSAqL1xuLXZvaWQgYWZzX3Byb2Nlc3Nfb29iX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi17XG4tXHRzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZnNfbmV0LCByeF9vb2Jfd29yayk7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqb29iO1xuLVx0ZW51bSByeHJwY19vb2JfdHlwZSB0eXBlO1xuLVxuLVx0d2hpbGUgKFJFQURfT05DRShuZXQtXHUwMDNlbGl2ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgKG9vYiA9IHJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYihuZXQtXHUwMDNlc29ja2V0LCBcdTAwMjZ0eXBlKSkpIHtcbi1cdFx0c3dpdGNoICh0eXBlKSB7XG4tXHRcdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcbi1cdFx0XHRhZnNfcmVzcG9uZF90b19jaGFsbGVuZ2Uob29iKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRyeHJwY19rZXJuZWxfZnJlZV9vb2Iob29iKTtcbi1cdH1cbi19XG4tXG4tI2lmZGVmIENPTkZJR19SWEdLXG4tLypcbi0gKiBDcmVhdGUgYSBzZWN1cml0aWVzIGtleXJpbmcgZm9yIHRoZSBjYWNoZSBtYW5hZ2VyIGFuZCBhdHRhY2ggYSBrZXkgdG8gaXQgZm9yXG4tICogdGhlIFJ4R0sgdG9rZW5zIHdlIHdhbnQgdG8gdXNlIHRvIHNlY3VyZSB0aGUgY2FsbGJhY2sgY29ubmVjdGlvbiBiYWNrIGZyb21cbi0gKiB0aGUgZmlsZXNlcnZlci5cbi0gKi9cbi1pbnQgYWZzX2NyZWF0ZV90b2tlbl9rZXkoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29ja2V0KVxuLXtcbi1cdGNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmtyYjU7XG4tXHRzdHJ1Y3Qga2V5ICpyaW5nO1xuLVx0a2V5X3JlZl90IGtleTtcbi1cdGNoYXIgSzBbMzJdLCAqZGVzYztcbi1cdGludCByZXQ7XG4tXG4tXHRyaW5nID0ga2V5cmluZ19hbGxvYyhcImthZnNcIixcbi1cdFx0XHQgICAgIEdMT0JBTF9ST09UX1VJRCwgR0xPQkFMX1JPT1RfR0lELCBjdXJyZW50X2NyZWQoKSxcbi1cdFx0XHQgICAgIEtFWV9QT1NfU0VBUkNIIHwgS0VZX1BPU19XUklURSB8XG4tXHRcdFx0ICAgICBLRVlfVVNSX1ZJRVcgfCBLRVlfVVNSX1JFQUQgfCBLRVlfVVNSX1NFQVJDSCxcbi1cdFx0XHQgICAgIEtFWV9BTExPQ19OT1RfSU5fUVVPVEEsXG4tXHRcdFx0ICAgICBOVUxMLCBOVUxMKTtcbi1cdGlmIChJU19FUlIocmluZykpXG4tXHRcdHJldHVybiBQVFJfRVJSKHJpbmcpO1xuLVxuLVx0cmV0ID0gcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzb2NrZXQtXHUwMDNlc2ssIHJpbmcpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRyZXQgPSAtRU5PUEtHO1xuLVx0a3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZShLUkI1X0VOQ1RZUEVfQUVTMTI4X0NUU19ITUFDX1NIQTFfOTYpO1xuLVx0aWYgKCFrcmI1KVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdGlmIChXQVJOX09OX09OQ0Uoa3JiNS1cdTAwM2VrZXlfbGVuIFx1MDAzZSBzaXplb2YoSzApKSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRyZXQgPSAtRU5PTUVNO1xuLVx0ZGVzYyA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCBcIiV1OiV1OiV1OiV1XCIsXG4tXHRcdFx0IFlGU19DTV9TRVJWSUNFLCBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSywgMSwga3JiNS1cdTAwM2VldHlwZSk7XG4tXHRpZiAoIWRlc2MpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0d2FpdF9mb3JfcmFuZG9tX2J5dGVzKCk7XG4tXHRnZXRfcmFuZG9tX2J5dGVzKEswLCBrcmI1LVx1MDAzZWtleV9sZW4pO1xuLVxuLVx0a2V5ID0ga2V5X2NyZWF0ZShtYWtlX2tleV9yZWYocmluZywgdHJ1ZSksXG4tXHRcdFx0IFwicnhycGNfc1wiLCBkZXNjLFxuLVx0XHRcdCBLMCwga3JiNS1cdTAwM2VrZXlfbGVuLFxuLVx0XHRcdCBLRVlfUE9TX1ZJRVcgfCBLRVlfUE9TX1JFQUQgfCBLRVlfUE9TX1NFQVJDSCB8IEtFWV9VU1JfVklFVyxcbi1cdFx0XHQgS0VZX0FMTE9DX05PVF9JTl9RVU9UQSk7XG4tXHRrZnJlZShkZXNjKTtcbi1cdGlmIChJU19FUlIoa2V5KSkge1xuLVx0XHRyZXQgPSBQVFJfRVJSKGtleSk7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0bmV0LVx1MDAzZWZzX2NtX3Rva2VuX2tleSA9IGtleV9yZWZfdG9fcHRyKGtleSk7XG4tXHRyZXQgPSAwO1xuLW91dDpcbi1cdGtleV9wdXQocmluZyk7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi0vKlxuLSAqIENyZWF0ZSBhbiBZRlMgUnhHSyBHU1MgdG9rZW4gdG8gdXNlIGFzIGEgdGlja2V0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZXNlcnZlci5cbi0gKi9cbi1zdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyKVxuK3N0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfcnhna19jbV9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHUzMiBlbmN0eXBlKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmNvbm5fa3JiNSwgKnRva2VuX2tyYjU7XG4gXHRjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKnRva2VuX2tleTtcbiBcdHN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZDtcbiBcdHN0cnVjdCBzY2F0dGVybGlzdCBzZztcbiBcdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBzZXJ2ZXItXHUwMDNlY2VsbC1cdTAwM2VuZXQ7XG4tXHRjb25zdCBzdHJ1Y3Qga2V5ICprZXkgPSBuZXQtXHUwMDNlZnNfY21fdG9rZW5fa2V5O1xuLVx0c2l6ZV90IGtleXNpemUsIHV1aWRzaXplLCBhdXRoc2l6ZSwgdG9rc2l6ZSwgZW5jc2l6ZSwgY29udHNpemUsIGFkYXRhc2l6ZSwgb2Zmc2V0O1xuK1x0Y29uc3Qgc3RydWN0IGtleSAqY21fa2V5ID0gbmV0LVx1MDAzZWZzX2NtX3Rva2VuX2tleTtcbitcdHN0cnVjdCBrZXkgKmFwcGRhdGFfa2V5ID0gTlVMTDtcbitcdHNpemVfdCBrZXlzaXplLCB1dWlkc2l6ZSwgYXV0aHNpemUsIHRva3NpemUsIGVuY3NpemUsIGNvbnRzaXplO1xuK1x0c2l6ZV90IGFkYXRhc2l6ZSwgb2Zmc2V0O1xuIFx0X19iZTMyIGNhcHNbMV0gPSB7XG4gXHRcdFswXSA9IGh0b25sKEFGU19DQVBfRVJST1JfVFJBTlNMQVRJT04pLFxuIFx0fTtcbiBcdF9fYmUzMiAqeGRyO1xuIFx0dm9pZCAqYXBwZGF0YSwgKkswLCAqZW5jYmFzZTtcbi1cdHUzMiBlbmN0eXBlO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICgha2V5KVxuK1x0aWYgKCFjbV9rZXkpXG4gXHRcdHJldHVybiAtRU5PS0VZO1xuIFxuIFx0LyogQXNzdW1lIHRoYXQgdGhlIGZpbGVzZXJ2ZXIgaXMgaGFwcHkgdG8gdXNlIHRoZSBzYW1lIGVuY29kaW5nIHR5cGUgYXNcbiBcdCAqIHdlIHdlcmUgdG9sZCB0byB1c2UgYnkgdGhlIHRva2VuIG9idGFpbmVkIGJ5IHRoZSB1c2VyLlxuIFx0ICovXG4tXHRlbmN0eXBlID0gcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSk7XG4tXG4gXHRjb25uX2tyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZW5jdHlwZSk7XG4gXHRpZiAoIWNvbm5fa3JiNSlcbiBcdFx0cmV0dXJuIC1FTk9QS0c7XG4tXHR0b2tlbl9rcmI1ID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbi1cdHRva2VuX2tleSA9IChjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKilcdTAwMjZrZXktXHUwMDNlcGF5bG9hZC5kYXRhWzJdO1xuK1x0dG9rZW5fa3JiNSA9IGNtX2tleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF07XG4rXHR0b2tlbl9rZXkgPSAoY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICopXHUwMDI2Y21fa2V5LVx1MDAzZXBheWxvYWQuZGF0YVsyXTtcbiBcbiBcdC8qIHN0cnVjdCByeGdrX2tleSB7XG4gXHQgKlx0YWZzX3VpbnQzMlx0ZW5jdHlwZTtcbkBAIC0yMzUsNyArODEsNyBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4gXHQgKlx0c3RydWN0IFJYR0tfQXV0aE5hbWVcdGlkZW50aXRpZXNcdTAwM2NcdTAwM2U7XG4gXHQgKiB9O1xuIFx0ICovXG4tXHR0b2tzaXplID0ga2V5c2l6ZSArIDggKyA0ICsgNCArIDggKyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7XG4rXHR0b2tzaXplID0ga2V5c2l6ZSArIDQgKyA4ICsgNCArIDQgKyA4ICsgeGRyX2xlbl9vYmplY3QoYXV0aHNpemUpO1xuIFxuIFx0b2Zmc2V0ID0gMDtcbiBcdGVuY3NpemUgPSBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIodG9rZW5fa3JiNSwgS1JCNV9FTkNSWVBUX01PREUsIHRva3NpemUsIFx1MDAyNm9mZnNldCk7XG5AQCAtMzI3LDkgKzE3MywyMyBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF9hZWFkO1xuIFxuLVx0c2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5sZW4gID0gYWRhdGFzaXplO1xuLVx0c2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhID0gYXBwZGF0YTtcbi1cdGFwcGRhdGEgPSBOVUxMO1xuK1x0YXBwZGF0YV9rZXkgPSBrZXlfYWxsb2MoXHUwMDI2a2V5X3R5cGVfdXNlciwgXCJyeHJwYzogYWZzIHJ4Z2sgYXBwZGF0YVwiLFxuK1x0XHRcdFx0R0xPQkFMX1JPT1RfVUlELCBHTE9CQUxfUk9PVF9HSUQsIGN1cnJlbnRfY3JlZCgpLFxuK1x0XHRcdFx0S0VZX1BPU19WSUVXIHwgS0VZX1BPU19TRUFSQ0ggfCBLRVlfVVNSX1ZJRVcsXG4rXHRcdFx0XHRLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLCBOVUxMKTtcbitcdGlmIChJU19FUlIoYXBwZGF0YV9rZXkpKSB7XG4rXHRcdHJldCA9IFBUUl9FUlIoYXBwZGF0YV9rZXkpO1xuK1x0XHRnb3RvIG91dF9hZWFkO1xuK1x0fVxuK1xuK1x0cmV0ID0ga2V5X2luc3RhbnRpYXRlX2FuZF9saW5rKGFwcGRhdGFfa2V5LCBhcHBkYXRhLCBhZGF0YXNpemUsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRrZXlfcHV0KGFwcGRhdGFfa2V5KTtcbitcdFx0Z290byBvdXRfYWVhZDtcbitcdH1cbitcbitcdC8qIFN0b3JlIHRoZSBhcHBkYXRhIGJlZm9yZSB0aGUga2V5IHBvaW50ZXIgKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnNlcnZlci1cdTAwM2V5ZnNfcnhna19hcHBkYXRhLCBhcHBkYXRhX2tleSk7XG4gXG4gb3V0X2FlYWQ6XG4gXHRjcnlwdG9fZnJlZV9hZWFkKGFlYWQpO1xuQEAgLTMzOSwzICsxOTksMTE2IEBAIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbiBcdHJldHVybiByZXQ7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfUlhHSyAqL1xuK1xuKy8qXG4rICogQ3JlYXRlIHRoZSBhcHBsaWNhdGlvbiBkYXRhIHRvIGdvIGluIGEgUkVTUE9OU0UgcGFja2V0IGEgc2VydmVyJ3MgQ0hBTExFTkdFXG4rICogZnJvbSB0aGUgcGFyYW1ldGVycyBjb250YWluZWQgaW4gYSBrZXkuICBUaGUga2V5IHNwZWNpZmllcyB0aGUgc2VjdXJpdHlcbisgKiBpbmRleCBhbmQgb3RoZXIgYXBwcm9wcmlhdGUgcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBlbmNvZGluZyB0eXBlIGZvciBSeEdLLlxuKyAqL1xuK2ludCBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBrZXkgKmtleSlcbit7XG4rXHR1MzIga3JiNV9lbmN0eXBlO1xuK1x0aW50IHJldDtcbitcdHU4IHNlY3VyaXR5X2luZGV4O1xuK1xuK1x0aWYgKCFrZXkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cnhycGNfa2VybmVsX3F1ZXJ5X2tleShrZXksIFx1MDAyNnNlY3VyaXR5X2luZGV4LCBcdTAwMjZrcmI1X2VuY3R5cGUpO1xuK1xuK1x0X2VudGVyKFwiJXUsJXVcIiwgc2VjdXJpdHlfaW5kZXgsIGtyYjVfZW5jdHlwZSk7XG4rXG4rXHRzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7XG4rI2lmZGVmIENPTkZJR19SWEdLXG4rXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxuK1x0XHQvKiBSZWFkIHRoZSBrZXkgcG9pbnRlciBiZWZvcmUgdGhlIGFwcGRhdGEgKi9cbitcdFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2c2VydmVyLVx1MDAzZXlmc19yeGdrX2FwcGRhdGEpKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRicmVhaztcbisjZW5kaWZcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmV0ID0gMDtcbitcdG11dGV4X2xvY2soXHUwMDI2c2VydmVyLVx1MDAzZWNtX3Rva2VuX2xvY2spO1xuK1xuK1x0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xuKyNpZmRlZiBDT05GSUdfUlhHS1xuK1x0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbitcdFx0LyogUmVhZCB0aGUga2V5IHBvaW50ZXIgYmVmb3JlIHRoZSBhcHBkYXRhICovXG4rXHRcdGlmIChzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnNlcnZlci1cdTAwM2V5ZnNfcnhna19hcHBkYXRhKSlcbitcdFx0XHRicmVhaztcbitcdFx0cmV0ID0gYWZzX2NyZWF0ZV95ZnNfcnhna19jbV9hcHBkYXRhKHNlcnZlciwga3JiNV9lbmN0eXBlKTtcbitcdFx0YnJlYWs7XG4rI2VuZGlmXG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbitcbitcdG11dGV4X3VubG9jayhcdTAwMjZzZXJ2ZXItXHUwMDNlY21fdG9rZW5fbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisjaWZkZWYgQ09ORklHX1JYR0tcbisvKlxuKyAqIENyZWF0ZSBhIHNlY3VyaXRpZXMga2V5cmluZyBmb3IgdGhlIGNhY2hlIG1hbmFnZXIgYW5kIGF0dGFjaCBhIGtleSB0byBpdCBmb3JcbisgKiB0aGUgUnhHSyB0b2tlbnMgd2Ugd2FudCB0byB1c2UgdG8gc2VjdXJlIHRoZSBjYWxsYmFjayBjb25uZWN0aW9uIGJhY2sgZnJvbVxuKyAqIHRoZSBmaWxlc2VydmVyLlxuKyAqL1xuK2ludCBhZnNfY3JlYXRlX3Rva2VuX2tleShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNTtcbitcdHN0cnVjdCBrZXkgKnJpbmc7XG4rXHRrZXlfcmVmX3Qga2V5O1xuK1x0Y2hhciBLMFszMl0sICpkZXNjO1xuK1x0aW50IHJldDtcbitcbitcdHJpbmcgPSBrZXlyaW5nX2FsbG9jKFwia2Fmc1wiLFxuK1x0XHRcdCAgICAgR0xPQkFMX1JPT1RfVUlELCBHTE9CQUxfUk9PVF9HSUQsIGN1cnJlbnRfY3JlZCgpLFxuK1x0XHRcdCAgICAgS0VZX1BPU19TRUFSQ0ggfCBLRVlfUE9TX1dSSVRFIHxcbitcdFx0XHQgICAgIEtFWV9VU1JfVklFVyB8IEtFWV9VU1JfUkVBRCB8IEtFWV9VU1JfU0VBUkNILFxuK1x0XHRcdCAgICAgS0VZX0FMTE9DX05PVF9JTl9RVU9UQSxcbitcdFx0XHQgICAgIE5VTEwsIE5VTEwpO1xuK1x0aWYgKElTX0VSUihyaW5nKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIocmluZyk7XG4rXG4rXHRyZXQgPSByeHJwY19zb2NrX3NldF9zZWN1cml0eV9rZXlyaW5nKHNvY2tldC1cdTAwM2VzaywgcmluZyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IC1FTk9QS0c7XG4rXHRrcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKEtSQjVfRU5DVFlQRV9BRVMxMjhfQ1RTX0hNQUNfU0hBMV85Nik7XG4rXHRpZiAoIWtyYjUpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRShrcmI1LVx1MDAzZWtleV9sZW4gXHUwMDNlIHNpemVvZihLMCkpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IC1FTk9NRU07XG4rXHRkZXNjID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsIFwiJXU6JXU6JXU6JXVcIixcbitcdFx0XHQgWUZTX0NNX1NFUlZJQ0UsIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLLCAxLCBrcmI1LVx1MDAzZWV0eXBlKTtcbitcdGlmICghZGVzYylcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR3YWl0X2Zvcl9yYW5kb21fYnl0ZXMoKTtcbitcdGdldF9yYW5kb21fYnl0ZXMoSzAsIGtyYjUtXHUwMDNla2V5X2xlbik7XG4rXG4rXHRrZXkgPSBrZXlfY3JlYXRlKG1ha2Vfa2V5X3JlZihyaW5nLCB0cnVlKSxcbitcdFx0XHQgXCJyeHJwY19zXCIsIGRlc2MsXG4rXHRcdFx0IEswLCBrcmI1LVx1MDAzZWtleV9sZW4sXG4rXHRcdFx0IEtFWV9QT1NfVklFVyB8IEtFWV9QT1NfUkVBRCB8IEtFWV9QT1NfU0VBUkNIIHwgS0VZX1VTUl9WSUVXLFxuK1x0XHRcdCBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBKTtcbitcdGtmcmVlKGRlc2MpO1xuK1x0aWYgKElTX0VSUihrZXkpKSB7XG4rXHRcdHJldCA9IFBUUl9FUlIoa2V5KTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRuZXQtXHUwMDNlZnNfY21fdG9rZW5fa2V5ID0ga2V5X3JlZl90b19wdHIoa2V5KTtcbitcdHJldCA9IDA7XG4rb3V0OlxuK1x0a2V5X3B1dChyaW5nKTtcbitcdHJldHVybiByZXQ7XG4rfVxuKyNlbmRpZiAvKiBDT05GSUdfUlhHSyAqL1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc19wcm9iZS5jIGIvZnMvYWZzL2ZzX3Byb2JlLmNcbmluZGV4IGE5MWFkMTkzOGQwNzg4Li5lMjZmN2YxZTMwYTIzYSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9mc19wcm9iZS5jXG4rKysgYi9mcy9hZnMvZnNfcHJvYmUuY1xuQEAgLTI0MSw5ICsyNDEsMTQgQEAgaW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4gXHRzdHJ1Y3QgYWZzX2VuZHBvaW50X3N0YXRlICplc3RhdGUsICpvbGQ7XG4gXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0ID0gTlVMTCwgKmFsaXN0O1xuIFx0dW5zaWduZWQgbG9uZyB1bnByb2JlZDtcbitcdGludCByZXQ7XG4gXG4gXHRfZW50ZXIoXCIlcFVcIiwgXHUwMDI2c2VydmVyLVx1MDAzZXV1aWQpO1xuIFxuK1x0cmV0ID0gYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzZXJ2ZXIsIGtleSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0ZXN0YXRlID0ga3phbGxvY19vYmooKmVzdGF0ZSk7XG4gXHRpZiAoIWVzdGF0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxuaW5kZXggNjAxZjAxZTVjMTVmY2MuLmVmN2JkOWY5NDNlMGE2IDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcbisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5AQCAtMjgzLDcgKzI4Myw2IEBAIHN0cnVjdCBhZnNfbmV0IHtcbiBcdHN0cnVjdCBzb2NrZXRcdFx0KnNvY2tldDtcbiBcdHN0cnVjdCBhZnNfY2FsbFx0XHQqc3BhcmVfaW5jb21pbmdfY2FsbDtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdFx0Y2hhcmdlX3ByZWFsbG9jYXRpb25fd29yaztcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdFx0cnhfb29iX3dvcms7XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0c29ja2V0X211dGV4O1xuIFx0YXRvbWljX3RcdFx0bnJfb3V0c3RhbmRpbmdfY2FsbHM7XG4gXHRhdG9taWNfdFx0XHRucl9zdXBlcmJsb2NrcztcbkBAIC01NDgsNyArNTQ3LDcgQEAgc3RydWN0IGFmc19zZXJ2ZXIge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0XHRkZXN0cm95ZXI7XHQvKiBXb3JrIGl0ZW0gdG8gdHJ5IGFuZCBkZXN0cm95IGEgc2VydmVyICovXG4gXHRzdHJ1Y3QgdGltZXJfbGlzdFx0dGltZXI7XHRcdC8qIE1hbmFnZW1lbnQgdGltZXIgKi9cbiBcdHN0cnVjdCBtdXRleFx0XHRjbV90b2tlbl9sb2NrO1x0LyogTG9jayBnb3Zlcm5pbmcgY3JlYXRpb24gb2YgYXBwZGF0YSAqL1xuLVx0c3RydWN0IGtyYjVfYnVmZmVyXHRjbV9yeGdrX2FwcGRhdGE7IC8qIEFwcGRhdGEgdG8gYmUgaW5jbHVkZWQgaW4gUkVTUE9OU0UgcGFja2V0ICovXG4rXHRzdHJ1Y3Qga2V5XHRcdCp5ZnNfcnhna19hcHBkYXRhOyAvKiBBcHBkYXRhIHRvIGJlIGluY2x1ZGVkIGluIFJFU1BPTlNFIHBhY2tldCAqL1xuIFx0dGltZTY0X3RcdFx0dW51c2VfdGltZTtcdC8qIFRpbWUgYXQgd2hpY2ggbGFzdCB1bnVzZWQgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gI2RlZmluZSBBRlNfU0VSVkVSX0ZMX1JFU1BPTkRJTkcgMFx0XHQvKiBUaGUgc2VydmVyIGlzIHJlc3BvbmRpbmcgKi9cbkBAIC0xMDg5LDcgKzEwODgsNyBAQCBleHRlcm4gYm9vbCBhZnNfY21faW5jb21pbmdfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKik7XG4gLypcbiAgKiBjbV9zZWN1cml0eS5jXG4gICovXG4tdm9pZCBhZnNfcHJvY2Vzc19vb2JfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbitpbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpO1xuICNpZmRlZiBDT05GSUdfUlhHS1xuIGludCBhZnNfY3JlYXRlX3Rva2VuX2tleShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpO1xuICNlbHNlXG5AQCAtMTQxNiwyMSArMTQxNSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfc2VlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBlbnVtIGFmc19jYWxsX3RyYWNlIHdoeSlcbiBcdFx0ICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLFxuLVx0XHRcdFx0ICAgIGdmcF90IGdmcClcbi17XG4tXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuLVxuLVx0b3AtXHUwMDNlY2FsbFx0PSBjYWxsO1xuLVx0b3AtXHUwMDNldHlwZVx0PSBjYWxsLVx1MDAzZXR5cGU7XG4tXHRjYWxsLVx1MDAzZW9wXHQ9IG9wO1xuLVx0Y2FsbC1cdTAwM2VrZXlcdD0gb3AtXHUwMDNla2V5O1xuLVx0Y2FsbC1cdTAwM2VpbnRyXHQ9ICEob3AtXHUwMDNlZmxhZ3MgXHUwMDI2IEFGU19PUEVSQVRJT05fVU5JTlRSKTtcbi1cdGNhbGwtXHUwMDNlcGVlclx0PSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtXHUwMDNlYWRkcnNbb3AtXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XG4tXHRjYWxsLVx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cdTAwM2VzZXJ2ZXItXHUwMDNlc2VydmljZV9pZDtcbi1cdGFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcbiB7XG4gXHRjYWxsLVx1MDAzZWlvdl9sZW4gPSBzaXplO1xuQEAgLTE3NjIsNiArMTc0NiwyMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqQUZTX1ZOT0RFX1RPX0koc3RydWN0IGFmc192bm9kZSAqdm5vZGUpXG4gXHRyZXR1cm4gXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLFxuK1x0XHRcdFx0ICAgIGdmcF90IGdmcClcbit7XG4rXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuK1xuK1x0b3AtXHUwMDNlY2FsbFx0PSBjYWxsO1xuK1x0b3AtXHUwMDNldHlwZVx0PSBjYWxsLVx1MDAzZXR5cGU7XG4rXHRjYWxsLVx1MDAzZW9wXHQ9IG9wO1xuK1x0Y2FsbC1cdTAwM2VzZXJ2ZXJcdD0gYWZzX3VzZV9zZXJ2ZXIob3AtXHUwMDNlc2VydmVyLCBmYWxzZSwgYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCk7XG4rXHRjYWxsLVx1MDAzZWtleVx0PSBvcC1cdTAwM2VrZXk7XG4rXHRjYWxsLVx1MDAzZWludHJcdD0gIShvcC1cdTAwM2VmbGFncyBcdTAwMjYgQUZTX09QRVJBVElPTl9VTklOVFIpO1xuK1x0Y2FsbC1cdTAwM2VwZWVyXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cdTAwM2VhZGRyc1tvcC1cdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcbitcdGNhbGwtXHUwMDNlc2VydmljZV9pZCA9IG9wLVx1MDAzZXNlcnZlci1cdTAwM2VzZXJ2aWNlX2lkO1xuK1x0YWZzX21ha2VfY2FsbChjYWxsLCBnZnApO1xuK31cbitcbiAvKlxuICAqIE5vdGUgdGhhdCBhIGRlbnRyeSBnb3QgY2hhbmdlZC4gIFdlIG5lZWQgdG8gc2V0IGRfZnNkYXRhIHRvIHRoZSBkYXRhIHZlcnNpb25cbiAgKiBudW1iZXIgZGVyaXZlZCBmcm9tIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4gIEl0IGRvZXNuJ3QgbWF0dGVyIGlmXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL21haW4uYyBiL2ZzL2Fmcy9tYWluLmNcbmluZGV4IDdhODgzYzU5OTc2ZmYyLi42MzUzZmVhYTVmYjRiNSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9tYWluLmNcbisrKyBiL2ZzL2Fmcy9tYWluLmNcbkBAIC03Myw3ICs3Myw2IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBhZnNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0X25zKVxuIFx0Z2VuZXJhdGVfcmFuZG9tX3V1aWQoKHVuc2lnbmVkIGNoYXIgKilcdTAwMjZuZXQtXHUwMDNldXVpZCk7XG4gXG4gXHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZWNoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcmssIGFmc19jaGFyZ2VfcHJlYWxsb2NhdGlvbik7XG4tXHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZXJ4X29vYl93b3JrLCBhZnNfcHJvY2Vzc19vb2JfcXVldWUpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZuZXQtXHUwMDNlc29ja2V0X211dGV4KTtcbiBcbiBcdG5ldC1cdTAwM2VjZWxscyA9IFJCX1JPT1Q7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3J4cnBjLmMgYi9mcy9hZnMvcnhycGMuY1xuaW5kZXggZDgyOTE2NjU3YTNkZGYuLmNmNzU4OGEwMmYzMDUzIDEwMDY0NFxuLS0tIGEvZnMvYWZzL3J4cnBjLmNcbisrKyBiL2ZzL2Fmcy9yeHJwYy5jXG5AQCAtMjUsMTQgKzI1LDEyIEBAIHN0YXRpYyB2b2lkIGFmc19wcm9jZXNzX2FzeW5jX2NhbGwoc3RydWN0IHdvcmtfc3RydWN0ICopO1xuIHN0YXRpYyB2b2lkIGFmc19yeF9uZXdfY2FsbChzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgcnhycGNfY2FsbCAqLCB1bnNpZ25lZCBsb25nKTtcbiBzdGF0aWMgdm9pZCBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbChzdHJ1Y3QgcnhycGNfY2FsbCAqLCB1bnNpZ25lZCBsb25nKTtcbiBzdGF0aWMgdm9pZCBhZnNfcnhfYXR0YWNoKHN0cnVjdCByeHJwY19jYWxsICpyeGNhbGwsIHVuc2lnbmVkIGxvbmcgdXNlcl9jYWxsX0lEKTtcbi1zdGF0aWMgdm9pZCBhZnNfcnhfbm90aWZ5X29vYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvb2IpO1xuIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY21fb3BfaWQoc3RydWN0IGFmc19jYWxsICopO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnhycGNfa2VybmVsX29wcyBhZnNfcnhycGNfY2FsbGJhY2tfb3BzID0ge1xuIFx0Lm5vdGlmeV9uZXdfY2FsbFx0PSBhZnNfcnhfbmV3X2NhbGwsXG4gXHQuZGlzY2FyZF9uZXdfY2FsbFx0PSBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbCxcbiBcdC51c2VyX2F0dGFjaF9jYWxsXHQ9IGFmc19yeF9hdHRhY2gsXG4tXHQubm90aWZ5X29vYlx0XHQ9IGFmc19yeF9ub3RpZnlfb29iLFxuIH07XG4gXG4gLyogYXN5bmNocm9ub3VzIGluY29taW5nIGNhbGwgaW5pdGlhbCBwcm9jZXNzaW5nICovXG5AQCAtNzQsMTAgKzcyLDYgQEAgaW50IGFmc19vcGVuX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJvcl8yO1xuIFxuLVx0cmV0ID0gcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHNvY2tldC1cdTAwM2VzaywgdHJ1ZSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycm9yXzI7XG4tXG4gXHRyZXQgPSBhZnNfY3JlYXRlX3Rva2VuX2tleShuZXQsIHNvY2tldCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRwcl9lcnIoXCJDb3VsZG4ndCBjcmVhdGUgUnhHSyBDTSBrZXk6ICVkXFxuXCIsIHJldCk7XG5AQCAtMTI4LDcgKzEyMiw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFx0X2VudGVyKFwiXCIpO1xuIFxuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZuZXQtXHUwMDNlY2hhcmdlX3ByZWFsbG9jYXRpb25fd29yayk7XG4tXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5ldC1cdTAwM2VyeF9vb2Jfd29yayk7XG4gXHQvKiBGdXR1cmUgd29yayBpdGVtcyBzaG91bGQgbm93IHNlZSAtXHUwMDNlbGl2ZSBpcyBmYWxzZS4gKi9cbiBcbiBcdGtlcm5lbF9saXN0ZW4obmV0LVx1MDAzZXNvY2tldCwgMCk7XG5AQCAtMTQ5LDcgKzE0Miw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFxuIFx0a2VybmVsX3NvY2tfc2h1dGRvd24obmV0LVx1MDAzZXNvY2tldCwgU0hVVF9SRFdSKTtcbiBcdGZsdXNoX3dvcmtxdWV1ZShhZnNfYXN5bmNfY2FsbHMpO1xuLVx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZuZXQtXHUwMDNlcnhfb29iX3dvcmspO1xuIFx0bmV0LVx1MDAzZXNvY2tldC1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgPSBOVUxMO1xuIFx0c29ja19yZWxlYXNlKG5ldC1cdTAwM2Vzb2NrZXQpO1xuIFx0a2V5X3B1dChuZXQtXHUwMDNlZnNfY21fdG9rZW5fa2V5KTtcbkBAIC0zNDcsNiArMzM5LDcgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuIFx0c3RydWN0IHJ4cnBjX2NhbGwgKnJ4Y2FsbDtcbiBcdHN0cnVjdCBtc2doZHIgbXNnO1xuIFx0c3RydWN0IGt2ZWMgaW92WzFdO1xuK1x0c3RydWN0IGtleSAqYXBwX2RhdGEgPSBOVUxMO1xuIFx0c2l6ZV90IGxlbjtcbiBcdHM2NCB0eF90b3RhbF9sZW47XG4gXHRpbnQgcmV0O1xuQEAgLTM3OCw4ICszNzEsMjYgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuIFx0XHRjYWxsLVx1MDAzZWRyb3BfcmVmID0gdHJ1ZTtcbiBcdH1cbiBcbitcdGlmIChjYWxsLVx1MDAzZWtleSBcdTAwMjZcdTAwMjYgY2FsbC1cdTAwM2VzZXJ2ZXIpIHtcbitcdFx0dTMyIGtyYjVfZW5jdHlwZSA9IDA7XG4rXHRcdHU4IHNlY3VyaXR5X2luZGV4ID0gMDtcbitcbitcdFx0cnhycGNfa2VybmVsX3F1ZXJ5X2tleShjYWxsLVx1MDAzZWtleSwgXHUwMDI2c2VjdXJpdHlfaW5kZXgsIFx1MDAyNmtyYjVfZW5jdHlwZSk7XG4rXHRcdHN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHtcbisjaWZkZWYgQ09ORklHX1JYR0tcbitcdFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbitcdFx0XHQvKiBSZWFkIHRoZSBrZXkgcG9pbnRlciBiZWZvcmUgdGhlIGFwcGRhdGEgKi9cbitcdFx0XHRhcHBfZGF0YSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Y2FsbC1cdTAwM2VzZXJ2ZXItXHUwMDNleWZzX3J4Z2tfYXBwZGF0YSk7XG4rXHRcdFx0YnJlYWs7XG4rI2VuZGlmXG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbiBcdC8qIGNyZWF0ZSBhIGNhbGwgKi9cbi1cdHJ4Y2FsbCA9IHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VwZWVyLCBjYWxsLVx1MDAzZWtleSxcbitcdHJ4Y2FsbCA9IHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VwZWVyLFxuK1x0XHRcdFx0XHQgY2FsbC1cdTAwM2VrZXksIGFwcF9kYXRhLFxuIFx0XHRcdFx0XHQgKHVuc2lnbmVkIGxvbmcpY2FsbCxcbiBcdFx0XHRcdFx0IHR4X3RvdGFsX2xlbixcbiBcdFx0XHRcdFx0IGNhbGwtXHUwMDNlbWF4X2xpZmVzcGFuLFxuQEAgLTk4MywxNCArOTk0LDMgQEAgbm9pbmxpbmUgaW50IGFmc19wcm90b2NvbF9lcnJvcihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXG4gXHRcdGNhbGwtXHUwMDNldW5tYXJzaGFsbGluZ19lcnJvciA9IHRydWU7XG4gXHRyZXR1cm4gLUVCQURNU0c7XG4gfVxuLVxuLS8qXG4tICogV2FrZSB1cCBPT0Igbm90aWZpY2F0aW9uIHByb2Nlc3NpbmcuXG4tICovXG4tc3RhdGljIHZvaWQgYWZzX3J4X25vdGlmeV9vb2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb29iKVxuLXtcbi1cdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBzay1cdTAwM2Vza191c2VyX2RhdGE7XG4tXG4tXHRpZiAoUkVBRF9PTkNFKG5ldC1cdTAwM2VsaXZlKSlcbi1cdFx0cXVldWVfd29yayhhZnNfd3EsIFx1MDAyNm5ldC1cdTAwM2VyeF9vb2Jfd29yayk7XG4tfVxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZXJ2ZXIuYyBiL2ZzL2Fmcy9zZXJ2ZXIuY1xuaW5kZXggMGZlMTYyZWEyYTM2ZGIuLjRjM2E3YmQwZjdkODY2IDEwMDY0NFxuLS0tIGEvZnMvYWZzL3NlcnZlci5jXG4rKysgYi9mcy9hZnMvc2VydmVyLmNcbkBAIC0zOTgsNyArMzk4LDcgQEAgc3RhdGljIHZvaWQgYWZzX3NlcnZlcl9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4gXHRhZnNfcHV0X2VuZHBvaW50X3N0YXRlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItXHUwMDNlZW5kcG9pbnRfc3RhdGUpLFxuIFx0XHRcdCAgICAgICBhZnNfZXN0YXRlX3RyYWNlX3B1dF9zZXJ2ZXIpO1xuIFx0YWZzX3B1dF9jZWxsKHNlcnZlci1cdTAwM2VjZWxsLCBhZnNfY2VsbF90cmFjZV9wdXRfc2VydmVyKTtcbi1cdGtmcmVlKHNlcnZlci1cdTAwM2VjbV9yeGdrX2FwcGRhdGEuZGF0YSk7XG4rXHRrZXlfcHV0KHNlcnZlci1cdTAwM2V5ZnNfcnhna19hcHBkYXRhKTtcbiBcdGtmcmVlKHNlcnZlcik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaCBiL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaFxuaW5kZXggMzg2YzMxNDMyNzg5OTUuLjcwMDJhOTkzYTQ3MjI4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oXG4rKysgYi9pbmNsdWRlL2tleXMvdXNlci10eXBlLmhcbkBAIC0yNiw2ICsyNiw3IEBAXG4gICovXG4gc3RydWN0IHVzZXJfa2V5X3BheWxvYWQge1xuIFx0c3RydWN0IHJjdV9oZWFkXHRyY3U7XHRcdC8qIFJDVSBkZXN0cnVjdG9yICovXG4rXHRyZWZjb3VudF90XHRyZWY7XG4gXHR1bnNpZ25lZCBzaG9ydFx0ZGF0YWxlbjtcdC8qIGxlbmd0aCBvZiB0aGlzIGRhdGEgKi9cbiBcdGNoYXJcdFx0ZGF0YVtdIF9fYWxpZ25lZChfX2FsaWdub2ZfXyh1NjQpKTsgLyogYWN0dWFsIGRhdGEgKi9cbiB9O1xuQEAgLTM3LDYgKzM4LDcgQEAgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZDtcbiBcbiBleHRlcm4gaW50IHVzZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XG4gZXh0ZXJuIHZvaWQgdXNlcl9mcmVlX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xuK3ZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpO1xuIGV4dGVybiBpbnQgdXNlcl91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcbiBleHRlcm4gdm9pZCB1c2VyX3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpO1xuIGV4dGVybiB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmggYi9pbmNsdWRlL25ldC9hZl9yeHJwYy5oXG5pbmRleCAwZmI0YzQxYzliYmY1NS4uYTliOGUxYmE2N2VmOGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9hZl9yeHJwYy5oXG4rKysgYi9pbmNsdWRlL25ldC9hZl9yeHJwYy5oXG5AQCAtNTUsNiArNTUsNyBAQCB2b2lkIHJ4cnBjX2tlcm5lbF9zZXRfbm90aWZpY2F0aW9ucyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcixcbiBcdFx0XHRcdFx0ICAgc3RydWN0IGtleSAqa2V5LFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3Qga2V5ICphcHBfZGF0YSxcbiBcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyB1c2VyX2NhbGxfSUQsXG4gXHRcdFx0XHRcdCAgIHM2NCB0eF90b3RhbF9sZW4sXG4gXHRcdFx0XHRcdCAgIHUzMiBoYXJkX3RpbWVvdXQsXG5AQCAtOTEsMjQgKzkyLDggQEAgYm9vbCByeHJwY19rZXJuZWxfY2hlY2tfbGlmZShjb25zdCBzdHJ1Y3Qgc29ja2V0ICosIGNvbnN0IHN0cnVjdCByeHJwY19jYWxsICopO1xuIFxuIGludCByeHJwY19zb2NrX3NldF9taW5fc2VjdXJpdHlfbGV2ZWwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgdmFsKTtcbiBpbnQgcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qga2V5ICopO1xuLWludCByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2Uoc3RydWN0IHNvY2sgKnNrLCBib29sIHNldCk7XG4tXG4tZW51bSByeHJwY19vb2JfdHlwZSByeHJwY19rZXJuZWxfcXVlcnlfb29iKHN0cnVjdCBza19idWZmICpvb2IsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXG4tXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEpO1xuLXN0cnVjdCBza19idWZmICpyeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2Ioc3RydWN0IHNvY2tldCAqc29jayxcbi1cdFx0XHRcdFx0IGVudW0gcnhycGNfb29iX3R5cGUgKl90eXBlKTtcbi12b2lkIHJ4cnBjX2tlcm5lbF9mcmVlX29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iKTtcbi12b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgc3RydWN0IHJ4cnBjX3BlZXIgKipfcGVlcixcbi1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyAqX3BlZXJfYXBwZGF0YSxcbi1cdFx0XHRcdCAgdTE2ICpfc2VydmljZV9pZCwgdTggKl9zZWN1cml0eV9pbmRleCk7XG4taW50IHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsIHUzMiBhYm9ydF9jb2RlLFxuLVx0XHRcdFx0ICBpbnQgZXJyb3IsIGVudW0gcnhycGNfYWJvcnRfcmVhc29uIHdoeSk7XG4taW50IHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKTtcbi11MzIgcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpO1xuLWludCByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpO1xuK3ZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2tleShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHU4ICpfc2VjdXJpdHlfaW5kZXgsXG4rXHRcdFx0ICAgIHUzMiAqX2tyYjVfZW5jdHlwZSk7XG4gdTggcnhycGNfa2VybmVsX3F1ZXJ5X2NhbGxfc2VjdXJpdHkoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG4gXHRcdFx0XHQgICAgdTE2ICpfc2VydmljZV9pZCwgdTMyICpfZW5jdHlwZSk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxuaW5kZXggMWIzYzQ4YjU1OTFkZmQuLjA0YjBiYjY4MmI4MTAxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXG5AQCAtMTQ4LDYgKzE0OCw3IEBAIGVudW0geWZzX2NtX29wZXJhdGlvbiB7XG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VudXNlX3NsaXN0X2lzb3J0LFx0XCJVTlUgaXNvcnRcIikgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXBkYXRlLFx0XHRcIlVQREFURSAgIFwiKSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfYnlfdXVpZCxcdFwiVVNFIHV1aWQgXCIpIFxcXG4rXHRFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9jYWxsLFx0XHRcIlVTRSBjYWxsIFwiKSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY21fY2FsbCxcdFwiVVNFIGNtLWNsXCIpIFxcXG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9nZXRfY2FwcyxcdFwiVVNFIGdjYXBzXCIpIFxcXG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9naXZlX3VwX2NiLFx0XCJVU0UgZ3Z1cGNcIikgXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuaW5kZXggNzA0YTEwZGU2NjcwMDQuLmQzYTMxNDczOWQwN2UwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuQEAgLTc4LDYgKzc4LDcgQEBcbiBcdEVNKHJ4Z2tfYWJvcnRfMl9zaG9ydF9lbmNkYXRhLFx0XHRcInJ4Z2syLXNob3J0LWVuY2RhdGFcIilcdFxcXG4gXHRFTShyeGdrX2Fib3J0XzJfc2hvcnRfaGVhZGVyLFx0XHRcInJ4Z2syLXNob3J0LWhkclwiKVx0XFxcbiBcdEVNKHJ4Z2tfYWJvcnRfYmFkX2tleV9udW1iZXIsXHRcdFwicnhnay1iYWQta2V5LW51bVwiKVx0XFxcbitcdEVNKHJ4Z2tfYWJvcnRfY2hhbGxfYmFkX2FwcF9rZXksXHRcInJ4Z2stY2hhbGwtYmFkLWFwcC1rZXlcIilcXFxuIFx0RU0ocnhna19hYm9ydF9jaGFsbF9rZXlfZXhwaXJlZCxcdFwicnhnay1jaGFsbC1rZXktZXhwXCIpXHRcXFxuIFx0RU0ocnhna19hYm9ydF9jaGFsbF9ub19rZXksXHRcdFwicnhnay1jaGFsbC1ub2tleVwiKVx0XFxcbiBcdEVNKHJ4Z2tfYWJvcnRfY2hhbGxfc2hvcnQsXHRcdFwicnhnay1jaGFsbC1zaG9ydFwiKVx0XFxcbkBAIC0xNDgsNiArMTQ5LDcgQEBcbiBcdEVNKHJ4cnBjX2Vwcm90b193cm9uZ19zZWN1cml0eSxcdFx0XCJ3cm9uZy1zZWNcIilcdFx0XFxcbiBcdEVNKHJ4cnBjX3JlY3Ztc2dfZXhjZXNzX2RhdGEsXHRcdFwicmVjdm1zZy1leGNlc3NcIilcdFxcXG4gXHRFTShyeHJwY19yZWN2bXNnX3Nob3J0X2RhdGEsXHRcdFwicmVjdm1zZy1zaG9ydFwiKVx0XFxcbitcdEVNKHJ4cnBjX3NlbmRtc2dfdHhfZXJyb3IsXHRcdFwidHgtZXJyb3JcIilcdFx0XFxcbiBcdEVfKHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLFx0XHRcInNlbmRtc2ctbGF0ZVwiKVxuIFxuICNkZWZpbmUgcnhycGNfY2FsbF9wb2tlX3RyYWNlcyBcXFxuQEAgLTI2Miw3ICsyNjQsNiBAQFxuIFx0RU0ocnhycGNfY29ubl9mcmVlLFx0XHRcdFwiRlJFRSAgICAgICAgXCIpIFxcXG4gXHRFTShyeHJwY19jb25uX2dldF9hY3RpdmF0ZV9jYWxsLFx0XCJHRVQgYWN0LWNhbGxcIikgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fZ2V0X2NhbGxfaW5wdXQsXHRcdFwiR0VUIGlucC1jYWxsXCIpIFxcXG4tXHRFTShyeHJwY19jb25uX2dldF9jaGFsbGVuZ2VfaW5wdXQsXHRcIkdFVCBpbnAtY2hhbFwiKSBcXFxuIFx0RU0ocnhycGNfY29ubl9nZXRfY29ubl9pbnB1dCxcdFx0XCJHRVQgaW5wLWNvbm5cIikgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fZ2V0X2lkbGUsXHRcdFx0XCJHRVQgaWRsZSAgICBcIikgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fZ2V0X3Bva2VfYWJvcnQsXHRcdFwiR0VUIHBrLWFib3J0XCIpIFxcXG5AQCAtMjc0LDcgKzI3NSw2IEBAXG4gXHRFTShyeHJwY19jb25uX25ld19zZXJ2aWNlLFx0XHRcIk5FVyBzZXJ2aWNlIFwiKSBcXFxuIFx0RU0ocnhycGNfY29ubl9wdXRfY2FsbCxcdFx0XHRcIlBVVCBjYWxsICAgIFwiKSBcXFxuIFx0RU0ocnhycGNfY29ubl9wdXRfY2FsbF9pbnB1dCxcdFx0XCJQVVQgaW5wLWNhbGxcIikgXFxcbi1cdEVNKHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCxcdFwiUFVUIGlucC1jaGFsXCIpIFxcXG4gXHRFTShyeHJwY19jb25uX3B1dF9jb25uX2lucHV0LFx0XHRcIlBVVCBpbnAtY29ublwiKSBcXFxuIFx0RU0ocnhycGNfY29ubl9wdXRfZGlzY2FyZF9pZGxlLFx0XHRcIlBVVCBkaXNjLWlkbFwiKSBcXFxuIFx0RU0ocnhycGNfY29ubl9wdXRfbG9jYWxfZGVhZCxcdFx0XCJQVVQgbG9jLWRlYWRcIikgXFxcbkBAIC0zNDIsNiArMzQyLDcgQEBcbiBcdEVNKHJ4cnBjX2NhbGxfc2VlX2Rpc3RyaWJ1dGVfZXJyb3IsXHRcIlNFRSBkaXN0LWVyclwiKSBcXFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfaW5wdXQsXHRcdFwiU0VFIGlucHV0ICAgXCIpIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9ub3RpZnlfcmVsZWFzZWQsXHRcIlNFRSBuZnktcmxzZFwiKSBcXFxuK1x0RU0ocnhycGNfY2FsbF9zZWVfbm90aWZ5X3NraXBwZWQsXHRcIlNFRSBuZnktc2tpcFwiKSBcXFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZyxcdFx0XCJTRUUgcmVjdm1zZyBcIikgXFxcbiBcdEVNKHJ4cnBjX2NhbGxfc2VlX3JlY3Ztc2dfcmVxdWV1ZSxcdFwiU0VFIHJlY3YtcnF1XCIpIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWVfZmlyc3QsIFwiU0VFIHJlY3YtcnFGXCIpIFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaFxuaW5kZXggZDk3MzVhYmQ0Yzc5MTAuLjdkNmE1MDE1MTkzMTEyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oXG5AQCAtNTgsMTEgKzU4LDcgQEAgZW51bSByeHJwY19jbXNnX3R5cGUge1xuIFx0UlhSUENfVFhfTEVOR1RIXHRcdD0gMTIsXHQvKiAtcy06IFRvdGFsIGxlbmd0aCBvZiBUeCBkYXRhICovXG4gXHRSWFJQQ19TRVRfQ0FMTF9USU1FT1VUXHQ9IDEzLFx0LyogLXMtOiBTZXQgb25lIG9yIG1vcmUgY2FsbCB0aW1lb3V0cyAqL1xuIFx0UlhSUENfQ0hBUkdFX0FDQ0VQVFx0PSAxNCxcdC8qIFNzLTogQ2hhcmdlIHRoZSBhY2NlcHQgcG9vbCB3aXRoIGEgdXNlciBjYWxsIElEICovXG4tXHRSWFJQQ19PT0JfSURcdFx0PSAxNSxcdC8qIC1zcjogT09CIG1lc3NhZ2UgSUQgKi9cbi1cdFJYUlBDX0NIQUxMRU5HRURcdD0gMTYsXHQvKiBDLXI6IEluZm8gb24gYSByZWNlaXZlZCBDSEFMTEVOR0UgKi9cbi1cdFJYUlBDX1JFU1BPTkRcdFx0PSAxNyxcdC8qIENzLTogUmVzcG9uZCB0byBhIGNoYWxsZW5nZSAqL1xuLVx0UlhSUENfUkVTUE9OREVEXHRcdD0gMTgsXHQvKiBTLXI6IERhdGEgcmVjZWl2ZWQgaW4gUkVTUE9OU0UgKi9cbi1cdFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBXHQ9IDE5LFx0LyogQ3MtOiBSRVNQT05TRTogUnhHSyBhcHAgZGF0YSB0byBpbmNsdWRlICovXG4rXHRSWFJQQ19SRVNQT05TRV9BUFBEQVRBXHQ9IDIwLFx0LyogQ3MtOiBVc2VyIGtleSBob2xkaW5nIGFwcCBkYXRhIGZvciBSRVNQT05TRSAqL1xuIFx0UlhSUENfX1NVUFBPUlRFRFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xuaW5kZXggYzNjOGMzMjQwZWY5NDYuLmFhM2MwNThmNDA5NTU5IDEwMDY0NFxuLS0tIGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcbisrKyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXG5AQCAtMjA4LDYgKzIwOCw3IEBAIGRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIFx0XHRrbGVhdmUoXCIgPSAtRU5PTUVNXCIpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbitcdHJlZmNvdW50X3NldChcdTAwMjZ1cGF5bG9hZC1cdTAwM2VyZWYsIDEpO1xuIFxuIFx0dXBheWxvYWQtXHUwMDNlZGF0YWxlbiA9IHJlc3VsdF9sZW47XG4gXHRtZW1jcHkodXBheWxvYWQtXHUwMDNlZGF0YSwgZGF0YSwgcmVzdWx0X2xlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL01ha2VmaWxlIGIvbmV0L3J4cnBjL01ha2VmaWxlXG5pbmRleCBmOTk0ZjlmMzBhMjlkNC4uZjdhNWUwYTU5MmVlMTMgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvTWFrZWZpbGVcbisrKyBiL25ldC9yeHJwYy9NYWtlZmlsZVxuQEAgLTI0LDcgKzI0LDYgQEAgcnhycGMteSA6PSBcXFxuIFx0bG9jYWxfb2JqZWN0Lm8gXFxcbiBcdG1pc2MubyBcXFxuIFx0bmV0X25zLm8gXFxcbi1cdG9vYi5vIFxcXG4gXHRvdXRwdXQubyBcXFxuIFx0cGVlcl9ldmVudC5vIFxcXG4gXHRwZWVyX29iamVjdC5vIFxcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FmX3J4cnBjLmMgYi9uZXQvcnhycGMvYWZfcnhycGMuY1xuaW5kZXggOWFiMGYyMmM4ODFlYzUuLjlkNWNlMWM3YWQwZDIyIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2FmX3J4cnBjLmNcbisrKyBiL25ldC9yeHJwYy9hZl9yeHJwYy5jXG5AQCAtMzE4LDYgKzMxOCw3IEBAIEVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3B1dF9wZWVyKTtcbiAgKiBAc29jazogVGhlIHNvY2tldCBvbiB3aGljaCB0byBtYWtlIHRoZSBjYWxsXG4gICogQHBlZXI6IFRoZSBwZWVyIHRvIGNvbnRhY3RcbiAgKiBAa2V5OiBUaGUgc2VjdXJpdHkgY29udGV4dCB0byB1c2UgKGRlZmF1bHRzIHRvIHNvY2tldCBzZXR0aW5nKVxuKyAqIEBhcHBfZGF0YTogVGhlIHNlY3VyaXR5IHJlc3BvbnNlIGFwcGxpY2F0aW9uIGRhdGEgKG9yIE5VTEwpXG4gICogQHVzZXJfY2FsbF9JRDogVGhlIElEIHRvIHVzZVxuICAqIEB0eF90b3RhbF9sZW46IFRvdGFsIGxlbmd0aCBvZiBkYXRhIHRvIHRyYW5zbWl0IGR1cmluZyB0aGUgY2FsbCAob3IgLTEpXG4gICogQGhhcmRfdGltZW91dDogVGhlIG1heGltdW0gbGlmZXNwYW4gb2YgdGhlIGNhbGwgaW4gc2VjXG5AQCAtMzQwLDYgKzM0MSw3IEBAIEVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3B1dF9wZWVyKTtcbiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBrZXkgKmtleSxcbitcdFx0XHRcdFx0ICAgc3RydWN0IGtleSAqYXBwX2RhdGEsXG4gXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgdXNlcl9jYWxsX0lELFxuIFx0XHRcdFx0XHQgICBzNjQgdHhfdG90YWxfbGVuLFxuIFx0XHRcdFx0XHQgICB1MzIgaGFyZF90aW1lb3V0LFxuQEAgLTM2OCw2ICszNzAsNyBAQCBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0a2V5ID0gTlVMTDsgLyogYSBuby1zZWN1cml0eSBrZXkgKi9cbiBcbiBcdG1lbXNldChcdTAwMjZwLCAwLCBzaXplb2YocCkpO1xuK1x0cC5hcHBfZGF0YVx0XHQ9IGFwcF9kYXRhO1xuIFx0cC51c2VyX2NhbGxfSURcdFx0PSB1c2VyX2NhbGxfSUQ7XG4gXHRwLnR4X3RvdGFsX2xlblx0XHQ9IHR4X3RvdGFsX2xlbjtcbiBcdHAuaW50ZXJydXB0aWJpbGl0eVx0PSBpbnRlcnJ1cHRpYmlsaXR5O1xuQEAgLTU5NSwxMCArNTk4LDcgQEAgc3RhdGljIGludCByeHJwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBsZW4pXG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBSWFJQQ19TRVJWRVJfQk9VTkQ6XG4gXHRjYXNlIFJYUlBDX1NFUlZFUl9MSVNURU5JTkc6XG4tXHRcdGlmIChtLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX09PQilcbi1cdFx0XHRyZXQgPSByeHJwY19zZW5kbXNnX29vYihyeCwgbSwgbGVuKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdHJldCA9IHJ4cnBjX2RvX3NlbmRtc2cocngsIG0sIGxlbik7XG4rXHRcdHJldCA9IHJ4cnBjX2RvX3NlbmRtc2cocngsIG0sIGxlbik7XG4gXHRcdC8qIFRoZSBzb2NrZXQgaGFzIGJlZW4gdW5sb2NrZWQgKi9cbiBcdFx0Z290byBvdXQ7XG4gXHRkZWZhdWx0OlxuQEAgLTYzMyw3ICs2MzMsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiB7XG4gXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbi1cdHVuc2lnbmVkIGludCBtaW5fc2VjX2xldmVsLCB2YWw7XG4rXHR1bnNpZ25lZCBpbnQgbWluX3NlY19sZXZlbDtcbiBcdHUxNiBzZXJ2aWNlX3VwZ3JhZGVbMl07XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTcxMCwyMyArNzEwLDcgQEAgc3RhdGljIGludCByeHJwY19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXG4gXHRcdGNhc2UgUlhSUENfTUFOQUdFX1JFU1BPTlNFOlxuIFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0aWYgKG9wdGxlbiAhPSBzaXplb2YodW5zaWduZWQgaW50KSlcbi1cdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0cmV0ID0gLUVJU0NPTk47XG4tXHRcdFx0aWYgKHJ4LVx1MDAzZXNrLnNrX3N0YXRlICE9IFJYUlBDX1VOQk9VTkQpXG4tXHRcdFx0XHRnb3RvIGVycm9yO1xuLVx0XHRcdHJldCA9IGNvcHlfc2FmZV9mcm9tX3NvY2twdHIoXHUwMDI2dmFsLCBzaXplb2YodmFsKSxcbi1cdFx0XHRcdFx0XHQgICAgIG9wdHZhbCwgb3B0bGVuKTtcbi1cdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBlcnJvcjtcbi1cdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdGlmICh2YWwgXHUwMDNlIDEpXG4tXHRcdFx0XHRnb3RvIGVycm9yO1xuLVx0XHRcdGlmICh2YWwpXG4tXHRcdFx0XHRzZXRfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcdTAwMjZyeC1cdTAwM2VmbGFncyk7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0Y2xlYXJfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcdTAwMjZyeC1cdTAwM2VmbGFncyk7XG4tXHRcdFx0Z290byBzdWNjZXNzO1xuK1x0XHRcdGdvdG8gZXJyb3I7XG4gXG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0YnJlYWs7XG5AQCAtODM1LDggKzgxOSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0cngtXHUwMDNlY2FsbHMgPSBSQl9ST09UO1xuIFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cngtXHUwMDNlaW5jb21pbmdfbG9jayk7XG4tXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSk7XG4tXHRyeC1cdTAwM2VwZW5kaW5nX29vYnEgPSBSQl9ST09UO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cngtXHUwMDNlc29ja19jYWxscyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZyeC1cdTAwM2V0b19iZV9hY2NlcHRlZCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpO1xuQEAgLTg4NCwyMyArODY2LDYgQEAgc3RhdGljIGludCByeHJwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZmxhZ3MpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIFB1cmdlIHRoZSBvdXQtb2YtYmFuZCBxdWV1ZS5cbi0gKi9cbi1zdGF0aWMgdm9pZCByeHJwY19wdXJnZV9vb2JfcXVldWUoc3RydWN0IHNvY2sgKnNrKVxuLXtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNrKTtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXG4tXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpKVxuLVx0XHRyeHJwY19rZXJuZWxfZnJlZV9vb2Ioc2tiKTtcbi1cdHdoaWxlICghUkJfRU1QVFlfUk9PVChcdTAwMjZyeC1cdTAwM2VwZW5kaW5nX29vYnEpKSB7XG4tXHRcdHNrYiA9IHJiX2VudHJ5KHJ4LVx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiwgcmJub2RlKTtcbi1cdFx0cmJfZXJhc2UoXHUwMDI2c2tiLVx1MDAzZXJibm9kZSwgXHUwMDI2cngtXHUwMDNlcGVuZGluZ19vb2JxKTtcbi1cdFx0cnhycGNfa2VybmVsX2ZyZWVfb29iKHNrYik7XG4tXHR9XG4tfVxuLVxuIC8qXG4gICogUnhSUEMgc29ja2V0IGRlc3RydWN0b3JcbiAgKi9cbkBAIC05MDgsNyArODczLDYgQEAgc3RhdGljIHZvaWQgcnhycGNfc29ja19kZXN0cnVjdG9yKHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRfZW50ZXIoXCIlcFwiLCBzayk7XG4gXG4tXHRyeHJwY19wdXJnZV9vb2JfcXVldWUoc2spO1xuIFx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG4gXG4gXHRXQVJOX09OKHJlZmNvdW50X3JlYWQoXHUwMDI2c2stXHUwMDNlc2tfd21lbV9hbGxvYykpO1xuQEAgLTk2MSw3ICs5MjUsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlbGVhc2Vfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4gXHRyeHJwY19kaXNjYXJkX3ByZWFsbG9jKHJ4KTtcbiBcdHJ4cnBjX3JlbGVhc2VfY2FsbHNfb25fc29ja2V0KHJ4KTtcbiBcdGZsdXNoX3dvcmtxdWV1ZShyeHJwY193b3JrcXVldWUpO1xuLVx0cnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTtcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuIFxuIFx0cnhycGNfdW51c2VfbG9jYWwocngtXHUwMDNlbG9jYWwsIHJ4cnBjX2xvY2FsX3VudXNlX3JlbGVhc2Vfc29jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmggYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxuaW5kZXggODY1ZjA1ZmUzN2FiOTYuLjgzODU4YzQ1ZmE0YTQzIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcbisrKyBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG5AQCAtMTcxLDkgKzE3MSw2IEBAIHN0cnVjdCByeHJwY19zb2NrIHtcbiBcdGNvbnN0IHN0cnVjdCByeHJwY19rZXJuZWxfb3BzICphcHBfb3BzO1x0LyogVGFibGUgb2Yga2VybmVsIGFwcCBub3RpZmljYXRpb24gZnVuY3MgKi9cbiBcdHN0cnVjdCByeHJwY19sb2NhbFx0KmxvY2FsO1x0XHQvKiBsb2NhbCBlbmRwb2ludCAqL1xuIFx0c3RydWN0IHJ4cnBjX2JhY2tsb2dcdCpiYWNrbG9nO1x0LyogUHJlYWxsb2NhdGlvbiBmb3Igc2VydmljZXMgKi9cbi1cdHN0cnVjdCBza19idWZmX2hlYWRcdHJlY3Ztc2dfb29icTtcdC8qIE9PQiBtZXNzYWdlcyBmb3IgcmVjdm1zZyB0byBwaWNrIHVwICovXG4tXHRzdHJ1Y3QgcmJfcm9vdFx0XHRwZW5kaW5nX29vYnE7XHQvKiBPT0IgbWVzc2FnZXMgYXdhaXRpbmcgdXNlcnNwYWNlIHRvIHJlc3BvbmQgdG8gKi9cbi1cdHU2NFx0XHRcdG9vYl9pZF9jb3VudGVyO1x0LyogT09CIG1lc3NhZ2UgSUQgY291bnRlciAqL1xuIFx0c3BpbmxvY2tfdFx0XHRpbmNvbWluZ19sb2NrO1x0LyogSW5jb21pbmcgY2FsbCB2cyBzZXJ2aWNlIHNodXRkb3duIGxvY2sgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWRcdHNvY2tfY2FsbHM7XHQvKiBMaXN0IG9mIGNhbGxzIG93bmVkIGJ5IHRoaXMgc29ja2V0ICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHR0b19iZV9hY2NlcHRlZDtcdC8qIGNhbGxzIGF3YWl0aW5nIGFjY2VwdGFuY2UgKi9cbkBAIC0xODQsNyArMTgxLDYgQEAgc3RydWN0IHJ4cnBjX3NvY2sge1xuIFx0c3RydWN0IHJiX3Jvb3RcdFx0Y2FsbHM7XHRcdC8qIFVzZXIgSUQgLVx1MDAzZSBjYWxsIG1hcHBpbmcgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gI2RlZmluZSBSWFJQQ19TT0NLX0NPTk5FQ1RFRFx0XHQwXHQvKiBjb25uZWN0X3NyeCBpcyBzZXQgKi9cbi0jZGVmaW5lIFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFXHQxXHQvKiBVc2VyIHdhbnRzIHRvIG1hbmFnZSBSRVNQT05TRSBwYWNrZXRzICovXG4gXHRyd2xvY2tfdFx0XHRjYWxsX2xvY2s7XHQvKiBsb2NrIGZvciBjYWxscyAqL1xuIFx0dTMyXHRcdFx0bWluX3NlY19sZXZlbDtcdC8qIG1pbmltdW0gc2VjdXJpdHkgbGV2ZWwgKi9cbiAjZGVmaW5lIFJYUlBDX1NFQ1VSSVRZX01BWFx0UlhSUENfU0VDVVJJVFlfRU5DUllQVFxuQEAgLTI0MSw3ICsyMzcsNiBAQCBzdHJ1Y3QgcnhycGNfc2tiX3ByaXYge1xuIFx0XHRcdHU4XHRcdHJlYXNvbjtcdFx0LyogUmVhc29uIGZvciBhY2sgKi9cbiBcdFx0fSBhY2s7XG4gXHRcdHN0cnVjdCB7XG4tXHRcdFx0c3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm47XHQvKiBDb25uZWN0aW9uIHJlZmVycmVkIHRvICovXG4gXHRcdFx0dW5pb24ge1xuIFx0XHRcdFx0dTMyIHJ4a2FkX25vbmNlO1xuIFx0XHRcdH07XG5AQCAtMzEwLDE3ICszMDUsNiBAQCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkge1xuIFx0Ym9vbCAoKnZhbGlkYXRlX2NoYWxsZW5nZSkoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbi1cdC8qIEZpbGwgb3V0IHRoZSBjbXNnIGZvciByZWN2bXNnKCkgdG8gcGFzcyBvbiBhIGNoYWxsZW5nZSB0byB1c2Vyc3BhY2UuXG4tXHQgKiBUaGUgc2VjdXJpdHkgY2xhc3MgZ2V0cyB0byBhZGQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cbi1cdCAqL1xuLVx0aW50ICgqY2hhbGxlbmdlX3RvX3JlY3Ztc2cpKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICAgc3RydWN0IG1zZ2hkciAqbXNnKTtcbi1cbi1cdC8qIFBhcnNlIHNlbmRtc2coKSBjb250cm9sIG1lc3NhZ2UgYW5kIHJlc3BvbmQgdG8gY2hhbGxlbmdlLiAqL1xuLVx0aW50ICgqc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSkoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBtc2doZHIgKm1zZyk7XG4tXG4gXHQvKiByZXNwb25kIHRvIGEgY2hhbGxlbmdlICovXG4gXHRpbnQgKCpyZXNwb25kX3RvX2NoYWxsZW5nZSkoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSk7XG5AQCAtNTE2LDYgKzUwMCw3IEBAIHN0cnVjdCByeHJwY19idW5kbGUge1xuIFx0c3RydWN0IHJ4cnBjX2xvY2FsXHQqbG9jYWw7XHRcdC8qIFJlcHJlc2VudGF0aW9uIG9mIGxvY2FsIGVuZHBvaW50ICovXG4gXHRzdHJ1Y3QgcnhycGNfcGVlclx0KnBlZXI7XHRcdC8qIFJlbW90ZSBlbmRwb2ludCAqL1xuIFx0c3RydWN0IGtleVx0XHQqa2V5O1x0XHQvKiBTZWN1cml0eSBkZXRhaWxzICovXG4rXHRzdHJ1Y3Qga2V5XHRcdCphcHBfZGF0YTtcdC8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRwcm9jX2xpbms7XHQvKiBMaW5rIGluIG5ldC1cdTAwM2VidW5kbGVfcHJvY19saXN0ICovXG4gXHRjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5O1x0LyogYXBwbGllZCBzZWN1cml0eSBtb2R1bGUgKi9cbiBcdHJlZmNvdW50X3RcdFx0cmVmO1xuQEAgLTY0Miw2ICs2MjcsNyBAQCBlbnVtIHJ4cnBjX2NhbGxfZmxhZyB7XG4gXHRSWFJQQ19DQUxMX1RYX0xBU1QsXHRcdC8qIExhc3QgcGFja2V0IGluIFR4IGJ1ZmZlciAoYXQgcnh0eF90b3ApICovXG4gXHRSWFJQQ19DQUxMX1RYX0FMTF9BQ0tFRCxcdC8qIExhc3QgcGFja2V0IGhhcyBiZWVuIGhhcmQtYWNrZWQgKi9cbiBcdFJYUlBDX0NBTExfVFhfTk9fTU9SRSxcdFx0LyogTm8gbW9yZSBkYXRhIHRvIHRyYW5zbWl0IChNU0dfTU9SRSBkZWFzc2VydGVkKSAqL1xuK1x0UlhSUENfQ0FMTF9UWF9FUlJPUixcdFx0LyogVGVybWluYWwgZXJyb3I7IGNhbGwgbmVlZHMgYWJvcnQgKi9cbiBcdFJYUlBDX0NBTExfU0VORF9QSU5HLFx0XHQvKiBBIHBpbmcgd2lsbCBuZWVkIHRvIGJlIHNlbnQgKi9cbiBcdFJYUlBDX0NBTExfUkVUUkFOU19USU1FT1VULFx0LyogUmV0cmFuc21pc3Npb24gZHVlIHRvIHRpbWVvdXQgb2NjdXJyZWQgKi9cbiBcdFJYUlBDX0NBTExfQkVHQU5fUlhfVElNRVIsXHQvKiBXZSBiZWdhbiB0aGUgZXhwZWN0X3J4X2J5IHRpbWVyICovXG5AQCAtNzE5LDYgKzcwNSw3IEBAIHN0cnVjdCByeHJwY19jYWxsIHtcbiBcdHN0cnVjdCByeHJwY19zb2NrIF9fcmN1XHQqc29ja2V0O1x0Lyogc29ja2V0IHJlc3BvbnNpYmxlICovXG4gXHRzdHJ1Y3QgcnhycGNfbmV0XHQqcnhuZXQ7XHRcdC8qIE5ldHdvcmsgbmFtZXNwYWNlIHRvIHdoaWNoIGNhbGwgYmVsb25ncyAqL1xuIFx0c3RydWN0IGtleVx0XHQqa2V5O1x0XHQvKiBTZWN1cml0eSBkZXRhaWxzICovXG4rXHRzdHJ1Y3Qga2V5XHRcdCphcHBfZGF0YTtcdC8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovXG4gXHRjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5O1x0LyogYXBwbGllZCBzZWN1cml0eSBtb2R1bGUgKi9cbiBcdHN0cnVjdCBtdXRleFx0XHR1c2VyX211dGV4O1x0LyogVXNlciBhY2Nlc3MgbXV0ZXggKi9cbiBcdHN0cnVjdCBzb2NrYWRkcl9yeHJwY1x0ZGVzdF9zcng7XHQvKiBEZXN0aW5hdGlvbiBhZGRyZXNzICovXG5AQCAtOTEzLDYgKzkwMCw3IEBAIGVudW0gcnhycGNfY29tbWFuZCB7XG4gfTtcbiBcbiBzdHJ1Y3QgcnhycGNfY2FsbF9wYXJhbXMge1xuK1x0c3RydWN0IGtleVx0XHQqYXBwX2RhdGE7XHQvKiBTZWN1cml0eSByZXNwb25zZSBhcHAgZGF0YSAqL1xuIFx0czY0XHRcdFx0dHhfdG90YWxfbGVuO1x0LyogVG90YWwgVHggZGF0YSBsZW5ndGggKGlmIHNlbmQgZGF0YSkgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0dXNlcl9jYWxsX0lEO1x0LyogVXNlcidzIGNhbGwgSUQgKi9cbiBcdHN0cnVjdCB7XG5AQCAtMTM3NywxMyArMTM2NSw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJ4cnBjX25ldCAqcnhycGNfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIHJ4cnBjX25ldF9pZCk7XG4gfVxuIFxuLS8qXG4tICogb29iLmNcbi0gKi9cbi1ib29sIHJ4cnBjX25vdGlmeV9zb2NrZXRfb29iKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi12b2lkIHJ4cnBjX2FkZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBza19idWZmICpza2IpO1xuLWludCByeHJwY19zZW5kbXNnX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7XG4tXG4gLypcbiAgKiBvdXRwdXQuY1xuICAqL1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jYWxsX29iamVjdC5jIGIvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmNcbmluZGV4IDgxN2VkOWFjYjkxZTYxLi45ZjYxMzBkOTBjNGNhOCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9jYWxsX29iamVjdC5jXG4rKysgYi9uZXQvcnhycGMvY2FsbF9vYmplY3QuY1xuQEAgLTIxMSw2ICsyMTEsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2FsbG9jX2NsaWVudF9jYWxsKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdGNhbGwtXHUwMDNlaW50ZXJydXB0aWJpbGl0eVx0PSBwLVx1MDAzZWludGVycnVwdGliaWxpdHk7XG4gXHRjYWxsLVx1MDAzZXR4X3RvdGFsX2xlblx0PSBwLVx1MDAzZXR4X3RvdGFsX2xlbjtcbiBcdGNhbGwtXHUwMDNla2V5XHRcdD0ga2V5X2dldChjcC1cdTAwM2VrZXkpO1xuK1x0Y2FsbC1cdTAwM2VhcHBfZGF0YVx0XHQ9IGtleV9nZXQocC1cdTAwM2VhcHBfZGF0YSk7XG4gXHRjYWxsLVx1MDAzZXBlZXJcdFx0PSByeHJwY19nZXRfcGVlcihjcC1cdTAwM2VwZWVyLCByeHJwY19wZWVyX2dldF9jYWxsKTtcbiBcdGNhbGwtXHUwMDNlbG9jYWxcdFx0PSByeHJwY19nZXRfbG9jYWwoY3AtXHUwMDNlbG9jYWwsIHJ4cnBjX2xvY2FsX2dldF9jYWxsKTtcbiBcdGNhbGwtXHUwMDNlc2VjdXJpdHlfbGV2ZWxcdD0gY3AtXHUwMDNlc2VjdXJpdHlfbGV2ZWw7XG5AQCAtNjk3LDYgKzY5OCw3IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX2Rlc3Ryb3lfY2FsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRyeHJwY19wdXRfcGVlcihjYWxsLVx1MDAzZXBlZXIsIHJ4cnBjX3BlZXJfcHV0X2NhbGwpO1xuIFx0cnhycGNfcHV0X2xvY2FsKGNhbGwtXHUwMDNlbG9jYWwsIHJ4cnBjX2xvY2FsX3B1dF9jYWxsKTtcbiBcdGtleV9wdXQoY2FsbC1cdTAwM2VrZXkpO1xuK1x0a2V5X3B1dChjYWxsLVx1MDAzZWFwcF9kYXRhKTtcbiBcdGNhbGxfcmN1KFx1MDAyNmNhbGwtXHUwMDNlcmN1LCByeHJwY19yY3VfZnJlZV9jYWxsKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcbmluZGV4IDZhZmI1NDM3M2ViYmY5Li42ZTQwMjMxMmUxNDVjMCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcbisrKyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcbkBAIC03LDYgKzcsNjEgQEBcbiBcbiAjaW5jbHVkZSBcImFyLWludGVybmFsLmhcIlxuIFxuKy8qXG4rICogUG9zdCBhIGNhbGwgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlLiAgRnVydGhlclxuKyAqIG5vdGlmaWNhdGlvbnMgYXJlIHN1cHByZXNzZWQgYnkgcHV0dGluZyByZWN2bXNnX2xpbmsgb24gYSBkdW1teSBxdWV1ZS5cbisgKi9cbitzdGF0aWMgdm9pZCBfX3J4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4re1xuK1x0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4O1xuK1x0c3RydWN0IHNvY2sgKnNrO1xuK1xuK1x0aWYgKHRlc3RfYml0KFJYUlBDX0NBTExfUkVMRUFTRUQsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdHJ4cnBjX3NlZV9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9yZWxlYXNlZCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcbitcdHJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtXHUwMDNlc29ja2V0KTtcbitcdHNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4rXHRpZiAocnggXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlIFx1MDAzYyBSWFJQQ19DTE9TRSkge1xuK1x0XHRpZiAoY2FsbC1cdTAwM2Vub3RpZnlfcngpIHtcbitcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2spO1xuK1x0XHRcdGNhbGwtXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVx1MDAzZXVzZXJfY2FsbF9JRCk7XG4rXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2spO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbitcdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaykpIHtcbitcdFx0XHRcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xuK1x0XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaywgXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKTtcbitcdFx0XHR9XG4rXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4rXG4rXHRcdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHtcbitcdFx0XHRcdF9kZWJ1ZyhcImNhbGwgJXBzXCIsIHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkpO1xuK1x0XHRcdFx0c2stXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbit9XG4rXG4rLypcbisgKiBQb3N0IGEgY2FsbCBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2UuICBGdXJ0aGVyXG4rICogbm90aWZpY2F0aW9ucyBhcmUgc3VwcHJlc3NlZCBieSBwdXR0aW5nIHJlY3Ztc2dfbGluayBvbiBhIGR1bW15IHF1ZXVlLlxuKyAqL1xuK3ZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbit7XG4rXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSkge1xuK1x0XHRyeHJwY19zZWVfY2FsbChjYWxsLCByeHJwY19jYWxsX3NlZV9ub3RpZnlfc2tpcHBlZCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdF9fcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTtcbit9XG4rXG4gLypcbiAgKiBUcmFuc2l0aW9uIGEgY2FsbCB0byB0aGUgY29tcGxldGUgc3RhdGUuXG4gICovXG5AQCAtMjUsNyArODAsNyBAQCBib29sIHJ4cnBjX3NldF9jYWxsX2NvbXBsZXRpb24oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG4gXHRyeHJwY19zZXRfY2FsbF9zdGF0ZShjYWxsLCBSWFJQQ19DQUxMX0NPTVBMRVRFKTtcbiBcdHRyYWNlX3J4cnBjX2NhbGxfY29tcGxldGUoY2FsbCk7XG4gXHR3YWtlX3VwKFx1MDAyNmNhbGwtXHUwMDNld2FpdHEpO1xuLVx0cnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTtcbitcdF9fcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY29ubl9jbGllbnQuYyBiL25ldC9yeHJwYy9jb25uX2NsaWVudC5jXG5pbmRleCA0ODUxOWYwZGUxODUzOS4uZGQ3OTYzMGQzMDY2OTggMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY29ubl9jbGllbnQuY1xuKysrIGIvbmV0L3J4cnBjL2Nvbm5fY2xpZW50LmNcbkBAIC04MSw2ICs4MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnhycGNfYnVuZGxlICpyeHJwY19hbGxvY19idW5kbGUoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG4gXHRcdGJ1bmRsZS1cdTAwM2Vsb2NhbFx0XHQ9IGNhbGwtXHUwMDNlbG9jYWw7XG4gXHRcdGJ1bmRsZS1cdTAwM2VwZWVyXHRcdD0gcnhycGNfZ2V0X3BlZXIoY2FsbC1cdTAwM2VwZWVyLCByeHJwY19wZWVyX2dldF9idW5kbGUpO1xuIFx0XHRidW5kbGUtXHUwMDNla2V5XHRcdD0ga2V5X2dldChjYWxsLVx1MDAzZWtleSk7XG4rXHRcdGJ1bmRsZS1cdTAwM2VhcHBfZGF0YVx0PSBrZXlfZ2V0KGNhbGwtXHUwMDNlYXBwX2RhdGEpO1xuIFx0XHRidW5kbGUtXHUwMDNlc2VjdXJpdHlcdD0gY2FsbC1cdTAwM2VzZWN1cml0eTtcbiBcdFx0YnVuZGxlLVx1MDAzZWV4Y2x1c2l2ZVx0PSB0ZXN0X2JpdChSWFJQQ19DQUxMX0VYQ0xVU0lWRSwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncyk7XG4gXHRcdGJ1bmRsZS1cdTAwM2V1cGdyYWRlXHRcdD0gdGVzdF9iaXQoUlhSUENfQ0FMTF9VUEdSQURFLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKTtcbkBAIC0xMTgsNiArMTE5LDcgQEAgc3RhdGljIHZvaWQgcnhycGNfZnJlZV9idW5kbGUoc3RydWN0IHJ4cnBjX2J1bmRsZSAqYnVuZGxlKVxuIFx0d3JpdGVfdW5sb2NrKFx1MDAyNmJ1bmRsZS1cdTAwM2Vsb2NhbC1cdTAwM2VyeG5ldC1cdTAwM2Vjb25uX2xvY2spO1xuIFx0cnhycGNfcHV0X3BlZXIoYnVuZGxlLVx1MDAzZXBlZXIsIHJ4cnBjX3BlZXJfcHV0X2J1bmRsZSk7XG4gXHRrZXlfcHV0KGJ1bmRsZS1cdTAwM2VrZXkpO1xuK1x0a2V5X3B1dChidW5kbGUtXHUwMDNlYXBwX2RhdGEpO1xuIFx0a2ZyZWUoYnVuZGxlKTtcbiB9XG4gXG5AQCAtMjc0LDYgKzI3Niw3IEBAIGludCByeHJwY19sb29rX3VwX2J1bmRsZShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuICNkZWZpbmUgY21wKFgsIFkpICgobG9uZykoWCkgLSAobG9uZykoWSkpXG4gXHRcdGRpZmYgPSAoY21wKGJ1bmRsZS1cdTAwM2VwZWVyLCBjYWxsLVx1MDAzZXBlZXIpID86XG4gXHRcdFx0Y21wKGJ1bmRsZS1cdTAwM2VrZXksIGNhbGwtXHUwMDNla2V5KSA/OlxuK1x0XHRcdGNtcChidW5kbGUtXHUwMDNlYXBwX2RhdGEsIGNhbGwtXHUwMDNlYXBwX2RhdGEpID86XG4gXHRcdFx0Y21wKGJ1bmRsZS1cdTAwM2VzZWN1cml0eV9sZXZlbCwgY2FsbC1cdTAwM2VzZWN1cml0eV9sZXZlbCkgPzpcbiBcdFx0XHRjbXAoYnVuZGxlLVx1MDAzZXVwZ3JhZGUsIHVwZ3JhZGUpKTtcbiAjdW5kZWYgY21wXG5AQCAtMzAzLDYgKzMwNiw3IEBAIGludCByeHJwY19sb29rX3VwX2J1bmRsZShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuICNkZWZpbmUgY21wKFgsIFkpICgobG9uZykoWCkgLSAobG9uZykoWSkpXG4gXHRcdGRpZmYgPSAoY21wKGJ1bmRsZS1cdTAwM2VwZWVyLCBjYWxsLVx1MDAzZXBlZXIpID86XG4gXHRcdFx0Y21wKGJ1bmRsZS1cdTAwM2VrZXksIGNhbGwtXHUwMDNla2V5KSA/OlxuK1x0XHRcdGNtcChidW5kbGUtXHUwMDNlYXBwX2RhdGEsIGNhbGwtXHUwMDNlYXBwX2RhdGEpID86XG4gXHRcdFx0Y21wKGJ1bmRsZS1cdTAwM2VzZWN1cml0eV9sZXZlbCwgY2FsbC1cdTAwM2VzZWN1cml0eV9sZXZlbCkgPzpcbiBcdFx0XHRjbXAoYnVuZGxlLVx1MDAzZXVwZ3JhZGUsIHVwZ3JhZGUpKTtcbiAjdW5kZWYgY21wXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuYyBiL25ldC9yeHJwYy9jb25uX2V2ZW50LmNcbmluZGV4IDYxMWM3OTBiYzZkMGNlLi45MTQ2YjlkNGMyYWM1MCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9jb25uX2V2ZW50LmNcbisrKyBiL25ldC9yeHJwYy9jb25uX2V2ZW50LmNcbkBAIC0yNzksMTAgKzI3OSw3IEBAIHN0YXRpYyBpbnQgcnhycGNfcHJvY2Vzc19ldmVudChzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcbiBcdHN3aXRjaCAoc3AtXHUwMDNlaGRyLnR5cGUpIHtcbiBcdGNhc2UgUlhSUENfUEFDS0VUX1RZUEVfQ0hBTExFTkdFOlxuLVx0XHRyZXQgPSBjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZXJlc3BvbmRfdG9fY2hhbGxlbmdlKGNvbm4sIHNrYik7XG4tXHRcdHNwLVx1MDAzZWNoYWxsLmNvbm4gPSBOVUxMO1xuLVx0XHRyeHJwY19wdXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQpO1xuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXR1cm4gY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VyZXNwb25kX3RvX2NoYWxsZW5nZShjb25uLCBza2IpO1xuIFxuIFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9SRVNQT05TRTpcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjb25uLVx1MDAzZXN0YXRlX2xvY2spO1xuQEAgLTQyNSw2NiArNDIyLDYgQEAgc3RhdGljIHZvaWQgcnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdHJ4cnBjX3F1ZXVlX2Nvbm4oY29ubiwgcnhycGNfY29ubl9xdWV1ZV9yeF93b3JrKTtcbiB9XG4gXG4tLypcbi0gKiBQb3N0IGEgQ0hBTExFTkdFIHBhY2tldCB0byB0aGUgc29ja2V0IG9mIG9uZSBvZiBhIGNvbm5lY3Rpb24ncyBjYWxscyBzbyB0aGF0XG4tICogaXQgY2FuIGdldCBhcHBsaWNhdGlvbiBkYXRhIHRvIGluY2x1ZGUgaW4gdGhlIHBhY2tldCwgcG9zc2libHkgcXVlcnlpbmdcbi0gKiB1c2Vyc3BhY2UuXG4tICovXG4tc3RhdGljIGJvb2wgcnhycGNfcG9zdF9jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4tXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKHNrYik7XG4tXHRzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCA9IE5VTEw7XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcng7XG4tXHRib29sIHJlc3BvbmQgPSBmYWxzZSwgcXVldWVkID0gZmFsc2U7XG4tXG4tXHRzcC1cdTAwM2VjaGFsbC5jb25uID1cbi1cdFx0cnhycGNfZ2V0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9nZXRfY2hhbGxlbmdlX2lucHV0KTtcbi1cbi1cdGlmICghY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VjaGFsbGVuZ2VfdG9fcmVjdm1zZykge1xuLVx0XHRyeHJwY19wb3N0X3BhY2tldF90b19jb25uKGNvbm4sIHNrYik7XG4tXHRcdHJldHVybiB0cnVlO1xuLVx0fVxuLVxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVxuLVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoY29ubi1cdTAwM2VjaGFubmVscyk7IGkrKykge1xuLVx0XHRpZiAoY29ubi1cdTAwM2VjaGFubmVsc1tpXS5jYWxsKSB7XG4tXHRcdFx0Y2FsbCA9IGNvbm4tXHUwMDNlY2hhbm5lbHNbaV0uY2FsbDtcbi1cdFx0XHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVx1MDAzZXNvY2tldCk7XG4tXHRcdFx0aWYgKCFyeCkge1xuLVx0XHRcdFx0Y2FsbCA9IE5VTEw7XG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0cmVzcG9uZCA9IHRydWU7XG4tXHRcdFx0aWYgKHRlc3RfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcdTAwMjZyeC1cdTAwM2VmbGFncykpXG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHRjYWxsID0gTlVMTDtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0aWYgKCFyZXNwb25kKSB7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRyeHJwY19wdXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQpO1xuLVx0XHRzcC1cdTAwM2VjaGFsbC5jb25uID0gTlVMTDtcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0fVxuLVxuLVx0aWYgKGNhbGwpXG4tXHRcdHF1ZXVlZCA9IHJ4cnBjX25vdGlmeV9zb2NrZXRfb29iKGNhbGwsIHNrYik7XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdGlmIChjYWxsIFx1MDAyNlx1MDAyNiAhcXVldWVkKSB7XG4tXHRcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XG4tXHRcdHNwLVx1MDAzZWNoYWxsLmNvbm4gPSBOVUxMO1xuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHR9XG4tXG4tXHRpZiAoIWNhbGwpXG4tXHRcdHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTtcbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbiAvKlxuICAqIElucHV0IGEgY29ubmVjdGlvbi1sZXZlbCBwYWNrZXQuXG4gICovXG5AQCAtNTEzLDcgKzQ1MCw4IEBAIGJvb2wgcnhycGNfaW5wdXRfY29ubl9wYWNrZXQoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdH1cbiBcdFx0aWYgKCFjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZXZhbGlkYXRlX2NoYWxsZW5nZShjb25uLCBza2IpKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0cmV0dXJuIHJ4cnBjX3Bvc3RfY2hhbGxlbmdlKGNvbm4sIHNrYik7XG4rXHRcdHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTtcbitcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRjYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX1JFU1BPTlNFOlxuIFx0XHRpZiAocnhycGNfaXNfY29ubl9hYm9ydGVkKGNvbm4pKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2luc2VjdXJlLmMgYi9uZXQvcnhycGMvaW5zZWN1cmUuY1xuaW5kZXggMGIzOTA0NmJkYzYxNmEuLmMwODNjODJjNGU3ZjNmIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2luc2VjdXJlLmNcbisrKyBiL25ldC9yeHJwYy9pbnNlY3VyZS5jXG5AQCAtNDcsMTIgKzQ3LDYgQEAgc3RhdGljIGJvb2wgbm9uZV92YWxpZGF0ZV9jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGludCBub25lX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpXG4te1xuLVx0cmV0dXJuIC1FSU5WQUw7XG4tfVxuLVxuIHN0YXRpYyBpbnQgbm9uZV92ZXJpZnlfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqcmVzcG9uc2Vfc2tiLFxuIFx0XHRcdFx0dm9pZCAqcmVzcG9uc2UsIHVuc2lnbmVkIGludCBsZW4pXG5AQCAtODgsNyArODIsNiBAQCBjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgcnhycGNfbm9fc2VjdXJpdHkgPSB7XG4gXHQuc2VjdXJlX3BhY2tldFx0XHRcdD0gbm9uZV9zZWN1cmVfcGFja2V0LFxuIFx0LnZlcmlmeV9wYWNrZXRcdFx0XHQ9IG5vbmVfdmVyaWZ5X3BhY2tldCxcbiBcdC52YWxpZGF0ZV9jaGFsbGVuZ2VcdFx0PSBub25lX3ZhbGlkYXRlX2NoYWxsZW5nZSxcbi1cdC5zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlXHQ9IG5vbmVfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSxcbiBcdC52ZXJpZnlfcmVzcG9uc2VcdFx0PSBub25lX3ZlcmlmeV9yZXNwb25zZSxcbiBcdC5jbGVhclx0XHRcdFx0PSBub25lX2NsZWFyLFxuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2tleS5jIGIvbmV0L3J4cnBjL2tleS5jXG5pbmRleCBhMGFhNzhkODkyODk3Zi4uMTZiYWI3MmU2ZjA3NzcgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMva2V5LmNcbisrKyBiL25ldC9yeHJwYy9rZXkuY1xuQEAgLTg5MywzICs4OTMsNDAgQEAgc3RhdGljIGxvbmcgcnhycGNfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksXG4gXHRfbGVhdmUoXCIgPSAlenVcIiwgc2l6ZSk7XG4gXHRyZXR1cm4gc2l6ZTtcbiB9XG4rXG4rLyoqXG4rICogcnhycGNfa2VybmVsX3F1ZXJ5X2tleSAtIFF1ZXJ5IHBhcmFtZXRlcnMgZnJvbSBhbiByeHJwYyBrZXlcbisgKiBAa2V5OiBUaGUga2V5IHRvIHF1ZXJ5XG4rICogQF9zZWN1cml0eV9pbmRleDogV2hlcmUgdG8gcmV0dXJuIHRoZSBzZWN1cml0eSBpbmRleFxuKyAqIEBfa3JiNV9lbmN0eXBlOiBXaGVyZSB0byByZXR1cm4gdGhlIGtyYjUgZW5jcnlwdGlvbiB0eXBlIGlmIGFwcGxpY2FibGVcbisgKlxuKyAqIFF1ZXJ5IGFuIHJ4cnBjIGF1dGhlbnRpY2F0aW9uIGtleSwgZXh0cmFjdGluZyB0aGUgc2VjdXJpdHkgaW5kZXggZnJvbSB0aGVcbisgKiBmaXJzdCB0b2tlbiB0aGVyZWluLlxuKyAqL1xuK3ZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2tleShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHU4ICpfc2VjdXJpdHlfaW5kZXgsXG4rXHRcdFx0ICAgIHUzMiAqX2tyYjVfZW5jdHlwZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnhycGNfa2V5X3Rva2VuICp0b2tlbjtcbitcbitcdHRva2VuID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbitcdGlmICghdG9rZW4pIHtcbitcdFx0Kl9zZWN1cml0eV9pbmRleCA9IDA7XG4rXHRcdCpfa3JiNV9lbmN0eXBlID0gMDtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0Kl9zZWN1cml0eV9pbmRleCA9IHRva2VuLVx1MDAzZXNlY3VyaXR5X2luZGV4O1xuK1x0c3dpdGNoICh0b2tlbi1cdTAwM2VzZWN1cml0eV9pbmRleCkge1xuK1x0Y2FzZSBSWFJQQ19TRUNVUklUWV9SWEtBRDpcbitcdFx0Kl9rcmI1X2VuY3R5cGUgPSAwO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6XG4rXHRcdCpfa3JiNV9lbmN0eXBlID0gdG9rZW4tXHUwMDNlcnhnay1cdTAwM2VlbmN0eXBlO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdFdBUk5fT05fT05DRSgxKTtcbitcdFx0Kl9rcmI1X2VuY3R5cGUgPSAwO1xuK1x0XHRicmVhaztcbitcdH1cbit9XG4rRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfa2V5KTtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvb29iLmMgYi9uZXQvcnhycGMvb29iLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggYzgwZWUyNDg3ZDA5NDEuLjAwMDAwMDAwMDAwMDAwXG4tLS0gYS9uZXQvcnhycGMvb29iLmNcbisrKyAvZGV2L251bGxcbkBAIC0xLDM4NyArMCwwIEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbi0vKiBPdXQgb2YgYmFuZCBtZXNzYWdlIGhhbmRsaW5nIChlLmcuIGNoYWxsZW5nZS1yZXNwb25zZSlcbi0gKlxuLSAqIENvcHlyaWdodCAoQykgMjAyNSBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4tICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKVxuLSAqL1xuLVxuLSNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCI6IFwiIGZtdFxuLVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbmV0L2FmX3J4cnBjLmhcdTAwM2Vcbi0jaW5jbHVkZSBcImFyLWludGVybmFsLmhcIlxuLVxuLWVudW0gcnhycGNfb29iX2NvbW1hbmQge1xuLVx0UlhSUENfT09CX0NNRF9VTlNFVCxcbi1cdFJYUlBDX09PQl9DTURfUkVTUE9ORCxcbi19IF9fbW9kZShieXRlKTtcbi1cbi1zdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyB7XG4tXHR1NjRcdFx0XHRvb2JfaWQ7XHRcdC8qIElEIG51bWJlciBvZiBtZXNzYWdlIGlmIHJlcGx5ICovXG4tXHRzMzJcdFx0XHRhYm9ydF9jb2RlO1xuLVx0ZW51bSByeHJwY19vb2JfY29tbWFuZFx0Y29tbWFuZDtcbi1cdGJvb2xcdFx0XHRoYXZlX29vYl9pZDoxO1xuLX07XG4tXG4tLypcbi0gKiBQb3N0IGFuIG91dC1vZi1iYW5kIG1lc3NhZ2UgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlXG4tICogYXNzb2NpYXRlZCB3aXRoIGEgcmVmZXJlbmNlIGNhbGwuXG4tICovXG4tYm9vbCByeHJwY19ub3RpZnlfc29ja2V0X29vYihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKHNrYik7XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcng7XG4tXHRzdHJ1Y3Qgc29jayAqc2s7XG4tXHRib29sIHF1ZXVlZCA9IGZhbHNlO1xuLVxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVxuLVx0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cdTAwM2Vzb2NrZXQpO1xuLVx0aWYgKHJ4KSB7XG4tXHRcdHNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4tXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbi1cbi1cdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlIFx1MDAzYyBSWFJQQ19DTE9TRSkge1xuLVx0XHRcdHNrYi1cdTAwM2Vza2JfbXN0YW1wX25zID0gcngtXHUwMDNlb29iX2lkX2NvdW50ZXIrKztcbi1cdFx0XHRyeHJwY19nZXRfc2tiKHNrYiwgcnhycGNfc2tiX2dldF9wb3N0X29vYik7XG4tXHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxLCBza2IpO1xuLVx0XHRcdHF1ZXVlZCA9IHRydWU7XG4tXG4tXHRcdFx0dHJhY2VfcnhycGNfbm90aWZ5X3NvY2tldChjYWxsLVx1MDAzZWRlYnVnX2lkLCBzcC1cdTAwM2VoZHIuc2VyaWFsKTtcbi1cdFx0XHRpZiAocngtXHUwMDNlYXBwX29wcylcbi1cdFx0XHRcdHJ4LVx1MDAzZWFwcF9vcHMtXHUwMDNlbm90aWZ5X29vYihzaywgc2tiKTtcbi1cdFx0fVxuLVxuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbi1cdFx0aWYgKHF1ZXVlZCBcdTAwMjZcdTAwMjYgIXJ4LVx1MDAzZWFwcF9vcHMgXHUwMDI2XHUwMDI2ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG4tXHRcdFx0c2stXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XG4tXHR9XG4tXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdHJldHVybiBxdWV1ZWQ7XG4tfVxuLVxuLS8qXG4tICogTG9jYXRlIHRoZSBPT0IgbWVzc2FnZSB0byByZXNwb25kIHRvIGJ5IGl0cyBJRC5cbi0gKi9cbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnJ4cnBjX2ZpbmRfcGVuZGluZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCB1NjQgb29iX2lkKVxuLXtcbi1cdHN0cnVjdCByYl9ub2RlICpwO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi1cbi1cdHAgPSByeC1cdTAwM2VwZW5kaW5nX29vYnEucmJfbm9kZTtcbi1cdHdoaWxlIChwKSB7XG4tXHRcdHNrYiA9IHJiX2VudHJ5KHAsIHN0cnVjdCBza19idWZmLCByYm5vZGUpO1xuLVxuLVx0XHRpZiAob29iX2lkIFx1MDAzYyBza2ItXHUwMDNlc2tiX21zdGFtcF9ucylcbi1cdFx0XHRwID0gcC1cdTAwM2VyYl9sZWZ0O1xuLVx0XHRlbHNlIGlmIChvb2JfaWQgXHUwMDNlIHNrYi1cdTAwM2Vza2JfbXN0YW1wX25zKVxuLVx0XHRcdHAgPSBwLVx1MDAzZXJiX3JpZ2h0O1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0dXJuIHNrYjtcbi1cdH1cbi1cbi1cdHJldHVybiBOVUxMO1xuLX1cbi1cbi0vKlxuLSAqIEFkZCBhbiBPT0IgbWVzc2FnZSBpbnRvIHRoZSBwZW5kaW5nLXJlc3BvbnNlIHNldC4gIFdlIGFsd2F5cyBhc3NpZ24gdGhlIG5leHRcbi0gKiB2YWx1ZSBmcm9tIGEgNjQtYml0IGNvdW50ZXIgdG8gdGhlIG9vYl9pZCwgc28ganVzdCBhc3N1bWUgd2UncmUgYWx3YXlzIGdvaW5nXG4tICogdG8gYmUgb24gdGhlIHJpZ2h0LWhhbmQgZWRnZSBvZiB0aGUgdHJlZSBhbmQgdGhhdCB0aGUgY291bnRlciB3b24ndCB3cmFwLlxuLSAqIFRoZSB0cmVlIGlzIGFsc28gZ2l2ZW4gYSByZWYgdG8gdGhlIG1lc3NhZ2UuXG4tICovXG4tdm9pZCByeHJwY19hZGRfcGVuZGluZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLXtcbi1cdHN0cnVjdCByYl9ub2RlICoqcHAgPSBcdTAwMjZyeC1cdTAwM2VwZW5kaW5nX29vYnEucmJfbm9kZSwgKnAgPSBOVUxMO1xuLVxuLVx0d2hpbGUgKCpwcCkge1xuLVx0XHRwID0gKnBwO1xuLVx0XHRwcCA9IFx1MDAyNigqcHApLVx1MDAzZXJiX3JpZ2h0O1xuLVx0fVxuLVxuLVx0cmJfbGlua19ub2RlKFx1MDAyNnNrYi1cdTAwM2VyYm5vZGUsIHAsIHBwKTtcbi1cdHJiX2luc2VydF9jb2xvcihcdTAwMjZza2ItXHUwMDNlcmJub2RlLCBcdTAwMjZyeC1cdTAwM2VwZW5kaW5nX29vYnEpO1xuLX1cbi1cbi0vKlxuLSAqIEV4dHJhY3QgY29udHJvbCBtZXNzYWdlcyBmcm9tIHRoZSBzZW5kbXNnKCkgY29udHJvbCBidWZmZXIuXG4tICovXG4tc3RhdGljIGludCByeHJwY19zZW5kbXNnX29vYl9jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgKnApXG4te1xuLVx0c3RydWN0IGNtc2doZHIgKmNtc2c7XG4tXHRpbnQgbGVuO1xuLVxuLVx0aWYgKG1zZy1cdTAwM2Vtc2dfY29udHJvbGxlbiA9PSAwKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGZvcl9lYWNoX2Ntc2doZHIoY21zZywgbXNnKSB7XG4tXHRcdGlmICghQ01TR19PSyhtc2csIGNtc2cpKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0XHRsZW4gPSBjbXNnLVx1MDAzZWNtc2dfbGVuIC0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKTtcbi1cdFx0X2RlYnVnKFwiQ01TRyAlZCwgJWQsICVkXCIsXG4tXHRcdCAgICAgICBjbXNnLVx1MDAzZWNtc2dfbGV2ZWwsIGNtc2ctXHUwMDNlY21zZ190eXBlLCBsZW4pO1xuLVxuLVx0XHRpZiAoY21zZy1cdTAwM2VjbXNnX2xldmVsICE9IFNPTF9SWFJQQylcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0c3dpdGNoIChjbXNnLVx1MDAzZWNtc2dfdHlwZSkge1xuLVx0XHRjYXNlIFJYUlBDX09PQl9JRDpcbi1cdFx0XHRpZiAobGVuICE9IHNpemVvZihwLVx1MDAzZW9vYl9pZCkgfHwgcC1cdTAwM2VoYXZlX29vYl9pZClcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdG1lbWNweShcdTAwMjZwLVx1MDAzZW9vYl9pZCwgQ01TR19EQVRBKGNtc2cpLCBzaXplb2YocC1cdTAwM2Vvb2JfaWQpKTtcbi1cdFx0XHRwLVx1MDAzZWhhdmVfb29iX2lkID0gdHJ1ZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBSWFJQQ19SRVNQT05EOlxuLVx0XHRcdGlmIChwLVx1MDAzZWNvbW1hbmQgIT0gUlhSUENfT09CX0NNRF9VTlNFVClcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdHAtXHUwMDNlY29tbWFuZCA9IFJYUlBDX09PQl9DTURfUkVTUE9ORDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBSWFJQQ19BQk9SVDpcbi1cdFx0XHRpZiAobGVuICE9IHNpemVvZihwLVx1MDAzZWFib3J0X2NvZGUpIHx8IHAtXHUwMDNlYWJvcnRfY29kZSlcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdG1lbWNweShcdTAwMjZwLVx1MDAzZWFib3J0X2NvZGUsIENNU0dfREFUQShjbXNnKSwgc2l6ZW9mKHAtXHUwMDNlYWJvcnRfY29kZSkpO1xuLVx0XHRcdGlmIChwLVx1MDAzZWFib3J0X2NvZGUgPT0gMClcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBOlxuLVx0XHRcdGlmIChwLVx1MDAzZWNvbW1hbmQgIT0gUlhSUENfT09CX0NNRF9SRVNQT05EKVxuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHN3aXRjaCAocC1cdTAwM2Vjb21tYW5kKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DTURfUkVTUE9ORDpcbi1cdFx0aWYgKCFwLVx1MDAzZWhhdmVfb29iX2lkKVxuLVx0XHRcdHJldHVybiAtRUJBRFNMVDtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi0vKlxuLSAqIEFsbG93IHVzZXJzcGFjZSB0byByZXNwb25kIHRvIGFuIE9PQiB1c2luZyBzZW5kbXNnKCkuXG4tICovXG4tc3RhdGljIGludCByeHJwY19yZXNwb25kX3RvX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4tXHRcdFx0XHRzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyAqcCxcbi1cdFx0XHRcdHN0cnVjdCBtc2doZHIgKm1zZylcbi17XG4tXHRzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubjtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3A7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLVx0aW50IHJldDtcbi1cbi1cdHNrYiA9IHJ4cnBjX2ZpbmRfcGVuZGluZ19vb2IocngsIHAtXHUwMDNlb29iX2lkKTtcbi1cdGlmIChza2IpXG4tXHRcdHJiX2VyYXNlKFx1MDAyNnNrYi1cdTAwM2VyYm5vZGUsIFx1MDAyNnJ4LVx1MDAzZXBlbmRpbmdfb29icSk7XG4tXHRyZWxlYXNlX3NvY2soXHUwMDI2cngtXHUwMDNlc2spO1xuLVx0aWYgKCFza2IpXG4tXHRcdHJldHVybiAtRUJBRFNMVDtcbi1cbi1cdHNwID0gcnhycGNfc2tiKHNrYik7XG4tXG4tXHRzd2l0Y2ggKHAtXHUwMDNlY29tbWFuZCkge1xuLVx0Y2FzZSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQ6XG4tXHRcdHJldCA9IC1FUFJPVE87XG4tXHRcdGlmIChza2ItXHUwMDNlbWFyayAhPSBSWFJQQ19PT0JfQ0hBTExFTkdFKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRjb25uID0gc3AtXHUwMDNlY2hhbGwuY29ubjtcbi1cdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4tXHRcdGlmICghY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VzZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAocC1cdTAwM2VhYm9ydF9jb2RlKSB7XG4tXHRcdFx0cnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBwLVx1MDAzZWFib3J0X2NvZGUsIC1FQ09OTkFCT1JURUQsXG4tXHRcdFx0XHRcdCByeHJwY19hYm9ydF9yZXNwb25zZV9zZW5kbXNnKTtcbi1cdFx0XHRyZXQgPSAwO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHJldCA9IGNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZShza2IsIG1zZyk7XG4tXHRcdH1cbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdHN3aXRjaCAoc2tiLVx1MDAzZW1hcmspIHtcbi1cdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcbi1cdFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtXHUwMDNlY2hhbGwuY29ubiwgcnhycGNfY29ubl9wdXRfb29iKTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXHRyeHJwY19mcmVlX3NrYihza2IsIHJ4cnBjX3NrYl9wdXRfb29iKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLS8qXG4tICogU2VuZCBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlIG9yIHJlc3BvbmQgdG8gYSByZWNlaXZlZCBvdXQtb2YtYmFuZCBtZXNzYWdlLlxuLSAqIC0gY2FsbGVyIGdpdmVzIHVzIHRoZSBzb2NrZXQgbG9ja1xuLSAqIC0gdGhlIHNvY2tldCBtYXkgYmUgZWl0aGVyIGEgY2xpZW50IHNvY2tldCBvciBhIHNlcnZlciBzb2NrZXRcbi0gKi9cbi1pbnQgcnhycGNfc2VuZG1zZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4te1xuLVx0c3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgcCA9IHt9O1xuLVx0aW50IHJldDtcbi1cbi1cdF9lbnRlcihcIlwiKTtcbi1cbi1cdHJldCA9IHJ4cnBjX3NlbmRtc2dfb29iX2Ntc2cobXNnLCBcdTAwMjZwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZXJyb3JfcmVsZWFzZV9zb2NrO1xuLVxuLVx0aWYgKHAuaGF2ZV9vb2JfaWQpXG4tXHRcdHJldHVybiByeHJwY19yZXNwb25kX3RvX29vYihyeCwgXHUwMDI2cCwgbXNnKTtcbi1cbi1cdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG4tXG4tXHRzd2l0Y2ggKHAuY29tbWFuZCkge1xuLVx0ZGVmYXVsdDpcbi1cdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHRfbGVhdmUoXCIgPSAlZFwiLCByZXQpO1xuLVx0cmV0dXJuIHJldDtcbi1cbi1lcnJvcl9yZWxlYXNlX3NvY2s6XG4tXHRyZWxlYXNlX3NvY2soXHUwMDI2cngtXHUwMDNlc2spO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLyoqXG4tICogcnhycGNfa2VybmVsX3F1ZXJ5X29vYiAtIFF1ZXJ5IHRoZSBwYXJhbWV0ZXJzIG9mIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2Vcbi0gKiBAb29iOiBUaGUgbWVzc2FnZSB0byBxdWVyeVxuLSAqIEBfcGVlcjogV2hlcmUgdG8gcmV0dXJuIHRoZSBwZWVyIHJlY29yZFxuLSAqIEBfcGVlcl9hcHBkYXRhOiBUaGUgYXBwbGljYXRpb24gZGF0YSBhdHRhY2hlZCB0byBhIHBlZXIgcmVjb3JkXG4tICpcbi0gKiBFeHRyYWN0IHVzZWZ1bCBwYXJhbWV0ZXJzIGZyb20gYW4gb3V0LW9mLWJhbmQgbWVzc2FnZS4gIFRoZSBzb3VyY2UgcGVlclxuLSAqIHBhcmFtZXRlcnMgYXJlIHJldHVybmVkIHRocm91Z2ggdGhlIGFyZ3VtZW50IGxpc3QgYW5kIHRoZSBtZXNzYWdlIHR5cGUgaXNcbi0gKiByZXR1cm5lZC5cbi0gKlxuLSAqIFJldHVybjpcbi0gKiAqICVSWFJQQ19PT0JfQ0hBTExFTkdFIC0gQ2hhbGxlbmdlIHdhbnRpbmcgYSByZXNwb25zZS5cbi0gKi9cbi1lbnVtIHJ4cnBjX29vYl90eXBlIHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYixcbi1cdFx0XHRcdFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKipfcGVlcixcbi1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqX3BlZXJfYXBwZGF0YSlcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKG9vYik7XG4tXHRlbnVtIHJ4cnBjX29vYl90eXBlIHR5cGUgPSBvb2ItXHUwMDNlbWFyaztcbi1cbi1cdHN3aXRjaCAodHlwZSkge1xuLVx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxuLVx0XHQqX3BlZXJcdFx0PSBzcC1cdTAwM2VjaGFsbC5jb25uLVx1MDAzZXBlZXI7XG4tXHRcdCpfcGVlcl9hcHBkYXRhXHQ9IHNwLVx1MDAzZWNoYWxsLmNvbm4tXHUwMDNlcGVlci1cdTAwM2VhcHBfZGF0YTtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRXQVJOX09OX09OQ0UoMSk7XG4tXHRcdCpfcGVlclx0XHQ9IE5VTEw7XG4tXHRcdCpfcGVlcl9hcHBkYXRhXHQ9IDA7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHR5cGU7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3F1ZXJ5X29vYik7XG4tXG4tLyoqXG4tICogcnhycGNfa2VybmVsX2RlcXVldWVfb29iIC0gRGVxdWV1ZSBhbmQgcmV0dXJuIHRoZSBmcm9udCBPT0IgbWVzc2FnZVxuLSAqIEBzb2NrOiBUaGUgc29ja2V0IHRvIHF1ZXJ5XG4tICogQF90eXBlOiBXaGVyZSB0byByZXR1cm4gdGhlIG1lc3NhZ2UgdHlwZVxuLSAqXG4tICogRGVxdWV1ZSB0aGUgZnJvbnQgT09CIG1lc3NhZ2UsIGlmIHRoZXJlIGlzIG9uZSwgYW5kIHJldHVybiBpdCBhbmRcbi0gKiBpdHMgdHlwZS5cbi0gKlxuLSAqIFJldHVybjogVGhlIHNrX2J1ZmYgcmVwcmVzZW50aW5nIHRoZSBPT0IgbWVzc2FnZSBvciAlTlVMTCBpZiB0aGUgcXVldWUgd2FzXG4tICogZW1wdHkuXG4tICovXG4tc3RydWN0IHNrX2J1ZmYgKnJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLVx0XHRcdFx0XHQgZW51bSByeHJwY19vb2JfdHlwZSAqX3R5cGUpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cdTAwM2Vzayk7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqb29iO1xuLVxuLVx0b29iID0gc2tiX2RlcXVldWUoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKTtcbi1cdGlmIChvb2IpXG4tXHRcdCpfdHlwZSA9IG9vYi1cdTAwM2VtYXJrO1xuLVx0cmV0dXJuIG9vYjtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2IpO1xuLVxuLS8qKlxuLSAqIHJ4cnBjX2tlcm5lbF9mcmVlX29vYiAtIEZyZWUgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZVxuLSAqIEBvb2I6IFRoZSBPT0IgbWVzc2FnZSB0byBmcmVlXG4tICpcbi0gKiBGcmVlIGFuIE9PQiBtZXNzYWdlIGFsb25nIHdpdGggYW55IHJlc291cmNlcyBpdCBob2xkcy5cbi0gKi9cbi12b2lkIHJ4cnBjX2tlcm5lbF9mcmVlX29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Iob29iKTtcbi1cbi1cdHN3aXRjaCAob29iLVx1MDAzZW1hcmspIHtcbi1cdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcbi1cdFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtXHUwMDNlY2hhbGwuY29ubiwgcnhycGNfY29ubl9wdXRfb29iKTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHRyeHJwY19mcmVlX3NrYihvb2IsIHJ4cnBjX3NrYl9wdXRfcHVyZ2Vfb29iKTtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfZnJlZV9vb2IpO1xuLVxuLS8qKlxuLSAqIHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UgLSBRdWVyeSB0aGUgcGFyYW1ldGVycyBvZiBhIGNoYWxsZW5nZVxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgdG8gcXVlcnlcbi0gKiBAX3BlZXI6IFdoZXJlIHRvIHJldHVybiB0aGUgcGVlciByZWNvcmRcbi0gKiBAX3BlZXJfYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgYXR0YWNoZWQgdG8gYSBwZWVyIHJlY29yZFxuLSAqIEBfc2VydmljZV9pZDogV2hlcmUgdG8gcmV0dXJuIHRoZSBjb25uZWN0aW9uIHNlcnZpY2UgSURcbi0gKiBAX3NlY3VyaXR5X2luZGV4OiBXaGVyZSB0byByZXR1cm4gdGhlIGNvbm5lY3Rpb24gc2VjdXJpdHkgaW5kZXhcbi0gKlxuLSAqIEV4dHJhY3QgdXNlZnVsIHBhcmFtZXRlcnMgZnJvbSBhIENIQUxMRU5HRSBtZXNzYWdlLlxuLSAqL1xuLXZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhLFxuLVx0XHRcdFx0ICB1MTYgKl9zZXJ2aWNlX2lkLCB1OCAqX3NlY3VyaXR5X2luZGV4KVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTtcbi1cbi1cdCpfcGVlclx0XHQ9IHNwLVx1MDAzZWNoYWxsLmNvbm4tXHUwMDNlcGVlcjtcbi1cdCpfcGVlcl9hcHBkYXRhXHQ9IHNwLVx1MDAzZWNoYWxsLmNvbm4tXHUwMDNlcGVlci1cdTAwM2VhcHBfZGF0YTtcbi1cdCpfc2VydmljZV9pZFx0PSBzcC1cdTAwM2VoZHIuc2VydmljZUlkO1xuLVx0Kl9zZWN1cml0eV9pbmRleCA9IHNwLVx1MDAzZWhkci5zZWN1cml0eUluZGV4O1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UpO1xuLVxuLS8qKlxuLSAqIHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlIC0gQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byByZWplY3QgYSBjaGFsbGVuZ2Vcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIGJlIHJlamVjdGVkXG4tICogQGFib3J0X2NvZGU6IFRoZSBhYm9ydCBjb2RlIHRvIHN0aWNrIGludG8gdGhlIEFCT1JUIHBhY2tldFxuLSAqIEBlcnJvcjogTG9jYWwgZXJyb3IgdmFsdWVcbi0gKiBAd2h5OiBJbmRpY2F0aW9uIGFzIHRvIHdoeS5cbi0gKlxuLSAqIEFsbG93IGEga2VybmVsIHNlcnZpY2UgdG8gcmVqZWN0IGEgY2hhbGxlbmdlIGJ5IGFib3J0aW5nIHRoZSBjb25uZWN0aW9uIGlmXG4tICogaXQncyBzdGlsbCBpbiBhbiBhYm9ydGFibGUgc3RhdGUuICBUaGUgZXJyb3IgaXMgcmV0dXJuZWQgc28gdGhpcyBmdW5jdGlvblxuLSAqIGNhbiBiZSB1c2VkIHdpdGggYSByZXR1cm4gc3RhdGVtZW50LlxuLSAqXG4tICogUmV0dXJuOiBUaGUgJWVycm9yIHBhcmFtZXRlci5cbi0gKi9cbi1pbnQgcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwgdTMyIGFib3J0X2NvZGUsXG4tXHRcdFx0XHQgIGludCBlcnJvciwgZW51bSByeHJwY19hYm9ydF9yZWFzb24gd2h5KVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTtcbi1cbi1cdF9lbnRlcihcInsleH0sJWQsJWQsJXVcIiwgc3AtXHUwMDNlaGRyLnNlcmlhbCwgYWJvcnRfY29kZSwgZXJyb3IsIHdoeSk7XG4tXG4tXHRyeHJwY19hYm9ydF9jb25uKHNwLVx1MDAzZWNoYWxsLmNvbm4sIE5VTEwsIGFib3J0X2NvZGUsIGVycm9yLCB3aHkpO1xuLVx0cmV0dXJuIGVycm9yO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKTtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcHJvYy5jIGIvbmV0L3J4cnBjL3Byb2MuY1xuaW5kZXggZTlhMjdmYTdiMjVkOGIuLmYzMDA0OTFiMDZiZGFjIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL3Byb2MuY1xuKysrIGIvbmV0L3J4cnBjL3Byb2MuY1xuQEAgLTIzOCw3ICsyMzgsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX2J1bmRsZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiBcdFx0c2VxX3B1dHMoc2VxLFxuIFx0XHRcdCBcIlByb3RvIExvY2FsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiBcdFx0XHQgXCIgUmVtb3RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuLVx0XHRcdCBcIiBTdklEIFJlZiBBY3QgRmxnIEtleSAgICAgIHxcIlxuK1x0XHRcdCBcIiBTdklEIFJlZiBBY3QgRmxnIEtleSAgICAgIEFwcERhdGEgIHxcIlxuIFx0XHRcdCBcIiBCdW5kbGUgICBDb25uXzAgICBDb25uXzEgICBDb25uXzIgICBDb25uXzNcXG5cIlxuIFx0XHRcdCApO1xuIFx0XHRyZXR1cm4gMDtcbkBAIC0yNTAsNyArMjUwLDcgQEAgc3RhdGljIGludCByeHJwY19idW5kbGVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4gXHRzY25wcmludGYocmJ1ZmYsIHNpemVvZihyYnVmZiksIFwiJXBJU3BjXCIsIFx1MDAyNmJ1bmRsZS1cdTAwM2VwZWVyLVx1MDAzZXNyeC50cmFuc3BvcnQpO1xuIFx0c2VxX3ByaW50ZihzZXEsXG4gXHRcdCAgIFwiVURQICAgJS00Ny40N3MgJS00Ny40N3MgJTR4ICUzdSAlM2RcIlxuLVx0XHQgICBcIiAlYyVjJWMgJTA4eCB8ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eFxcblwiLFxuK1x0XHQgICBcIiAlYyVjJWMgJTA4eCAlMDh4IHwgJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4XFxuXCIsXG4gXHRcdCAgIGxidWZmLFxuIFx0XHQgICByYnVmZixcbiBcdFx0ICAgYnVuZGxlLVx1MDAzZXNlcnZpY2VfaWQsXG5AQCAtMjYwLDYgKzI2MCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfYnVuZGxlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIFx0XHQgICBidW5kbGUtXHUwMDNlZXhjbHVzaXZlID8gJ2UnIDogJy0nLFxuIFx0XHQgICBidW5kbGUtXHUwMDNldXBncmFkZSA/ICd1JyA6ICctJyxcbiBcdFx0ICAga2V5X3NlcmlhbChidW5kbGUtXHUwMDNla2V5KSxcbitcdFx0ICAga2V5X3NlcmlhbChidW5kbGUtXHUwMDNlYXBwX2RhdGEpLFxuIFx0XHQgICBidW5kbGUtXHUwMDNlZGVidWdfaWQsXG4gXHRcdCAgIGJ1bmRsZS1cdTAwM2Vjb25uX2lkc1swXSxcbiBcdFx0ICAgYnVuZGxlLVx1MDAzZWNvbm5faWRzWzFdLFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jXG5pbmRleCBlZmNiYTRiMmU3NGYwYy4uOGM0NTcxOTgyZWRjNDUgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcmVjdm1zZy5jXG4rKysgYi9uZXQvcnhycGMvcmVjdm1zZy5jXG5AQCAtMTcsMTMgKzE3LDEyIEBAXG4gI2luY2x1ZGUgXCJhci1pbnRlcm5hbC5oXCJcbiBcbiAvKlxuLSAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXJcbi0gKiBub3RpZmljYXRpb25zIGFyZSBzdXBwcmVzc2VkIGJ5IHB1dHRpbmcgcmVjdm1zZ19saW5rIG9uIGEgZHVtbXkgcXVldWUuXG4rICogUmVxdWV1ZSBhIGNhbGwgZm9yIHJlY3Ztc2coKSB0byBwaWNrIHVwLlxuICAqL1xuLXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbitzdGF0aWMgdm9pZCByeHJwY19yZXF1ZXVlX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4ge1xuLVx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4O1xuLVx0c3RydWN0IHNvY2sgKnNrO1xuK1x0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cdTAwM2Vzayk7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZyeC1cdTAwM2VzaztcbiBcbiBcdF9lbnRlcihcIiVkXCIsIGNhbGwtXHUwMDNlZGVidWdfaWQpO1xuIFxuQEAgLTMyLDMxICszMSwxOCBAQCB2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cbi1cdHJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtXHUwMDNlc29ja2V0KTtcbi1cdHNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4tXHRpZiAocnggXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlIFx1MDAzYyBSWFJQQ19DTE9TRSkge1xuLVx0XHRpZiAoY2FsbC1cdTAwM2Vub3RpZnlfcngpIHtcbi1cdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2spO1xuLVx0XHRcdGNhbGwtXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVx1MDAzZXVzZXJfY2FsbF9JRCk7XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2spO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbi1cdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaykpIHtcbi1cdFx0XHRcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xuLVx0XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaywgXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKTtcbi1cdFx0XHR9XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4rXHRpZiAobGlzdF9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaykpIHtcbitcdFx0cnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7XG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmssIFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbiBcbi1cdFx0XHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xuLVx0XHRcdFx0X2RlYnVnKFwiY2FsbCAlcHNcIiwgc2stXHUwMDNlc2tfZGF0YV9yZWFkeSk7XG4tXHRcdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbi1cdFx0XHR9XG4tXHRcdH1cbitcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XG4rXHRcdF9kZWJ1ZyhcImNhbGwgJXBzXCIsIHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkpO1xuK1x0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbiBcdH1cbiBcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0X2xlYXZlKFwiXCIpO1xuIH1cbiBcbkBAIC0yMTUsNjEgKzIwMSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ191c2VyX2lkKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4gXHR9XG4gfVxuIFxuLS8qXG4tICogRGVhbCB3aXRoIGEgQ0hBTExFTkdFIHBhY2tldC5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfY2hhbGxlbmdlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsIHVuc2lnbmVkIGludCBmbGFncylcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XG4tXHRzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiA9IHNwLVx1MDAzZWNoYWxsLmNvbm47XG4tXG4tXHRyZXR1cm4gY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VjaGFsbGVuZ2VfdG9fcmVjdm1zZyhjb25uLCBjaGFsbGVuZ2UsIG1zZyk7XG4tfVxuLVxuLS8qXG4tICogUHJvY2VzcyBPT0IgcGFja2V0cy4gIENhbGxlZCB3aXRoIHRoZSBzb2NrZXQgbG9ja2VkLlxuLSAqL1xuLXN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19vb2Ioc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLVx0XHRcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKVxuLXtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stXHUwMDNlc2spO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi1cdGJvb2wgbmVlZF9yZXNwb25zZSA9IGZhbHNlO1xuLVx0aW50IHJldDtcbi1cbi1cdHNrYiA9IHNrYl9wZWVrKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSk7XG4tXHRpZiAoIXNrYilcbi1cdFx0cmV0dXJuIC1FQUdBSU47XG4tXHRyeHJwY19zZWVfc2tiKHNrYiwgcnhycGNfc2tiX3NlZV9yZWN2bXNnKTtcbi1cbi1cdHJldCA9IHB1dF9jbXNnKG1zZywgU09MX1JYUlBDLCBSWFJQQ19PT0JfSUQsIHNpemVvZih1NjQpLFxuLVx0XHQgICAgICAgXHUwMDI2c2tiLVx1MDAzZXNrYl9tc3RhbXBfbnMpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHN3aXRjaCAoKGVudW0gcnhycGNfb29iX3R5cGUpc2tiLVx1MDAzZW1hcmspIHtcbi1cdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcbi1cdFx0bmVlZF9yZXNwb25zZSA9IHRydWU7XG4tXHRcdHJldCA9IHJ4cnBjX3JlY3Ztc2dfY2hhbGxlbmdlKHNvY2ssIG1zZywgc2tiLCBmbGFncyk7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0V0FSTl9PTkNFKDEsIFwicmVjdm1zZygpIGNhbid0IHByb2Nlc3MgdW5rbm93biBPT0IgdHlwZSAldVxcblwiLFxuLVx0XHRcdCAgc2tiLVx1MDAzZW1hcmspO1xuLVx0XHRyZXQgPSAtRUlPO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdGlmICghKGZsYWdzIFx1MDAyNiBNU0dfUEVFSykpIHtcbi1cdFx0c2tiX3VubGluayhza2IsIFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSk7XG4tXHRcdGlmIChuZWVkX3Jlc3BvbnNlKVxuLVx0XHRcdHJ4cnBjX2FkZF9wZW5kaW5nX29vYihyeCwgc2tiKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9vb2IpO1xuLVx0fVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gLypcbiAgKiBEZWxpdmVyIG1lc3NhZ2VzIHRvIGEgY2FsbC4gIFRoaXMga2VlcHMgcHJvY2Vzc2luZyBwYWNrZXRzIHVudGlsIHRoZSBidWZmZXJcbiAgKiBpcyBmaWxsZWQgYW5kIHdlIGZpbmQgZWl0aGVyIG1vcmUgREFUQSAocmV0dXJucyAwKSBvciB0aGUgZW5kIG9mIHRoZSBEQVRBXG5AQCAtMjgxLDcgKzIxMiw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRcdCAgICAgIHNpemVfdCBsZW4sIGludCBmbGFncywgc2l6ZV90ICpfb2Zmc2V0KVxuIHtcbiBcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3A7XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRyeHJwY19zZXFfdCBzZXEgPSAwO1xuIFx0c2l6ZV90IHJlbWFpbjtcbkBAIC0zNzYsMTMgKzMwNiw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFxuIFx0XHRpZiAoIShmbGFncyBcdTAwMjYgTVNHX1BFRUspKVxuIFx0XHRcdHJ4cnBjX3JvdGF0ZV9yeF93aW5kb3coY2FsbCk7XG4tXG4tXHRcdGlmICghcngtXHUwMDNlYXBwX29wcyBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuLVx0XHRcdHRyYWNlX3J4cnBjX3JlY3ZkYXRhKGNhbGwsIHJ4cnBjX3JlY3Ztc2dfb29icSwgc2VxLFxuLVx0XHRcdFx0XHQgICAgIHJ4X3BrdF9vZmZzZXQsIHJ4X3BrdF9sZW4sIHJldCk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiBcdH1cbiBcbiBvdXQ6XG5AQCAtNDMwLDE0ICszNTMsMTIgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0LyogUmV0dXJuIGltbWVkaWF0ZWx5IGlmIGEgY2xpZW50IHNvY2tldCBoYXMgbm8gb3V0c3RhbmRpbmcgY2FsbHMgKi9cbiBcdGlmIChSQl9FTVBUWV9ST09UKFx1MDAyNnJ4LVx1MDAzZWNhbGxzKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBsaXN0X2VtcHR5KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgcngtXHUwMDNlc2suc2tfc3RhdGUgIT0gUlhSUENfU0VSVkVSX0xJU1RFTklORykge1xuIFx0XHRyZWxlYXNlX3NvY2soXHUwMDI2cngtXHUwMDNlc2spO1xuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdH1cbiBcbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpIHtcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSkpIHtcbiBcdFx0cmV0ID0gLUVXT1VMREJMT0NLO1xuIFx0XHRpZiAodGltZW8gPT0gMCkge1xuIFx0XHRcdGNhbGwgPSBOVUxMO1xuQEAgLTQ1Myw4ICszNzQsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byB3YWl0X2Vycm9yO1xuIFxuLVx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpIHtcbitcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKSkge1xuIFx0XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbiBcdFx0XHRcdGdvdG8gd2FpdF9pbnRlcnJ1cHRlZDtcbiBcdFx0XHR0cmFjZV9yeHJwY19yZWN2bXNnKDAsIHJ4cnBjX3JlY3Ztc2dfd2FpdCwgMCk7XG5AQCAtNDY0LDE1ICszODQsNiBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdGdvdG8gdHJ5X2FnYWluO1xuIFx0fVxuIFxuLVx0LyogRGVhbCB3aXRoIE9PQiBtZXNzYWdlcyBiZWZvcmUgd2UgY29uc2lkZXIgZ2V0dGluZyBub3JtYWwgZGF0YS4gKi9cbi1cdGlmICghc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpIHtcbi1cdFx0cmV0ID0gcnhycGNfcmVjdm1zZ19vb2Ioc29jaywgbXNnLCBmbGFncyk7XG4tXHRcdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG4tXHRcdGlmIChyZXQgPT0gLUVBR0FJTilcbi1cdFx0XHRnb3RvIHRyeV9hZ2Fpbjtcbi1cdFx0Z290byBlcnJvcl90cmFjZTtcbi1cdH1cbi1cbiBcdC8qIEZpbmQgdGhlIG5leHQgY2FsbCBhbmQgZGVxdWV1ZSBpdCBpZiB3ZSdyZSBub3QganVzdCBwZWVraW5nLiAgSWYgd2VcbiBcdCAqIGRvIGRlcXVldWUgaXQsIHRoYXQgY29tZXMgd2l0aCBhIHJlZiB0aGF0IHdlIHdpbGwgbmVlZCB0byByZWxlYXNlLlxuIFx0ICogV2UgYWxzbyB3YW50IHRvIHdlZWQgb3V0IGNhbGxzIHRoYXQgZ290IHJlcXVldWVkIHdoaWxzdCB3ZSB3ZXJlXG5AQCAtNDgzLDggKzM5NCw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdGNhbGwgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCByeHJwY19jYWxsLCByZWN2bXNnX2xpbmspO1xuIFxuIFx0aWYgKCFyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfcXVldWUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpKSB7XG4rXHQgICAgc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19xdWV1ZSkpIHtcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluayk7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuIFx0XHRyZWxlYXNlX3NvY2soXHUwMDI2cngtXHUwMDNlc2spO1xuQEAgLTU2MSw3ICs0NzEsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXG4gXHRpZiAoIShmbGFncyBcdTAwMjYgTVNHX1BFRUspIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFza2JfcXVldWVfZW1wdHkoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX3F1ZXVlKSlcbi1cdFx0cnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTtcbitcdFx0cnhycGNfcmVxdWV1ZV9jYWxsKHNvY2ssIGNhbGwpO1xuIFx0Z290byBub3RfeWV0X2NvbXBsZXRlO1xuIFxuIGNhbGxfZmFpbGVkOlxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeGdrLmMgYi9uZXQvcnhycGMvcnhnay5jXG5pbmRleCA3N2E2N2FjZTFkMjQ4MS4uYzY0ZWY5Njc2M2FlMmQgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcnhnay5jXG4rKysgYi9uZXQvcnhycGMvcnhnay5jXG5AQCAtMTEsNiArMTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2V5LXR5cGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2tleXMvdXNlci10eXBlLmhcdTAwM2VcbiAjaW5jbHVkZSBcImFyLWludGVybmFsLmhcIlxuICNpbmNsdWRlIFwicnhna19jb21tb24uaFwiXG4gXG5AQCAtNzM0LDM3ICs3MzUsNiBAQCBzdGF0aWMgYm9vbCByeGdrX3ZhbGlkYXRlX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi0vKipcbi0gKiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UgLSBRdWVyeSBSeEdLLXNwZWNpZmljIGNoYWxsZW5nZSBwYXJhbWV0ZXJzXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSBwYWNrZXQgdG8gcXVlcnlcbi0gKlxuLSAqIFJldHVybjogVGhlIEtlcmJlcm9zIDUgZW5jb2RpbmcgdHlwZSBmb3IgdGhlIGNoYWxsZW5nZWQgY29ubmVjdGlvbi5cbi0gKi9cbi11MzIgcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0cmV0dXJuIHNwLVx1MDAzZWNoYWxsLmNvbm4tXHUwMDNlcnhnay5lbmN0eXBlO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSk7XG4tXG4tLypcbi0gKiBGaWxsIG91dCB0aGUgY29udHJvbCBtZXNzYWdlIHRvIHBhc3MgdG8gdXNlcnNwYWNlIHRvIGluZm9ybSBhYm91dCB0aGVcbi0gKiBjaGFsbGVuZ2UuXG4tICovXG4tc3RhdGljIGludCByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpXG4te1xuLVx0c3RydWN0IHJ4Z2tfY2hhbGxlbmdlIGNoYWxsO1xuLVxuLVx0Y2hhbGwuYmFzZS5zZXJ2aWNlX2lkXHRcdD0gY29ubi1cdTAwM2VzZXJ2aWNlX2lkO1xuLVx0Y2hhbGwuYmFzZS5zZWN1cml0eV9pbmRleFx0PSBjb25uLVx1MDAzZXNlY3VyaXR5X2l4O1xuLVx0Y2hhbGwuZW5jdHlwZVx0XHRcdD0gY29ubi1cdTAwM2VyeGdrLmVuY3R5cGU7XG4tXG4tXHRyZXR1cm4gcHV0X2Ntc2cobXNnLCBTT0xfUlhSUEMsIFJYUlBDX0NIQUxMRU5HRUQsIHNpemVvZihjaGFsbCksIFx1MDAyNmNoYWxsKTtcbi19XG4tXG4gLypcbiAgKiBJbnNlcnQgdGhlIHJlcXVpc2l0ZSBhbW91bnQgb2YgWERSIHBhZGRpbmcgZm9yIHRoZSBsZW5ndGggZ2l2ZW4uXG4gICovXG5AQCAtODM3LDcgKzgwNyw3IEBAIHN0YXRpYyBub2lubGluZSBzc2l6ZV90IHJ4Z2tfaW5zZXJ0X3Jlc3BvbnNlX2hlYWRlcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29uXG4gICovXG4gc3RhdGljIHNzaXplX3Qgcnhna19jb25zdHJ1Y3RfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEsXG4rXHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqYXBwZGF0YSxcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpyZXNwb25zZSxcbiBcdFx0XHRcdFx0ICAgIHNpemVfdCBvZmZzZXQpXG4ge1xuQEAgLTg1OSwyMCArODI5LDIwIEBAIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVQUk9UTztcbiBcbi1cdGEuYXBwZGF0YV9sZW4gPSBodG9ubChhcHBkYXRhLVx1MDAzZWxlbik7XG4rXHRhLmFwcGRhdGFfbGVuID0gaHRvbmwoYXBwZGF0YS1cdTAwM2VkYXRhbGVuKTtcbiBcbiBcdHJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIFx1MDAyNmEsIHNpemVvZihhKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0b2Zmc2V0ICs9IHNpemVvZihhKTtcbiBcbi1cdGlmIChhcHBkYXRhLVx1MDAzZWxlbikge1xuLVx0XHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBhcHBkYXRhLVx1MDAzZWRhdGEsIGFwcGRhdGEtXHUwMDNlbGVuKTtcbitcdGlmIChhcHBkYXRhLVx1MDAzZWRhdGFsZW4pIHtcbitcdFx0cmV0ID0gc2tiX3N0b3JlX2JpdHMocmVzcG9uc2UsIG9mZnNldCwgYXBwZGF0YS1cdTAwM2VkYXRhLCBhcHBkYXRhLVx1MDAzZWRhdGFsZW4pO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdG9mZnNldCArPSBhcHBkYXRhLVx1MDAzZWxlbjtcbitcdFx0b2Zmc2V0ICs9IGFwcGRhdGEtXHUwMDNlZGF0YWxlbjtcbiBcbi1cdFx0cmV0ID0gcnhna19wYWRfb3V0KHJlc3BvbnNlLCBhcHBkYXRhLVx1MDAzZWxlbiwgb2Zmc2V0KTtcbitcdFx0cmV0ID0gcnhna19wYWRfb3V0KHJlc3BvbnNlLCBhcHBkYXRhLVx1MDAzZWRhdGFsZW4sIG9mZnNldCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0b2Zmc2V0ICs9IHJldDtcbkBAIC04OTAsNyArODYwLDcgQEAgc3RhdGljIHNzaXplX3Qgcnhna19jb25zdHJ1Y3RfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdHJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIFx1MDAyNmIsIHNpemVvZihiKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuLVx0cmV0dXJuIHNpemVvZihhKSArIHhkcl9yb3VuZF91cChhcHBkYXRhLVx1MDAzZWxlbikgKyBzaXplb2YoYik7XG4rXHRyZXR1cm4gc2l6ZW9mKGEpICsgeGRyX3JvdW5kX3VwKGFwcGRhdGEtXHUwMDNlZGF0YWxlbikgKyBzaXplb2YoYik7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfZW5jcnlwdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuQEAgLTkyMyw3ICs4OTMsNyBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2VuY3J5cHRfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiAgKi9cbiBzdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSlcbitcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICphcHBkYXRhKVxuIHtcbiBcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqY3NwLCAqcnNwO1xuIFx0c3RydWN0IHJ4Z2tfY29udGV4dCAqZ2s7XG5AQCAtOTM2LDExICs5MDYsMTEgQEAgc3RhdGljIGludCByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdGlmIChJU19FUlIoZ2spKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihnayk7XG4gXG4tXHRhdXRoX2xlbiA9IDIwICsgKDQgKyBhcHBkYXRhLVx1MDAzZWxlbikgKyAxMiArICgxICsgNCkgKiA0O1xuK1x0YXV0aF9sZW4gPSAyMCArIHhkcl9vYmplY3RfbGVuKGFwcGRhdGEtXHUwMDNlZGF0YWxlbikgKyAxMiArICgxICsgNCkgKiA0O1xuIFx0YXV0aHhfbGVuID0gY3J5cHRvX2tyYjVfaG93X211Y2hfYnVmZmVyKGdrLVx1MDAzZWtyYjUsIEtSQjVfRU5DUllQVF9NT0RFLFxuIFx0XHRcdFx0XHRcdGF1dGhfbGVuLCBcdTAwMjZhdXRoX29mZnNldCk7XG4gXHRsZW4gPSBzaXplb2Yoc3RydWN0IHJ4cnBjX3dpcmVfaGVhZGVyKSArXG4tXHRcdDggKyAoNCArIHhkcl9yb3VuZF91cChnay1cdTAwM2VrZXktXHUwMDNldGlja2V0LmxlbikpICsgKDQgKyBhdXRoeF9sZW4pO1xuK1x0XHQ4ICsgeGRyX29iamVjdF9sZW4oZ2stXHUwMDNla2V5LVx1MDAzZXRpY2tldC5sZW4pICsgeGRyX29iamVjdF9sZW4oYXV0aHhfbGVuKTtcbiBcbiBcdHJlc3BvbnNlID0gYWxsb2Nfc2tiX3dpdGhfZnJhZ3MoMCwgbGVuLCAwLCBcdTAwMjZyZXQsIEdGUF9OT0ZTKTtcbiBcdGlmICghcmVzcG9uc2UpXG5AQCAtMTAxMSw2NiArOTgxLDQ0IEBAIHN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gICogUmVzcG9uZCB0byBhIGNoYWxsZW5nZSBwYWNrZXQuXG4gICovXG4gc3RhdGljIGludCByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4ge1xuLVx0X2VudGVyKFwieyVkLCV4fVwiLCBjb25uLVx1MDAzZWRlYnVnX2lkLCBrZXlfc2VyaWFsKGNvbm4tXHUwMDNla2V5KSk7XG4rXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCBkdW1teSA9IHt9LCAqYXBwZGF0YSA9IFx1MDAyNmR1bW15O1xuK1x0aW50IHJldDtcbitcbitcdF9lbnRlcihcInslZCwldSwleCwleH1cIixcbitcdCAgICAgICBjb25uLVx1MDAzZWRlYnVnX2lkLCBjb25uLVx1MDAzZXNlcnZpY2VfaWQsXG4rXHQgICAgICAga2V5X3NlcmlhbChjb25uLVx1MDAzZWtleSksIGtleV9zZXJpYWwoY29ubi1cdTAwM2VidW5kbGUtXHUwMDNlYXBwX2RhdGEpKTtcbiBcbiBcdGlmIChrZXlfdmFsaWRhdGUoY29ubi1cdTAwM2VrZXkpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBSWEdLX0VYUElSRUQsIC1FUFJPVE8sXG4gXHRcdFx0XHRcdHJ4Z2tfYWJvcnRfY2hhbGxfa2V5X2V4cGlyZWQpO1xuIFxuLVx0cmV0dXJuIHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKGNvbm4sIGNoYWxsZW5nZSwgYXBwZGF0YSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZV9ub19hcHBkYXRhKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLVx0XHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4te1xuLVx0c3RydWN0IGtyYjVfYnVmZmVyIGFwcGRhdGEgPSB7fTtcbi1cbi1cdHJldHVybiByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNvbm4sIGNoYWxsZW5nZSwgXHUwMDI2YXBwZGF0YSk7XG4tfVxuLVxuLS8qKlxuLSAqIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlIC0gUmVzcG9uZCB0byBhIGNoYWxsZW5nZSB3aXRoIGFwcGRhdGFcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHJlc3BvbmQgdG9cbi0gKiBAYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgUkVTUE9OU0UgYXV0aGVudGljYXRvclxuLSAqXG4tICogQWxsb3cgYSBrZXJuZWwgYXBwbGljYXRpb24gdG8gcmVzcG9uZCB0byBhIENIQUxMRU5HRSB3aXRoIGFwcGxpY2F0aW9uIGRhdGFcbi0gKiB0byBiZSBpbmNsdWRlZCBpbiB0aGUgUnhHSyBSRVNQT05TRSBBdXRoZW50aWNhdG9yLlxuLSAqXG4tICogUmV0dXJuOiAlMCBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuLSAqL1xuLWludCByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTtcbi1cbi1cdHJldHVybiByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNzcC1cdTAwM2VjaGFsbC5jb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKTtcbi1cbi0vKlxuLSAqIFBhcnNlIHNlbmRtc2coKSBjb250cm9sIG1lc3NhZ2UgYW5kIHJlc3BvbmQgdG8gY2hhbGxlbmdlLiAgV2UgbmVlZCB0byBzZWUgaWZcbi0gKiB0aGVyZSdzIGFuIGFwcGRhdGEgdG8gZmlzaCBvdXQuXG4tICovXG4tc3RhdGljIGludCByeGdrX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpXG4te1xuLVx0c3RydWN0IGtyYjVfYnVmZmVyIGFwcGRhdGEgPSB7fTtcbi1cdHN0cnVjdCBjbXNnaGRyICpjbXNnO1xuLVxuLVx0Zm9yX2VhY2hfY21zZ2hkcihjbXNnLCBtc2cpIHtcbi1cdFx0aWYgKGNtc2ctXHUwMDNlY21zZ19sZXZlbCAhPSBTT0xfUlhSUEMgfHxcbi1cdFx0ICAgIGNtc2ctXHUwMDNlY21zZ190eXBlICE9IFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoYXBwZGF0YS5kYXRhKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRhcHBkYXRhLmRhdGEgPSBDTVNHX0RBVEEoY21zZyk7XG4tXHRcdGFwcGRhdGEubGVuID0gY21zZy1cdTAwM2VjbXNnX2xlbiAtIHNpemVvZihzdHJ1Y3QgY21zZ2hkcik7XG4rXHRpZiAoY29ubi1cdTAwM2VidW5kbGUtXHUwMDNlYXBwX2RhdGEpIHtcbitcdFx0c3RydWN0IGtleSAqYXBwX2tleSA9IGNvbm4tXHUwMDNlYnVuZGxlLVx1MDAzZWFwcF9kYXRhO1xuK1xuK1x0XHQvKiBUaGUgd3Jvbmcgc29ydCBvZiBrZXkgc2hvdWxkbid0IGdldCB0aGlzIGZhci4gKi9cbitcdFx0aWYgKFdBUk5fT05fT05DRShhcHBfa2V5LVx1MDAzZXR5cGUgIT0gXHUwMDI2a2V5X3R5cGVfdXNlciBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCBhcHBfa2V5LVx1MDAzZXR5cGUgIT0gXHUwMDI2a2V5X3R5cGVfbG9nb24pKVxuK1x0XHRcdHJldHVybiByeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIFJYR0tfRVhQSVJFRCwgLUVLRVlSRUpFQ1RFRCxcbitcdFx0XHRcdFx0XHRyeGdrX2Fib3J0X2NoYWxsX2JhZF9hcHBfa2V5KTtcbitcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRhcHBkYXRhID0gKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICopXG4rXHRcdFx0dXNlcl9rZXlfcGF5bG9hZF9yY3UoY29ubi1cdTAwM2VidW5kbGUtXHUwMDNlYXBwX2RhdGEpO1xuK1x0XHRpZiAoYXBwZGF0YSBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZhcHBkYXRhLVx1MDAzZXJlZikpXG4rXHRcdFx0YXBwZGF0YSA9IE5VTEw7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRpZiAoIWFwcGRhdGEpXG4rXHRcdFx0cmV0dXJuIHJ4cnBjX2Fib3J0X2Nvbm4oY29ubiwgTlVMTCwgUlhHS19FWFBJUkVELCAtRUtFWVJFVk9LRUQsXG4rXHRcdFx0XHRcdFx0cnhna19hYm9ydF9jaGFsbF9rZXlfZXhwaXJlZCk7XG4gXHR9XG4gXG4tXHRyZXR1cm4gcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlLCBcdTAwMjZhcHBkYXRhKTtcbitcdHJldCA9IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKGNvbm4sIGNoYWxsZW5nZSwgYXBwZGF0YSk7XG4rXG4rXHRpZiAoYXBwZGF0YSAhPSBcdTAwMjZkdW1teSlcbitcdFx0cHV0X3VzZXJfa2V5X3BheWxvYWQoYXBwZGF0YSk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKlxuQEAgLTEzNDYsOSArMTI5NCw3IEBAIGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGdrX3lmcyA9IHtcbiBcdC5mcmVlX2NhbGxfY3J5cHRvXHRcdD0gcnhna19mcmVlX2NhbGxfY3J5cHRvLFxuIFx0Lmlzc3VlX2NoYWxsZW5nZVx0XHQ9IHJ4Z2tfaXNzdWVfY2hhbGxlbmdlLFxuIFx0LnZhbGlkYXRlX2NoYWxsZW5nZVx0XHQ9IHJ4Z2tfdmFsaWRhdGVfY2hhbGxlbmdlLFxuLVx0LmNoYWxsZW5nZV90b19yZWN2bXNnXHRcdD0gcnhna19jaGFsbGVuZ2VfdG9fcmVjdm1zZyxcbi1cdC5zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlXHQ9IHJ4Z2tfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSxcbi1cdC5yZXNwb25kX3RvX2NoYWxsZW5nZVx0XHQ9IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2Vfbm9fYXBwZGF0YSxcbitcdC5yZXNwb25kX3RvX2NoYWxsZW5nZVx0XHQ9IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UsXG4gXHQudmVyaWZ5X3Jlc3BvbnNlXHRcdD0gcnhna192ZXJpZnlfcmVzcG9uc2UsXG4gXHQuY2xlYXJcdFx0XHRcdD0gcnhna19jbGVhcixcbiBcdC5kZWZhdWx0X2RlY29kZV90aWNrZXRcdFx0PSByeGdrX3lmc19kZWNvZGVfdGlja2V0LFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeGthZC5jIGIvbmV0L3J4cnBjL3J4a2FkLmNcbmluZGV4IGNhOWYwZTgyY2I5YWM3Li5lNTViZmNhMTBlMWE5NCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yeGthZC5jXG4rKysgYi9uZXQvcnhycGMvcnhrYWQuY1xuQEAgLTc0OCwzMiArNzQ4LDYgQEAgc3RhdGljIGludCByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qXG4tICogUnhLQUQgZG9lcyBhdXRvbWF0aWMgcmVzcG9uc2Ugb25seSBhcyB0aGVyZSdzIG5vdGhpbmcgdG8gbWFuYWdlIHRoYXQgaXNuJ3Rcbi0gKiBhbHJlYWR5IGluIHRoZSBrZXkuXG4tICovXG4tc3RhdGljIGludCByeGthZF9zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBtc2doZHIgKm1zZylcbi17XG4tXHRyZXR1cm4gLUVJTlZBTDtcbi19XG4tXG4tLyoqXG4tICogcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlIC0gUmVzcG9uZCB0byBhIGNoYWxsZW5nZSB3aXRoIGFwcGRhdGFcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHJlc3BvbmQgdG9cbi0gKlxuLSAqIEFsbG93IGEga2VybmVsIGFwcGxpY2F0aW9uIHRvIHJlc3BvbmQgdG8gYSBDSEFMTEVOR0UuXG4tICpcbi0gKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4tICovXG4taW50IHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqY3NwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XG4tXG4tXHRyZXR1cm4gcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2UoY3NwLVx1MDAzZWNoYWxsLmNvbm4sIGNoYWxsZW5nZSk7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKTtcbi1cbiAvKiBEZWNyeXB0IGRhdGEgaW4tcGxhY2UgdXNpbmcgREVTLVBDQkMuICBAbGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4LiAqL1xuIFZJU0lCTEVfSUZfS1VOSVQgdm9pZCBkZXNfcGNiY19kZWNyeXB0X2lucGxhY2UoY29uc3Qgc3RydWN0IGRlc19jdHggKmtleSxcbiBcdFx0XHRcdFx0ICAgICAgIF9fbGU2NCBpdiwgdTggKmRhdGEsIHNpemVfdCBsZW4pXG5AQCAtMTEzNCw3ICsxMTA4LDYgQEAgY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHJ4a2FkID0ge1xuIFx0LmZyZWVfY2FsbF9jcnlwdG9cdFx0PSByeGthZF9mcmVlX2NhbGxfY3J5cHRvLFxuIFx0Lmlzc3VlX2NoYWxsZW5nZVx0XHQ9IHJ4a2FkX2lzc3VlX2NoYWxsZW5nZSxcbiBcdC52YWxpZGF0ZV9jaGFsbGVuZ2VcdFx0PSByeGthZF92YWxpZGF0ZV9jaGFsbGVuZ2UsXG4tXHQuc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZVx0PSByeGthZF9zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxuIFx0LnJlc3BvbmRfdG9fY2hhbGxlbmdlXHRcdD0gcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2UsXG4gXHQudmVyaWZ5X3Jlc3BvbnNlXHRcdD0gcnhrYWRfdmVyaWZ5X3Jlc3BvbnNlLFxuIFx0LmNsZWFyXHRcdFx0XHQ9IHJ4a2FkX2NsZWFyLFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZW5kbXNnLmMgYi9uZXQvcnhycGMvc2VuZG1zZy5jXG5pbmRleCBlZDJjOWE1MTAwNWFkZS4uYjNmNzY1ZmQ0MWJjNzAgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvc2VuZG1zZy5jXG4rKysgYi9uZXQvcnhycGMvc2VuZG1zZy5jXG5AQCAtMTIsNiArMTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2tleXMvdXNlci10eXBlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2FmX3J4cnBjLmhcdTAwM2VcbkBAIC0zMjAsOCArMzIxLDggQEAgc3RhdGljIGludCByeHJwY19hbGxvY190eHF1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4gc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0XHRcdCAgIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbi1cdFx0XHQgICByeHJwY19ub3RpZnlfZW5kX3R4X3Qgbm90aWZ5X2VuZF90eCxcbi1cdFx0XHQgICBib29sICpfZHJvcHBlZF9sb2NrKVxuK1x0XHRcdCAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KVxuK1x0X19yZWxlYXNlcyhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX3R4YnVmICp0eGI7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZyeC1cdTAwM2VzaztcbkBAIC0zMzAsMjMgKzMzMSwzMSBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRib29sIG1vcmUgPSBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfTU9SRTtcbiBcdGludCByZXQsIGNvcGllZCA9IDA7XG4gXG4tXHRpZiAodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9OT19NT1JFLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKSkge1xuK1x0aWYgKHVubGlrZWx5KHRlc3RfYml0KFJYUlBDX0NBTExfVFhfTk9fTU9SRSwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpKSB7XG4gXHRcdHRyYWNlX3J4cnBjX2Fib3J0KGNhbGwtXHUwMDNlZGVidWdfaWQsIHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLFxuIFx0XHRcdFx0ICBjYWxsLVx1MDAzZWNpZCwgY2FsbC1cdTAwM2VjYWxsX2lkLCBjYWxsLVx1MDAzZXJ4X2NvbnN1bWVkLFxuIFx0XHRcdFx0ICAwLCAtRVBST1RPKTtcbi1cdFx0cmV0dXJuIC1FUFJPVE87XG4rXHRcdHJldCA9IC1FUFJPVE87XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX0VSUk9SLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKSkpIHtcbitcdFx0dHJhY2VfcnhycGNfYWJvcnQoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ190eF9lcnJvcixcbitcdFx0XHRcdCAgY2FsbC1cdTAwM2VjaWQsIGNhbGwtXHUwMDNlY2FsbF9pZCwgY2FsbC1cdTAwM2VyeF9jb25zdW1lZCxcbitcdFx0XHRcdCAgMCwgLUVJTyk7XG4rXHRcdHJldCA9IC1FSU87XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbiBcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiBcbiBcdHJldCA9IHJ4cnBjX3dhaXRfdG9fYmVfY29ubmVjdGVkKGNhbGwsIFx1MDAyNnRpbWVvKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdGlmIChjYWxsLVx1MDAzZWNvbm4tXHUwMDNlc3RhdGUgPT0gUlhSUENfQ09OTl9DTElFTlRfVU5TRUNVUkVEKSB7XG4gXHRcdHJldCA9IHJ4cnBjX2luaXRfY2xpZW50X2Nvbm5fc2VjdXJpdHkoY2FsbC1cdTAwM2Vjb25uKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbiBcdC8qIHRoaXMgc2hvdWxkIGJlIGluIHBvbGwgKi9cbkBAIC00NDAsMTIgKzQ0OSwyMSBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRcdC8qIGFkZCB0aGUgcGFja2V0IHRvIHRoZSBzZW5kIHF1ZXVlIGlmIGl0J3Mgbm93IGZ1bGwgKi9cbiBcdFx0aWYgKCF0eGItXHUwMDNlc3BhY2UgfHxcbiBcdFx0ICAgIChtc2dfZGF0YV9sZWZ0KG1zZykgPT0gMCBcdTAwMjZcdTAwMjYgIW1vcmUpKSB7XG4rXHRcdFx0LyogRG8gYW55IHJlcXVpcmVkIGNyeXB0by4gIElmIHRoaXMgZmFpbHMsIGl0IGNvdWxkXG4rXHRcdFx0ICogaGF2ZSBjb3JydXB0ZWQgdGhlIHR4YnVmIGNvbnRlbnQgd2l0aCBhIHBhcnRpYWxcbitcdFx0XHQgKiBlbmNyeXB0LiAgQXNzdW1lIHRoYXQgRU5PTUVNIGlzIHJldHJ5YWJsZSwgYnV0XG4rXHRcdFx0ICogZXZlcnl0aGluZyBlbHNlIGlzIHRlcm1pbmFsLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHJldCA9IGNhbGwtXHUwMDNlc2VjdXJpdHktXHUwMDNlc2VjdXJlX3BhY2tldChjYWxsLCB0eGIpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0XHRcdGlmIChyZXQgPT0gLUVOT01FTSlcbitcdFx0XHRcdFx0Z290byBtYXliZV9lcnJvcl9yZXdpbmQ7XG4rXHRcdFx0XHRzZXRfYml0KFJYUlBDX0NBTExfVFhfRVJST1IsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpO1xuK1x0XHRcdFx0Z290byBvdXRfdHhiO1xuK1x0XHRcdH1cbitcbiBcdFx0XHRpZiAobXNnX2RhdGFfbGVmdChtc2cpID09IDAgXHUwMDI2XHUwMDI2ICFtb3JlKVxuIFx0XHRcdFx0dHhiLVx1MDAzZWZsYWdzIHw9IFJYUlBDX0xBU1RfUEFDS0VUO1xuLVxuLVx0XHRcdHJldCA9IGNhbGwtXHUwMDNlc2VjdXJpdHktXHUwMDNlc2VjdXJlX3BhY2tldChjYWxsLCB0eGIpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRyeHJwY19xdWV1ZV9wYWNrZXQocngsIGNhbGwsIHR4Yiwgbm90aWZ5X2VuZF90eCk7XG4gXHRcdFx0dHhiID0gTlVMTDtcbiBcdFx0fVxuQEAgLTQ1Myw0OCArNDcxLDcyIEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcbiBzdWNjZXNzOlxuIFx0cmV0ID0gY29waWVkO1xuLVx0aWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgY2FsbC1cdTAwM2VlcnJvciBcdTAwM2MgMClcbi1cdFx0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbi1vdXQ6XG4rb3V0X3R4YjpcbiBcdGNhbGwtXHUwMDNldHhfcGVuZGluZyA9IHR4YjtcbitvdXRfdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4gXHRfbGVhdmUoXCIgPSAlZFwiLCByZXQpO1xuIFx0cmV0dXJuIHJldDtcbiBcbiBjYWxsX3Rlcm1pbmF0ZWQ6XG4gXHRyeHJwY19wdXRfdHhidWYodHhiLCByeHJwY190eGJ1Zl9wdXRfc2VuZF9hYm9ydGVkKTtcbi1cdF9sZWF2ZShcIiA9ICVkXCIsIGNhbGwtXHUwMDNlZXJyb3IpO1xuLVx0cmV0dXJuIGNhbGwtXHUwMDNlZXJyb3I7XG4tXG4rXHRjYWxsLVx1MDAzZXR4X3BlbmRpbmcgPSBOVUxMO1xuK1x0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbitcdGdvdG8gb3V0X3VubG9jaztcbitcbittYXliZV9lcnJvcl9yZXdpbmQ6XG4rXHQvKiBJZiB3ZSBnb3QgYSByZXRyeWFibGUgZXJyb3IgYWZ0ZXIgY29weWluZyBhbGwgdGhlIHN1cHBsaWVkIGRhdGEgaW50b1xuK1x0ICogdGhlIGxhc3QgcGFja2V0LCB3ZSBuZWVkIHRvIHJld2luZCB0aGUgYnVmZmVyIGJ5IG9uZSBieXRlIHNvIHRoZVxuK1x0ICogY2FsbGVyIGtub3dzIHRoZXkgbmVlZCB0byByZXRyeS5cbitcdCAqL1xuK1x0aWYgKGNvcGllZCBcdTAwMjZcdTAwMjYgIW1vcmUgXHUwMDI2XHUwMDI2ICFtc2dfZGF0YV9sZWZ0KG1zZykpIHtcbitcdFx0dHhiLVx1MDAzZXNwYWNlICArPSAxO1xuK1x0XHR0eGItXHUwMDNlbGVuICAgIC09IDE7XG4rXHRcdHR4Yi1cdTAwM2VvZmZzZXQgLT0gMTtcbitcdFx0Y29waWVkICAgICAgLT0gMTtcbitcdFx0aWYgKGNhbGwtXHUwMDNldHhfdG90YWxfbGVuICE9IC0xKVxuK1x0XHRcdGNhbGwtXHUwMDNldHhfdG90YWxfbGVuICs9IDE7XG4rXHRcdGlvdl9pdGVyX3JldmVydChcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIsIDEpO1xuK1x0fVxuIG1heWJlX2Vycm9yOlxuLVx0aWYgKGNvcGllZClcbitcdGlmIChjb3BpZWQpIHtcbitcdFx0aWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBjYWxsLVx1MDAzZWVycm9yIFx1MDAzYyAwKSB7XG4rXHRcdFx0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbiBcdFx0Z290byBzdWNjZXNzO1xuLVx0Z290byBvdXQ7XG4rXHR9XG4rXHRnb3RvIG91dF90eGI7XG4gXG4gZWZhdWx0OlxuIFx0cmV0ID0gLUVGQVVMVDtcbi1cdGdvdG8gb3V0O1xuK1x0Z290byBvdXRfdHhiO1xuIFxuIHdhaXRfZm9yX3NwYWNlOlxuIFx0cmV0ID0gLUVBR0FJTjtcbiBcdGlmIChtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpXG4gXHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4rXHRjYWxsLVx1MDAzZXR4X3BlbmRpbmcgPSB0eGI7XG4rXHR0eGIgPSBOVUxMO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4tXHQqX2Ryb3BwZWRfbG9jayA9IHRydWU7XG4rXG4gXHRyZXQgPSByeHJwY193YWl0X2Zvcl90eF93aW5kb3cocngsIGNhbGwsIFx1MDAyNnRpbWVvLFxuIFx0XHRcdFx0ICAgICAgIG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19XQUlUQUxMKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4rXHRcdGdvdG8gb3V0X25vbG9jaztcbiBcdGlmIChjYWxsLVx1MDAzZWludGVycnVwdGliaWxpdHkgPT0gUlhSUENfSU5URVJSVVBUSUJMRSkge1xuIFx0XHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCkgXHUwMDNjIDApIHtcbiBcdFx0XHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xuLVx0XHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4rXHRcdFx0Z290byBvdXRfbm9sb2NrO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuIFx0XHRtdXRleF9sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4gXHR9XG4tXHQqX2Ryb3BwZWRfbG9jayA9IGZhbHNlO1xuIFx0Z290byByZWxvYWQ7XG4rb3V0X25vbG9jazpcbitcdF9sZWF2ZShcIiA9ICVkIFtpbnRyXVwiLCByZXQpO1xuK1x0cmV0dXJuIGNvcGllZCA/OiByZXQ7XG4gfVxuIFxuIC8qXG5AQCAtNTAzLDYgKzU0NSw4IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBzdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyAqcClcbiB7XG4gXHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcbitcdGtleV9zZXJpYWxfdCBrZXlfaWQ7XG4rXHRrZXlfcmVmX3Qga2V5O1xuIFx0Ym9vbCBnb3RfdXNlcl9JRCA9IGZhbHNlO1xuIFx0aW50IGxlbjtcbiBcbkBAIC01ODcsNiArNjMxLDIzIEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zICpwKVxuIFx0XHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXHRcdFx0YnJlYWs7XG4gXG4rXHRcdGNhc2UgUlhSUENfUkVTUE9OU0VfQVBQREFUQTpcbitcdFx0XHRpZiAobGVuICE9IHNpemVvZihrZXlfc2VyaWFsX3QpKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0aWYgKHAtXHUwMDNlY2FsbC5hcHBfZGF0YSlcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdGtleV9pZCA9ICooa2V5X3NlcmlhbF90ICopQ01TR19EQVRBKGNtc2cpO1xuK1x0XHRcdGtleSA9IGxvb2t1cF91c2VyX2tleShrZXlfaWQsIDAsIEtFWV9ORUVEX1NFQVJDSCk7XG4rXHRcdFx0aWYgKElTX0VSUihrZXkpKVxuK1x0XHRcdFx0cmV0dXJuIFBUUl9FUlIoa2V5KTtcbitcdFx0XHRpZiAoa2V5X3JlZl90b19wdHIoa2V5KS1cdTAwM2V0eXBlICE9IFx1MDAyNmtleV90eXBlX3VzZXIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIGtleV9yZWZfdG9fcHRyKGtleSktXHUwMDNldHlwZSAhPSBcdTAwMjZrZXlfdHlwZV9sb2dvbikge1xuK1x0XHRcdFx0a2V5X3JlZl9wdXQoa2V5KTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbitcdFx0XHRwLVx1MDAzZWNhbGwuYXBwX2RhdGEgPSBrZXlfcmVmX3RvX3B0cihrZXkpO1xuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG5AQCAtNjk1LDggKzc1NiwxMCBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdFx0XHRnb3RvIGVycm9yX3JlbGVhc2Vfc29jaztcbiBcdFx0Y2FsbCA9IHJ4cnBjX25ld19jbGllbnRfY2FsbF9mb3Jfc2VuZG1zZyhyeCwgbXNnLCBcdTAwMjZwKTtcbiBcdFx0LyogVGhlIHNvY2tldCBpcyBub3cgdW5sb2NrZWQuLi4gKi9cbi1cdFx0aWYgKElTX0VSUihjYWxsKSlcbitcdFx0aWYgKElTX0VSUihjYWxsKSkge1xuK1x0XHRcdGtleV9wdXQocC5jYWxsLmFwcF9kYXRhKTtcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihjYWxsKTtcbitcdFx0fVxuIFx0XHQvKiAuLi4gYW5kIHdlIGhhdmUgdGhlIGNhbGwgbG9jay4gKi9cbiBcdFx0cC5jYWxsLm5yX3RpbWVvdXRzID0gMDtcbiBcdFx0cmV0ID0gMDtcbkBAIC03NjksOCArODMyLDggQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHRcdHJldCA9IDA7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBSWFJQQ19DTURfU0VORF9EQVRBOlxuLVx0XHRyZXQgPSByeHJwY19zZW5kX2RhdGEocngsIGNhbGwsIG1zZywgbGVuLCBOVUxMLCBcdTAwMjZkcm9wcGVkX2xvY2spO1xuLVx0XHRicmVhaztcbitcdFx0cmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4LCBjYWxsLCBtc2csIGxlbiwgTlVMTCk7XG4rXHRcdGdvdG8gZXJyb3JfcHV0O1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0YnJlYWs7XG5AQCAtNzgxLDExICs4NDQsMTMgQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIGVycm9yX3B1dDpcbiBcdHJ4cnBjX3B1dF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfcHV0X3NlbmRtc2cpO1xuK1x0a2V5X3B1dChwLmNhbGwuYXBwX2RhdGEpO1xuIFx0X2xlYXZlKFwiID0gJWRcIiwgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gXG4gZXJyb3JfcmVsZWFzZV9zb2NrOlxuIFx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbitcdGtleV9wdXQocC5jYWxsLmFwcF9kYXRhKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTgwOCw3ICs4NzMsNiBAQCBpbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgpXG4ge1xuLVx0Ym9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTtcbiBcdGludCByZXQ7XG4gXG4gXHRfZW50ZXIoXCJ7JWR9LFwiLCBjYWxsLVx1MDAzZWRlYnVnX2lkKTtcbkBAIC04MTksMTIgKzg4MywxMCBAQCBpbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdG11dGV4X2xvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcbiBcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeHJwY19zayhzb2NrLVx1MDAzZXNrKSwgY2FsbCwgbXNnLCBsZW4sXG4tXHRcdFx0ICAgICAgbm90aWZ5X2VuZF90eCwgXHUwMDI2ZHJvcHBlZF9sb2NrKTtcbitcdFx0XHQgICAgICBub3RpZnlfZW5kX3R4KTtcbiBcdGlmIChyZXQgPT0gLUVTSFVURE9XTilcbiBcdFx0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbiBcbi1cdGlmICghZHJvcHBlZF9sb2NrKVxuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcdF9sZWF2ZShcIiA9ICVkXCIsIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvc2VydmVyX2tleS5jIGIvbmV0L3J4cnBjL3NlcnZlcl9rZXkuY1xuaW5kZXggM2VmZTEwNGIxOTMwY2IuLmZjNmY0NzhlMTc2MmE3IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL3NlcnZlcl9rZXkuY1xuKysrIGIvbmV0L3J4cnBjL3NlcnZlcl9rZXkuY1xuQEAgLTE3Myw0MyArMTczLDMgQEAgaW50IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qga2V5ICprZXlyaW5nKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTChyeHJwY19zb2NrX3NldF9zZWN1cml0eV9rZXlyaW5nKTtcbi1cbi0vKipcbi0gKiByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2UgLSBTZXQgdGhlIG1hbmFnZS1yZXNwb25zZSBmbGFnIGZvciBhIGtlcm5lbCBzZXJ2aWNlXG4tICogQHNrOiBUaGUgc29ja2V0IHRvIHNldCB0aGUga2V5cmluZyBvblxuLSAqIEBzZXQ6IFRydWUgdG8gc2V0LCBmYWxzZSB0byBjbGVhciB0aGUgZmxhZ1xuLSAqXG4tICogU2V0IHRoZSBmbGFnIG9uIGFuIHJ4cnBjIHNvY2tldCB0byBzYXkgdGhhdCB0aGUgY2FsbGVyIHdhbnRzIHRvIG1hbmFnZSB0aGVcbi0gKiBSRVNQT05TRSBwYWNrZXQgYW5kIHRoZSB1c2VyLWRlZmluZWQgZGF0YSBpdCBtYXkgY29udGFpbi4gIFNldHRpbmcgdGhpc1xuLSAqIG1lYW5zIHRoYXQgcmVjdm1zZygpIHdpbGwgcmV0dXJuIG1lc3NhZ2VzIHdpdGggUlhSUENfQ0hBTExFTkdFRCBpbiB0aGVcbi0gKiBjb250cm9sIG1lc3NhZ2UgYnVmZmVyIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNoYWxsZW5nZS5cbi0gKlxuLSAqIFRoZSB1c2VyIHNob3VsZCByZXNwb25kIHRvIHRoZSBjaGFsbGVuZ2UgYnkgcGFzc2luZyBSWFJQQ19SRVNQT05EIG9yXG4tICogUlhSUENfUkVTUE9ORF9BQk9SVCBjb250cm9sIG1lc3NhZ2VzIHdpdGggc2VuZG1zZygpIHRvIHRoZSBzYW1lIGNhbGwuXG4tICogU3VwcGxlbWVudGFyeSBjb250cm9sIG1lc3NhZ2VzLCBzdWNoIGFzIFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBLCBtYXkgYmVcbi0gKiBpbmNsdWRlZCB0byBpbmRpY2F0ZSB0aGUgcGFydHMgdGhlIHVzZXIgd2FudHMgdG8gc3VwcGx5LlxuLSAqXG4tICogVGhlIHNlcnZlciB3aWxsIGJlIHBhc3NlZCB0aGUgcmVzcG9uc2UgZGF0YSB3aXRoIGEgUlhSUENfUkVTUE9OREVEIGNvbnRyb2xcbi0gKiBtZXNzYWdlIHdoZW4gaXQgZ2V0cyB0aGUgZmlyc3QgZGF0YSBmcm9tIGVhY2ggY2FsbC5cbi0gKlxuLSAqIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgaG9ub3VyZWQgYnkgc2VjdXJpdHkgY2xhc3NlcyB0aGF0IG5lZWQgYXV4aWxpYXJ5IGRhdGFcbi0gKiAoZS5nLiBSeEdLKS4gIFRob3NlIHRoYXQgZG9uJ3Qgb2ZmZXIgdGhlIGZhY2lsaXR5IChlLmcuIFJ4S0FEKSByZXNwb25kXG4tICogd2l0aG91dCBjb25zdWx0aW5nIHVzZXJzcGFjZS5cbi0gKlxuLSAqIFJldHVybjogVGhlIHByZXZpb3VzIHNldHRpbmcuXG4tICovXG4taW50IHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc2V0KVxuLXtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNrKTtcbi1cdGludCByZXQ7XG4tXG4tXHRsb2NrX3NvY2soc2spO1xuLVx0cmV0ID0gISF0ZXN0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXHUwMDI2cngtXHUwMDNlZmxhZ3MpO1xuLVx0aWYgKHNldClcbi1cdFx0c2V0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXHUwMDI2cngtXHUwMDNlZmxhZ3MpO1xuLVx0ZWxzZVxuLVx0XHRjbGVhcl9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdHJlbGVhc2Vfc29jayhzayk7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZSk7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcbmluZGV4IDZmODhiNTA3ZjkyNzkxLi45MGMxYmQ1ZDdkZmVjZiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcbisrKyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcbkBAIC02Nyw2ICs2Nyw3IEBAIGludCB1c2VyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXG4gXHR1cGF5bG9hZCA9IGttYWxsb2NfZmxleCgqdXBheWxvYWQsIGRhdGEsIGRhdGFsZW4pO1xuIFx0aWYgKCF1cGF5bG9hZClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2dXBheWxvYWQtXHUwMDNlcmVmLCAxKTtcbiBcbiBcdC8qIGF0dGFjaCB0aGUgZGF0YSAqL1xuIFx0cHJlcC1cdTAwM2VxdW90YWxlbiA9IGRhdGFsZW47XG5AQCAtODgsMTIgKzg5LDIyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfZnJlZV9wcmVwYXJzZSk7XG4gXG4gc3RhdGljIHZvaWQgdXNlcl9mcmVlX3BheWxvYWRfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiB7XG4tXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZDtcbitcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkID1cbitcdFx0Y29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkLCByY3UpO1xuIFxuLVx0cGF5bG9hZCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCwgcmN1KTtcbiBcdGtmcmVlX3NlbnNpdGl2ZShwYXlsb2FkKTtcbiB9XG4gXG4rLypcbisgKiBGcmVlIGEgdXNlciBkZWZpbmVkIGtleSBwYXlsb2FkLlxuKyAqL1xuK3ZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpXG4re1xuK1x0aWYgKHBheWxvYWQgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZwYXlsb2FkLVx1MDAzZXJlZikpXG4rXHRcdGNhbGxfcmN1KFx1MDAyNnBheWxvYWQtXHUwMDNlcmN1LCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3UpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwdXRfdXNlcl9rZXlfcGF5bG9hZCk7XG4rXG4gLypcbiAgKiB1cGRhdGUgYSB1c2VyIGRlZmluZWQga2V5XG4gICogLSB0aGUga2V5J3Mgc2VtYXBob3JlIGlzIHdyaXRlLWxvY2tlZFxuQEAgLTExNSw4ICsxMjYsNyBAQCBpbnQgdXNlcl91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIFx0cmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgcHJlcC1cdTAwM2VwYXlsb2FkLmRhdGFbMF0pO1xuIFx0cHJlcC1cdTAwM2VwYXlsb2FkLmRhdGFbMF0gPSBOVUxMO1xuIFxuLVx0aWYgKHphcClcbi1cdFx0Y2FsbF9yY3UoXHUwMDI2emFwLVx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcbitcdHB1dF91c2VyX2tleV9wYXlsb2FkKHphcCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX3VwZGF0ZSk7XG5AQCAtMTM0LDcgKzE0NCw3IEBAIHZvaWQgdXNlcl9yZXZva2Uoc3RydWN0IGtleSAqa2V5KVxuIFxuIFx0aWYgKHVwYXlsb2FkKSB7XG4gXHRcdHJjdV9hc3NpZ25fa2V5cG9pbnRlcihrZXksIE5VTEwpO1xuLVx0XHRjYWxsX3JjdShcdTAwMjZ1cGF5bG9hZC1cdTAwM2VyY3UsIHVzZXJfZnJlZV9wYXlsb2FkX3JjdSk7XG4rXHRcdHB1dF91c2VyX2tleV9wYXlsb2FkKHVwYXlsb2FkKTtcbiBcdH1cbiB9XG4gXG5AQCAtMTQ3LDkgKzE1Nyw4IEBAIHZvaWQgdXNlcl9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSlcbiB7XG4gXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQgPSBrZXktXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xuIFxuLVx0a2ZyZWVfc2Vuc2l0aXZlKHVwYXlsb2FkKTtcbitcdHB1dF91c2VyX2tleV9wYXlsb2FkKHVwYXlsb2FkKTtcbiB9XG4tXG4gRVhQT1JUX1NZTUJPTF9HUEwodXNlcl9kZXN0cm95KTtcbiBcbiAvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDE6MTA6NTYuMzkzODYyODI4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU2OTg2MzQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogcnhycGMgYW5kIGFmcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBgcnhycGNgIGFuZCBgYWZzYCBpbnRlcmFjdCwgc3BlY2lmaWNhbGx5IHdpdGggT09CIG1lc3NhZ2UgaGFuZGxpbmcuIEl0J3MgcmlwcGVkIG91dCBgb29iLmNgIGZyb20gYG5ldC9yeHJwYy9gIGFuZCByZXBsYWNlZCB0aGUgb2xkIGNoYWxsZW5nZS1yZXNwb25zZSBtZWNoYW5pc20gaW4gYHJ4cnBjYCAoc3BlY2lmaWNhbGx5IGZvciBSeEdLLCBpbnRlcmVzdGluZy4uLikgYW5kIHJlZmFjdG9yZWQgYGFmc2AgdG8gdXNlIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCBhbmQga2V5cyBpbnN0ZWFkIG9mIHRoYXQgb2xkIE9PQiBtZXRob2QuIEZ1bmN0aW9uYWxseSwgaXQncyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBjb3JlIG5ldHdvcmtpbmcgYW5kIGZpbGVzeXN0ZW0gY29tcG9uZW50cyAtIGByeHJwY2AgYW5kIGBhZnNgIGFyZW4ndCBqdXN0IHRveXMsIHRoZXkncmUgY3JpdGljYWwgaW5mcmFzdHJ1Y3R1cmUuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgY29kZSByZWFjaGFibGU/IFRoYW5rZnVsbHksIGByeHJwY2AgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IEFGX1JYUlBDIHNvY2tldHMgLSBhY2Nlc3NpYmxlIHRocm91Z2ggdHlwaWNhbCBuZXR3b3JraW5nIGludGVyYWN0aW9ucy4gYGFmc2AgaXMgYSBmaWxlc3lzdGVtLCBzbyBtb3VudCBwb2ludHMgYW5kIGZpbGUgb3BlcmF0aW9ucyBhcmUgb3VyIGVudHJ5IHBvaW50cyB0aGVyZS4gRXhjZWxsZW50IC0gYm90aCBhcmUgd2l0aGluIHJlYWNoIGluIHN0YW5kYXJkIFFFTVUgc2V0dXBzLCB0aGF0IG1ha2VzIHRoaXMgc2lnbmlmaWNhbnRseSBlYXNpZXIgdG8gZGVhbCB3aXRoLCByYXRoZXIgdGhhbiBoYXZpbmcgdG8ganVtcCB0aHJvdWdoIGhvb3BzIHdpdGggc3BlY2lhbGl6ZWQgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGp1aWN5IGJpdHMgdG8gaGl0IHdpdGggZnV6emluZy4gSW4gYG5ldC9yeHJwYy9gLCBJJ20gbG9va2luZyBhdDpcbiogICBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgIC0gSXQncyBiZWVuIG1vZGlmaWVkIHRvIHJlY2VpdmUgYW4gYGFwcF9kYXRhYCBrZXksIHNvIGRlZmluaXRlbHkgcHJpbWUgZnV6emluZyBjYW5kaWRhdGUuXG4qICAgYHJ4cnBjX2RvX3NlbmRtc2dgLCBgcnhycGNfc2VuZF9kYXRhYCwgYW5kIGByeHJwY19yZWN2bXNnYCAtIGNsYXNzaWMgbmV0d29ya2luZyBmdW5jdGlvbnMsIG5vdyB3aXRoIHBvdGVudGlhbGx5IGFsdGVyZWQgYmVoYXZpb3IuXG4qICAgYHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXlgIC0gYSAqbmV3KiBmdW5jdGlvbi4gQW55dGhpbmcgbmV3IGlzIGFsbW9zdCBjZXJ0YWlubHkgd29ydGggYSBjbG9zZSBsb29rLlxuKiAgIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCAtIHRoaXMgbGlrZWx5IGhhbmRsZXMgdGhhdCBjaGFsbGVuZ2UtcmVzcG9uc2UgbG9naWMuXG5cbkluIGBmcy9hZnMvYCwgdGhlIGxpc3QgaXM6XG4qICAgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIC0ga2V5IHBhcnQgb2YgdGhlIHJlcGxhY2VtZW50LCBhYnNvbHV0ZWx5IHdvcnRoIGEgc2hvdC5cbiogICBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgIC0gc3RhbmRhcmQgZmlsZXN5c3RlbSBlbnRyeSwgY291bGQgcmV2ZWFsIGludGVyZXN0aW5nIGlzc3Vlcy5cblxuQ29uZmlndXJhdGlvbi13aXNlLCBJJ2xsIG5lZWQgYENPTkZJR19BRl9SWFJQQ2AgYW5kIGBDT05GSUdfQUZTX0ZTYCwgbm8gc3VycHJpc2VzIHRoZXJlLiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19SWEtBRGAgaXMgbmVlZGVkIHRvIHdvcmsgdGhlIFJYS0FEIGZlYXR1cmVzLiBOb3csIHdhaXQgYSBtaW51dGUsIGBDT05GSUdfUlhHS2AuLi4gaXMgdGhhdCBldmVuIGVuYWJsZWQgaW4gb3VyIHN0YW5kYXJkIGtlcm5lbD8gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdDsgSSBjYW4ndCBzdGFydCB0ZXN0aW5nIHdpdGhvdXQga25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0OTQ3LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDE6MTE6MDMuOTYzNzI4MTQ5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMTYxOTA1MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJYR0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3J4cnBjL0tjb25maWc9NTg9Y29uZmlnIFJYS0FEXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy02NS1cXG5uZXQvcnhycGMvS2NvbmZpZzo2Njpjb25maWcgUlhHS1xcbm5ldC9yeHJwYy9LY29uZmlnLTY3LVxcdGJvb2wgXFxcIlJ4UlBDIEdTU0FQSSBzZWN1cml0eVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDE6MTE6MDcuMDc5OTI0MjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTEwOTA4NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEFuYWx5c2lzKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgY2hlY2sgY29uZmlybWVkIGBDT05GSUdfUlhHS2AgaXMgZW5hYmxlZCDigJMgZ29vZC4gTm93LCBsZXQncyBwaXZvdCB0byB0aGUgZmlsZSBzeXN0ZW0gYW5kIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgc3RhdGUgb2YgYENPTkZJR19BRlNfRlNgIGFuZCBgQ09ORklHX0FGX1JYUlBDYC4gVGhlc2UsIGFsb25nIHdpdGggUlhHSywgd2lsbCBwcm92aWRlIGEgY3J1Y2lhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwncyBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5IHJlZ2FyZGluZyBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbXMgYW5kIHJlbW90ZSBwcm9jZWR1cmUgY2FsbHMuIFNwZWNpZmljYWxseSwgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEFGUyBhbmQgUlhSUEMgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBhcmNoaXRlY3R1cmUgaXMgY29uZmlndXJlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTk2OSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjExOjA5Ljk5MDgzNDY2NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIxMTQyNDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBRlNfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9hZnMvS2NvbmZpZzoyOmNvbmZpZyBBRlNfRlNcXG5mcy9hZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKVxcXCJcXG4tLVxcbmZzL2Fmcy9LY29uZmlnPTE3PWNvbmZpZyBBRlNfREVCVUdcXG4tLVxcbmZzL2Fmcy9LY29uZmlnLTI2LVxcbmZzL2Fmcy9LY29uZmlnOjI3OmNvbmZpZyBBRlNfRlNDQUNIRVxcbmZzL2Fmcy9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIlByb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjExOjExLjkxMTk4Njg4NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Nzg2MTE2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIGBDT05GSUdfQUZfUlhSUENgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgQ09ORklHX0FGX1JYUlBDYCBzZXR0aW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgYSBjcnVjaWFsIGZsYWcgcmVsYXRlZCB0byB0aGUgUlgtUlBDIChSZW1vdGUgUHJvY2VkdXJlIENhbGwpIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY3VycmVudCBzdGF0ZSBhbmQgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXMgaXQgZW5hYmxlZD8gRGlzYWJsZWQ/IFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjb25mbGljdHM/IE15IHByaW1hcnkgZ29hbCBpcyB0byBhc3Nlc3MgaXRzIGltcGFjdCBvbiB0aGUgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5IG9mIHRoZSB0YXJnZXQgc3lzdGVtLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGlzIGNvbmZpZ3VyYXRpb24ncyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MzA0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDE6MTE6MTQuODkwNjAxMzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2Mjk2OTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZfUlhSUENcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3J4cnBjL0tjb25maWctNS1cXG5uZXQvcnhycGMvS2NvbmZpZzo2OmNvbmZpZyBBRl9SWFJQQ1xcbm5ldC9yeHJwYy9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlJ4UlBDIHNlc3Npb24gc29ja2V0c1xcXCJcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnPTI1PWlmIEFGX1JYUlBDXFxubmV0L3J4cnBjL0tjb25maWctMjYtXFxubmV0L3J4cnBjL0tjb25maWc6Mjc6Y29uZmlnIEFGX1JYUlBDX0lQVjZcXG5uZXQvcnhycGMvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIFJ4UlBDXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctMzMtXFxubmV0L3J4cnBjL0tjb25maWc6MzQ6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9MT1NTXFxubmV0L3J4cnBjL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiSW5qZWN0IHBhY2tldCBsb3NzIGludG8gUnhSUEMgcGFja2V0IHN0cmVhbVxcXCJcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnLTM5LVxcbm5ldC9yeHJwYy9LY29uZmlnOjQwOmNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvS2NvbmZpZy00MS1cXHRib29sIFxcXCJJbmplY3QgZGVsYXkgaW50byBwYWNrZXQgcmVjZXB0aW9uXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctNDktXFxubmV0L3J4cnBjL0tjb25maWc6NTA6Y29uZmlnIEFGX1JYUlBDX0RFQlVHXFxubmV0L3J4cnBjL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiUnhSUEMgZHluYW1pYyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZz04OT1jb25maWcgUlhQRVJGXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy05NS1cXG5uZXQvcnhycGMvS2NvbmZpZzo5Njpjb25maWcgQUZfUlhSUENfS1VOSVRfVEVTVFxcbm5ldC9yeHJwYy9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJSeFJQQyBjcnlwdG8gS1VuaXQgdGVzdFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMToxMToxNi42NTM1ODEzMTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE5NDgzMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9ucyBhbmQgdGhlaXIgcG90ZW50aWFsIGltcGxpY2F0aW9ucywgYXMgaWYgaXQncyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgc2V0IG9mIGNvbmZpZ3VyYXRpb25zOiBgQUZfUlhSUENgLCBgQUZTX0ZTYCwgYFJYS0FEYCwgYW5kIGBSWEdLYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgc21lbGxzIGxpa2UgQUZTIChBbmRyZXcgRmlsZSBTeXN0ZW0pIG9yIHNvbWV0aGluZyBoZWF2aWx5IHJlbGF0ZWQuIFRoZSBgUlhgIHByZWZpeGVzIGFyZSBhIGRlYWQgZ2l2ZWF3YXkgZm9yIHRoZSBSZWxpYWJsZSBYIChSWCkgcHJvdG9jb2wsIGludGVncmFsIHRvIEFGUy4gYEFGU19GU2AgY2xlYXJseSBwb2ludHMgdG8gdGhlIGZpbGUgc3lzdGVtIGNvbXBvbmVudC4gYFJYS0FEYCBsaWtlbHkgaW52b2x2ZXMgS2VyYmVyb3MgYXV0aGVudGljYXRpb24gdXNlZCBpbiB0aGlzIGNvbnRleHQuIEFuZCBJJ20gcHJldHR5IGNlcnRhaW4gYFJYR0tgIGlzIGxpbmtlZCB0byB0aGUgUlggR2F0ZUtlZXBlci5cblxuR2l2ZW4gdGhhdCBgdXNlcl9kZWZpbmVkLmNgIGhhcyBiZWVuIHRvdWNoZWQsIHRoYXQncyB0aGUgY3J1Y2lhbCBoaW50LiBTaW5jZSB0aGUgY29uZmlncyBhcmUgcmVsYXRlZCB0byBBRlMsIEkgbmVlZCB0byBsb29rIGF0IGBLRVlTYCB0byBzZWUgaG93IGtleXMgYXJlIGJlaW5nIGhhbmRsZWQsIHNpbmNlIGB1c2VyX2RlZmluZWQuY2AgdG91Y2hlcyBhcmUgZnJlcXVlbnRseSByZWxhdGVkIHRvIHNwZWNpZmljIHVzZXIgc2V0dXBzLCBvciBhY2Nlc3MgcmVsYXRlZCBsb2dpYy4gU28sIGxldCdzIGV4cGxvcmUgdGhhdCBxdWlja2x5LiBJIGJldCB0aGUgYEtFWVNgIGNvbmZpZyBwbGF5cyBhIHJvbGUgaGVyZSwgcG9zc2libHkgZm9yIHNvbWUgY3VzdG9tIEFGUy1yZWxhdGVkIHNlY3VyaXR5IG9yIGtleSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjg4NywiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjExOjIwLjQ3MzA2NzM2OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NTgwMTQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS0VZU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWc9MjQyPWNvbmZpZyBOU1BJUkVfVElNRVJcXG4tLVxcbmRyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZy0yNDctXFxuZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnOjI0ODpjb25maWcgS0VZU1RPTkVfVElNRVJcXG5kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWctMjQ5LVxcdGJvb2wgXFxcIktleXN0b25lIHRpbWVyIGRyaXZlclxcXCIgaWYgQ09NUElMRV9URVNUXFxuLS1cXG5kcml2ZXJzL2lycWNoaXAvS2NvbmZpZz0zOTg9Y29uZmlnIElSUV9DUk9TU0JBUlxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL0tjb25maWctNDA1LVxcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnOjQwNjpjb25maWcgS0VZU1RPTkVfSVJRXFxuZHJpdmVycy9pcnFjaGlwL0tjb25maWctNDA3LVxcdHRyaXN0YXRlIFxcXCJLZXlzdG9uZSAyIElSUSBjb250cm9sbGVyIElQXFxcIlxcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc9MTEyPWNvbmZpZyBEQThYWF9SRU1PVEVQUk9DXFxuLS1cXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZy0xMzItXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc6MTMzOmNvbmZpZyBLRVlTVE9ORV9SRU1PVEVQUk9DXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWctMTM0LVxcdHRyaXN0YXRlIFxcXCJLZXlzdG9uZSBSZW1vdGVwcm9jIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3NvYy90aS9LY29uZmlnPTk9aWYgU09DX1RJXFxuZHJpdmVycy9zb2MvdGkvS2NvbmZpZy0xMC1cXG5kcml2ZXJzL3NvYy90aS9LY29uZmlnOjExOmNvbmZpZyBLRVlTVE9ORV9OQVZJR0FUT1JfUU1TU1xcbmRyaXZlcnMvc29jL3RpL0tjb25maWctMTItXFx0dHJpc3RhdGUgXFxcIktleXN0b25lIFF1ZXVlIE1hbmFnZXIgU3ViIFN5c3RlbVxcXCJcXG4tLVxcbmRyaXZlcnMvc29jL3RpL0tjb25maWctMjItXFxuZHJpdmVycy9zb2MvdGkvS2NvbmZpZzoyMzpjb25maWcgS0VZU1RPTkVfTkFWSUdBVE9SX0RNQVxcbmRyaXZlcnMvc29jL3RpL0tjb25maWctMjQtXFx0dHJpc3RhdGUgXFxcIlRJIEtleXN0b25lIE5hdmlnYXRvciBQYWNrZXQgRE1BIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZz0yMz1jb25maWcgRlNMX1VTQjJfT1RHXFxuLS1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZy0zMC1cXG5kcml2ZXJzL3VzYi9waHkvS2NvbmZpZzozMTpjb25maWcgS0VZU1RPTkVfVVNCX1BIWVxcbmRyaXZlcnMvdXNiL3BoeS9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJLZXlzdG9uZSBVU0IgUEhZIERyaXZlclxcXCJcXG4tLVxcbnNlY3VyaXR5L2tleXMvS2NvbmZpZy01LVxcbnNlY3VyaXR5L2tleXMvS2NvbmZpZzo2Om1lbnVjb25maWcgS0VZU1xcbnNlY3VyaXR5L2tleXMvS2NvbmZpZy03LVxcdGJvb2wgXFxcIkVuYWJsZSBhY2Nlc3Mga2V5IHJldGVudGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkva2V5cy9LY29uZmlnPTI0PWlmIEtFWVNcXG5zZWN1cml0eS9rZXlzL0tjb25maWctMjUtXFxuc2VjdXJpdHkva2V5cy9LY29uZmlnOjI2OmNvbmZpZyBLRVlTX1JFUVVFU1RfQ0FDSEVcXG5zZWN1cml0eS9rZXlzL0tjb25maWctMjctXFx0Ym9vbCBcXFwiRW5hYmxlIHRlbXBvcmFyeSBjYWNoaW5nIG9mIHRoZSBsYXN0IHJlcXVlc3Rfa2V5KCkgcmVzdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMToxMToyMi40Mjg4NzYwMDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMzk1NDkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBLZXkgRnVuY3Rpb25zIGZvciBSb2J1c3RuZXNzKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gZnV6emluZyB0aGlzIGByeHJwY2AgaW1wbGVtZW50YXRpb24sIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgd2UgbmVlZCB0aGUgYEtFWVNgIGZ1bmN0aW9uYWxpdHkgYXMgYSBiYXNlbGluZSDigJMgbm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4gTm93LCB3aGVyZSBkbyB3ZSBzdGFydD8gV2UndmUgZ290IHRvIHBpbnBvaW50IHRoZSBmdW5jdGlvbnMgdGhhdCByZXByZXNlbnQgdGhlIG1vc3QgY3JpdGljYWwgYXR0YWNrIHN1cmZhY2VzLiBBZnRlciBhIHF1aWNrIHJldmlldywgSSd2ZSBpZGVudGlmaWVkIGEgZmV3IGtleSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nOiBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLCBgcnhycGNfc2VuZF9kYXRhYCwgYHJ4cnBjX3JlY3Ztc2dgLCBgcnhycGNfa2VybmVsX3F1ZXJ5X2tleWAsIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCwgYHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2VgIGFuZCBgcnhycGNfZG9fc2VuZG1zZ2AuIFRoZXNlIGFsbCBzZWVtIGxpa2UgbG9naWNhbCBlbnRyeSBwb2ludHMsIG5ldHdvcmsgaW50ZXJhY3Rpb24gcG9pbnRzLCBhbmQgc2Vuc2l0aXZlIGRhdGEgcHJvY2Vzc2luZyBhcmVhcy4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgIGlzIGV4cG9ydGVkIGFzIHRoYXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3ODIyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjExOjI2LjM0MjgzMzA3OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3MDk1OTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipyeHJwY19rZXJuZWxfYmVnaW5fY2FsbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvYWZfcnhycGMuYz0zNDE9c3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zOTctfVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjM5ODpFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKTtcXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zOTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjExOjI4LjYxMzc5Nzc1N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTM5MTQ2MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKlZlcmlmeWluZyBLZXJuZWwgU3ltYm9sIEV4cG9ydCoqXG5cblllcywgdGhhdCdzIGNvcnJlY3QsIGNvbmZpcm1lZC5cblxuTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlIGByeHJwY19rZXJuZWxfcXVlcnlfa2V5YCBzeW1ib2wgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgYnkgdGhlIGtlcm5lbC4gVGhpcyBpcyBlc3NlbnRpYWwsIGlzbid0IGl0PyBCZWZvcmUgSSBldmVuIGNvbnNpZGVyIGFueSBmdXJ0aGVyIGFjdGlvbnMsIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgZnVuY3Rpb24gaXMgYWNjZXNzaWJsZS4gSSBjYW4ndCBwcm9jZWVkIHdpdGhvdXQgY29uZmlybWluZyB0aGF0LiBJdCdzIGEgZnVuZGFtZW50YWwgcHJlcmVxdWlzaXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODI4MSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjExOjMxLjU1Mjk0NjI0OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3MTA3NTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipyeHJwY19rZXJuZWxfcXVlcnlfa2V5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9rZXkuYz05MDY9dm9pZCByeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgdTggKl9zZWN1cml0eV9pbmRleCxcXG4tLVxcbm5ldC9yeHJwYy9rZXkuYy05MzEtfVxcbm5ldC9yeHJwYy9rZXkuYzo5MzI6RVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfa2V5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDE6MTE6MzQuMDI0MDI2ODc5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjU1NDkyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqQ2hlY2tpbmcgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgKipcblxuWWVzLiBPa2F5LCB0aGF0J3Mgd2hhdCBJIHdhcyB0aGlua2luZy4gTGV0J3MgZ2V0IHJpZ2h0IHRvIGl0IGFuZCBjaGVjayB0aGUgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIGtleSBlbGVtZW50IEkgbmVlZCB0byB2ZXJpZnkgaGVyZS4gTGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODUzNSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjExOjM2Ljk0OTU3ODY1MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM3MzUwODIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvY21fc2VjdXJpdHkuYz0yOD1zdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX3J4Z2tfY21fYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCB1MzIgZW5jdHlwZSlcXG4tLVxcbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTIwNy0gKi9cXG5mcy9hZnMvY21fc2VjdXJpdHkuYzoyMDg6aW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KVxcbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTIwOS17XFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaD0xMDg2PWV4dGVybiBib29sIGFmc19jbV9pbmNvbWluZ19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqKTtcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwOTAtICovXFxuZnMvYWZzL2ludGVybmFsLmg6MTA5MTppbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpO1xcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwOTItI2lmZGVmIENPTkZJR19SWEdLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjExOjQwLjMyMzA5MTQ1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTI2NjY4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBDYW5kaWRhdGVzKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBzb21ldGhpbmcgZHluYW1pYyDigJMgdGhhdCdzIGEga2V5IHBvc2l0aXZlLiBBIHN0YXRpYyBzb2x1dGlvbiBpcyByYXJlbHkgdGhlIG1vc3QgZWxlZ2FudCwgb3IgdGhlIG1vc3QgZWZmZWN0aXZlLCBmb3IgdGhpcyB0eXBlIG9mIHByb2JsZW0uIFNvLCB0aGUgZmFjdCB0aGF0IGl0J3MgKm5vdCogc3RhdGljIGltbWVkaWF0ZWx5IGVsZXZhdGVzIGl0cyBwb3RlbnRpYWwuIE15IG1lbnRhbCBjaGVja2xpc3QgdGlja3MgYSBib3ggdGhlcmUuIE5vdywgbGV0J3Mgc2VlIGhvdyBpdCBhY3R1YWxseSBiZWhhdmVzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZWAgbW9yZSBjbG9zZWx5LiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGhpbnRzIGF0IHRoZSBjcnVjaWFsIGFyZWEgd2UgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODkwNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjExOjQzLjQ3NTc2MDYzM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NzM4OTY3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9yeGdrLmM9ODk0PXN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuLS1cXG5uZXQvcnhycGMvcnhnay5jLTk4Mi0gKi9cXG5uZXQvcnhycGMvcnhnay5jOjk4MzpzdGF0aWMgaW50IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxubmV0L3J4cnBjL3J4Z2suYy05ODQtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxcbi0tXFxubmV0L3J4cnBjL3J4Z2suYz0xMjgwPWNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGdrX3lmcyA9IHtcXG4tLVxcbm5ldC9yeHJwYy9yeGdrLmMtMTI5Ni1cXHQudmFsaWRhdGVfY2hhbGxlbmdlXFx0XFx0PSByeGdrX3ZhbGlkYXRlX2NoYWxsZW5nZSxcXG5uZXQvcnhycGMvcnhnay5jOjEyOTc6XFx0LnJlc3BvbmRfdG9fY2hhbGxlbmdlXFx0XFx0PSByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxcbm5ldC9yeHJwYy9yeGdrLmMtMTI5OC1cXHQudmVyaWZ5X3Jlc3BvbnNlXFx0XFx0PSByeGdrX3ZlcmlmeV9yZXNwb25zZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDE6MTE6NDUuMzUzMTU5Nzg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNzcxNTE4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipBbmFseXppbmcgdGhlIFN0YXRpYyBDYWxsYmFjayBpbiByeGdrX3lmcyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgc3RhdGljIGZ1bmN0aW9uLCBhbmQgaXQncyBiZWluZyB1c2VkIGFzIGEgY2FsbGJhY2sgd2l0aGluIGByeGdrX3lmc2AuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZyBmb3IgbWUuIFN0YXRpYyBmdW5jdGlvbnMsIGJ5IHRoZWlyIG5hdHVyZSwgYXJlIHRpZWQgdG8gdGhlIGNvbXBpbGF0aW9uIHVuaXQgdGhleSdyZSBkZWZpbmVkIGluLiBUaGF0J3MgZmluZSBpbiBzb21lIGNhc2VzLCBidXQgd2hlbiB5b3UncmUgZGVhbGluZyB3aXRoIGNhbGxiYWNrcywgZXNwZWNpYWxseSBpbiBhIHN5c3RlbSBhcyBjb21wbGV4IGFzIHRoaXMsIGl0IGludHJvZHVjZXMgbGltaXRhdGlvbnMuIEl0IHdvdWxkIGJlIGNsZWFuZXIsIG1vcmUgZmxleGlibGUsIGFuZCBwb3RlbnRpYWxseSBtb3JlIHJvYnVzdCBpZiB3ZSBjb3VsZCBhdm9pZCB0aGUgc3RhdGljIGNvbnN0cmFpbnQgaGVyZS4gVXNpbmcgc29tZXRoaW5nIG5vbi1zdGF0aWMgd291bGQgcHJvdmlkZSBncmVhdGVyIG9wcG9ydHVuaXRpZXMgZm9yIGN1c3RvbWl6YXRpb24sIG9yIHJldXNlLiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlJ3MgYW4gYWx0ZXJuYXRpdmUgdG8gZG9pbmcgdGhpcywgb3IgaWYgd2UgY2FuIG1ha2UgZG8gd2l0aCBgcnhycGNfZG9fc2VuZG1zZ2AgYW5kIGByeHJwY19yZWN2bXNnYFxuXG5TbywgbGV0J3MgZGl2ZSBpbnRvIGByeHJwY19kb19zZW5kbXNnYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4gSSdsbCB0YWtlIGEgbG9vayBhdCBpdCB0byBzZWUgaWYgaXQgY2FuIGJlIGFkYXB0ZWQgb3IgaWYgaXQgcHJvdmlkZXMgYSBiZXR0ZXIgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzUxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDE6MTE6NTAuNTMwMzEzODQxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc0NTc2MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCByeHJwY19kb19zZW5kbXNnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTE0ODA9Ym9vbCByeHJwY19wcm9wb3NlX2Fib3J0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzMzIgYWJvcnRfY29kZSwgaW50IGVycm9yLFxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTE0ODEtXFx0XFx0XFx0IGVudW0gcnhycGNfYWJvcnRfcmVhc29uIHdoeSk7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTQ4MjppbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqLCBzdHJ1Y3QgbXNnaGRyICosIHNpemVfdCk7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTQ4My1cXG4tLVxcbm5ldC9yeHJwYy9zZW5kbXNnLmM9NjcwPXJ4cnBjX25ld19jbGllbnRfY2FsbF9mb3Jfc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9yeHJwYy9zZW5kbXNnLmMtNzIwLSAqL1xcbm5ldC9yeHJwYy9zZW5kbXNnLmM6NzIxOmludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbm5ldC9yeHJwYy9zZW5kbXNnLmMtNzIyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDE6MTE6NTIuNjA0ODk0MDM2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzU3NjY4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipUaGUgRHluYW1pYyBOYXR1cmUgb2YgdGhlIFRhc2sqKlxuXG5UaGlzIGlzbid0IGEgZml4ZWQgcHJvYmxlbTsgaXQncyBldm9sdmluZy4gSXQncyBub3QgYSBjYXNlIG9mIGFwcGx5aW5nIGEga25vd24gc29sdXRpb24gZGlyZWN0bHksIHRoZXJlJ3MgbGlrZWx5IHNvbWUgZWxlbWVudCBvZiBkeW5hbWlzbSB0byBjb25zaWRlci4gVGhlIGFzc3VtcHRpb24gb2Ygc3Rhc2lzIGlzIGRhbmdlcm91cywgSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgYXBwcm9hY2ggdGhlIHByb2JsZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGN1cnJlbnRseSBiZWhhdmluZy4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoYXQgdGhlIHN0YXRlIG9mIHRoZSBzeXN0ZW0gaXMgbm90IGNvbnN0YW50LlxuXG5NeSBhdHRlbnRpb24gaW1tZWRpYXRlbHkgdHVybnMgdG8gYHJ4cnBjX3NlbmRfZGF0YWAuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIsIHRvIGFzc2VzcyBob3cgdGhlIHN5c3RlbSBpcyBhY3R1YWxseSBiZWhhdmluZy4gSXQncyB0aGUgY3JpdGljYWwgcG9pbnQgd2hlcmUgdGhlIGRhdGEgaXMgbGlrZWx5IG1vdmluZywgYW5kIHdoZXJlIGFueSBpbmhlcmVudCB2YXJpYWJpbGl0eSB3aWxsIGxpa2VseSBiZSBvYnNlcnZhYmxlLiBJIHdpbGwgZ28gdGhlcmUgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk5NDcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMToxMTo1NS44NDA2NjM0MDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzI2ODY3MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnhycGNfc2VuZF9kYXRhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmg9MTg3MD1UUkFDRV9FVkVOVChyeHJwY19yZXRyYW5zbWl0LFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmgtMTg3MS1cXHQgICAgVFBfUFJPVE8oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaDoxODcyOlxcdFxcdCAgICAgc3RydWN0IHJ4cnBjX3NlbmRfZGF0YV9yZXEgKnJlcSxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oLTE4NzMtXFx0XFx0ICAgICBzdHJ1Y3QgcnhycGNfdHhidWYgKnR4YiksXFxuLS1cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaD05NjI9c3RydWN0IHJ4cnBjX3R4cXVldWUge1xcbi0tXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtOTg2LSAqL1xcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oOjk4NzpzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSB7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtOTg4LVxcdGt0aW1lX3RcXHRcXHRcXHRub3c7XFx0XFx0LyogQ3VycmVudCB0aW1lICovXFxuLS1cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaD0xMzc1PWludCByeHJwY19zZW5kX2Fib3J0X3BhY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqKTtcXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxMzc2OnZvaWQgcnhycGNfc2VuZF9kYXRhX3BhY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHJ4cnBjX3NlbmRfZGF0YV9yZXEgKnJlcSk7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTM3Ny12b2lkIHJ4cnBjX3NlbmRfY29ubl9hYm9ydChzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubik7XFxuLS1cXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jPTYwPXN0YXRpYyBib29sIHJ4cnBjX3JldHJhbnNtaXRfZGF0YShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jOjYxOlxcdFxcdFxcdFxcdCAgc3RydWN0IHJ4cnBjX3NlbmRfZGF0YV9yZXEgKnJlcSlcXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jLTYyLXtcXG4tLVxcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmMtNzItXFx0dHhiLVxcdTAwM2VmbGFncyB8PSBSWFJQQ19UWEJVRl9SRVNFTlQ7XFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYzo3MzpcXHRyeHJwY19zZW5kX2RhdGFfcGFja2V0KGNhbGwsIHJlcSk7XFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYy03NC1cXHRyeHJwY19pbmNfc3RhdChjYWxsLVxcdTAwM2VyeG5ldCwgc3RhdF90eF9kYXRhX3JldHJhbnMpO1xcbi0tXFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYz04Nj1zdGF0aWMgdm9pZCByeHJwY19yZXNlbmQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYy04Ny17XFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYzo4ODpcXHRzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSByZXEgPSB7XFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYy04OS1cXHRcXHQubm93XFx0PSBrdGltZV9nZXRfcmVhbCgpLFxcbi0tXFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYz0xMzE9dm9pZCByeHJwY19yZXNlbmRfdGxwKHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmMtMTMyLXtcXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jOjEzMzpcXHRzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSByZXEgPSB7XFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYy0xMzQtXFx0XFx0Lm5vd1xcdFxcdD0ga3RpbWVfZ2V0X3JlYWwoKSxcXG4tLVxcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmM9MTk0PXN0YXRpYyB2b2lkIHJ4cnBjX3RyYW5zbWl0X2ZyZXNoX2RhdGEoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHVuc2lnbmVkIGludCBsaW1pdCxcXG4tLVxcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmMtMjA1LVxcdHdoaWxlIChzcGFjZSBcXHUwMDNlIDApIHtcXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jOjIwNjpcXHRcXHRzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSByZXEgPSB7XFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYy0yMDctXFx0XFx0XFx0Lm5vd1xcdD0ga3RpbWVfZ2V0X3JlYWwoKSxcXG4tLVxcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmMtMjU2LVxcdFxcdHNwYWNlIC09IHJlcS5uO1xcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmM6MjU3OlxcdFxcdHJ4cnBjX3NlbmRfZGF0YV9wYWNrZXQoY2FsbCwgXFx1MDAyNnJlcSk7XFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYy0yNTgtXFx0fVxcbi0tXFxubmV0L3J4cnBjL291dHB1dC5jPTQyNj1zdGF0aWMgc2l6ZV90IHJ4cnBjX3ByZXBhcmVfZGF0YV9zdWJwYWNrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXFxubmV0L3J4cnBjL291dHB1dC5jOjQyNzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSAqcmVxLFxcbm5ldC9yeHJwYy9vdXRwdXQuYy00MjgtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHJ4cnBjX3R4YnVmICp0eGIsXFxuLS1cXG5uZXQvcnhycGMvb3V0cHV0LmM9NTIwPXN0YXRpYyB1bnNpZ25lZCBpbnQgcnhycGNfcHJlcGFyZV90eHF1ZXVlKHN0cnVjdCByeHJwY190eHF1ZXVlICp0cSxcXG5uZXQvcnhycGMvb3V0cHV0LmM6NTIxOlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHJ4cnBjX3NlbmRfZGF0YV9yZXEgKnJlcSlcXG5uZXQvcnhycGMvb3V0cHV0LmMtNTIyLXtcXG4tLVxcbm5ldC9yeHJwYy9vdXRwdXQuYz01MzU9c3RhdGljIHNpemVfdCByeHJwY19wcmVwYXJlX2RhdGFfcGFja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbm5ldC9yeHJwYy9vdXRwdXQuYzo1MzY6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHJ4cnBjX3NlbmRfZGF0YV9yZXEgKnJlcSxcXG5uZXQvcnhycGMvb3V0cHV0LmMtNTM3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCByeHJwY193aXJlX2hlYWRlciAqd2hkcilcXG4tLVxcbm5ldC9yeHJwYy9vdXRwdXQuYy02MzgtICovXFxubmV0L3J4cnBjL291dHB1dC5jOjYzOTp2b2lkIHJ4cnBjX3NlbmRfZGF0YV9wYWNrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHN0cnVjdCByeHJwY19zZW5kX2RhdGFfcmVxICpyZXEpXFxubmV0L3J4cnBjL291dHB1dC5jLTY0MC17XFxuLS1cXG5uZXQvcnhycGMvc2VuZG1zZy5jPTIzMD1zdGF0aWMgdm9pZCByeHJwY19ub3RpZnlfZW5kX3R4KHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXFxuLS1cXG5uZXQvcnhycGMvc2VuZG1zZy5jLTIzOC0gKiBRdWV1ZSBhIERBVEEgcGFja2V0IGZvciB0cmFuc21pc3Npb24sIHNldCB0aGUgcmVzZW5kIHRpbWVvdXQgYW5kIHNlbmRcXG5uZXQvcnhycGMvc2VuZG1zZy5jOjIzOTogKiB0aGUgcGFja2V0IGltbWVkaWF0ZWx5LiAgUmV0dXJucyB0aGUgZXJyb3IgZnJvbSByeHJwY19zZW5kX2RhdGFfcGFja2V0KClcXG5uZXQvcnhycGMvc2VuZG1zZy5jLTI0MC0gKiBpbiBjYXNlIHRoZSBjYWxsZXIgd2FudHMgdG8gZG8gc29tZXRoaW5nIHdpdGggaXQuXFxuLS1cXG5uZXQvcnhycGMvc2VuZG1zZy5jPTI4Mj1zdGF0aWMgaW50IHJ4cnBjX2FsbG9jX3R4cXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcXG4tLVxcbm5ldC9yeHJwYy9zZW5kbXNnLmMtMzIwLSAqL1xcbm5ldC9yeHJwYy9zZW5kbXNnLmM6MzIxOnN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG5uZXQvcnhycGMvc2VuZG1zZy5jLTMyMi1cXHRcXHRcXHQgICBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG4tLVxcbm5ldC9yeHJwYy9zZW5kbXNnLmM9NzIxPWludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3J4cnBjL3NlbmRtc2cuYy04MzQtXFx0Y2FzZSBSWFJQQ19DTURfU0VORF9EQVRBOlxcbm5ldC9yeHJwYy9zZW5kbXNnLmM6ODM1OlxcdFxcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeCwgY2FsbCwgbXNnLCBsZW4sIE5VTEwpO1xcbm5ldC9yeHJwYy9zZW5kbXNnLmMtODM2LVxcdFxcdGdvdG8gZXJyb3JfcHV0O1xcbi0tXFxubmV0L3J4cnBjL3NlbmRtc2cuYz04NzI9aW50IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXFxuLS1cXG5uZXQvcnhycGMvc2VuZG1zZy5jLTg4NC1cXG5uZXQvcnhycGMvc2VuZG1zZy5jOjg4NTpcXHRyZXQgPSByeHJwY19zZW5kX2RhdGEocnhycGNfc2soc29jay1cXHUwMDNlc2spLCBjYWxsLCBtc2csIGxlbixcXG5uZXQvcnhycGMvc2VuZG1zZy5jLTg4Ni1cXHRcXHRcXHQgICAgICBub3RpZnlfZW5kX3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDE6MTE6NTcuNzEzMzU1MTAzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjczMTIyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgUnhSUEMgS2VybmVsIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFJ4UlBDIGNvZGUgYW5kIG1ha2luZyBzb21lIG9ic2VydmF0aW9ucyBhYm91dCBkYXRhIHRyYW5zbWlzc2lvbi4gVGhlIGZ1bmN0aW9uIGByeHJwY19zZW5kX2RhdGFgIGlzIG1hcmtlZCBhcyBzdGF0aWMsIG1lYW5pbmcgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBDb250cmFzdCB0aGF0IHdpdGggYHJ4cnBjX2RvX3NlbmRtc2dgLCB3aGljaCBpcyAqbm90KiBzdGF0aWMsIGltcGx5aW5nIGl0J3MgcG90ZW50aWFsbHkgZXhwb3NlZCB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIG9yIGV2ZW4gdG8gbG9hZGFibGUgbW9kdWxlcy4gVGhlbiB0aGVyZSdzIGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYCwgd2hpY2ggaXMgc3BlY2lmaWNhbGx5ICpleHBvcnRlZCouIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBjb3JlIFJ4UlBDIG1vZHVsZSwgbGlrZWx5IHByb3ZpZGluZyBhIHdheSBmb3Igb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgdG8gdHJhbnNtaXQgZGF0YSB0aHJvdWdoIHRoZSBSeFJQQyBwcm90b2NvbC4gR2l2ZW4gdGhlIGRpZmZlcmVuY2VzIGFuZCB2aXNpYmlsaXR5LCBJIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGRhdGEgaXMgcGFzc2VkIGFuZCB3aGVyZSBpdCBpcyBiZWluZyB1c2VkIGluIHRoZSBwcm9jZXNzLiBXaXRoIHRoZSBkaWZmZXJlbmNlcyBpbiBtaW5kLCBsZXQncyBzaGlmdCBnZWFycyBhbmQgdGFrZSBhIGxvb2sgYXQgYHJ4cnBjX3JlY3Ztc2dgIGFuZCB0cmFjZSB0aGUgbGlmZWN5Y2xlIG9mIG1lc3NhZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTkzMCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjEyOjAxLjM0MDY2OTg3MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MzEwOTQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgcnhycGNfcmVjdm1zZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvYXItaW50ZXJuYWwuaD0xNDI1PXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqKTtcXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxNDI2OmludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IG1zZ2hkciAqLCBzaXplX3QsIGludCk7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTQyNy1cXG4tLVxcbm5ldC9yeHJwYy9yZWN2bXNnLmM9MjI9c3RhdGljIHZvaWQgcnhycGNfcmVxdWV1ZV9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbi0tXFxubmV0L3J4cnBjL3JlY3Ztc2cuYy01MS0gKi9cXG5uZXQvcnhycGMvcmVjdm1zZy5jOjUyOnN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ190ZXJtKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxubmV0L3J4cnBjL3JlY3Ztc2cuYy01My17XFxuLS1cXG5uZXQvcnhycGMvcmVjdm1zZy5jPTE0Mz1zdGF0aWMgaW50IHJ4cnBjX3ZlcmlmeV9kYXRhKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3J4cnBjL3JlY3Ztc2cuYy0xODQtICovXFxubmV0L3J4cnBjL3JlY3Ztc2cuYzoxODU6c3RhdGljIGludCByeHJwY19yZWN2bXNnX3VzZXJfaWQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvcnhycGMvcmVjdm1zZy5jLTE4Ni1cXHRcXHRcXHRcXHQgaW50IGZsYWdzKVxcbi0tXFxubmV0L3J4cnBjL3JlY3Ztc2cuYy0yMDktICovXFxubmV0L3J4cnBjL3JlY3Ztc2cuYzoyMTA6c3RhdGljIGludCByeHJwY19yZWN2bXNnX2RhdGEoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXFxubmV0L3J4cnBjL3JlY3Ztc2cuYy0yMTEtXFx0XFx0XFx0ICAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5uZXQvcnhycGMvcmVjdm1zZy5jLTMyOS0gKi9cXG5uZXQvcnhycGMvcmVjdm1zZy5jOjMzMDppbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L3J4cnBjL3JlY3Ztc2cuYy0zMzEtXFx0XFx0ICBpbnQgZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjEyOjAzLjIxMzc4NDAyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc1MTgwMTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqTmF2aWdhdGluZyB0aGUgYHJ4cnBjYCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHJ4cnBjYCBjb2RlLCBhbmQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IGByeHJwY19yZWN2bXNnYCBpc24ndCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGEga2V5IGRldGFpbCB0byByZW1lbWJlciBhcyBJIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYC4gVGhpcyBzZWVtcyBsaWtlIGEgbG9naWNhbCBwb2ludCB0byBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbSwgYW5kIGhvdyB0aGUgZGF0YSB1bHRpbWF0ZWx5IG1ha2VzIGl0IHRvIHRoZSB0YXJnZXQuIEknbGwgZm9jdXMgb24gaG93IGl0IGNhbGxzIGByeHJwY2AgZnVuY3Rpb25zIGFuZCBhbnkgcG90ZW50aWFsIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSBgcnhycGNfcmVjdm1zZ2AgbWlnaHQgYmUgY2FsbGVkIGluZGlyZWN0bHksIGlmIHRoZSBjYWxsIGlzIGNvbmRpdGlvbmFsLCBhbmQgdGhlIGFyZ3VtZW50cyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjcxMCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjEyOjA2LjM4ODk2NzMxNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MjcyNDY1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2ZzX3Byb2JlLmM9MTM4PXZvaWQgYWZzX2ZpbGVzZXJ2ZXJfcHJvYmVfcmVzdWx0KHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcXG4tLVxcbmZzL2Fmcy9mc19wcm9iZS5jLTIzNy0gKi9cXG5mcy9hZnMvZnNfcHJvYmUuYzoyMzg6aW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXFxuZnMvYWZzL2ZzX3Byb2JlLmMtMjM5LVxcdFxcdFxcdCAgICBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqbmV3X2FsaXN0LCBzdHJ1Y3Qga2V5ICprZXkpXFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaD0xMjQwPWV4dGVybiB2b2lkIGFmc19maWxlc2VydmVyX3Byb2JlX3Jlc3VsdChzdHJ1Y3QgYWZzX2NhbGwgKik7XFxuZnMvYWZzL2ludGVybmFsLmg6MTI0MTppbnQgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcXG5mcy9hZnMvaW50ZXJuYWwuaC0xMjQyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqbmV3X2FsaXN0LCBzdHJ1Y3Qga2V5ICprZXkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMToxMjowOC40NjE3MDA1MjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3MzM0MzMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgdGhlIER5bmFtaWMgTmF0dXJlIG9mIEZpbGUgU2VydmVyIFByb2JpbmcqKlxuXG5SaWdodCwgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYCBpc24ndCBhIHN0YXRpYyB2YXJpYWJsZSBvciBmdW5jdGlvbiDigJMgdGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBJdCBoYXMgc29tZSBiZWhhdmlvciBhbmQgbGlrZWx5IHJlYWN0cyB0byBjZXJ0YWluIHBhcmFtZXRlcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgZHluYW1pYyBuYXR1cmUuIEl0IGlzbid0IGEgc2ltcGxlIGxvb2t1cC5cblxuU2luY2UgaXQgaGFzIGEgZHluYW1pYyBhc3BlY3QsIGxldCdzIGRyaWxsIGRvd24gaW50byBob3cgZmlsZSBzZXJ2ZXJzIGFyZSBhY3R1YWxseSBjcmVhdGVkIHdpdGhpbiB0aGlzIEFGUyBjb250ZXh0LiBUaGUgbW9zdCBsaWtlbHkgcGF0aCB0byBpbnZlc3RpZ2F0ZSBob3cgaXQgaXMgaW5pdGlhbGl6ZWQgb3IgdXBkYXRlZCwgZ2l2ZW4gdGhhdCB1bmRlcnN0YW5kaW5nLCBpcyBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAuIEkgZXhwZWN0IHRvIGZpbmQgY2x1ZXMgdGhlcmUgYWJvdXQgd2hhdCBtYWtlcyBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgIHdvcmssIG9yIGhvdyBpdCBpcyB0cmlnZ2VyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTgyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDE6MTI6MTEuODM1MDQ3MzdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Nzg0MjgyNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2NtX3NlY3VyaXR5LmM9Mjg9c3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19yeGdrX2NtX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGVuY3R5cGUpXFxuLS1cXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0yMDctICovXFxuZnMvYWZzL2NtX3NlY3VyaXR5LmM6MjA4OmludCBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBrZXkgKmtleSlcXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0yMDkte1xcbi0tXFxuZnMvYWZzL2ludGVybmFsLmg9MTA4Nj1leHRlcm4gYm9vbCBhZnNfY21faW5jb21pbmdfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKik7XFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDkwLSAqL1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwOTE6aW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KTtcXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDkyLSNpZmRlZiBDT05GSUdfUlhHS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMToxMjoxMy43MTM0ODEyNzFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5OTA4MTg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRHluYW1pYyBOYXR1cmUgb2YgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgKipcblxuQWxyaWdodCwgc28gYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIGlzbid0IHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBpbmZsdWVuY2luZyBpdHMgc3RhdGUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIHNlY3VyaXR5IGFzcGVjdHMgb2YgdXNlci1kZWZpbmVkIGNvbmZpZ3VyYXRpb25zLiBJIHN1c3BlY3QgdGhhdCBlaXRoZXIgYHVzZXJfcHJlcGFyc2VgIG9yIGB1c2VyX3VwZGF0ZWAgaW4gYHNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNgIG1pZ2h0IGJlIHRoZSBrZXkuIFRoZXnigJlyZSB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiB5b3UncmUgZGVhbGluZyB3aXRoIGR5bmFtaWMgY2hhbmdlcyBpbmZsdWVuY2VkIGJ5IHVzZXIgaW5wdXQgb3IgcnVudGltZSB1cGRhdGVzIHdpdGhpbiB0aGF0IHNwZWNpZmljIGFyZWEgb2YgdGhlIGNvZGViYXNlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgdHJhY2luZyBiYWNrIHRoZSBpbmZsdWVuY2VzLiBMZXQncyBzZWUgd2hhdCB0aG9zZSBmdW5jdGlvbnMgYXJlIGRvaW5nIGFuZCBpZiB0aGV5IGhhdmUgYW55IGludGVyYWN0aW9uIHdpdGggYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzY0NCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjEyOjE3LjExMjU2NTcxMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MDUzMTQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdXNlcl9wcmVwYXJzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2tleXMvdXNlci10eXBlLmg9Mzc9c3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZDtcXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtMzgtXFxuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oOjM5OmV4dGVybiBpbnQgdXNlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtNDAtZXh0ZXJuIHZvaWQgdXNlcl9mcmVlX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xcbi0tXFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYz01ND1FWFBPUlRfU1lNQk9MX0dQTChrZXlfdHlwZV9sb2dvbik7XFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTU4LSAqL1xcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6NTk6aW50IHVzZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTYwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDE6MTI6MTguODYzMTAzMjk4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTgzNjA0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEeW5hbWljIE5hdHVyZSBvZiBgdXNlcl9wcmVwYXJzZWAqKlxuXG5Pa2F5LCBzbyBgdXNlcl9wcmVwYXJzZWAgaXNuJ3QgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBjb21wb25lbnRzLiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYHB1dF91c2VyX2tleV9wYXlsb2FkYC4gVGhhdCBmdW5jdGlvbiBzZWVtcyBsaWtlIGEgbG9naWNhbCBuZXh0IHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdywgZ2l2ZW4gdGhlIGNvbnRleHQuIEknbSB0aGlua2luZyBJIGNhbiBzdGFydCB0aGVyZSB0byB0cmFjZSB3aGF0IGlzIGdvaW5nIG9uIHdpdGggdGhlIHVzZXIncyBpbnB1dCBiZWZvcmUgb3RoZXIgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDEwMSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjEyOjIyLjg4MTQ2NjIxNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NjQ3MjczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUva2V5cy91c2VyLXR5cGUuaD00MD1leHRlcm4gdm9pZCB1c2VyX2ZyZWVfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XFxuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oOjQxOnZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpO1xcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC00Mi1leHRlcm4gaW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTkwPXN0YXRpYyB2b2lkIHVzZXJfZnJlZV9wYXlsb2FkX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEwMC0gKi9cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjEwMTp2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTAyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDE6MTI6MjQuNzQ3OTQzOTU2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDU4Mjc1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5KipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBgcHV0X3VzZXJfa2V5X3BheWxvYWRgLCBhbmQgSSd2ZSBxdWlja2x5IHJlYWxpemVkIGl0J3MgKm5vdCogYSBzdGF0aWMgZW50aXR5LiBUaGlzIG1lYW5zIGl0cyBpbmZsdWVuY2UgaXNuJ3QgbGltaXRlZCB0byBhIHNpbmdsZSwgcHJlZGljdGFibGUgbG9jYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHNwZWNpZmljIHN5bWJvbHMgd2hlcmUgaXQgbWlnaHQgaW50ZXJzZWN0IHdpdGggdGhlIHN5c3RlbSdzIGZvY3VzOiBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLCBgcnhycGNfZG9fc2VuZG1zZ2AsIGByeHJwY19yZWN2bXNnYCwgYHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXlgLCBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAsIGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmAsIGFuZCwgb2YgY291cnNlLCB0aGUga2V5IHRhcmdldCwgYHB1dF91c2VyX2tleV9wYXlsb2FkYCBpdHNlbGYuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGByeHJwY19rZXJuZWxfcXVlcnlfa2V5YCBpcyB1c2VkIGVsc2V3aGVyZSBpbiB0aGUgc3lzdGVtLiBHaXZlbiB0aGF0IGl0J3MgZXhwb3J0ZWQsIEkgYW50aWNpcGF0ZSB0aGF0IGl0ICpjYW4qIGJlIGNhbGxlZCBleHRlcm5hbGx5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBhY3R1YWwgdXNhZ2UuXG5cbk5leHQsIEknbGwgdHVybiBteSBhdHRlbnRpb24gdG8gYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCBiZWNhdXNlIEkgcmVjYWxsIGl0IGFzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBrZXJuZWwtbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggcnhycGMuIFRoaXMgbWFrZXMgaXQgYSBoaWdoLXByb2JhYmlsaXR5IHRhcmdldCBmb3IgZXhhbWluaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBrZXkgbWFuYWdlbWVudC5cblxuTGV0J3MgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zIGFnYWluIHRvIGNsYXJpZnkgdGhlaXIgZGVwZW5kZW5jaWVzLlxuXG5TcGVjaWZpY2FsbHksIEknbSBjaGVja2luZzpcbiogICBgQUZfUlhSUENgXG4qICAgYEFGU19GU2BcbiogICBgUlhLQURgXG4qICAgYFJYR0tgXG4qICAgYEtFWVNgXG5cbkFoLCBgUlhHS2AgKFJYUlBDIEtlcmJlcm9zIEtleSkgZGVwZW5kcyBvbiBgQUZfUlhSUENgLiBUaGF0J3MgYW4gaW1wb3J0YW50IHJlbGF0aW9uc2hpcCB0byBjb25zaWRlci4gSSBzaG91bGQgdmVyaWZ5IHRoaXMgYnkgY29uc3VsdGluZyBgbmV0L3J4cnBjL0tjb25maWdgIGZvciB0aGUgYFJYR0tgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIHNob3VsZCBoaWdobGlnaHQgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRoYXQgbWF5IGltcGFjdCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NDkwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjEyOjMwLjA5Mzc3NDQxN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzOTc3ODIwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUlhHS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvS2NvbmZpZz01OD1jb25maWcgUlhLQURcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnLTY1LVxcbm5ldC9yeHJwYy9LY29uZmlnOjY2OmNvbmZpZyBSWEdLXFxubmV0L3J4cnBjL0tjb25maWctNjctXFx0Ym9vbCBcXFwiUnhSUEMgR1NTQVBJIHNlY3VyaXR5XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMToxMjozMi4xMzM1NjAzMzhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxNDc5NDA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgRGVwZW5kZW5jaWVzIGZvciBSWEdLKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYFJYR0tgIGFuZCBteSBmaXJzdCB0aG91Z2h0IGlzLCB3aGVyZSBkb2VzIGl0IGxpdmU/IFdoYXQncyBpdHMgZWNvc3lzdGVtIGxpa2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgdG8gZ3Jhc3AgaXRzIHBvdGVudGlhbCBpbXBhY3QgYW5kIHZ1bG5lcmFiaWxpdGllcy4gSXMgaXQgYSBjb3JlIGxpYnJhcnk/IEEgd3JhcHBlciBhcm91bmQgc29tZXRoaW5nIGVsc2U/IE9yIGRvZXMgaXQgc2l0IGluIGFuIGlzb2xhdGVkIGNvcm5lciBvZiB0aGUgY29kZWJhc2U/XG5cbkkgbmVlZCB0byBxdWlja2x5IG1hcCBvdXQgdGhlIGFyY2hpdGVjdHVyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaW50ZXJuYWwgcGFja2FnZXMsIGV4dGVybmFsIGxpYnJhcmllcywgb3Igc29tZSBjb21iaW5hdGlvbj8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBtb3N0IG9idmlvdXM6IGl0cyBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzLiBBcmUgdGhlcmUgYW55IGtub3duIGlzc3VlcyB3aXRoIHRob3NlIHBhY2thZ2VzPyBIYXZlIHdlIGF1ZGl0ZWQgdGhlbSByZWNlbnRseT9cblxuQmV5b25kIHRoZSBpbml0aWFsIGxpc3QsIEknbGwgbmVlZCB0byB0aGluayBhYm91dCAqdHJhbnNpdGl2ZSogZGVwZW5kZW5jaWVzLiBUaGUgXCJkZXBlbmRlbmN5IG9mIGEgZGVwZW5kZW5jeVwiIHByb2JsZW0uIFRob3NlIGNhbiBiZSBpbnNpZGlvdXMuIFdlIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmb3IgY29uZmxpY3RzLCB2ZXJzaW9uIG1pc21hdGNoZXMsIGFuZCBzZWN1cml0eSByaXNrcy4gSSBzaG91bGQgZmxhZyBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIG5vIGxvbmdlciBhY3RpdmVseSBtYWludGFpbmVkLlxuXG5TbywgdGhlIGdhbWUgcGxhbiBpczogbGlzdCB0aGUgZGlyZWN0IGRlcHMsIGRyaWxsIGRvd24gaW50byB0cmFuc2l0aXZlIGRlcHMsIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBvbmVzLCBjaGVjayBmb3IgdnVsbmVyYWJpbGl0aWVzLiBUaGVuIEknbGwgc3RhcnQgdGhpbmtpbmcgYWJvdXQgYW55IGltcGxpY2F0aW9ucyBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UsIHdoaWNoIHdpbGwgcmVxdWlyZSBjYXJlZnVsIGFuYWx5c2lzIG9mIGl0cyB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MjE2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDE6MTI6MzYuNzQ4MzU2NzUyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTg5MjU5ODUzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipSWEdLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMToxMjozOS4zMzc2MjUzNDVaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwMjgyOTI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIG5ldC9yeHJwYy9LY29uZmlnIGZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0L3J4cnBjL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGBjb25maWcgUlhHS2Agc2V0dGluZy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdG8gZW5hYmxlIHRoZSBSWFJQQyBrZXJuZWwgbW9kdWxlIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgd2hhdCBrbm9icyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSdyZSBpbnRlbmRlZCB0byB3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU1MjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMToxMjo0Mi4zNDA0NTY4NjlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3J4cnBjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0XFx0aGVscFxcbiAgNjE6XFx0XFx0ICBQcm92aWRlIGtlcmJlcm9zIDQgYW5kIEFGUyBrYXNlcnZlciBzZWN1cml0eSBoYW5kbGluZyBmb3IgQUZfUlhSUENcXG4gIDYyOlxcdFxcdCAgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZSBrZXkgcmV0ZW50aW9uIHNlcnZpY2UuXFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QuXFxuICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBSWEdLXFxuICA2NzpcXHRcXHRib29sIFxcXCJSeFJQQyBHU1NBUEkgc2VjdXJpdHlcXFwiXFxuICA2ODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0tSQjVcXG4gIDY5OlxcdFxcdHNlbGVjdCBDUllQVE9fTUFOQUdFUlxcbiAgNzA6XFx0XFx0c2VsZWN0IENSWVBUT19LUkI1RU5DXFxuICA3MTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FVVEhFTkNcXG4gIDcyOlxcdFxcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcXG4gIDczOlxcdFxcdHNlbGVjdCBDUllQVE9fSEFTSF9JTkZPXFxuICA3NDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0hNQUNcXG4gIDc1OlxcdFxcdHNlbGVjdCBDUllQVE9fQ01BQ1xcbiAgNzY6XFx0XFx0c2VsZWN0IENSWVBUT19TSEExXFxuICA3NzpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NlxcbiAgNzg6XFx0XFx0c2VsZWN0IENSWVBUT19TSEE1MTJcXG4gIDc5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0JDXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjEyOjQyLjM0MDUxNzUzOVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU3NTQ1MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgRGVwZW5kZW5jaWVzIGFuZCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZSwgYW5kIGl0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgd2hhdCBpdCByZWxpZXMgb24sIG5vIGV4cGxpY2l0IGBkZXBlbmRzIG9uYCBjbGF1c2UgaXMgdmlzaWJsZS4gQnV0IEkgc2VlIGl0J3MgbmVzdGVkIHdpdGhpbiBhbiBgaWYgQUZfUlhSUENgIGJsb2NrLiBUaGlzIHRlbGxzIG1lIHRoYXQgaXQncyBsaWtlbHkgY29ubmVjdGVkIHRvIHRoZSBSeFJQQyBhZGRyZXNzIGZhbWlseSBzdXBwb3J0LiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBjb25maWcgQUZTX0ZTYC4gVGhpcyBpcyBwcm9iYWJseSB3aGVyZSB0aGUga2V5IGRlcGVuZGVuY3kgbGllcy4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLCBzcGVjaWZpY2FsbHkgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhlIGZpbGUgc3lzdGVtLCBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgdHJ1ZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgaGVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBjb250ZXh0IGFuZCBpbXBhY3Qgb24gaXRzIGV4ZWN1dGlvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTk2NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDE6MTI6NDYuMDk4MDY1MDIyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Fmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgQUZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBBRl9SWFJQQ1xcbiAgIDY6XFx0XFx0c2VsZWN0IEROU19SRVNPTFZFUlxcbiAgIDc6XFx0XFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9fS1JCNVxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgZ2V0IGFuIGV4cGVyaW1lbnRhbCBBbmRyZXcgRmlsZSBTeXN0ZW1cXG4gIDExOlxcdFxcdCAgZHJpdmVyLiBJdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyB1bnNlY3VyZWQgcmVhZC1vbmx5IEFGUyBhY2Nlc3MuXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZzLnJzdFxcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIEFGU19ERUJVR1xcbiAgMTg6XFx0XFx0Ym9vbCBcXFwiQUZTIGR5bmFtaWMgZGVidWdnaW5nXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBBRlNfRlNcXG4gIDIwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDE6MTI6NDYuMDk4MTE5ODAyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MjQxOTcwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBGaWxlc3lzdGVtIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgQUZTX0ZTYCBpcyBidWlsdCB0byBsZWFuIG9uIHRoZSBgSU5FVGAgZnVuY3Rpb25hbGl0eSwgd2hpY2ggbWFrZXMgc2Vuc2UsIGl0IGxpa2VseSBuZWVkcyBzb21lIG5ldHdvcmsgY29ubmVjdGl2aXR5LiBBbmQsIG9mIGNvdXJzZSwgaXQncyBzZWxlY3RpbmcgYEFGX1JYUlBDYC4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyOiBzaW5jZSBgQUZTX0ZTYCBpcyB1c2luZyBgSU5FVGAsIHdlIGhhdmUgdG8gYmUgc3VyZSBpdCdzIGVuYWJsZWQuIEdlbmVyYWxseSwgYElORVRgIGlzIGFscmVhZHkgZW5hYmxlZCBidXQgd2Ugc2hvdWxkIHZlcmlmeS5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgcmVsYXRlZCBjb21wb25lbnRzLi4uIEkgbmVlZCB0byBjb25zaWRlciBgS0VZU2AuIEknbGwgd2FudCB0byB0YWtlIGEgbG9vayBhdCBpdCB0byBzZWUgaWYgaXQgY2F1c2VzIGFueSBpc3N1ZXMgd2l0aCBgQUZTX0ZTYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY0NjgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjEyOjQ5LjYyMjMyMTc0OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJzZWN1cml0eS9rZXlzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgS2V5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIEtFWVNcXG4gICA3OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBhY2Nlc3Mga2V5IHJldGVudGlvbiBzdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0c2VsZWN0IEFTU09DSUFUSVZFX0FSUkFZXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHJldGFpbmluZyBhdXRoZW50aWNhdGlvbiB0b2tlbnMgYW5kXFxuICAxMTpcXHRcXHQgIGFjY2VzcyBrZXlzIGluIHRoZSBrZXJuZWwuXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgSXQgYWxzbyBpbmNsdWRlcyBwcm92aXNpb24gb2YgbWV0aG9kcyBieSB3aGljaCBzdWNoIGtleXMgbWlnaHQgYmVcXG4gIDE0OlxcdFxcdCAgYXNzb2NpYXRlZCB3aXRoIGEgcHJvY2VzcyBzbyB0aGF0IG5ldHdvcmsgZmlsZXN5c3RlbXMsIGVuY3J5cHRpb25cXG4gIDE1OlxcdFxcdCAgc3VwcG9ydCBhbmQgdGhlIGxpa2UgY2FuIGZpbmQgdGhlbS5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBGdXJ0aGVybW9yZSwgYSBzcGVjaWFsIHR5cGUgb2Yga2V5IGlzIGF2YWlsYWJsZSB0aGF0IGFjdHMgYXMga2V5cmluZzpcXG4gIDE4OlxcdFxcdCAgYSBzZWFyY2hhYmxlIHNlcXVlbmNlIG9mIGtleXMuIEVhY2ggcHJvY2VzcyBpcyBlcXVpcHBlZCB3aXRoIGFjY2Vzc1xcbiAgMTk6XFx0XFx0ICB0byBmaXZlIHN0YW5kYXJkIGtleXJpbmdzOiBVSUQtc3BlY2lmaWMsIEdJRC1zcGVjaWZpYywgc2Vzc2lvbixcXG4gIDIwOlxcdFxcdCAgcHJvY2VzcyBhbmQgdGhyZWFkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMToxMjo0OS42MjI0MjE0MzhaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2ODcyNDE1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkNvbmZpZ3VyYXRpb24gRGlsZW1tYSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBJJ3ZlIGdvdCBgQUZfUlhSUENgLCBgQUZTX0ZTYCwgYFJYS0FEYCwgYFJYR0tgLCBhbmQgYEtFWVNgLiBUaGUgaXNzdWUgaXMsIGBLRVlTYCBpcyBhIGJvb2xlYW4sIHN0cmFpZ2h0IGFuZCBzaW1wbGUuIEhvd2V2ZXIsIGl0IHNlZW1zIHRoYXQgYFJYS0FEYCBpcyBhbHNvIGEgYm9vbGVhbiAqbmVzdGVkKiB3aXRoaW4gYEFGX1JYUlBDYC4gU28sIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIGR1YWxpdHkgb2YgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2OTY4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMToxMjo1Mi42OTExNDgzMjNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3J4cnBjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0Y29uZmlnIEFGX1JYUlBDX0RFQlVHXFxuICA1MTpcXHRcXHRib29sIFxcXCJSeFJQQyBkeW5hbWljIGRlYnVnZ2luZ1xcXCJcXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBtYWtlIHJ1bnRpbWUgY29udHJvbGxhYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyBhcHBlYXIuXFxuICA1NDpcXHRcXG4gIDU1OlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QuXFxuICA1NjpcXHRcXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIFJYS0FEXFxuICA1OTpcXHRcXHRib29sIFxcXCJSeFJQQyBLZXJiZXJvcyBzZWN1cml0eVxcXCJcXG4gIDYwOlxcdFxcdGhlbHBcXG4gIDYxOlxcdFxcdCAgUHJvdmlkZSBrZXJiZXJvcyA0IGFuZCBBRlMga2FzZXJ2ZXIgc2VjdXJpdHkgaGFuZGxpbmcgZm9yIEFGX1JYUlBDXFxuICA2MjpcXHRcXHQgIHRocm91Z2ggdGhlIHVzZSBvZiB0aGUga2V5IHJldGVudGlvbiBzZXJ2aWNlLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0LlxcbiAgNjU6XFx0XFxuICA2NjpcXHRjb25maWcgUlhHS1xcbiAgNjc6XFx0XFx0Ym9vbCBcXFwiUnhSUEMgR1NTQVBJIHNlY3VyaXR5XFxcIlxcbiAgNjg6XFx0XFx0c2VsZWN0IENSWVBUT19LUkI1XFxuICA2OTpcXHRcXHRzZWxlY3QgQ1JZUFRPX01BTkFHRVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDE6MTI6NTIuNjkxMjI3OTUzWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTcxNTU4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJYUlBDIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUlhSUEMgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gSSd2ZSBnb3QgYFJYS0FEYCBhbmQgYFJYR0tgIHdoaWNoIGFyZSBzdHJhaWdodGZvcndhcmQgYm9vbGVhbiB2YWx1ZXMsIGFuZCB0aGVuIHRoZXJlIGFyZSBgQUZfUlhSUENgIGFuZCBgQUZTX0ZTYCB3aGljaCBhcmUgdHJpc3RhdGUuIEFsc28sIGBLRVlTYCBpcyBhIGJvb2xlYW4uXG5cbk5vdywgSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgbWFwIHRvIGFjdHVhbCBjb2RlLiBMZXQncyBzdGFydCBieSBzZWVpbmcgd2hlcmUgYENPTkZJR19SWEdLYCBhbmQgYENPTkZJR19SWEtBRGAgYXJlIGRlZmluZWQgYW5kIHVzZWQuIExvb2tzIGxpa2UgYENPTkZJR19SWEdLYCBpcyByZWZlcmVuY2VkIGluIGJvdGggYGZzL2Fmcy9jbV9zZWN1cml0eS5jYCBhbmQgYGZzL2Fmcy9pbnRlcm5hbC5oYC4gYENPTkZJR19SWEtBRGAgaXMgb25seSB1c2VkIGluIGBmcy9hZnMvY21fc2VjdXJpdHkuY2AuIEludGVyZXN0aW5nLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gZGVlcGVyLiBJIGtub3cgdGhlcmUgYXJlIGRlZGljYXRlZCBmaWxlcyBsaWtlIGBuZXQvcnhycGMvcnhrYWQuY2AgYW5kIGBuZXQvcnhycGMvcnhnay5jYCwgc28gSSdsbCBjaGVjayB0aG9zZS4gWWVwLCB0aG9zZSBzb3VyY2VzIGFyZSBjb21waWxlZCBpZiBib3RoIGBSWEtBRGAgYW5kIGBSWEdLYCBhcmUgZW5hYmxlZC4gR29vZC4gU2VlbXMgdG8gZm9sbG93IHRoZSBzdGFuZGFyZCBwYXR0ZXJuLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQvcnhycGMvTWFrZWZpbGVgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBmaXRzIHRvZ2V0aGVyIGF0IHRoZSBidWlsZCBsZXZlbC4gVGhhdCBzaG91bGQgc29saWRpZnkgdGhlIGRlcGVuZGVuY3kgdHJlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0MzMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMToxMjo1Ny4wODgzODYyNloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcnhycGMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBMaW51eCBrZXJuZWwgUnhSUENcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0FGX1JYUlBDKSArPSByeHJwYy5vXFxuICAgNzpcXHRcXG4gICA4OlxcdHJ4cnBjLXkgOj0gXFxcXFxcbiAgIDk6XFx0XFx0YWZfcnhycGMubyBcXFxcXFxuICAxMDpcXHRcXHRjYWxsX2FjY2VwdC5vIFxcXFxcXG4gIDExOlxcdFxcdGNhbGxfZXZlbnQubyBcXFxcXFxuICAxMjpcXHRcXHRjYWxsX29iamVjdC5vIFxcXFxcXG4gIDEzOlxcdFxcdGNhbGxfc3RhdGUubyBcXFxcXFxuICAxNDpcXHRcXHRjb25uX2NsaWVudC5vIFxcXFxcXG4gIDE1OlxcdFxcdGNvbm5fZXZlbnQubyBcXFxcXFxuICAxNjpcXHRcXHRjb25uX29iamVjdC5vIFxcXFxcXG4gIDE3OlxcdFxcdGNvbm5fc2VydmljZS5vIFxcXFxcXG4gIDE4OlxcdFxcdGlucHV0Lm8gXFxcXFxcbiAgMTk6XFx0XFx0aW5wdXRfcmFjay5vIFxcXFxcXG4gIDIwOlxcdFxcdGluc2VjdXJlLm8gXFxcXFxcbiAgMjE6XFx0XFx0aW9fdGhyZWFkLm8gXFxcXFxcbiAgMjI6XFx0XFx0a2V5Lm8gXFxcXFxcbiAgMjM6XFx0XFx0bG9jYWxfZXZlbnQubyBcXFxcXFxuICAyNDpcXHRcXHRsb2NhbF9vYmplY3QubyBcXFxcXFxuICAyNTpcXHRcXHRtaXNjLm8gXFxcXFxcbiAgMjY6XFx0XFx0bmV0X25zLm8gXFxcXFxcbiAgMjc6XFx0XFx0b3V0cHV0Lm8gXFxcXFxcbiAgMjg6XFx0XFx0cGVlcl9ldmVudC5vIFxcXFxcXG4gIDI5OlxcdFxcdHBlZXJfb2JqZWN0Lm8gXFxcXFxcbiAgMzA6XFx0XFx0cmVjdm1zZy5vIFxcXFxcXG4gIDMxOlxcdFxcdHJ0dC5vIFxcXFxcXG4gIDMyOlxcdFxcdHNlY3VyaXR5Lm8gXFxcXFxcbiAgMzM6XFx0XFx0c2VuZG1zZy5vIFxcXFxcXG4gIDM0OlxcdFxcdHNlcnZlcl9rZXkubyBcXFxcXFxuICAzNTpcXHRcXHRza2J1ZmYubyBcXFxcXFxuICAzNjpcXHRcXHR0eGJ1Zi5vIFxcXFxcXG4gIDM3OlxcdFxcdHV0aWxzLm9cXG4gIDM4OlxcdFxcbiAgMzk6XFx0cnhycGMtJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vXFxuICA0MDpcXHRyeHJwYy0kKENPTkZJR19SWEtBRCkgKz0gcnhrYWQubyBmY3J5cHQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMToxMjo1Ny4wODg0NDk2MloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI1MzY5MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBzbyBJJ20gY29uZmlybWluZyB0aGF0IGByeGthZC5vYCBhbmQgYHJ4Z2sub2AgYXJlIGluZGVlZCBjb21waWxlZCBjb25kaXRpb25hbGx5LCB0aWVkIHRvIHRoZSBgQ09ORklHX1JYS0FEYCBhbmQgYENPTkZJR19SWEdLYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0IG1ha2VzIHNlbnNlLCBzdGFuZGFyZCBwcmFjdGljZSBmb3IgbW9kdWxhcml0eS4gTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4uLiBobW0sIEkgZG9uJ3Qgc2VlIGByeGdrLm9gIHBvcHBpbmcgdXAgaW4gdGhlIGluaXRpYWwgbGluZXMgb2YgdGhlIGJ1aWxkIHByb2Nlc3MuIFRoYXQncyBhIGxpdHRsZSB1bnVzdWFsLCBtYXliZSB0aGVyZSdzIGEgZGlmZmVyZW50IGluY2x1c2lvbiBtZWNoYW5pc20gYXQgcGxheT8gVGltZSB0byBrZWVwIGRpZ2dpbmcgYW5kIGV4cGFuZCB0aGUgc2VhcmNoIGNyaXRlcmlhIHRvIGdldCBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzLiBMZXQncyBrZWVwIHJlYWRpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NDAyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMToxMzowMC41MTM4MjEzOTlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3J4cnBjL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdHJ4cnBjLSQoQ09ORklHX1JYS0FEKSArPSByeGthZC5vIGZjcnlwdC5vXFxuICA0MTpcXHRyeHJwYy0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bC5vXFxuICA0MjpcXHRyeHJwYy0kKENPTkZJR19SWEdLKSArPSBcXFxcXFxuICA0MzpcXHRcXHRyeGdrLm8gXFxcXFxcbiAgNDQ6XFx0XFx0cnhna19hcHAubyBcXFxcXFxuICA0NTpcXHRcXHRyeGdrX2tkZi5vXFxuICA0NjpcXHRcXG4gIDQ3OlxcdG9iai0kKENPTkZJR19SWFBFUkYpICs9IHJ4cGVyZi5vXFxuICA0ODpcXHRvYmotJChDT05GSUdfS1VOSVQpICs9IHRlc3RzL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMToxMzowMC41MTM4ODE5NDlaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQxMjc1NDU5MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFJ4UlBDIEtleSBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHllcywgdGhlIGBSWEdLYCBjb25maWcgaXMgZGVmaW5pdGVseSBpbiBwbGF5LiBMZXQncyBzZWUuLi5cblxuUmlnaHQsIHRoZSBjb25maWd1cmF0aW9ucyB3ZSdyZSBkZWFsaW5nIHdpdGggYXJlIGBBRl9SWFJQQ2AsIGBBRlNfRlNgLCBgUlhLQURgLCBgUlhHS2AsIGFuZCBgS0VZU2AuIEdvdCBpdC4gTm93LCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IHNlZW0gbGlrZSB0aGV5J3ZlIGJlZW4gdG91Y2hlZCBhbmQgYXJlIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHPigKYgYXQgZmlyc3QgZ2xhbmNlLCBJIHNhdyBhIGZldzogYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCwgYHJ4cnBjX2RvX3NlbmRtc2dgLCBgcnhycGNfcmVjdm1zZ2AsIGByeHJwY19rZXJuZWxfcXVlcnlfa2V5YCwgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgLCBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgLCBhbmQgYHB1dF91c2VyX2tleV9wYXlsb2FkYC5cblxuTGV0IG1lIHRoaW5r4oCmIGBwdXRfdXNlcl9rZXlfcGF5bG9hZGAuIEFoLCB0aGF0J3MganVzdCBhIHNpbXBsZSByZWZjb3VudCBkZWNyZW1lbnQgYW5kIGZyZWUg4oCTIG5vdCB0aGUgbW9zdCBjb21wbGV4IGZ1bmN0aW9uLCBidXQgZGVmaW5pdGVseSBwYXJ0IG9mIHRoZSBwYXRjaCwgc28gaXQncyB3b3J0aCBub3RpbmcsIEkgc3VwcG9zZS4gQW5kIGByeHJwY19rZXJuZWxfcXVlcnlfa2V5YCwgc2ltaWxhci4gSSdtIHdvbmRlcmluZyBpZiBzb21ldGhpbmcgbGlrZSBgcnhycGNfc2VuZF9kYXRhYCBpcyBiZWluZyB1c2VkIGluIHRoZSBzZW5kIHBhdGgsIGJ1dCBpdCdzIHN0YXRpYywgc28gaXQgY2FuJ3QgYmUgdXNlZCwgYW5kIGByeHJwY19yZWN2bXNnX2RhdGFgIGlzIHN0YXRpYyB0b28uIFNvIHdlJ3JlIGxlZnQgd2l0aCBub24tc3RhdGljIGVudHJ5IHBvaW50czogYHJ4cnBjX2RvX3NlbmRtc2dgIGFuZCBgcnhycGNfcmVjdm1zZ2Agc2luY2UgdGhvc2UgYXJlIHRoZSB0b3AtbGV2ZWwgZnVuY3Rpb25zLlxuXG5BbmQgdGhlbiB0aGVyZSdzIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCB3aGljaCBJIGFsc28gc2VlLCBidXQgdGhhdCBvbmUgaXMgYWxzbyBzdGF0aWMuIEdpdmVuIHRoZSBwcm9tcHQsIEkgc2hvdWxkIHN0aWNrIHRvIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHVubGVzcyB0aGVyZSdzIGEgcmVhbGx5IGdvb2QgcmVhc29uLiBPa2F5LCBzbyB0aGF0IHRyaW1zIGRvd24gdGhlIGxpc3QgdG8gYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCwgYHJ4cnBjX2RvX3NlbmRtc2dgLCBgcnhycGNfcmVjdm1zZ2AsIGByeHJwY19rZXJuZWxfcXVlcnlfa2V5YCwgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgLCBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgLCBhbmQgYHB1dF91c2VyX2tleV9wYXlsb2FkYC5cblxuU2luY2UgdGhlIHBhdGNoIGNoYW5nZWQgdGhlIGB1c2VyX3ByZXBhcnNlYCBhbmQgYHVzZXJfdXBkYXRlYCwgd2hpY2ggc2VlbSB0byBiZSBpbnZvbHZlZCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHJlZmNvdW50LCB0aG9zZSBzaG91bGQgYWxzbyBiZSBhZGRlZC5cblxuTm93LCBjb25zaWRlcmluZyB0aGUgY29tcGxleGl0eSBhbmQgcG90ZW50aWFsIGZvciB2dWxuZXJhYmlsaXRpZXMsIGByeHJwY19rZXJuZWxfcXVlcnlfa2V5YCBpcyBwcm9iYWJseSBhIHNpbXBsZSBnZXR0ZXIg4oCTIHBlcmhhcHMgbm90IGEgaGlnaC1wcmlvcml0eSBmdXp6IHRhcmdldC4gYHJ4cnBjX2RvX3NlbmRtc2dgIGFuZCBgcnhycGNfcmVjdm1zZ2AgYXJlIGRlZmluaXRlbHkgY3J1Y2lhbCwgYXMgYXJlIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCBhbmQgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYC5cblxuQWxyaWdodCwgbGV0J3Mgem9vbSBvdXQgYW5kIHJldmlldyB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBUaGlzIHBhdGNo4oCmIGl0IHJlbW92ZXMgdGhlIE9PQiBtZXNzYWdlIGhhbmRsaW5nLiBUaGF0J3MgYSBiaWcgc2hpZnQsIHNvIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggT09COiBgcnhycGNfa2VybmVsX3F1ZXJ5X29vYmAsIGV0Yy4gYXJlIG91dC4gQW5kIGl0IGFkZHMgYHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXlgIHRvIGFjY2VzcyB0aGUga2V5LiBJdCBtb2RpZmllcyBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgIHRvIHRha2UgdGhlIGFwcGRhdGEga2V5LCBhbmQgaXQgY2hhbmdlcyBgcnhycGNfZG9fc2VuZG1zZ2AgdG8gaGFuZGxlIGBSWFJQQ19SRVNQT05TRV9BUFBEQVRBYCBtZXNzYWdlcy4gUGx1cywgYHJ4cnBjX3JlY3Ztc2dgIGxvc2VzIE9PQiBoYW5kbGluZy4gYHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2VgIHVzZXMgYXBwZGF0YSwgYW5kIHRoZSBBRlMgYXBwZGF0YSBjcmVhdGlvbiBpcyBpbiBwbGF5LCBhcyBpcyB0aGUgcHJvYmluZy4gQW5kIGZpbmFsbHksIGB1c2VyX2RlZmluZWQuY2AgZ2V0cyBhIHJlZmNvdW50LlxuXG5UYWtpbmcgYWxsIHRoYXQgaW4sIHRoZSBmaW5hbCBsaXN0IG9mIGZ1bmN0aW9ucyBJIHdhbnQgdG8gZm9jdXMgb24gbG9va3MgbGlrZSB0aGlzOiBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLCBgcnhycGNfZG9fc2VuZG1zZ2AsIGByeHJwY19yZWN2bXNnYCwgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgLCBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgLCBgdXNlcl9wcmVwYXJzZWAsIGB1c2VyX3VwZGF0ZWAgYW5kIGBwdXRfdXNlcl9rZXlfcGF5bG9hZGAuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoZSBwYXRjaCByZXBsYWNlcyB0aGUgUnhSUEMgT09CIGhhbmRsaW5nIHdpdGggYSBrZXktYmFzZWQgY2hhbGxlbmdlIHJlc3BvbnNlIHNjaGVtZS4gSXQgbW9kaWZpZXMgY29yZSBzZW5kL3JlY3YgcGF0aHMsIEFGUyBzZXJ2ZXIgcHJvYmluZywgYW5kIHVzZXItZGVmaW5lZCBrZXlzLiBUaGVzZSBhcmUgY3JpdGljYWwgZnVuY3Rpb25hbCBjaGFuZ2VzIHdpdGhpbiBuZXR3b3JrIGFuZCBmaWxlc3lzdGVtIGNvZGUgYW5kIHNob3VsZCBhYnNvbHV0ZWx5IGJlIGZ1enplZC5cblxuSGVyZSdzIHRoZSBkYXRhIGZvciB0aGUgZnV6emluZyBydW4uXG5cbldvcnRoRnV6emluZzogdHJ1ZVxuRm9jdXNTeW1ib2xzOlxuLSBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgXG4tIGByeHJwY19kb19zZW5kbXNnYFxuLSBgcnhycGNfcmVjdm1zZ2Bcbi0gYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgXG4tIGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmBcbi0gYHVzZXJfcHJlcGFyc2VgXG4tIGB1c2VyX3VwZGF0ZWBcbi0gYHB1dF91c2VyX2tleV9wYXlsb2FkYFxuRW5hYmxlQ29uZmlnczpcbi0gYEFGX1JYUlxuXG4iLCJJbnB1dFRva2VucyI6NDg4MTksIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAxOjEzOjE0LjY0MTQzMTUxMloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MTY1NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJSWEtBRFwiLFxuICAgIFwiUlhHS1wiLFxuICAgIFwiS0VZU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsXCIsXG4gICAgXCJyeHJwY19kb19zZW5kbXNnXCIsXG4gICAgXCJyeHJwY19yZWN2bXNnXCIsXG4gICAgXCJhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhXCIsXG4gICAgXCJhZnNfZnNfcHJvYmVfZmlsZXNlcnZlclwiLFxuICAgIFwidXNlcl9wcmVwYXJzZVwiLFxuICAgIFwidXNlcl91cGRhdGVcIixcbiAgICBcInB1dF91c2VyX2tleV9wYXlsb2FkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIG91dC1vZi1iYW5kIChPT0IpIG1lc3NhZ2UgaGFuZGxpbmcgaW4gUnhSUEMgd2l0aCBhIGtleS1iYXNlZCBhcHByb2FjaCBmb3IgY2hhbGxlbmdlLXJlc3BvbnNlLCBzcGVjaWZpY2FsbHkgZm9yIFJ4R0suIEl0IG1vZGlmaWVzIGNvcmUgUnhSUEMgc2VuZC9yZWN2IHBhdGhzLCBBRlMgc2VydmVyIHByb2JpbmcsIGFuZCBhZGRzIHJlZmNvdW50aW5nIHRvIHVzZXItZGVmaW5lZCBrZXlzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBuZXR3b3JrIGFuZCBmaWxlc3lzdGVtIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGX1JYUlBDXCIsXG4gICAgXCJBRlNfRlNcIixcbiAgICBcIlJYS0FEXCIsXG4gICAgXCJSWEdLXCIsXG4gICAgXCJLRVlTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnhycGNfa2VybmVsX2JlZ2luX2NhbGxcIixcbiAgICBcInJ4cnBjX2RvX3NlbmRtc2dcIixcbiAgICBcInJ4cnBjX3JlY3Ztc2dcIixcbiAgICBcImFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFcIixcbiAgICBcImFmc19mc19wcm9iZV9maWxlc2VydmVyXCIsXG4gICAgXCJ1c2VyX3ByZXBhcnNlXCIsXG4gICAgXCJ1c2VyX3VwZGF0ZVwiLFxuICAgIFwicHV0X3VzZXJfa2V5X3BheWxvYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyB0aGUgb3V0LW9mLWJhbmQgKE9PQikgbWVzc2FnZSBoYW5kbGluZyBpbiBSeFJQQyB3aXRoIGEga2V5LWJhc2VkIGFwcHJvYWNoIGZvciBjaGFsbGVuZ2UtcmVzcG9uc2UsIHNwZWNpZmljYWxseSBmb3IgUnhHSy4gSXQgbW9kaWZpZXMgY29yZSBSeFJQQyBzZW5kL3JlY3YgcGF0aHMsIEFGUyBzZXJ2ZXIgcHJvYmluZywgYW5kIGFkZHMgcmVmY291bnRpbmcgdG8gdXNlci1kZWZpbmVkIGtleXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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,}