Name: series-workflowhfm56 Phase: Succeeded StartedAt: 2026-08-26 02:59:00 +0000 UTC FinishedAt: 2026-08-26 07:08:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[0] Phase: Succeeded StartedAt: 2026-08-26 02:59:00 +0000 UTC FinishedAt: 2026-08-26 03:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 02:59:00 +0000 UTC FinishedAt: 2026-08-26 03:29:18 +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": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_FLOWER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_FLOWER" ], "series_id": "0fd077f0-43fc-47bb-b7a9-8634a118f4d0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fl_change", "fl_tmplt_create" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0ZMT1dFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZsX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmbF90bXBsdF9jcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZHMgY2hlY2sgKGBubGFfb2tgKSBmb3IgbmV0bGluayBhdHRyaWJ1dGVzIGFmdGVyIGFkdmFuY2luZyB0aGUgYXR0cmlidXRlIHBvaW50ZXIgd2l0aCBgbmxhX25leHRgLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIGNvdWxkIHJlYWQgb3V0LW9mLWJvdW5kcyBtZW1vcnkgd2hlbiBhY2Nlc3NpbmcgdGhlIG5leHQgYXR0cmlidXRlJiMzOTtzIGhlYWRlciBvciBkYXRhLiBPdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciBpbnZhbGlkIGF0dHJpYnV0ZSBwYXJzaW5nIGluIGBmbF9zZXRfZW5jX29wdGAgd2hlbiBwYXJzaW5nIG5lc3RlZCBuZXRsaW5rIGF0dHJpYnV0ZXMgZm9yIGZsb3dlciBjbGFzc2lmaWVyIGVuY2Fwc3VsYXRpb24gb3B0aW9ucy4gSXQgYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSBgbXNrX2RlcHRoYCBpcyB2YWxpZCBiZWZvcmUgY29udGludWluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHBhY2tldCBjbGFzc2lmaWNhdGlvbiBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRjIG5ldGxpbmsuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxZDE4OGM5ODkwNmE5YTNmNWFhMTM1ZjZjMDQ4ZjYwMzZkZGE4MDJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDM6Mjc6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYyBiL25ldC9zY2hlZC9jbHNfZmxvd2VyLmNcbmluZGV4IDBlMjc1YjU4MTUxYzQuLjFjZWZlYTU3MWVmZDcgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXG5AQCAtMTcwMyw2ICYjNDM7MTcwMywxMSBAQCBzdGF0aWMgaW50IGZsX3NldF9lbmNfb3B0KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdFx0bmxhX29wdF9tc2sgPSBubGFfbmV4dChubGFfb3B0X21zaywgXHUwMDI2bXNrX2RlcHRoKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobXNrX2RlcHRoIFx1MDAyNlx1MDAyNiAhbmxhX29rKG5sYV9vcHRfbXNrLCBtc2tfZGVwdGgpKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7QSBtYXNrIGF0dHJpYnV0ZSBpcyBpbnZhbGlkXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9DTFNfRkxPV0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmxfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZsX3RtcGx0X2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3IgaW52YWxpZCBhdHRyaWJ1dGUgcGFyc2luZyBpbiBgZmxfc2V0X2VuY19vcHRgIHdoZW4gcGFyc2luZyBuZXN0ZWQgbmV0bGluayBhdHRyaWJ1dGVzIGZvciBmbG93ZXIgY2xhc3NpZmllciBlbmNhcHN1bGF0aW9uIG9wdGlvbnMuIEl0IGFkZHMgYSBjaGVjayB0byBlbnN1cmUgYG1za19kZXB0aGAgaXMgdmFsaWQgYmVmb3JlIGNvbnRpbnVpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBwYWNrZXQgY2xhc3NpZmljYXRpb24gbG9naWMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0YyBuZXRsaW5rLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWQxODhjOTg5MDZhOWEzZjVhYTEzNWY2YzA0OGY2MDM2ZGRhODAyYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDAzOjI3OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYyBiL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMKaW5kZXggMGUyNzViNTgxNTFjNC4uMWNlZmVhNTcxZWZkNyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jCkBAIC0xNzAzLDYgJiM0MzsxNzAzLDExIEBAIHN0YXRpYyBpbnQgZmxfc2V0X2VuY19vcHQoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSwKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCW5sYV9vcHRfbXNrID0gbmxhX25leHQobmxhX29wdF9tc2ssICZhbXA7bXNrX2RlcHRoKTsKJiM0MzsKJiM0MzsJCWlmIChtc2tfZGVwdGggJmFtcDsmYW1wOyAhbmxhX29rKG5sYV9vcHRfbXNrLCBtc2tfZGVwdGgpKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0EgbWFzayBhdHRyaWJ1dGUgaXMgaW52YWxpZCYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KIAl9CiAKIAlyZXR1cm4gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBGbG93ZXIgQ2xhc3NpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9jbHNfZmxvd2VyLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZmxfc2V0X2VuY19vcHRgIGZ1bmN0aW9uLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIOKAkyB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIGhlcmU6CgpgYGBjCgkJbmxhX29wdF9tc2sgPSBubGFfbmV4dChubGFfb3B0X21zaywgJmFtcDttc2tfZGVwdGgpOwomIzQzOwomIzQzOwkJaWYgKG1za19kZXB0aCAmYW1wOyZhbXA7ICFubGFfb2sobmxhX29wdF9tc2ssIG1za19kZXB0aCkpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7QSBtYXNrIGF0dHJpYnV0ZSBpcyBpbnZhbGlkJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQpgYGAKCk15IGluaXRpYWwgdGhvdWdodCBpcywgaXQmIzM5O3MgZ3VhcmRpbmcgYWdhaW5zdCBpbnZhbGlkIG1hc2sgYXR0cmlidXRlcywgcmlnaHQ/IE1ha2VzIHNlbnNlLiBgbmxhX25leHRgIGFkdmFuY2VzIHRoZSBOTEEgcG9pbnRlciwgYW5kIHRoaXMgY29kZSBpcyBub3cgY2hlY2tpbmcgaWYsIGFmdGVyIHRoZSBhZHZhbmNlLCB0aGUgTkxBIGlzIHN0aWxsIHZhbGlkIGdpdmVuIHRoZSBjdXJyZW50IGBtc2tfZGVwdGhgLiBUaGUgYG5sYV9va2AgZnVuY3Rpb24gaXMga2V5IGhlcmUg4oCTIHRoYXQmIzM5O3MgdGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hlY2suIEl0JiMzOTtzIHByb2JhYmx5IHZlcmlmeWluZyB0aGF0IHdlIGhhdmVuJiMzOTt0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgb3IgZW5jb3VudGVyZWQgc29tZSBvdGhlciBOTEEtcmVsYXRlZCBjb3JydXB0aW9uLiBJZiBgbXNrX2RlcHRoYCBpcyBub24temVybyAobWVhbmluZyB0aGVyZSAqaXMqIGEgbWFzayB0byBjb25zaWRlcikgYW5kIGBubGFfb2tgIGZhaWxzLCB3ZSBzZXQgYW4gZXh0ZW5kZWQgYWNrIG1lc3NhZ2UgYW5kIHJldHVybiAtRUlOVkFMLCBpbmRpY2F0aW5nIGFuIGludmFsaWQgbWFzayBhdHRyaWJ1dGUuIFRoYXQmIzM5O3MgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuIEdvdHRhIGVuc3VyZSBkYXRhIGludGVncml0eSB3aGVuIGRlYWxpbmcgd2l0aCBOTEFzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBubGFfb2tgIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIHZhbGlkYXRpb24gbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zmxfc2V0X2VuY19vcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2Zsb3dlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MTQ2OD1zdGF0aWMgaW50IGZsX3NldF9wZmNwX29wdChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBmbF9mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTUwNS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTUwNjpzdGF0aWMgaW50IGZsX3NldF9lbmNfb3B0KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE1MDctXHRcdFx0ICBzdHJ1Y3QgZmxfZmxvd19rZXkgKm1hc2ssXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0xODcxPXN0YXRpYyBpbnQgZmxfc2V0X2tleShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRjYV9vcHRzLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA5NS1cdGlmICh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU10pIHtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjA5NjpcdFx0cmV0ID0gZmxfc2V0X2VuY19vcHQodGIsIGtleSwgbWFzaywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA5Ny1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiBhIFRyYWZmaWMgQ2xhc3NpZmllciBWdWxuZXJhYmlsaXR5KioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBUaGlzIHZ1bG5lcmFiaWxpdHkgaXMgc2l0dGluZyB3aXRoaW4gdGhlIGBjbHNfZmxvd2VyYCB0cmFmZmljIGNsYXNzaWZpZXIsIHNwZWNpZmljYWxseSwgaXQmIzM5O3MgdHJpZ2dlcmVkIGR1cmluZyBhdHRyaWJ1dGUgcGFyc2luZyBpbiB0aGUgYGZsX3NldF9lbmNfb3B0YCBmdW5jdGlvbi4gVGhhdCBmdW5jdGlvbiBpcyByZWFjaGVkIHZpYSBgZmxfc2V0X2tleWAsIHdoaWNoIGlzIGEgcGFydCBvZiB0aGUgYGNsc19mbG93ZXJgIGNvZGUsIGFuZCBpdCYjMzk7cyB1bHRpbWF0ZWx5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHRocm91Z2ggbmV0bGluaywgbGlrZWx5IHZpYSB0aGUgYHRjYCBjb21tYW5kLWxpbmUgdXRpbGl0eS4gVGhlIHJvb3QgY2F1c2UgYXBwZWFycyB0byBiZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIG9yIHNvbWUgb3RoZXIgaXNzdWUgd2l0aCBpbnZhbGlkIGF0dHJpYnV0ZSBoYW5kbGluZywgaW4gYGZsX3NldF9lbmNfb3B0YC4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgd2F5IHRyYWZmaWMgY2xhc3NpZmljYXRpb24gd29ya3MsIGFuZCBpdCBkZWZpbml0ZWx5IG5lZWRzIGEgZ29vZCBmdXp6aW5nIGNhbXBhaWduLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgc2hvdWxkIGZpcnN0IGZpbmQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IGFwcGx5IHRvIGBjbHNfZmxvd2VyYCwgYXMgdGhlIGZ1enppbmcgc3RyYXRlZ3kgd2lsbCBkZXBlbmQgb24gdW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3Mgc2V0IHVwIHRvIHByb2Nlc3MgdHJhZmZpYyBhbmQgdGhlIHNwZWNpZmljIGF0dHJpYnV0ZXMgaXQgaXMgZGVzaWduZWQgdG8gaGFuZGxlLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIHByb3BlciBoYW5kbGUgb24gdGhlIGlucHV0cyB0aGF0IGNhbiByZWFjaCB0aGlzIGZhdWx0eSBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DTFNfRkxPV0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NTYyPWNvbmZpZyBORVRfQ0xTX0JQRlxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTU3MS1cbm5ldC9zY2hlZC9LY29uZmlnOjU3Mjpjb25maWcgTkVUX0NMU19GTE9XRVJcbm5ldC9zY2hlZC9LY29uZmlnLTU3My1cdHRyaXN0YXRlIFwmIzM0O0Zsb3dlciBjbGFzc2lmaWVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgRmxvdyBUYWJsZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoZSBjb25maWcgSSYjMzk7bSB3b3JraW5nIHdpdGggdXNlcyBgTkVUX0NMU19GTE9XRVJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUga2V5IG9wZXJhdGlvbnMgaW4gdGhpcyBjb250ZXh0LCB0aGUgY2VudHJhbCBmdW5jdGlvbnMgdGhhdCBtYW5pcHVsYXRlIHRoZSBmbG93IHRhYmxlIGVudHJpZXMuIGBmbF9zZXRfZW5jX29wdGAgYmVpbmcgc3RhdGljIGlzbiYjMzk7dCBoZWxwZnVsLCBzbyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSXQmIzM5O3MgbGlrZWx5IGBmbF9zZXRfa2V5YCBvciwgcGVyaGFwcyBtb3JlIGludHJpZ3VpbmdseSwgYGZsX2NoYW5nZWAgd2lsbCBiZSB0aGUgc2lnbmlmaWNhbnQgZnVuY3Rpb25zIGhlcmUuIFRoZSAmIzM0O2NoYW5nZSYjMzQ7IGZ1bmN0aW9uIHNlZW1zIGxpa2UgdGhlIG1vcmUgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgY2xvc2VyIGV4YW1pbmF0aW9uLCBzaW5jZSBpdCBpbXBsaWVzIG1vZGlmaWNhdGlvbiBvZiBleGlzdGluZyBlbnRyaWVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgY2hlY2tpbmcgdGhhdCBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zmxfc2V0X2tleSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfZmxvd2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19mbG93ZXIuYz04MDM9Y2ZtX29wdF9wb2xpY3lbVENBX0ZMT1dFUl9LRVlfQ0ZNX09QVF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy04MDgtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjgwOTpzdGF0aWMgdm9pZCBmbF9zZXRfa2V5X3ZhbChzdHJ1Y3QgbmxhdHRyICoqdGIsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTgxMC1cdFx0XHQgICB2b2lkICp2YWwsIGludCB2YWxfdHlwZSxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTgyMS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6ODIyOnN0YXRpYyBpbnQgZmxfc2V0X2tleV9zcGkoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODIzLVx0XHRcdCAgc3RydWN0IGZsX2Zsb3dfa2V5ICptYXNrLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODMyLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzo4MzM6XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWlwc2VjLnNwaSxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODM0LVx0XHQgICAgICAgVENBX0ZMT1dFUl9LRVlfU1BJLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODM5LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzo4NDA6c3RhdGljIGludCBmbF9zZXRfa2V5X3BvcnRfcmFuZ2Uoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODQxLVx0XHRcdFx0IHN0cnVjdCBmbF9mbG93X2tleSAqbWFzayxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg0My17XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjg0NDpcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNldHBfcmFuZ2UudHBfbWluLmRzdCxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODQ1LVx0XHQgICAgICAgVENBX0ZMT1dFUl9LRVlfUE9SVF9EU1RfTUlOLCBcdTAwMjZtYXNrLVx1MDAzZXRwX3JhbmdlLnRwX21pbi5kc3QsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg0Ni1cdFx0ICAgICAgIFRDQV9GTE9XRVJfVU5TUEVDLCBzaXplb2Yoa2V5LVx1MDAzZXRwX3JhbmdlLnRwX21pbi5kc3QpKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6ODQ3Olx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2V0cF9yYW5nZS50cF9tYXguZHN0LFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy04NDgtXHRcdCAgICAgICBUQ0FfRkxPV0VSX0tFWV9QT1JUX0RTVF9NQVgsIFx1MDAyNm1hc2stXHUwMDNldHBfcmFuZ2UudHBfbWF4LmRzdCxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODQ5LVx0XHQgICAgICAgVENBX0ZMT1dFUl9VTlNQRUMsIHNpemVvZihrZXktXHUwMDNldHBfcmFuZ2UudHBfbWF4LmRzdCkpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzo4NTA6XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZXRwX3JhbmdlLnRwX21pbi5zcmMsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg1MS1cdFx0ICAgICAgIFRDQV9GTE9XRVJfS0VZX1BPUlRfU1JDX01JTiwgXHUwMDI2bWFzay1cdTAwM2V0cF9yYW5nZS50cF9taW4uc3JjLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy04NTItXHRcdCAgICAgICBUQ0FfRkxPV0VSX1VOU1BFQywgc2l6ZW9mKGtleS1cdTAwM2V0cF9yYW5nZS50cF9taW4uc3JjKSk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjg1MzpcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNldHBfcmFuZ2UudHBfbWF4LnNyYyxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODU0LVx0XHQgICAgICAgVENBX0ZMT1dFUl9LRVlfUE9SVF9TUkNfTUFYLCBcdTAwMjZtYXNrLVx1MDAzZXRwX3JhbmdlLnRwX21heC5zcmMsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy04ODYtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjg4NzpzdGF0aWMgaW50IGZsX3NldF9rZXlfbXBsc19sc2UoY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhX2xzZSxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODg4LVx0XHRcdCAgICAgICBzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X21wbHMgKmtleV92YWwsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy05NzEtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjk3MjpzdGF0aWMgaW50IGZsX3NldF9rZXlfbXBsc19vcHRzKGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYV9tcGxzX29wdHMsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTk3My1cdFx0XHRcdHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfbXBscyAqa2V5X3ZhbCxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTk5My1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6OTk0Olx0XHRlcnIgPSBmbF9zZXRfa2V5X21wbHNfbHNlKG5sYV9sc2UsIGtleV92YWwsIGtleV9tYXNrLCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy05OTUtXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMDA2LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMDA3OnN0YXRpYyBpbnQgZmxfc2V0X2tleV9tcGxzKHN0cnVjdCBubGF0dHIgKip0Yixcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTAwOC1cdFx0XHQgICBzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X21wbHMgKmtleV92YWwsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMDI1LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMDI2Olx0XHRyZXR1cm4gZmxfc2V0X2tleV9tcGxzX29wdHModGJbVENBX0ZMT1dFUl9LRVlfTVBMU19PUFRTXSxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTAyNy1cdFx0XHRcdFx0ICAgIGtleV92YWwsIGtleV9tYXNrLCBleHRhY2spO1xuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTA4My1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTA4NDpzdGF0aWMgdm9pZCBmbF9zZXRfa2V5X3ZsYW4oc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMDg1LVx0XHRcdCAgICBfX2JlMTYgZXRoZXJ0eXBlLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTExNC1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTExNTpzdGF0aWMgdm9pZCBmbF9zZXRfa2V5X3BwcG9lKHN0cnVjdCBubGF0dHIgKip0Yixcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTExNi1cdFx0XHQgICAgIHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfcHBwb2UgKmtleV92YWwsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTU4LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMTU5OnN0YXRpYyB2b2lkIGZsX3NldF9rZXlfZmxhZyh1MzIgZmxvd2VyX2tleSwgdTMyIGZsb3dlcl9tYXNrLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTYwLVx0XHRcdCAgICB1MzIgKmRpc3NlY3Rvcl9rZXksIHUzMiAqZGlzc2VjdG9yX21hc2ssXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTY5LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMTcwOnN0YXRpYyBpbnQgZmxfc2V0X2tleV9mbGFncyhzdHJ1Y3QgbmxhdHRyICp0Y2Ffb3B0cywgc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTcxLVx0XHRcdCAgICBib29sIGVuY2FwLCB1MzIgKmZsYWdzX2tleSwgdTMyICpmbGFnc19tYXNrLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTE5Ni1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTE5NzpcdGZsX3NldF9rZXlfZmxhZyhrZXksIG1hc2ssIGZsYWdzX2tleSwgZmxhZ3NfbWFzayxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTE5OC1cdFx0XHRUQ0FfRkxPV0VSX0tFWV9GTEFHU19JU19GUkFHTUVOVCwgRkxPV19ESVNfSVNfRlJBR01FTlQpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMTk5Olx0Zmxfc2V0X2tleV9mbGFnKGtleSwgbWFzaywgZmxhZ3Nfa2V5LCBmbGFnc19tYXNrLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMjAwLVx0XHRcdFRDQV9GTE9XRVJfS0VZX0ZMQUdTX0ZSQUdfSVNfRklSU1QsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMjAyLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMjAzOlx0Zmxfc2V0X2tleV9mbGFnKGtleSwgbWFzaywgZmxhZ3Nfa2V5LCBmbGFnc19tYXNrLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMjA0LVx0XHRcdFRDQV9GTE9XRVJfS0VZX0ZMQUdTX1RVTk5FTF9DU1VNLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIwNi1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTIwNzpcdGZsX3NldF9rZXlfZmxhZyhrZXksIG1hc2ssIGZsYWdzX2tleSwgZmxhZ3NfbWFzayxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIwOC1cdFx0XHRUQ0FfRkxPV0VSX0tFWV9GTEFHU19UVU5ORUxfRE9OVF9GUkFHTUVOVCxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTEyMTAtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjEyMTE6XHRmbF9zZXRfa2V5X2ZsYWcoa2V5LCBtYXNrLCBmbGFnc19rZXksIGZsYWdzX21hc2ssXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTEyMTItXHRcdFx0VENBX0ZMT1dFUl9LRVlfRkxBR1NfVFVOTkVMX09BTSwgRkxPV19ESVNfRl9UVU5ORUxfT0FNKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIxMy1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTIxNDpcdGZsX3NldF9rZXlfZmxhZyhrZXksIG1hc2ssIGZsYWdzX2tleSwgZmxhZ3NfbWFzayxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIxNS1cdFx0XHRUQ0FfRkxPV0VSX0tFWV9GTEFHU19UVU5ORUxfQ1JJVF9PUFQsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMjIwLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMjIxOnN0YXRpYyB2b2lkIGZsX3NldF9rZXlfaXAoc3RydWN0IG5sYXR0ciAqKnRiLCBib29sIGVuY2FwLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMjIyLVx0XHRcdCAgc3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9pcCAqa2V5LFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIyOS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTIzMDpcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNldG9zLCB0b3Nfa2V5LCBcdTAwMjZtYXNrLVx1MDAzZXRvcywgdG9zX21hc2ssIHNpemVvZihrZXktXHUwMDNldG9zKSk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjEyMzE6XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZXR0bCwgdHRsX2tleSwgXHUwMDI2bWFzay1cdTAwM2V0dGwsIHR0bF9tYXNrLCBzaXplb2Yoa2V5LVx1MDAzZXR0bCkpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMjMyLX1cbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTE3MTY9c3RhdGljIGludCBmbF92YWxpZGF0ZV9jdF9zdGF0ZSh1MTYgc3RhdGUsIHN0cnVjdCBubGF0dHIgKnRiLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTc0OS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTc1MDpzdGF0aWMgaW50IGZsX3NldF9rZXlfY3Qoc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzUxLVx0XHRcdCBzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X2N0ICprZXksXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzYxLVx0XHR9XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE3NjI6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNlY3Rfc3RhdGUsIFRDQV9GTE9XRVJfS0VZX0NUX1NUQVRFLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzYzLVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZWN0X3N0YXRlLCBUQ0FfRkxPV0VSX0tFWV9DVF9TVEFURV9NQVNLLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTc3Ny1cdFx0fVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxNzc4Olx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWN0X3pvbmUsIFRDQV9GTE9XRVJfS0VZX0NUX1pPTkUsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE3NzktXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNlY3Rfem9uZSwgVENBX0ZMT1dFUl9LRVlfQ1RfWk9ORV9NQVNLLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTc4Ni1cdFx0fVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxNzg3Olx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWN0X21hcmssIFRDQV9GTE9XRVJfS0VZX0NUX01BUkssXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE3ODgtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNlY3RfbWFyaywgVENBX0ZMT1dFUl9LRVlfQ1RfTUFSS19NQVNLLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTc5NS1cdFx0fVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxNzk2Olx0XHRmbF9zZXRfa2V5X3ZhbCh0Yiwga2V5LVx1MDAzZWN0X2xhYmVscywgVENBX0ZMT1dFUl9LRVlfQ1RfTEFCRUxTLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzk3LVx0XHRcdCAgICAgICBtYXNrLVx1MDAzZWN0X2xhYmVscywgVENBX0ZMT1dFUl9LRVlfQ1RfTEFCRUxTX01BU0ssXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0xODA0PXN0YXRpYyBib29sIGlzX3ZsYW5fa2V5KHN0cnVjdCBubGF0dHIgKnRiLCBfX2JlMTYgKmV0aGVydHlwZSxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4MjMtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE4MjQ6c3RhdGljIHZvaWQgZmxfc2V0X2tleV9jZm1fbWRfbGV2ZWwoc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODI1LVx0XHRcdFx0ICAgIHN0cnVjdCBmbF9mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTgzOC1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTgzOTpzdGF0aWMgdm9pZCBmbF9zZXRfa2V5X2NmbV9vcGNvZGUoc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODQwLVx0XHRcdFx0ICBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4NDMte1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxODQ0Olx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VjZm0ub3Bjb2RlLCBUQ0FfRkxPV0VSX0tFWV9DRk1fT1BDT0RFLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODQ1LVx0XHQgICAgICAgXHUwMDI2bWFzay1cdTAwM2VjZm0ub3Bjb2RlLCBUQ0FfRkxPV0VSX1VOU1BFQyxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4NDgtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE4NDk6c3RhdGljIGludCBmbF9zZXRfa2V5X2NmbShzdHJ1Y3QgbmxhdHRyICoqdGIsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4NTAtXHRcdFx0ICBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4NjQtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE4NjU6XHRmbF9zZXRfa2V5X2NmbV9vcGNvZGUobmxhX2NmbV9vcHQsIGtleSwgbWFzaywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTg2NjpcdGZsX3NldF9rZXlfY2ZtX21kX2xldmVsKG5sYV9jZm1fb3B0LCBrZXksIG1hc2ssIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4NjctXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODcwLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxODcxOnN0YXRpYyBpbnQgZmxfc2V0X2tleShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRjYV9vcHRzLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODcyLVx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBmbF9mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg4NS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTg4NjpcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNlbWV0YS5sMl9taXNzLCBUQ0FfRkxPV0VSX0wyX01JU1MsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4ODctXHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZW1ldGEubDJfbWlzcywgVENBX0ZMT1dFUl9VTlNQRUMsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODg5LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxODkwOlx0Zmxfc2V0X2tleV92YWwodGIsIGtleS1cdTAwM2VldGguZHN0LCBUQ0FfRkxPV0VSX0tFWV9FVEhfRFNULFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODkxLVx0XHQgICAgICAgbWFzay1cdTAwM2VldGguZHN0LCBUQ0FfRkxPV0VSX0tFWV9FVEhfRFNUX01BU0ssXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4OTItXHRcdCAgICAgICBzaXplb2Yoa2V5LVx1MDAzZWV0aC5kc3QpKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTg5MzpcdGZsX3NldF9rZXlfdmFsKHRiLCBrZXktXHUwMDNlZXRoLnNyYywgVENBX0ZMT1dFUl9LRVlfRVRIX1NSQyxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg5NC1cdFx0ICAgICAgIG1hc2stXHUwMDNlZXRoLnNyYywgVENBX0ZMT1dFUl9LRVlfRVRIX1NSQ19NQVNLLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODk1LVx0XHQgICAgICAgc2l6ZW9mKGtleS1cdTAwM2VldGguc3JjKSk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE4OTY6XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZW51bV9vZl92bGFucyxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg5Ny1cdFx0ICAgICAgIFRDQV9GTE9XRVJfS0VZX05VTV9PRl9WTEFOUyxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MDItXHRpZiAoaXNfdmxhbl9rZXkodGJbVENBX0ZMT1dFUl9LRVlfRVRIX1RZUEVdLCBcdTAwMjZldGhlcnR5cGUsIGtleSwgbWFzaywgMCkpIHtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTkwMzpcdFx0Zmxfc2V0X2tleV92bGFuKHRiLCBldGhlcnR5cGUsIFRDQV9GTE9XRVJfS0VZX1ZMQU5fSUQsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MDQtXHRcdFx0XHRUQ0FfRkxPV0VSX0tFWV9WTEFOX1BSSU8sXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTA5LVx0XHRcdFx0XHUwMDI2ZXRoZXJ0eXBlLCBrZXksIG1hc2ssIDEpKSB7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5MTA6XHRcdFx0Zmxfc2V0X2tleV92bGFuKHRiLCBldGhlcnR5cGUsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MTEtXHRcdFx0XHRcdFRDQV9GTE9XRVJfS0VZX0NWTEFOX0lELFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkxNC1cdFx0XHRcdFx0XHUwMDI2a2V5LVx1MDAzZWN2bGFuLCBcdTAwMjZtYXNrLVx1MDAzZWN2bGFuKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTkxNTpcdFx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWJhc2ljLm5fcHJvdG8sXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MTYtXHRcdFx0XHQgICAgICAgVENBX0ZMT1dFUl9LRVlfQ1ZMQU5fRVRIX1RZUEUsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTIzLVx0aWYgKGtleS1cdTAwM2ViYXNpYy5uX3Byb3RvID09IGh0b25zKEVUSF9QX1BQUF9TRVMpKVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTI0Olx0XHRmbF9zZXRfa2V5X3BwcG9lKHRiLCBcdTAwMjZrZXktXHUwMDNlcHBwb2UsIFx1MDAyNm1hc2stXHUwMDNlcHBwb2UsIGtleSwgbWFzayk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MjUtXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTI3LVx0ICAgIGtleS1cdTAwM2ViYXNpYy5uX3Byb3RvID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5Mjg6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNlYmFzaWMuaXBfcHJvdG8sIFRDQV9GTE9XRVJfS0VZX0lQX1BST1RPLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTI5LVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZWJhc2ljLmlwX3Byb3RvLCBUQ0FfRkxPV0VSX1VOU1BFQyxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkzMC1cdFx0XHQgICAgICAgc2l6ZW9mKGtleS1cdTAwM2ViYXNpYy5pcF9wcm90bykpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTMxOlx0XHRmbF9zZXRfa2V5X2lwKHRiLCBmYWxzZSwgXHUwMDI2a2V5LVx1MDAzZWlwLCBcdTAwMjZtYXNrLVx1MDAzZWlwKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkzMi1cdH1cbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MzYtXHRcdG1hc2stXHUwMDNlY29udHJvbC5hZGRyX3R5cGUgPSB+MDtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTkzNzpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VpcHY0LnNyYywgVENBX0ZMT1dFUl9LRVlfSVBWNF9TUkMsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MzgtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNlaXB2NC5zcmMsIFRDQV9GTE9XRVJfS0VZX0lQVjRfU1JDX01BU0ssXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MzktXHRcdFx0ICAgICAgIHNpemVvZihrZXktXHUwMDNlaXB2NC5zcmMpKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTk0MDpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VpcHY0LmRzdCwgVENBX0ZMT1dFUl9LRVlfSVBWNF9EU1QsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NDEtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNlaXB2NC5kc3QsIFRDQV9GTE9XRVJfS0VZX0lQVjRfRFNUX01BU0ssXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTQ1LVx0XHRtYXNrLVx1MDAzZWNvbnRyb2wuYWRkcl90eXBlID0gfjA7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5NDY6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNlaXB2Ni5zcmMsIFRDQV9GTE9XRVJfS0VZX0lQVjZfU1JDLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTQ3LVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZWlwdjYuc3JjLCBUQ0FfRkxPV0VSX0tFWV9JUFY2X1NSQ19NQVNLLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTQ4LVx0XHRcdCAgICAgICBzaXplb2Yoa2V5LVx1MDAzZWlwdjYuc3JjKSk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5NDk6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNlaXB2Ni5kc3QsIFRDQV9GTE9XRVJfS0VZX0lQVjZfRFNULFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTUwLVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZWlwdjYuZHN0LCBUQ0FfRkxPV0VSX0tFWV9JUFY2X0RTVF9NQVNLLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk1NC1cdGlmIChrZXktXHUwMDNlYmFzaWMuaXBfcHJvdG8gPT0gSVBQUk9UT19UQ1ApIHtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTk1NTpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2V0cC5zcmMsIFRDQV9GTE9XRVJfS0VZX1RDUF9TUkMsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NTYtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNldHAuc3JjLCBUQ0FfRkxPV0VSX0tFWV9UQ1BfU1JDX01BU0ssXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NTctXHRcdFx0ICAgICAgIHNpemVvZihrZXktXHUwMDNldHAuc3JjKSk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5NTg6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNldHAuZHN0LCBUQ0FfRkxPV0VSX0tFWV9UQ1BfRFNULFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTU5LVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZXRwLmRzdCwgVENBX0ZMT1dFUl9LRVlfVENQX0RTVF9NQVNLLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTYwLVx0XHRcdCAgICAgICBzaXplb2Yoa2V5LVx1MDAzZXRwLmRzdCkpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTYxOlx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZXRjcC5mbGFncywgVENBX0ZMT1dFUl9LRVlfVENQX0ZMQUdTLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTYyLVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZXRjcC5mbGFncywgVENBX0ZMT1dFUl9LRVlfVENQX0ZMQUdTX01BU0ssXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTY0LVx0fSBlbHNlIGlmIChrZXktXHUwMDNlYmFzaWMuaXBfcHJvdG8gPT0gSVBQUk9UT19VRFApIHtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTk2NTpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2V0cC5zcmMsIFRDQV9GTE9XRVJfS0VZX1VEUF9TUkMsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NjYtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNldHAuc3JjLCBUQ0FfRkxPV0VSX0tFWV9VRFBfU1JDX01BU0ssXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NjctXHRcdFx0ICAgICAgIHNpemVvZihrZXktXHUwMDNldHAuc3JjKSk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5Njg6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNldHAuZHN0LCBUQ0FfRkxPV0VSX0tFWV9VRFBfRFNULFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTY5LVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZXRwLmRzdCwgVENBX0ZMT1dFUl9LRVlfVURQX0RTVF9NQVNLLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk3MS1cdH0gZWxzZSBpZiAoa2V5LVx1MDAzZWJhc2ljLmlwX3Byb3RvID09IElQUFJPVE9fU0NUUCkge1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTcyOlx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZXRwLnNyYywgVENBX0ZMT1dFUl9LRVlfU0NUUF9TUkMsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NzMtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNldHAuc3JjLCBUQ0FfRkxPV0VSX0tFWV9TQ1RQX1NSQ19NQVNLLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTc0LVx0XHRcdCAgICAgICBzaXplb2Yoa2V5LVx1MDAzZXRwLnNyYykpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTc1Olx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZXRwLmRzdCwgVENBX0ZMT1dFUl9LRVlfU0NUUF9EU1QsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NzYtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNldHAuZHN0LCBUQ0FfRkxPV0VSX0tFWV9TQ1RQX0RTVF9NQVNLLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk3OS1cdFx0ICAga2V5LVx1MDAzZWJhc2ljLmlwX3Byb3RvID09IElQUFJPVE9fSUNNUCkge1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTgwOlx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWljbXAudHlwZSwgVENBX0ZMT1dFUl9LRVlfSUNNUFY0X1RZUEUsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5ODEtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNlaWNtcC50eXBlLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk4My1cdFx0XHQgICAgICAgc2l6ZW9mKGtleS1cdTAwM2VpY21wLnR5cGUpKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTk4NDpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VpY21wLmNvZGUsIFRDQV9GTE9XRVJfS0VZX0lDTVBWNF9DT0RFLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTg1LVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZWljbXAuY29kZSxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5ODktXHRcdCAgIGtleS1cdTAwM2ViYXNpYy5pcF9wcm90byA9PSBJUFBST1RPX0lDTVBWNikge1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTkwOlx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWljbXAudHlwZSwgVENBX0ZMT1dFUl9LRVlfSUNNUFY2X1RZUEUsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5OTEtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNlaWNtcC50eXBlLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk5My1cdFx0XHQgICAgICAgc2l6ZW9mKGtleS1cdTAwM2VpY21wLnR5cGUpKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTk5NDpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VpY21wLmNvZGUsIFRDQV9GTE9XRVJfS0VZX0lDTVBWNl9DT0RFLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTk1LVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZWljbXAuY29kZSxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5OTktXHRcdCAgIGtleS1cdTAwM2ViYXNpYy5uX3Byb3RvID09IGh0b25zKEVUSF9QX01QTFNfTUMpKSB7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwMDA6XHRcdHJldCA9IGZsX3NldF9rZXlfbXBscyh0YiwgXHUwMDI2a2V5LVx1MDAzZW1wbHMsIFx1MDAyNm1hc2stXHUwMDNlbXBscywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjAwMS1cdFx0aWYgKHJldClcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMDQtXHRcdCAgIGtleS1cdTAwM2ViYXNpYy5uX3Byb3RvID09IGh0b25zKEVUSF9QX1JBUlApKSB7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwMDU6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNlYXJwLnNpcCwgVENBX0ZMT1dFUl9LRVlfQVJQX1NJUCxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjAwNi1cdFx0XHQgICAgICAgXHUwMDI2bWFzay1cdTAwM2VhcnAuc2lwLCBUQ0FfRkxPV0VSX0tFWV9BUlBfU0lQX01BU0ssXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMDctXHRcdFx0ICAgICAgIHNpemVvZihrZXktXHUwMDNlYXJwLnNpcCkpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDA4Olx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWFycC50aXAsIFRDQV9GTE9XRVJfS0VZX0FSUF9USVAsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMDktXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNlYXJwLnRpcCwgVENBX0ZMT1dFUl9LRVlfQVJQX1RJUF9NQVNLLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDEwLVx0XHRcdCAgICAgICBzaXplb2Yoa2V5LVx1MDAzZWFycC50aXApKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjAxMTpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VhcnAub3AsIFRDQV9GTE9XRVJfS0VZX0FSUF9PUCxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjAxMi1cdFx0XHQgICAgICAgXHUwMDI2bWFzay1cdTAwM2VhcnAub3AsIFRDQV9GTE9XRVJfS0VZX0FSUF9PUF9NQVNLLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDEzLVx0XHRcdCAgICAgICBzaXplb2Yoa2V5LVx1MDAzZWFycC5vcCkpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDE0Olx0XHRmbF9zZXRfa2V5X3ZhbCh0Yiwga2V5LVx1MDAzZWFycC5zaGEsIFRDQV9GTE9XRVJfS0VZX0FSUF9TSEEsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMTUtXHRcdFx0ICAgICAgIG1hc2stXHUwMDNlYXJwLnNoYSwgVENBX0ZMT1dFUl9LRVlfQVJQX1NIQV9NQVNLLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDE2LVx0XHRcdCAgICAgICBzaXplb2Yoa2V5LVx1MDAzZWFycC5zaGEpKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjAxNzpcdFx0Zmxfc2V0X2tleV92YWwodGIsIGtleS1cdTAwM2VhcnAudGhhLCBUQ0FfRkxPV0VSX0tFWV9BUlBfVEhBLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDE4LVx0XHRcdCAgICAgICBtYXNrLVx1MDAzZWFycC50aGEsIFRDQV9GTE9XRVJfS0VZX0FSUF9USEFfTUFTSyxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMjAtXHR9IGVsc2UgaWYgKGtleS1cdTAwM2ViYXNpYy5pcF9wcm90byA9PSBJUFBST1RPX0wyVFApIHtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjAyMTpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VsMnRwdjMuc2Vzc2lvbl9pZCxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjAyMi1cdFx0XHQgICAgICAgVENBX0ZMT1dFUl9LRVlfTDJUUFYzX1NJRCxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMjUtXHR9IGVsc2UgaWYgKGtleS1cdTAwM2ViYXNpYy5uX3Byb3RvICA9PSBodG9ucyhFVEhfUF9DRk0pKSB7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwMjY6XHRcdHJldCA9IGZsX3NldF9rZXlfY2ZtKHRiLCBrZXksIG1hc2ssIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMjctXHRcdGlmIChyZXQpXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDMzLVx0ICAgIGtleS1cdTAwM2ViYXNpYy5pcF9wcm90byA9PSBJUFBST1RPX1NDVFApIHtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjAzNDpcdFx0cmV0ID0gZmxfc2V0X2tleV9wb3J0X3JhbmdlKHRiLCBrZXksIG1hc2ssIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMzUtXHRcdGlmIChyZXQpXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDM5LVx0aWYgKHRiW1RDQV9GTE9XRVJfS0VZX1NQSV0pIHtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjA0MDpcdFx0cmV0ID0gZmxfc2V0X2tleV9zcGkodGIsIGtleSwgbWFzaywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA0MS1cdFx0aWYgKHJldClcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwNDgtXHRcdG1hc2stXHUwMDNlZW5jX2NvbnRyb2wuYWRkcl90eXBlID0gfjA7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwNDk6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNlZW5jX2lwdjQuc3JjLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDUwLVx0XHRcdCAgICAgICBUQ0FfRkxPV0VSX0tFWV9FTkNfSVBWNF9TUkMsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDUzLVx0XHRcdCAgICAgICBzaXplb2Yoa2V5LVx1MDAzZWVuY19pcHY0LnNyYykpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDU0Olx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWVuY19pcHY0LmRzdCxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA1NS1cdFx0XHQgICAgICAgVENBX0ZMT1dFUl9LRVlfRU5DX0lQVjRfRFNULFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA2NC1cdFx0bWFzay1cdTAwM2VlbmNfY29udHJvbC5hZGRyX3R5cGUgPSB+MDtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjA2NTpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VlbmNfaXB2Ni5zcmMsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwNjYtXHRcdFx0ICAgICAgIFRDQV9GTE9XRVJfS0VZX0VOQ19JUFY2X1NSQyxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwNjktXHRcdFx0ICAgICAgIHNpemVvZihrZXktXHUwMDNlZW5jX2lwdjYuc3JjKSk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwNzA6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNlZW5jX2lwdjYuZHN0LFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDcxLVx0XHRcdCAgICAgICBUQ0FfRkxPV0VSX0tFWV9FTkNfSVBWNl9EU1QsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDc2LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDc3Olx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VlbmNfa2V5X2lkLmtleWlkLCBUQ0FfRkxPV0VSX0tFWV9FTkNfS0VZX0lELFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDc4LVx0XHQgICAgICAgXHUwMDI2bWFzay1cdTAwM2VlbmNfa2V5X2lkLmtleWlkLCBUQ0FfRkxPV0VSX1VOU1BFQyxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwODAtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwODE6XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWVuY190cC5zcmMsIFRDQV9GTE9XRVJfS0VZX0VOQ19VRFBfU1JDX1BPUlQsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwODItXHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZWVuY190cC5zcmMsIFRDQV9GTE9XRVJfS0VZX0VOQ19VRFBfU1JDX1BPUlRfTUFTSyxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwODQtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwODU6XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWVuY190cC5kc3QsIFRDQV9GTE9XRVJfS0VZX0VOQ19VRFBfRFNUX1BPUlQsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwODYtXHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZWVuY190cC5kc3QsIFRDQV9GTE9XRVJfS0VZX0VOQ19VRFBfRFNUX1BPUlRfTUFTSyxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwODgtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwODk6XHRmbF9zZXRfa2V5X2lwKHRiLCB0cnVlLCBcdTAwMjZrZXktXHUwMDNlZW5jX2lwLCBcdTAwMjZtYXNrLVx1MDAzZWVuY19pcCk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwOTAtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwOTE6XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWhhc2guaGFzaCwgVENBX0ZMT1dFUl9LRVlfSEFTSCxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA5Mi1cdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNlaGFzaC5oYXNoLCBUQ0FfRkxPV0VSX0tFWV9IQVNIX01BU0ssXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMTAwLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMTAxOlx0cmV0ID0gZmxfc2V0X2tleV9jdCh0YiwgXHUwMDI2a2V5LVx1MDAzZWN0LCBcdTAwMjZtYXNrLVx1MDAzZWN0LCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMTAyLVx0aWYgKHJldClcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIxMDUtXHRpZiAodGJbVENBX0ZMT1dFUl9LRVlfRkxBR1NdKSB7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIxMDY6XHRcdHJldCA9IGZsX3NldF9rZXlfZmxhZ3ModGNhX29wdHMsIHRiLCBmYWxzZSxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjEwNy1cdFx0XHRcdCAgICAgICBcdTAwMjZrZXktXHUwMDNlY29udHJvbC5mbGFncyxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIxMTMtXHRpZiAodGJbVENBX0ZMT1dFUl9LRVlfRU5DX0ZMQUdTXSlcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjExNDpcdFx0cmV0ID0gZmxfc2V0X2tleV9mbGFncyh0Y2Ffb3B0cywgdGIsIHRydWUsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIxMTUtXHRcdFx0XHQgICAgICAgXHUwMDI2a2V5LVx1MDAzZWVuY19jb250cm9sLmZsYWdzLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MjM1OD1zdGF0aWMgaW50IGZsX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNDY4LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyNDY5Olx0ZXJyID0gZmxfc2V0X2tleShuZXQsIHRjYV9vcHRzLCB0YiwgXHUwMDI2Zm5ldy1cdTAwM2VrZXksIFx1MDAyNm1hc2stXHUwMDNla2V5LCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNDcwLVx0aWYgKGVycilcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTI4MDc9c3RhdGljIHZvaWQgKmZsX3RtcGx0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfY2hhaW4gKmNoYWluLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjgzMi1cdHRtcGx0LVx1MDAzZWNoYWluID0gY2hhaW47XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjI4MzM6XHRlcnIgPSBmbF9zZXRfa2V5KG5ldCwgdGNhX29wdHMsIHRiLCBcdTAwMjZ0bXBsdC1cdTAwM2VkdW1teV9rZXksXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI4MzQtXHRcdFx0IFx1MDAyNnRtcGx0LVx1MDAzZW1hc2ssIGV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMjgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZsb3dlciBGaWx0ZXIgTW9kaWZpY2F0aW9uIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgZmxvd2VyIGZpbHRlciBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgZmxfY2hhbmdlYCBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiBmb3IsIHdlbGwsIGNoYW5naW5nIHRoZSBmaWx0ZXIuIEFuZCB0aGVuIHRoZXJlJiMzOTtzIGBmbF90bXBsdF9jcmVhdGVgLCB3aGljaCBhbHNvIHNlZW1zIHRvIGJlIGEga2V5IGVudHJ5IHBvaW50IGZvciB0aGlzLCBwb3RlbnRpYWxseSB3aGVuIHdlJiMzOTtyZSBjcmVhdGluZyBhIG5ldyBmbG93ZXIgZmlsdGVyIHRlbXBsYXRlLiBCb3RoIG9mIHRoZXNlIGVudHJ5IHBvaW50cyDigJMgYGZsX2NoYW5nZWAgYW5kIGBmbF90bXBsdF9jcmVhdGVgIOKAkyBldmVudHVhbGx5IGNhbGwgYGZsX3NldF9rZXlgLCB3aGljaCBwcm9iYWJseSBkb2VzIHRoZSBjb3JlIHdvcmsgb2YgYWN0dWFsbHkgY29uZmlndXJpbmcgdGhlIGZpbHRlci4gQWxyaWdodCwgc28gSSYjMzk7dmUgZ290IHR3byBnb29kIGZvY2FsIHBvaW50cyBoZXJlOiBgZmxfY2hhbmdlYCBhbmQgYGZsX3RtcGx0X2NyZWF0ZWAuCgpXYWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBIYW5nIG9uLCBgZmxfY2hhbmdlYCBpcyBhICpjYWxsYmFjayogd2l0aGluIGBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfZmxfb3BzYD8gSW50ZXJlc3RpbmcuIEkgc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBsb29rIGF0IGBjbHNfZmxfb3BzYCB0byBzZWUgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIgaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsuIExldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IHN0cnVjdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfZmxfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19mbG93ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTM4MjI9c3RhdGljIGJvb2wgZmxfZGVsZXRlX2VtcHR5KHN0cnVjdCB0Y2ZfcHJvdG8gKnRwKVxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMzgzMi1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MzgzMzpzdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX2ZsX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODM0LVx0LmtpbmRcdFx0PSBcJiMzNDtmbG93ZXJcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzE5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRmxvd2VyIENsYXNzaWZpZXIgQ29uZmlndXJhdGlvbiBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlIGAuY2hhbmdlYCBjYWxsYmFjaywgd2hpY2ggSSYjMzk7bSBjb25maXJtaW5nIGlzIGBmbF9jaGFuZ2VgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIHNwZWNpZmljcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhdm9pZGluZyB0aG9zZSBmcnVzdHJhdGluZyBkZWJ1Z2dpbmcgc2Vzc2lvbnMgbGF0ZXIuCgpUaGUgY29yZSBpbXBsZW1lbnRhdGlvbiBzZWVtcyB0byBiZSBpbiBgbmV0L3NjaGVkL2Nsc19mbG93ZXIuY2AsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgdGhlcmUgZm9yIHRoZSBtZWF0IG9mIHRoZSBmdW5jdGlvbmFsaXR5LiBOb3csIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbiBpdHNlbGYsIGl0IGxvb2tzIGxpa2UgYE5FVF9DTFNfRkxPV0VSYCBpcyB0aGUga2V5LiBCdXQgdGhhdCBhbG9uZSBkb2VzbiYjMzk7dCBndWFyYW50ZWUgZXZlcnl0aGluZyBpcyBzZXQgdXAgY29ycmVjdGx5LiBJIHNob3VsZCBhbHdheXMgY3Jvc3MtcmVmZXJlbmNlIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBuZXQvc2NoZWQvS2NvbmZpZ2AgdG8gYmUgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciByZWxhdGVkLCBwb3RlbnRpYWxseSBvYnNjdXJlLCBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZsb3dlciBjbGFzc2lmaWVyLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQ0xTX0ZMT1dFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTU2Mj1jb25maWcgTkVUX0NMU19CUEZcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01NzEtXG5uZXQvc2NoZWQvS2NvbmZpZzo1NzI6Y29uZmlnIE5FVF9DTFNfRkxPV0VSXG5uZXQvc2NoZWQvS2NvbmZpZy01NzMtXHR0cmlzdGF0ZSBcJiMzNDtGbG93ZXIgY2xhc3NpZmllclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEyMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBgTkVUX0NMU19GTE9XRVJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0NMU19GTE9XRVJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGNvcmUgY2xhc3NpZmljYXRpb24gbWVjaGFuaXNtcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGluIHRoZSBrZXJuZWwuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIHJlbHkgb24gYE5FVF9DTFNfRkxPV0VSYCBhbmQsIGNvbnZlcnNlbHksIHdoYXQgaXQgbGV2ZXJhZ2VzLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0OgoKKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIFdoYXQgc3RydWN0dXJlcyBkb2VzIGBORVRfQ0xTX0ZMT1dFUmAgZGVmaW5lIG9yIHVzZT8gSXMgaXQgbWFuaXB1bGF0aW5nIGZsb3cga2V5cywgbWFza3MsIGFjdGlvbnMsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBVbmRlcnN0YW5kaW5nIGl0cyBkYXRhIG1vZGVsIGlzIGNydWNpYWwuCiogICAqKkFQSSBJbnRlcmFjdGlvbnM6KiogV2hhdCBrZXJuZWwgQVBJcyBkb2VzIGBORVRfQ0xTX0ZMT1dFUmAgZXhwb3NlPyBBcmUgdGhlcmUgaW9jdGxzLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciBvdGhlciBpbnRlcmZhY2VzIHRoYXQgYWRtaW5pc3RyYXRvcnMgb3IgYXBwbGljYXRpb25zIHVzZSB0byBjb25maWd1cmUgaXQ/CiogICAqKkludGVncmF0aW9uIFBvaW50czoqKiBXaGVyZSBkb2VzIGl0IGhvb2sgaW50byB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aD8gSXMgaXQgaW52b2x2ZWQgaW4gaW5ncmVzcywgZWdyZXNzLCBvciBib3RoPyBEb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgY2xhc3NpZmllcnMgb3IgdHJhZmZpYyBjb250cm9sIG1vZHVsZXMgbGlrZSBgdGNgPwoqICAgKipIYXJkd2FyZSBBYnN0cmFjdGlvbjoqKiBEb2VzIGl0IHN1cHBvcnQgaGFyZHdhcmUgb2ZmbG9hZGluZz8gSWYgc28sIHdoYXQgYXJlIHRoZSByZWxldmFudCBkZXZpY2UgZHJpdmVycyBhbmQgaG93IGRvZXMgaXQgaW50ZXJmYWNlIHdpdGggdGhlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaXMgaW1wbGVtZW50ZWQuCiogICAqKkNvbmZpZ3VyYXRpb246KiogVGhlIGNvbmZpZ3VyYXRpb24gdG9vbHMgZm9yIGBORVRfQ0xTX0ZMT1dFUmAuIEhvdyBpcyBpdCBjb25maWd1cmVkPyBEb2VzIGl0IG5lZWQgZXh0ZXJuYWwgaGVscCwgb3IgaXMgdGhlcmUgYSBzcGVjaWZpYyBjb21tYW5kIHRvIHNldCBwYXJhbWV0ZXJzLgoKVWx0aW1hdGVseSwgSSB3YW50IGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgJiMzNDtyYWlzb24gZCYjMzk7w6p0cmUmIzM0Oy4gSSBuZWVkIHRvIGlkZW50aWZ5IGJvdGggdGhlIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgdHJhZmZpYyBtYW5hZ2VtZW50IHNjaGVtZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcCBpbnRvIHRoZSBzb3VyY2UgY29kZSwgbWF5YmUgZXZlbiBydW4gc29tZSBxdWljayBgZ3JlcGAgcXVlcmllcyBvbiB0aGUgY29kZWJhc2UuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTcwOlx0XHQgIGJlIGNhbGxlZCBjbHNfYnBmLlxuIDU3MTpcdFxuIDU3MjpcdGNvbmZpZyBORVRfQ0xTX0ZMT1dFUlxuIDU3MzpcdFx0dHJpc3RhdGUgXCYjMzQ7Rmxvd2VyIGNsYXNzaWZpZXJcJiMzNDtcbiA1NzQ6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNTc1Olx0XHRoZWxwXG4gNTc2Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgYmFzZWQgb25cbiA1Nzc6XHRcdCAgYSBjb25maWd1cmFibGUgY29tYmluYXRpb24gb2YgcGFja2V0IGtleXMgYW5kIG1hc2tzLlxuIDU3ODpcdFxuIDU3OTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gNTgwOlx0XHQgIGJlIGNhbGxlZCBjbHNfZmxvd2VyLlxuIDU4MTpcdFxuIDU4MjpcdGNvbmZpZyBORVRfQ0xTX01BVENIQUxMXG4gNTgzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNYXRjaC1hbGwgY2xhc3NpZmllclwmIzM0O1xuIDU4NDpcdFx0c2VsZWN0IE5FVF9DTFNcbiA1ODU6XHRcdGhlbHBcbiA1ODY6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyBiYXNlZCBvblxuIDU4NzpcdFx0ICBub3RoaW5nLiBFdmVyeSBwYWNrZXQgd2lsbCBtYXRjaC5cbiA1ODg6XHRcbiA1ODk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgTmV0d29yayBDbGFzc2lmaWVyIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRyYWZmaWMgY2xhc3NpZmljYXRpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYE5FVF9DTFNgIHNldHRpbmcuIEkmIzM5O3ZlIGdvdCB0byBkZXRlcm1pbmUgaXRzIG1lYW5pbmcgYW5kIGltcGxpY2F0aW9uIHdpdGhpbiB0aGUgZ3JlYXRlciBjb250ZXh0IG9mIHRoZSBuZXR3b3JrIHNjaGVkdWxlciwgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgYE5FVF9TQ0hFRGAuIEVzc2VudGlhbGx5LCBgTkVUX0NMU2AgaXMgYSBjaGlsZCBvciBkZXBlbmRlbnQgaXRlbSB3aXRoaW4gdGhlIG92ZXJhbGwgYE5FVF9TQ0hFRGAgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBORVRfQ0xTYCBpcyBzZWxlY3RlZCBhbmQgaG93IGl0cyBzZXR0aW5ncyBpbmZsdWVuY2UgdGhlIG5ldHdvcmsgc2NoZWR1bGVyLiBJIHdpbGwgbm93IHJldmlldyB0aGUgcGFyZW50IGNvbmZpZyBgTkVUX1NDSEVEYCB0byBnYWluIGFuIHVuZGVyc3RhbmRpbmcgb2YgYE5FVF9DTFNgIHdpdGhpbiB0aGF0IGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZy01LVxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxubmV0L3NjaGVkL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTI5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSB1bmRlcnN0YW5kIGl0OgoKKipDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyAmYW1wOyBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBzZWVtcyBsaWtlIGBORVRfU0NIRURgIGFuZCBgTkVUX0NMU19GTE9XRVJgIGFyZSB0aGUga2V5IG9uZXMgSSBuZWVkIHRvIGNvbnNpZGVyIGluaXRpYWxseS4gQnV0IGhhbmcgb24sIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IERvZXMgYE5FVF9DTFNgIGFsc28gZmFjdG9yIGluIGhlcmU/IEl0IGxvb2tzIGxpa2UgYE5FVF9DTFNfRkxPV0VSYCBtaWdodCBpbXBsaWNpdGx5IHNlbGVjdCBgTkVUX0NMU2AsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCBmb3IgZnVsbCBjb25maWd1cmFiaWxpdHkuCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBpZiBgTkVUX1NDSEVEYCBpcyB0cnVseSBlc3NlbnRpYWwsIGFuZCB0aGVuIGRvdWJsZS1jaGVjayB0aGUgbWVudWNvbmZpZyB0byBiZSBzdXJlLiBZZXAsIGl0IGFwcGVhcnMgaXQgaXMgcGFydCBvZiB0aGF0IGNvbmZpZy4gU28sIGFnYWluLCBgTkVUX1NDSEVEYCBhbmQgYE5FVF9DTFNfRkxPV0VSYCBhcmUgdGhlIHR3byBtYWpvciBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBjb25maWd1cmVkLgoKTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCBgZmxfc2V0X2VuY19vcHRgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBndWFyZGVkIGJ5IHNvbWUgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbiBJJiMzOTt2ZSBvdmVybG9va2VkLiBHb3R0YSBiZSBjb21wcmVoZW5zaXZlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfZmxvd2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0OTU6XHRcdH1cbjE0OTY6XHRcbjE0OTc6XHRcdGlmICh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX1BGQ1BfVFlQRV0pXG4xNDk4Olx0XHRcdG1kLVx1MDAzZXR5cGUgPSBubGFfZ2V0X3U4KHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRfUEZDUF9UWVBFXSk7XG4xNDk5Olx0XG4xNTAwOlx0XHRpZiAodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVF9QRkNQX1NFSURdKVxuMTUwMTpcdFx0XHRtZC1cdTAwM2VzZWlkID0gbmxhX2dldF9iZTY0KHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRfUEZDUF9TRUlEXSk7XG4xNTAyOlx0XG4xNTAzOlx0XHRyZXR1cm4gc2l6ZW9mKCptZCk7XG4xNTA0Olx0fVxuMTUwNTpcdFxuMTUwNjpcdHN0YXRpYyBpbnQgZmxfc2V0X2VuY19vcHQoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSxcbjE1MDc6XHRcdFx0XHQgIHN0cnVjdCBmbF9mbG93X2tleSAqbWFzayxcbjE1MDg6XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjE1MDk6XHR7XG4xNTEwOlx0XHRjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGFfZW5jX2tleSwgKm5sYV9vcHRfa2V5LCAqbmxhX29wdF9tc2sgPSBOVUxMO1xuMTUxMTpcdFx0aW50IGVyciwgb3B0aW9uX2xlbiwga2V5X2RlcHRoLCBtc2tfZGVwdGggPSAwO1xuMTUxMjpcdFxuMTUxMzpcdFx0ZXJyID0gbmxhX3ZhbGlkYXRlX25lc3RlZF9kZXByZWNhdGVkKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTXSxcbjE1MTQ6XHRcdFx0XHRcdFx0ICAgICBUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVgsXG4xNTE1Olx0XHRcdFx0XHRcdCAgICAgZW5jX29wdHNfcG9saWN5LCBleHRhY2spO1xuMTUxNjpcdFx0aWYgKGVycilcbjE1MTc6XHRcdFx0cmV0dXJuIGVycjtcbjE1MTg6XHRcbjE1MTk6XHRcdG5sYV9lbmNfa2V5ID0gbmxhX2RhdGEodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNdKTtcbjE1MjA6XHRcbjE1MjE6XHRcdGlmICh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVNLXSkge1xuMTUyMjpcdFx0XHRlcnIgPSBubGFfdmFsaWRhdGVfbmVzdGVkX2RlcHJlY2F0ZWQodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfTUFTS10sXG4xNTIzOlx0XHRcdFx0XHRcdFx0ICAgICBUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVgsXG4xNTI0Olx0XHRcdFx0XHRcdFx0ICAgICBlbmNfb3B0c19wb2xpY3ksIGV4dGFjayk7XG4xNTI1Olx0XHRcdGlmIChlcnIpXG4xNTI2Olx0XHRcdFx0cmV0dXJuIGVycjtcbjE1Mjc6XHRcbjE1Mjg6XHRcdFx0bmxhX29wdF9tc2sgPSBubGFfZGF0YSh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVNLXSk7XG4xNTI5Olx0XHRcdG1za19kZXB0aCA9IG5sYV9sZW4odGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfTUFTS10pO1xuMTUzMDpcdFx0XHRpZiAoIW5sYV9vayhubGFfb3B0X21zaywgbXNrX2RlcHRoKSkge1xuMTUzMTpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBuZXN0ZWQgYXR0cmlidXRlIGZvciBtYXNrc1wmIzM0Oyk7XG4xNTMyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTMzOlx0XHRcdH1cbjE1MzQ6XHRcdH1cbjE1MzU6XHRcbjE1MzY6XHRcdG5sYV9mb3JfZWFjaF9hdHRyKG5sYV9vcHRfa2V5LCBubGFfZW5jX2tleSxcbjE1Mzc6XHRcdFx0XHQgIG5sYV9sZW4odGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNdKSwga2V5X2RlcHRoKSB7XG4xNTM4Olx0XHRcdHN3aXRjaCAobmxhX3R5cGUobmxhX29wdF9rZXkpKSB7XG4xNTM5Olx0XHRcdGNhc2UgVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfR0VORVZFOlxuMTU0MDpcdFx0XHRcdGlmIChrZXktXHUwMDNlZW5jX29wdHMuZHN0X29wdF90eXBlIFx1MDAyNlx1MDAyNlxuMTU0MTpcdFx0XHRcdCAgICBrZXktXHUwMDNlZW5jX29wdHMuZHN0X29wdF90eXBlICE9XG4xNTQyOlx0XHRcdFx0ICAgIElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVCkge1xuMTU0MzpcdFx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtEdXBsaWNhdGUgdHlwZSBmb3IgZ2VuZXZlIG9wdGlvbnNcJiMzNDspO1xuMTU0NDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTEyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBnb2VzIHRvIHRoZSBmYWN0IHRoYXQgdGhpcyBmaXggZm9yIGBmbF9zZXRfZW5jX29wdGAgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBndWFyZGVkIGJ5IGFueXRoaW5nIGJlc2lkZXMgYE5FVF9DTFNfRkxPV0VSYC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIHRoZSBjb250ZXh0LiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSBhbiB1bmNoZWNrZWQgYG1za19kZXB0aGAgaW4gdGhlIGl0ZXJhdGlvbiB1c2luZyBgbmxhX25leHRgIHdpdGhpbiBgZmxfc2V0X2VuY19vcHRgLiBUaGlzIGNvdWxkIGVhc2lseSBsZWFkIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMsIHdoaWNoIGlzIGEgYmlnIGRlYWwuIFRoZSBmaXggaXRzZWxmIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCDigJMgd2UmIzM5O3JlIGV4cGxpY2l0bHkgdmFsaWRhdGluZyBgbXNrX2RlcHRoYCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBgbmxhX29wdF9tc2tgIGRhdGE6CgpgYGBjCgkJbmxhX29wdF9tc2sgPSBubGFfbmV4dChubGFfb3B0X21zaywgJmFtcDttc2tfZGVwdGgpOwoKCQlpZiAobXNrX2RlcHRoICZhbXA7JmFtcDsgIW5sYV9vayhubGFfb3B0X21zaywgbXNrX2RlcHRoKSkgewoJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7QSBtYXNrIGF0dHJpYnV0ZSBpcyBpbnZhbGlkJiMzNDspOwoJCQlyZXR1cm4gLUVJTlZBTDsKCQl9CmBgYAoKVGhpcyBwcmV2ZW50cyBpbnZhbGlkIHBhcnNpbmcgYW5kIHBvdGVudGlhbGx5IGNyYXNoZXMuIEZ1bmN0aW9uYWxseSwgaXQmIzM5O3MgYSBwcmV0dHkgY2xlYW4gZml4LCBidXQgbGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgdHJpZ2dlcmVkLiBJdCYjMzk7cyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0YyBuZXRsaW5rLCB3aGljaCBtZWFucyB0aGlzIGNvdWxkIGJlIGV4cGxvaXRlZC4gSSBuZWVkIHRvIGtub3cgdGhlIGVudHJ5IHBvaW50cy4KClRoZSBmb2N1cyBzeW1ib2xzLCBiYXNlZCBvbiB0aGUgY29kZSYjMzk7cyBjYWxsIGdyYXBoLCBhcmUgYGZsX2NoYW5nZWAgYW5kIGBmbF90bXBsdF9jcmVhdGVgLiBBbmQgdGhlIGNvbmZpZ3MgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFyZSBgTkVUX1NDSEVEYCBhbmQgYE5FVF9DTFNfRkxPV0VSYC4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBpZiBgZmxfc2V0X2VuY19vcHRgIGlzIHN0YXRpYywgYmVjYXVzZSB0aGF0IGhlbHBzIG5hcnJvdyBkb3duIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBZZXAsIGl0IGlzLiBUaGF0IG1lYW5zIHRoZSBmdW5jdGlvbnMgY2FsbGluZyBpdCBkaXJlY3RseSBhcmUgdGhlIGltcG9ydGFudCBvbmVzIHRvIHVuZGVyc3RhbmQuIFNvIGBmbF9jaGFuZ2VgIGFuZCBgZmxfdG1wbHRfY3JlYXRlYCBzZWVtIHRvIGJlIHRoZSBjb3JyZWN0IHN5bWJvbHMgdG8gZm9jdXMgb24uCgpMZXQmIzM5O3MgY2hlY2sgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgY2FsbGluZyBgZmxfc2V0X2VuY19vcHRgLiBgZmxfc2V0X2tleWAgY2FsbHMgaXQuIEhtbSwgYGZsX3NldF9rZXlgIGlzIGFsc28gc3RhdGljLiBBbmQgYGZsX2NoYW5nZWAgYW5kIGBmbF90bXBsdF9jcmVhdGVgIGJvdGggY2FsbCBgZmxfc2V0X2tleWAuIE9rYXksIHNvIGBmbF9jaGFuZ2VgIGFuZCBgZmxfdG1wbHRfY3JlYXRlYCBhcmUgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBhcyBleHBlY3RlZC4gV2FpdC4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSXMgYGZsX2NoYW5nZWAgc3RhdGljPyBZZXMsIGl0IGlzLiBTbyB0aGUgb25seSBlbnRyeSBwb2ludHMgYXJlIHRocm91Z2ggYGNsc19mbF9vcHNgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbF9jaGFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2Zsb3dlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MjMzNj1zdGF0aWMgaW50IGZsX2h0X2luc2VydF91bmlxdWUoc3RydWN0IGNsc19mbF9maWx0ZXIgKmZuZXcsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMzU3LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMzU4OnN0YXRpYyBpbnQgZmxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjM1OS1cdFx0ICAgICBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MzgzMz1zdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX2ZsX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMzgzOS1cdC5wdXRcdFx0PSBmbF9wdXQsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjM4NDA6XHQuY2hhbmdlXHRcdD0gZmxfY2hhbmdlLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODQxLVx0LmRlbGV0ZVx0XHQ9IGZsX2RlbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTeW1ib2wgVmlzaWJpbGl0eSBmb3IgRmlsdGVyaW5nIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCB0cnlpbmcgdG8gcGlucG9pbnQgdGhlIGJlc3Qgc3ltYm9sIHRvIGZvY3VzIG9uLiBJIHNlZSBgZmxfY2hhbmdlYCDigJMgaXQmIzM5O3Mgc3RhdGljLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIGludGVybmFsLiBCdXQgd2FpdCBhIG1pbnV0ZeKApiBpdCYjMzk7cyB0aGUgY2FsbGJhY2sgZm9yIHRoZSBgLmNoYW5nZWAgb3BlcmF0aW9uISBUaGF0JiMzOTtzIGEga2V5IGRldGFpbC4gSSB3YXMgaW5pdGlhbGx5IHdvbmRlcmluZyBpZiB0aGVyZSB3YXMgYSBub24tc3RhdGljIGFsdGVybmF0aXZlLCBidXQgYGZsX2NoYW5nZWAgaXMgdXNlZCBpbiB0aGUgYGNsc19mbF9vcHNgIHN0cnVjdHVyZSB3aGljaCBpcyB0aGVuIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl90Y2ZfcHJvdG9fb3BzKCZhbXA7Y2xzX2ZsX29wcylgLgoKRnJvbSB3aGF0IEkgY2FuIHRlbGwgZnJvbSBteSB1bmRlcnN0YW5kaW5nIG9mIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCwgdGhlIGFjdHVhbCBlbnRyeSBwb2ludCBpcyBgdGNfbmV3X3RmaWx0ZXJgLCB3aGljaCB0aGVuIGNhbGxzIGB0cC0mZ3Q7b3BzLSZndDtjaGFuZ2UoKWAuIFNvLCBldmVuIHRob3VnaCBgZmxfY2hhbmdlYCBpcyBzdGF0aWMsIGl0JiMzOTtzICp0aGUqIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQgaXRzIGFkZHJlc3MgaXMgdGFrZW4uIFRoYXQgbWFrZXMgaXQgYSBzdHJvbmcgY29udGVuZGVyLCBldmVuIGRlc3BpdGUgdGhlICYjMzk7c3RhdGljJiMzOTsgZGVzaWduYXRpb24uCgpSaWdodCwgbGV0IG1lIHJldmlzaXQgdGhlIG9yaWdpbmFsIHByb21wdDogJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMmIzM0Oy4gKkFoISogU2luY2UgYGZsX2NoYW5nZWAgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBpdCAqY2Fubm90KiBiZSBmdWxseSBpbmxpbmVkLiBUaGUgY29tcGlsZXIgaGFzIHRvIHByZXNlcnZlIGl0cyBhZGRyZXNzLiBTbywgZXZlbiB0aG91Z2ggaXQmIzM5O3MgZGVjbGFyZWQgd2l0aCBgc3RhdGljYCwgaXQgKndpbGwqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBiZWNhdXNlIGl0JiMzOTtzIGJlaW5nIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIuIE1ha2VzIHNlbnNlLiBPa2F5LCB0aGVuLCBjb25zaWRlcmluZyB0aGlzLCB0aGF0IG1lYW5zIHRoYXQgYGZsX3RtcGx0X2NyZWF0ZWAgd2lsbCBhbHNvIGJlIGluIHRoZSBzYW1lIGJvYXQ7IGl0IGFsc28gaGFzIGEgZnVuY3Rpb24gcG9pbnRlciBhbmQgd2lsbCBub3QgYmUgaW5saW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmxfdG1wbHRfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19mbG93ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTI3OTQ9c3RhdGljIHZvaWQgZmxfaHdfZGVzdHJveV90bXBsdChzdHJ1Y3QgdGNmX2NoYWluICpjaGFpbixcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI4MDYtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjI4MDc6c3RhdGljIHZvaWQgKmZsX3RtcGx0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfY2hhaW4gKmNoYWluLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yODA4LVx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqKnRjYSxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTM4MzM9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19mbF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4NDktXHQuYmluZF9jbGFzc1x0PSBmbF9iaW5kX2NsYXNzLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzozODUwOlx0LnRtcGx0X2NyZWF0ZVx0PSBmbF90bXBsdF9jcmVhdGUsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4NTEtXHQudG1wbHRfZGVzdHJveVx0PSBmbF90bXBsdF9kZXN0cm95LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYzNwoJCQkJCQkJb3V0cHV0OiAxMzIKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIEZsb3dlciBDbGFzc2lmaWVyIFBhdGNoKioKCk9rYXksIHNvIGJvdGggYGZsX2NoYW5nZWAgYW5kIGBmbF90bXBsdF9jcmVhdGVgIGFyZSBpbmRlZWQgY2FsbGJhY2tzLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEkmIzM5O2xsIG1lbnRhbGx5IHRhZyB0aGVtIGFzIHRoZSBjZW50cmFsIGZvY3VzIHBvaW50cywgdGhlICYjMzk7Zm9jdXMgc3ltYm9scyYjMzk7IGluIHRoaXMgc2l0dWF0aW9uLgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gdGhlIHBhdGNoIGlzIGFsbCBhYm91dCBmaXhpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIHNvbWUga2luZCBvZiBwcm9ibGVtYXRpYyBhdHRyaWJ1dGUgcGFyc2luZyBpc3N1ZSB3aXRoaW4gYGZsX3NldF9lbmNfb3B0YC4gVGhpcyBoYXBwZW5zIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiBuZXN0ZWQgbmV0bGluayBhdHRyaWJ1dGVzLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byBmbG93ZXIgY2xhc3NpZmllciBlbmNhcHN1bGF0aW9uIG9wdGlvbnMuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNydWNpYWwgY2hlY2sgdG8gdmFsaWRhdGUgYG1za19kZXB0aGAgYmVmb3JlIHRoZSBwcm9jZXNzIGNvbnRpbnVlcy4gVGhpcyB3aWxsIHByZXZlbnQgYSBsb3Qgb2YgcHJvYmxlbXMgaW4gdGhlIGZ1dHVyZS4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgdG91Y2hpbmcgdGhlIGNvcmUgcGFja2V0IGNsYXNzaWZpY2F0aW9uIGxvZ2ljLCBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0YyBuZXRsaW5rLCBzbyB3ZSB3aWxsIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX0NMU19GTE9XRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZmxfdG1wbHRfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciBpbnZhbGlkIGF0dHJpYnV0ZSBwYXJzaW5nIGluIGBmbF9zZXRfZW5jX29wdGAgd2hlbiBwYXJzaW5nIG5lc3RlZCBuZXRsaW5rIGF0dHJpYnV0ZXMgZm9yIGZsb3dlciBjbGFzc2lmaWVyIGVuY2Fwc3VsYXRpb24gb3B0aW9ucy4gSXQgYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSBgbXNrX2RlcHRoYCBpcyB2YWxpZCBiZWZvcmUgY29udGludWluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHBhY2tldCBjbGFzc2lmaWNhdGlvbiBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRjIG5ldGxpbmsuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0ZMT1dFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZsX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmbF90bXBsdF9jcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIGludmFsaWQgYXR0cmlidXRlIHBhcnNpbmcgaW4gYGZsX3NldF9lbmNfb3B0YCB3aGVuIHBhcnNpbmcgbmVzdGVkIG5ldGxpbmsgYXR0cmlidXRlcyBmb3IgZmxvd2VyIGNsYXNzaWZpZXIgZW5jYXBzdWxhdGlvbiBvcHRpb25zLiBJdCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIGBtc2tfZGVwdGhgIGlzIHZhbGlkIGJlZm9yZSBjb250aW51aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgcGFja2V0IGNsYXNzaWZpY2F0aW9uIGxvZ2ljIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGMgbmV0bGluay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZHMgY2hlY2sgKGBubGFfb2tgKSBmb3IgbmV0bGluayBhdHRyaWJ1dGVzIGFmdGVyIGFkdmFuY2luZyB0aGUgYXR0cmlidXRlIHBvaW50ZXIgd2l0aCBgbmxhX25leHRgLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIGNvdWxkIHJlYWQgb3V0LW9mLWJvdW5kcyBtZW1vcnkgd2hlbiBhY2Nlc3NpbmcgdGhlIG5leHQgYXR0cmlidXRlJiMzOTtzIGhlYWRlciBvciBkYXRhLiBPdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkMTg4Yzk4OTA2YTlhM2Y1YWExMzVmNmMwNDhmNjAzNmRkYTgwMmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAwMzoyNzoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jCmluZGV4IDBlMjc1YjU4MTUxYzQuLjFjZWZlYTU3MWVmZDcgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYwpAQCAtMTcwMyw2ICYjNDM7MTcwMywxMSBAQCBzdGF0aWMgaW50IGZsX3NldF9lbmNfb3B0KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlubGFfb3B0X21zayA9IG5sYV9uZXh0KG5sYV9vcHRfbXNrLCAmYW1wO21za19kZXB0aCk7CiYjNDM7CiYjNDM7CQlpZiAobXNrX2RlcHRoICZhbXA7JmFtcDsgIW5sYV9vayhubGFfb3B0X21zaywgbXNrX2RlcHRoKSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtBIG1hc2sgYXR0cmlidXRlIGlzIGludmFsaWQmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiAJfQogCiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDIxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUmVjZW50IEZsb3dlciBDbGFzc2lmaWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBuZXQvc2NoZWQvY2xzX2Zsb3dlci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIGluIGBmbF9zZXRfZW5jX29wdGAuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZXkmIzM5O3ZlIGFkZGVkIGEgYm91bmRzIGNoZWNrLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIHVzaW5nIGBubGFfb2soKWAgdG8gdmFsaWRhdGUgdGhlIGBubGFfb3B0X21za2AgbmV0bGluayBhdHRyaWJ1dGUgYmVmb3JlIGFjY2Vzc2luZyBpdC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoaXMgaXMgYmVjYXVzZSwgd2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgY29kZSBjb3VsZCBwb3RlbnRpYWxseSByZWFkIG1lbW9yeSBvdXRzaWRlIG9mIHRoZSBhbGxvY2F0ZWQgYm91bmRzLCBhIGNsYXNzaWMgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4gVGhlIGNvZGUgbm93IGNoZWNrcyBpZiBgbXNrX2RlcHRoYCBpcyB2YWxpZCwgYW5kIGlmIG5vdCwgaXQgdGhyb3dzIGFuIGAtRUlOVkFMYCBlcnJvciB2aWEgYE5MX1NFVF9FUlJfTVNHYC4KClRoZSB1c2Ugb2YgYG5sYV9va2AgaXMgYSBzb2xpZCBkZWZlbnNlIGFnYWluc3Qgb3V0LW9mLWJvdW5kcyByZWFkcyBkdXJpbmcgdGhlIHByb2Nlc3Npbmcgb2YgTmV0bGluayBhdHRyaWJ1dGVzLCBhIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIGFwcHJvYWNoLiBBIHJvZ3VlIE5ldGxpbmsgbWVzc2FnZSBjcmFmdGVkIHdpdGggYSBnYXJiYWdlIGxlbmd0aCBjb3VsZCBjYXVzZSBhIGNyYXNoIG9yIGV2ZW4gbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcy4gVGhhbmtmdWxseSwgS0FTQU4gd291bGQgbGlrZWx5IGNhdGNoIHRoYXQsIGJ1dCBwcmV2ZW50aW5nIHRoZSBpc3N1ZSBlbnRpcmVseSBpcyBhbHdheXMgcHJlZmVyYWJsZSwgc28gSSBhcHByZWNpYXRlIHNlZWluZyB0aGlzIHR5cGUgb2YgcHJvYWN0aXZlIG1lYXN1cmUuCgpOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLi4uIGRvZXMgdGhpcyBwYXRjaCwgaW4gaXRzIGltcGxlbWVudGF0aW9uLCBpbnRyb2R1Y2UgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeT8gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgYGZsX3NldF9lbmNfb3B0YCBpdHNlbGYgdG8gYmUgc3VyZS4gSSYjMzk7bSBzYXRpc2ZpZWQgc28gZmFyLCB0aG91Z2gsIHRoYXQgdGhpcyBwYXRjaCBpcyBhIGRlZmluaXRlIHBvc2l0aXZlIGluIHRlcm1zIG9mIGhhcmRlbmluZyB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zmxfc2V0X2VuY19vcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2Zsb3dlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MTQ2OD1zdGF0aWMgaW50IGZsX3NldF9wZmNwX29wdChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBmbF9mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTUwNS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTUwNjpzdGF0aWMgaW50IGZsX3NldF9lbmNfb3B0KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE1MDctXHRcdFx0ICBzdHJ1Y3QgZmxfZmxvd19rZXkgKm1hc2ssXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0xODcxPXN0YXRpYyBpbnQgZmxfc2V0X2tleShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRjYV9vcHRzLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA5NS1cdGlmICh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU10pIHtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjA5NjpcdFx0cmV0ID0gZmxfc2V0X2VuY19vcHQodGIsIGtleSwgbWFzaywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA5Ny1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgZmxfc2V0X2VuY19vcHRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBpdC4gVGltZSB0byB1bmRlcnN0YW5kIGBmbF9zZXRfZW5jX29wdGAuIEkgbmVlZCB0byBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4gSXMgaXQgc2V0dGluZyBlbmNvZGluZyBvcHRpb25zIGZvciB0aGUgZmlsZSwgcGVyaGFwcz8gTWF5YmUgaXQmIzM5O3MgYWRqdXN0aW5nIGNvbXByZXNzaW9uIHBhcmFtZXRlcnM/IFdoYXRldmVyIGl0JiMzOTtzIGRvaW5nLCBpdCYjMzk7cyBjbGVhcmx5IGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLCBzbyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbiBhbmQgYnJlYWsgaXQgZG93bi4gR290dGEgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgc3lzdGVtJiMzOTtzIGJlaGF2aW9yLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19mbG93ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY4MDpcdFx0XHRcdG1hc2stXHUwMDNlZW5jX29wdHMuZHN0X29wdF90eXBlID0gSVBfVFVOTkVMX1BGQ1BfT1BUX0JJVDtcbjE2ODE6XHRcdFx0XHRvcHRpb25fbGVuID0gZmxfc2V0X3BmY3Bfb3B0KG5sYV9vcHRfbXNrLCBtYXNrLFxuMTY4MjpcdFx0XHRcdFx0XHRcdCAgICAgbXNrX2RlcHRoLCBvcHRpb25fbGVuLFxuMTY4MzpcdFx0XHRcdFx0XHRcdCAgICAgZXh0YWNrKTtcbjE2ODQ6XHRcdFx0XHRpZiAob3B0aW9uX2xlbiBcdTAwM2MgMClcbjE2ODU6XHRcdFx0XHRcdHJldHVybiBvcHRpb25fbGVuO1xuMTY4NjpcdFxuMTY4NzpcdFx0XHRcdG1hc2stXHUwMDNlZW5jX29wdHMubGVuICYjNDM7PSBvcHRpb25fbGVuO1xuMTY4ODpcdFx0XHRcdGlmIChrZXktXHUwMDNlZW5jX29wdHMubGVuICE9IG1hc2stXHUwMDNlZW5jX29wdHMubGVuKSB7XG4xNjg5Olx0XHRcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtLZXkgYW5kIG1hc2sgbWlzcyBhbGlnbmVkXCYjMzQ7KTtcbjE2OTA6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTY5MTpcdFx0XHRcdH1cbjE2OTI6XHRcdFx0XHRicmVhaztcbjE2OTM6XHRcdFx0ZGVmYXVsdDpcbjE2OTQ6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1Vua25vd24gdHVubmVsIG9wdGlvbiB0eXBlXCYjMzQ7KTtcbjE2OTU6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE2OTY6XHRcdFx0fVxuMTY5NzpcdFxuMTY5ODpcdFx0XHRpZiAoIW1za19kZXB0aClcbjE2OTk6XHRcdFx0XHRjb250aW51ZTtcbjE3MDA6XHRcbjE3MDE6XHRcdFx0aWYgKCFubGFfb2sobmxhX29wdF9tc2ssIG1za19kZXB0aCkpIHtcbjE3MDI6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0EgbWFzayBhdHRyaWJ1dGUgaXMgaW52YWxpZFwmIzM0Oyk7XG4xNzAzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzA0Olx0XHRcdH1cbjE3MDU6XHRcdFx0bmxhX29wdF9tc2sgPSBubGFfbmV4dChubGFfb3B0X21zaywgXHUwMDI2bXNrX2RlcHRoKTtcbjE3MDY6XHRcbjE3MDc6XHRcdFx0aWYgKG1za19kZXB0aCBcdTAwMjZcdTAwMjYgIW5sYV9vayhubGFfb3B0X21zaywgbXNrX2RlcHRoKSkge1xuMTcwODpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7QSBtYXNrIGF0dHJpYnV0ZSBpcyBpbnZhbGlkXCYjMzQ7KTtcbjE3MDk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE3MTA6XHRcdFx0fVxuMTcxMTpcdFx0fVxuMTcxMjpcdFxuMTcxMzpcdFx0cmV0dXJuIDA7XG4xNzE0Olx0fVxuMTcxNTpcdFxuMTcxNjpcdHN0YXRpYyBpbnQgZmxfdmFsaWRhdGVfY3Rfc3RhdGUodTE2IHN0YXRlLCBzdHJ1Y3QgbmxhdHRyICp0YixcbjE3MTc6XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjE3MTg6XHR7XG4xNzE5Olx0XHRpZiAoc3RhdGUgXHUwMDI2XHUwMDI2ICEoc3RhdGUgXHUwMDI2IFRDQV9GTE9XRVJfS0VZX0NUX0ZMQUdTX1RSQUNLRUQpKSB7XG4xNzIwOlx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCB0YixcbjE3MjE6XHRcdFx0XHRcdCAgICBcJiMzNDtubyB0cmssIHNvIG5vIG90aGVyIGZsYWcgY2FuIGJlIHNldFwmIzM0Oyk7XG4xNzIyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTcyMzpcdFx0fVxuMTcyNDpcdFxuMTcyNTpcdFx0aWYgKHN0YXRlIFx1MDAyNiBUQ0FfRkxPV0VSX0tFWV9DVF9GTEFHU19ORVcgXHUwMDI2XHUwMDI2XG4xNzI2Olx0XHQgICAgc3RhdGUgXHUwMDI2IFRDQV9GTE9XRVJfS0VZX0NUX0ZMQUdTX0VTVEFCTElTSEVEKSB7XG4xNzI3Olx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCB0YixcbjE3Mjg6XHRcdFx0XHRcdCAgICBcJiMzNDtuZXcgYW5kIGVzdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlXCYjMzQ7KTtcbjE3Mjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIE91dC1vZi1Cb3VuZHMgQWNjZXNzIGluIE5ldGxpbmsgQXR0cmlidXRlIEhhbmRsaW5nKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBjaGVjayBmb3IgYG5sYV9va2AgYWZ0ZXIgYSBjYWxsIHRvIGBubGFfbmV4dGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgZGVzaWduZWQgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGUgcmVhc29uaW5nIHNlZW1zIHRvIGJlIHRoYXQgYWZ0ZXIgYG5sYV9uZXh0YCB1cGRhdGVzIHRoZSBwb2ludGVyLCB0aGUgcmVtYWluaW5nIGxlbmd0aCBgbXNrX2RlcHRoYCBtaWdodCBzdGlsbCBiZSBwb3NpdGl2ZSwgYnV0IHRoZSBuZXcgYG5sYV9vcHRfbXNrYCB3b3VsZG4mIzM5O3QgYmUgY29tcGxldGVseSB3aXRoaW4gdGhlIGJ1ZmZlciYjMzk7cyBib3VuZGFyaWVzLiBJIGltbWVkaWF0ZWx5IGhhdmUgYSBxdWVzdGlvbjogZG9lc24mIzM5O3QgYG5sYV9uZXh0YCAqaXRzZWxmKiB1cGRhdGUgYm90aCB0aGUgcG9pbnRlciBhbmQgdGhlIHJlbWFpbmluZyBsZW5ndGg/IElmIGBtc2tfZGVwdGhgIGlzIHBvc2l0aXZlLCB0aGUgbG9vcCBzaG91bGQgY29udGludWUsIGFuZCBpbiB0aGUgbmV4dCBpdGVyYXRpb24sIHdlJiMzOTtsbCBhY2Nlc3MgYG5sYV9vcHRfbXNrYC4gU28sIHdoZXJlIGlzIHRoZSB2dWxuZXJhYmlsaXR5PwoKV2FpdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgaG93IHRoaXMgd2hvbGUgdGhpbmcgaXMgc3RydWN0dXJlZC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlIG91dGVyIGxvb3AgaXMgYWN0dWFsbHkgYSBgbmxhX2Zvcl9lYWNoX25lc3RlZGAgbG9vcC4gT2ssIHllcywgdGhhdCYjMzk7cyByaWdodC4gYG5sYV9mb3JfZWFjaF9uZXN0ZWQobmxhX29wdF9rZXksIG5sYV9vcHRfa2V5X3RiLCBrZXlfZGVwdGgpYC4KCkFscmlnaHQsIEkgc2hvdWxkIHByb2JhYmx5IHJlLXJlYWQgdGhlIHN0YXJ0IG9mIHRoYXQgbG9vcCB0byBzZWUgaG93IHRoaXMgd29ya3MuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiB0aGUgcHJvY2VzcyB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBlZGdlIGNhc2UgYmVpbmcgYWRkcmVzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfZmxvd2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MDA6XHRcdGlmICh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX1BGQ1BfU0VJRF0pXG4xNTAxOlx0XHRcdG1kLVx1MDAzZXNlaWQgPSBubGFfZ2V0X2JlNjQodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVF9QRkNQX1NFSURdKTtcbjE1MDI6XHRcbjE1MDM6XHRcdHJldHVybiBzaXplb2YoKm1kKTtcbjE1MDQ6XHR9XG4xNTA1Olx0XG4xNTA2Olx0c3RhdGljIGludCBmbF9zZXRfZW5jX29wdChzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBmbF9mbG93X2tleSAqa2V5LFxuMTUwNzpcdFx0XHRcdCAgc3RydWN0IGZsX2Zsb3dfa2V5ICptYXNrLFxuMTUwODpcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTUwOTpcdHtcbjE1MTA6XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYV9lbmNfa2V5LCAqbmxhX29wdF9rZXksICpubGFfb3B0X21zayA9IE5VTEw7XG4xNTExOlx0XHRpbnQgZXJyLCBvcHRpb25fbGVuLCBrZXlfZGVwdGgsIG1za19kZXB0aCA9IDA7XG4xNTEyOlx0XG4xNTEzOlx0XHRlcnIgPSBubGFfdmFsaWRhdGVfbmVzdGVkX2RlcHJlY2F0ZWQodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNdLFxuMTUxNDpcdFx0XHRcdFx0XHQgICAgIFRDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX01BWCxcbjE1MTU6XHRcdFx0XHRcdFx0ICAgICBlbmNfb3B0c19wb2xpY3ksIGV4dGFjayk7XG4xNTE2Olx0XHRpZiAoZXJyKVxuMTUxNzpcdFx0XHRyZXR1cm4gZXJyO1xuMTUxODpcdFxuMTUxOTpcdFx0bmxhX2VuY19rZXkgPSBubGFfZGF0YSh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU10pO1xuMTUyMDpcdFxuMTUyMTpcdFx0aWYgKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX01BU0tdKSB7XG4xNTIyOlx0XHRcdGVyciA9IG5sYV92YWxpZGF0ZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVNLXSxcbjE1MjM6XHRcdFx0XHRcdFx0XHQgICAgIFRDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX01BWCxcbjE1MjQ6XHRcdFx0XHRcdFx0XHQgICAgIGVuY19vcHRzX3BvbGljeSwgZXh0YWNrKTtcbjE1MjU6XHRcdFx0aWYgKGVycilcbjE1MjY6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTUyNzpcdFxuMTUyODpcdFx0XHRubGFfb3B0X21zayA9IG5sYV9kYXRhKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX01BU0tdKTtcbjE1Mjk6XHRcdFx0bXNrX2RlcHRoID0gbmxhX2xlbih0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVNLXSk7XG4xNTMwOlx0XHRcdGlmICghbmxhX29rKG5sYV9vcHRfbXNrLCBtc2tfZGVwdGgpKSB7XG4xNTMxOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIG5lc3RlZCBhdHRyaWJ1dGUgZm9yIG1hc2tzXCYjMzQ7KTtcbjE1MzI6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1MzM6XHRcdFx0fVxuMTUzNDpcdFx0fVxuMTUzNTpcdFxuMTUzNjpcdFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhX29wdF9rZXksIG5sYV9lbmNfa2V5LFxuMTUzNzpcdFx0XHRcdCAgbmxhX2xlbih0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU10pLCBrZXlfZGVwdGgpIHtcbjE1Mzg6XHRcdFx0c3dpdGNoIChubGFfdHlwZShubGFfb3B0X2tleSkpIHtcbjE1Mzk6XHRcdFx0Y2FzZSBUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19HRU5FVkU6XG4xNTQwOlx0XHRcdFx0aWYgKGtleS1cdTAwM2VlbmNfb3B0cy5kc3Rfb3B0X3R5cGUgXHUwMDI2XHUwMDI2XG4xNTQxOlx0XHRcdFx0ICAgIGtleS1cdTAwM2VlbmNfb3B0cy5kc3Rfb3B0X3R5cGUgIT1cbjE1NDI6XHRcdFx0XHQgICAgSVBfVFVOTkVMX0dFTkVWRV9PUFRfQklUKSB7XG4xNTQzOlx0XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0R1cGxpY2F0ZSB0eXBlIGZvciBnZW5ldmUgb3B0aW9uc1wmIzM0Oyk7XG4xNTQ0Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1NDU6XHRcdFx0XHR9XG4xNTQ2Olx0XHRcdFx0b3B0aW9uX2xlbiA9IDA7XG4xNTQ3Olx0XHRcdFx0a2V5LVx1MDAzZWVuY19vcHRzLmRzdF9vcHRfdHlwZSA9IElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVDtcbjE1NDg6XHRcdFx0XHRvcHRpb25fbGVuID0gZmxfc2V0X2dlbmV2ZV9vcHQobmxhX29wdF9rZXksIGtleSxcbjE1NDk6XHRcdFx0XHRcdFx0XHQgICAgICAga2V5X2RlcHRoLCBvcHRpb25fbGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDAzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQXR0cmlidXRlIFByb2Nlc3NpbmcgTG9vcCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGUgYG5sYV9mb3JfZWFjaF9hdHRyYCBsb29wLiBUaGF0JiMzOTtzIG91ciBzdGFydGluZyBwb2ludCwgaXRlcmF0aW5nIHRocm91Z2ggYXR0cmlidXRlcyB1c2luZyBgbmxhX29wdF9rZXlgLiBJdCB0aGVuIHByb2NlZWRzIHRvIHByb2Nlc3MgYG5sYV9vcHRfbXNrYCBpZiBgbXNrX2RlcHRoYCBpcyBhbnl0aGluZyBvdGhlciB0aGFuIHplcm8uCgpBaCwgSSBzZWUuLi4gYWZ0ZXIgdGhlIG1haW4gcHJvY2Vzc2luZyB3aXRoaW4gdGhlIGxvb3AsIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgYmxvY2suIElmIGBtc2tfZGVwdGhgIGlzIHplcm8sIHdlIGBjb250aW51ZWAg4oCTIG1ha2VzIHNlbnNlLCBza2lwIHRoZSBtYXNrIHByb2Nlc3NpbmcuIEJ1dCBpZiBpdCYjMzk7cyBub3QgemVybywgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBXZSBoYXZlIHRoaXMgYG5sYV9va2AgY2hlY2ssIGdvb2QsIGVuc3VyaW5nIHRoZSBtYXNrIGF0dHJpYnV0ZSBpcyB2YWxpZC4gVGhlbiwgYG5sYV9uZXh0YCBhZHZhbmNlcyBgbmxhX29wdF9tc2tgIGFuZCB1cGRhdGVzIHRoZSBkZXB0aC4gIAoKSGFuZyBvbi4uLiB0aGUgKnBhdGNoKiBzcGVjaWZpY2FsbHkgYWRkcyBhICpzZWNvbmQqIGBubGFfb2tgIGNoZWNrIGFmdGVyIHRoZSBjYWxsIHRvIGBubGFfbmV4dGAuIFRoYXQmIzM5O3MgdGhlIGtleSBhZGRpdGlvbi4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCBhZnRlciB0aGUgZmlyc3QgY2FsbCB0byBgbmxhX29rYCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIG9uIGEgdmFsaWQgYXR0cmlidXRlLCB3ZSAqYWR2YW5jZSogdGhlIHBvaW50ZXIgdXNpbmcgYG5sYV9uZXh0YCBhbmQgY2hlY2sgdGhlICpuZXh0KiBhdHRyaWJ1dGUuIFRoaXMgbWVhbnMgaW4gdGhlIHN1YnNlcXVlbnQgaXRlcmF0aW9uIG9mIHRoZSBsb29wLCB0aGUgY29kZSB3aWxsIGJlIHdvcmtpbmcgd2l0aCB0aGUgKm5leHQqIG1hc2sgYXR0cmlidXRlLgoKU28sIGBubGFfbmV4dGAgbW92ZXMgdGhlIHBvaW50ZXIgYW5kIHVwZGF0ZXMgdGhlIHJlbWFpbmluZyBsZW5ndGggKGBtc2tfZGVwdGhgKS4gVGhlbiwgaW4gdGhlICpuZXh0KiBpdGVyYXRpb24gb2YgdGhlIG1haW4gbG9vcCwgaXQmIzM5O2xsIHBhc3MgdGhpcyB1cGRhdGVkIGBubGFfb3B0X21za2AgdG8gZnVuY3Rpb25zIGxpa2UgYGZsX3NldF9nZW5ldmVfb3B0YCwgYGZsX3NldF92eGxhbl9vcHRgLCBgZmxfc2V0X2Vyc3Bhbl9vcHRgLCBvciBgZmxfc2V0X3BmY3Bfb3B0YC4gIEkgbmVlZCB0byBjaGVjayB3aGF0IHRob3NlIGZ1bmN0aW9ucyBkby4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggd2hhdCBgZmxfc2V0X2dlbmV2ZV9vcHRgIGRvZXMsIGFuZCB3aGF0IGl0IGV4cGVjdHMgZm9yIHRoZSBhdHRyaWJ1dGUuIFRoYXQmIzM5O2xsIHRlbGwgbWUgaWYgdGhpcyBhZGRpdGlvbiBvZiB0aGUgc2Vjb25kIGBubGFfb2tgIGNhbGwgcmVhbGx5IG1ha2VzIHNlbnNlLCBvciBpZiBpdCBoYXMgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfZmxvd2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMzA6XHRcdG1kID0gKHN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqKVx1MDAyNmtleS1cdTAwM2VlbmNfb3B0cy5kYXRhW2tleS1cdTAwM2VlbmNfb3B0cy5sZW5dO1xuMTMzMTpcdFx0bWVtc2V0KG1kLCAweGZmLCBzaXplb2YoKm1kKSk7XG4xMzMyOlx0XG4xMzMzOlx0XHRpZiAoIWRlcHRoKVxuMTMzNDpcdFx0XHRyZXR1cm4gc2l6ZW9mKCptZCk7XG4xMzM1Olx0XG4xMzM2Olx0XHRpZiAobmxhX3R5cGUobmxhKSAhPSBUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19WWExBTikge1xuMTMzNzpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O05vbi12eGxhbiBvcHRpb24gdHlwZSBmb3IgbWFza1wmIzM0Oyk7XG4xMzM4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTMzOTpcdFx0fVxuMTM0MDpcdFxuMTM0MTpcdFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgVENBX0ZMT1dFUl9LRVlfRU5DX09QVF9WWExBTl9NQVgsIG5sYSxcbjEzNDI6XHRcdFx0XHQgICAgICAgdnhsYW5fb3B0X3BvbGljeSwgZXh0YWNrKTtcbjEzNDM6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMzQ0Olx0XHRcdHJldHVybiBlcnI7XG4xMzQ1Olx0XG4xMzQ2Olx0XHRpZiAoIW9wdGlvbl9sZW4gXHUwMDI2XHUwMDI2ICF0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX1ZYTEFOX0dCUF0pIHtcbjEzNDc6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtNaXNzaW5nIHR1bm5lbCBrZXkgdnhsYW4gb3B0aW9uIGdicFwmIzM0Oyk7XG4xMzQ4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTM0OTpcdFx0fVxuMTM1MDpcdFxuMTM1MTpcdFx0aWYgKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRfVlhMQU5fR0JQXSkge1xuMTM1MjpcdFx0XHRtZC1cdTAwM2VnYnAgPSBubGFfZ2V0X3UzMih0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX1ZYTEFOX0dCUF0pO1xuMTM1MzpcdFx0XHRtZC1cdTAwM2VnYnAgXHUwMDI2PSBWWExBTl9HQlBfTUFTSztcbjEzNTQ6XHRcdH1cbjEzNTU6XHRcbjEzNTY6XHRcdHJldHVybiBzaXplb2YoKm1kKTtcbjEzNTc6XHR9XG4xMzU4Olx0XG4xMzU5Olx0c3RhdGljIGludCBmbF9zZXRfZXJzcGFuX29wdChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBmbF9mbG93X2tleSAqa2V5LFxuMTM2MDpcdFx0XHRcdCAgICAgaW50IGRlcHRoLCBpbnQgb3B0aW9uX2xlbixcbjEzNjE6XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjEzNjI6XHR7XG4xMzYzOlx0XHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX0VSU1BBTl9NQVggJiM0MzsgMV07XG4xMzY0Olx0XHRzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICptZDtcbjEzNjU6XHRcdGludCBlcnI7XG4xMzY2Olx0XG4xMzY3Olx0XHRtZCA9IChzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICopXHUwMDI2a2V5LVx1MDAzZWVuY19vcHRzLmRhdGFba2V5LVx1MDAzZWVuY19vcHRzLmxlbl07XG4xMzY4Olx0XHRtZC1cdTAwM2V2ZXJzaW9uID0gMTtcbjEzNjk6XHRcbjEzNzA6XHRcdGlmICghZGVwdGgpXG4xMzcxOlx0XHRcdHJldHVybiBzaXplb2YoKm1kKTtcbjEzNzI6XHRcbjEzNzM6XHRcdGlmIChubGFfdHlwZShubGEpICE9IFRDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX0VSU1BBTikge1xuMTM3NDpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O05vbi1lcnNwYW4gb3B0aW9uIHR5cGUgZm9yIG1hc2tcJiMzNDspO1xuMTM3NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEzNzY6XHRcdH1cbjEzNzc6XHRcbjEzNzg6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIFRDQV9GTE9XRVJfS0VZX0VOQ19PUFRfRVJTUEFOX01BWCwgbmxhLFxuMTM3OTpcdFx0XHRcdCAgICAgICBlcnNwYW5fb3B0X3BvbGljeSwgZXh0YWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE3MAoJCQkJCQkJb3V0cHV0OiAxMzQKCQkJCQkJCXRob3VnaHRzOiAxMjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktBU0FOJiMzOTtzIEdvdCBUaGlzOiBOZXRsaW5rIEF0dHJpYnV0ZSBQYXJzaW5nIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBlcnNwZWN0aXZlLiBJbiBgZmxfc2V0X3Z4bGFuX29wdGAgYW5kIGBmbF9zZXRfZXJzcGFuX29wdGAsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGluZyBgbmxhX3BhcnNlX25lc3RlZGAuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBpZiBgbmxhYCBpc24mIzM5O3QgYSB2YWxpZCBhdHRyaWJ1dGUsIHRoZSBgbmxhX3BhcnNlX25lc3RlZGAgZnVuY3Rpb24gY291bGQgZW5kIHVwIGFjY2Vzc2luZyBtZW1vcnkgaXQgc2hvdWxkbiYjMzk7dC4gQW5kIHllcywgSSB1bmRlcnN0YW5kIHRoYXQgaW50ZXJuYWxseSwgYG5sYV9wYXJzZV9uZXN0ZWRgIHVzZXMgYG5sYV9wYXJzZWAsIHdoaWNoIHVzZXMgYG5sYV9kYXRhKG5sYSlgIGFuZCBgbmxhX2xlbihubGEpYC4gSWYgYG5sYWAgaXMgb3V0IG9mIGJvdW5kcywgdGhpcyBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS4KCk15IGZpcnN0IHRob3VnaHQ/IFRoaXMgbG9va3MgbGlrZSBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHNjZW5hcmlvLiBBbmQsIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGlzICpkZXNpZ25lZCogdG8gY2F0Y2ggdGhlc2UgcGVyZmVjdGx5LiBTbywgSSBoYXZlIHRvIGFzayBteXNlbGYsIGlzIHRoZXJlIGFuICp1bmluaXRpYWxpemVkKiBtZW1vcnkgcHJvYmxlbSBoZXJlPwoKTGV0JiMzOTtzIGxvb2sgYXQgYG5sYV9vcHRfbXNrYC4gVGhpcyB2YXJpYWJsZSBpcyBkZXJpdmVkIGZyb20gYHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX01BU0tdYCwgd2hpY2ggY29tZXMgZnJvbSBhIG5ldGxpbmsgYXR0cmlidXRlIGZyb20gdXNlciBzcGFjZS4gVGhlIG5ldGxpbmsgbWVzc2FnZSBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlLCBzbyBpdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgYWxlcnQgb24gYW4gb3V0LW9mLWJvdW5kcyBpc3N1ZS4KCkJ1dCwgaWYgYG5sYV9uZXh0YCBhZHZhbmNlcyBgbmxhX29wdF9tc2tgIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBuZXRsaW5rIG1lc3NhZ2UsIHRoZW4gaXQmIzM5O3MgZ29pbmcgdG8gcG9pbnQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBJZiBpdCYjMzk7cyBvdXQgb2YgYm91bmRzLCBLQVNBTiB3aWxsIGNhdGNoIGl0LiBJZiBpdCYjMzk7cyB3aXRoaW4gdGhlIHNrYiBidXQgdW5pbml0aWFsaXplZCDigJMgcGVyaGFwcyBwYWRkaW5nIOKAkyBLTVNBTiAqbWlnaHQqIGNhdGNoIGl0LCBidXQgS0FTQU4gd291bGRuJiMzOTt0LiBIb3dldmVyLCBuZXRsaW5rIG1lc3NhZ2VzIGFyZSB1c3VhbGx5IGFsbG9jYXRlZCB3aXRoIHNvbWV0aGluZyBsaWtlIGBrbWFsbG9jYCwgYW5kIHRoZSBza2IgZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlLiBUaGUgbGVuZ3RoIG9mIHRoZSBza2IgaXMgd2VsbC1kZWZpbmVkLiBJZiBgbmxhX25leHRgIGFkdmFuY2VzIGJleW9uZCB0aGUgbmV0bGluayBhdHRyaWJ1dGUgbGVuZ3RoLCBpdCBjb3VsZCBiZSB3aXRoaW4gdGhlIHNrYiBkYXRhLiBIb3dldmVyLCBgbXNrX2RlcHRoYCByZXByZXNlbnRzIHRoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBuZXN0ZWQgYXR0cmlidXRlLiBJZiBgbXNrX2RlcHRoYCBpcyBwb3NpdGl2ZSwgdGhlIG5lc3RlZCBhdHRyaWJ1dGUmIzM5O3MgbGVuZ3RoIGhlYWRlciBpbmRpY2F0ZXMgaXQmIzM5O3MgbGFyZ2VyIHRoYW4gd2hhdCYjMzk7cyBhY3R1YWxseSBpbiBpdC4KCk5vdywgYG5sYV9va2AgaXMgaW1wb3J0YW50LiBUaGlzIGNoZWNrIGVuc3VyZXMgdGhhdCBgbmxhYCBpcyBhY3R1YWxseSAqd2l0aGluKiBgbXNrX2RlcHRoYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZToKCmBgYGMKc3RhdGljIGlubGluZSBpbnQgbmxhX29rKGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgaW50IHJlbWFpbmluZykKewoJcmV0dXJuIHJlbWFpbmluZyAmZ3Q7PSAoaW50KSBzaXplb2Yoc3RydWN0IG5sYXR0cikgJmFtcDsmYW1wOwoJICAgICAgIG5sYS0mZ3Q7bmxhX2xlbiAmZ3Q7PSBzaXplb2Yoc3RydWN0IG5sYXR0cikgJmFtcDsmYW1wOwoJICAgICAgIG5sYS0mZ3Q7bmxhX2xlbiAmbHQ7PSByZW1haW5pbmc7Cn0KYGBgCgpJZiBgbmxhX29rYCBpcyBmYWxzZSwgdGhlIGF0dHJpYnV0ZSBpcyBtYWxmb3JtZWQuIElmIHdlICpkb24mIzM5O3QqIGNoZWNrIGBubGFfb2tgIGFmdGVyIGBubGFfbmV4dGAsIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uIGlzIGdvaW5nIHRvIHVzZSBgbmxhX29wdF9tc2tgLiBUaGF0IHdpbGwgcG90ZW50aWFsbHkgcmVhZCBgbmxhX3R5cGUobmxhX29wdF9tc2spYC4gSWYgYG5sYV9vcHRfbXNrYCBpc24mIzM5O3QgYG5sYV9va2AsIGBubGFfdHlwZWAgY291bGQgcmVhZCBnYXJiYWdlIG9yLCBhZ2FpbiwgZ28gb3V0IG9mIGJvdW5kcy4gSWYgaXQgcmVhZHMgZ2FyYmFnZSwgd2UgbWlnaHQganVzdCBmYWlsIHRoZSBjaGVjay4gSWYgaXQmIzM5O3Mgb3V0IG9mIGJvdW5kcywgS0FTQU4gY2F0Y2hlcyBpdC4KClNvLCBpcyB0aGVyZSBhbnkgcmVhbCAqcmlzayogaGVyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGEgd2F5IG9ubHkgS01TQU4gY291bGQgY2F0Y2g/IE5vLCBub3QgcmVhbGx5LiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIG5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcgYnVnOiBhIG1pc3NpbmcgbGVuZ3RoIGNoZWNrIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcy4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGNhdGNoIHRob3NlLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2gsIGFib3V0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSAqbGVha3MqLi4uIE5vLCB0aGUgbmV0bGluayBtZXNzYWdlIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHVzZXIgc3BhY2UuCgpUaGUgcGF0Y2gganVzdCBhZGRzIGEgYm91bmRzIGNoZWNrLCB3aGljaCBpcyBhIHN0YW5kYXJkIGZpeCBmb3IgYSBtaXNzaW5nIGBubGFfb2tgIGFmdGVyIGBubGFfbmV4dGAgY2FsbC4gU3VjaCBidWdzIHR5cGljYWxseSByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlc2UgYXJlIGNhdWdodCBieSBLQVNBTi4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb24gb3IgbGVhay4KClRoZSBwYXRjaDoKCmBgYGMKIAkJbmxhX29wdF9tc2sgPSBubGFfbmV4dChubGFfb3B0X21zaywgJmFtcDttc2tfZGVwdGgpOwomIzQzOwomIzQzOwkJaWYgKG1za19kZXB0aCAmYW1wOyZhbXA7ICFubGFfb2sobmxhX29wdF9tc2ssIG1za19kZXB0aCkpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7QSBtYXNrIGF0dHJpYnV0ZSBpcyBpbnZhbGlkJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGJvdW5kcyBjaGVjayAoYG5sYV9va2ApIGZvciBuZXRsaW5rIGF0dHJpYnV0ZXMgYWZ0ZXIgYWR2YW5jaW5nIHRoZSBhdHRyaWJ1dGUgcG9pbnRlciB3aXRoIGBubGFfbmV4dGAuIFdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIGNvZGUgY291bGQgcmVhZCBvdXQtb2YtYm91bmRzIG1lbW9yeSB3aGVuIGFjY2Vzc2luZyB0aGUgbmV4dCBhdHRyaWJ1dGUmIzM5O3MgaGVhZGVyIG9yIGRhdGEuIE91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGJvdW5kcyBjaGVjayAoYG5sYV9va2ApIGZvciBuZXRsaW5rIGF0dHJpYnV0ZXMgYWZ0ZXIgYWR2YW5jaW5nIHRoZSBhdHRyaWJ1dGUgcG9pbnRlciB3aXRoIGBubGFfbmV4dGAuIFdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIGNvZGUgY291bGQgcmVhZCBvdXQtb2YtYm91bmRzIG1lbW9yeSB3aGVuIGFjY2Vzc2luZyB0aGUgbmV4dCBhdHRyaWJ1dGUmIzM5O3MgaGVhZGVyIG9yIGRhdGEuIE91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjc6MTkuMDMyNDg4MTkzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3Mzg2ODk5Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19GTE9XRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmbF9jaGFuZ2VcIixcbiAgICBcImZsX3RtcGx0X2NyZWF0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRzIGNoZWNrIChgbmxhX29rYCkgZm9yIG5ldGxpbmsgYXR0cmlidXRlcyBhZnRlciBhZHZhbmNpbmcgdGhlIGF0dHJpYnV0ZSBwb2ludGVyIHdpdGggYG5sYV9uZXh0YC4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgY29kZSBjb3VsZCByZWFkIG91dC1vZi1ib3VuZHMgbWVtb3J5IHdoZW4gYWNjZXNzaW5nIHRoZSBuZXh0IGF0dHJpYnV0ZSdzIGhlYWRlciBvciBkYXRhLiBPdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIGludmFsaWQgYXR0cmlidXRlIHBhcnNpbmcgaW4gYGZsX3NldF9lbmNfb3B0YCB3aGVuIHBhcnNpbmcgbmVzdGVkIG5ldGxpbmsgYXR0cmlidXRlcyBmb3IgZmxvd2VyIGNsYXNzaWZpZXIgZW5jYXBzdWxhdGlvbiBvcHRpb25zLiBJdCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIGBtc2tfZGVwdGhgIGlzIHZhbGlkIGJlZm9yZSBjb250aW51aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgcGFja2V0IGNsYXNzaWZpY2F0aW9uIGxvZ2ljIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGMgbmV0bGluay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjc6MTkuMDMyNDkyNTYzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQxMzQ4ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxZDE4OGM5ODkwNmE5YTNmNWFhMTM1ZjZjMDQ4ZjYwMzZkZGE4MDJiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDAzOjI3OjE4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXFxuaW5kZXggMGUyNzViNTgxNTFjNC4uMWNlZmVhNTcxZWZkNyAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXFxuKysrIGIvbmV0L3NjaGVkL2Nsc19mbG93ZXIuY1xcbkBAIC0xNzAzLDYgKzE3MDMsMTEgQEAgc3RhdGljIGludCBmbF9zZXRfZW5jX29wdChzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBmbF9mbG93X2tleSAqa2V5LFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRubGFfb3B0X21zayA9IG5sYV9uZXh0KG5sYV9vcHRfbXNrLCBcXHUwMDI2bXNrX2RlcHRoKTtcXG4rXFxuK1xcdFxcdGlmIChtc2tfZGVwdGggXFx1MDAyNlxcdTAwMjYgIW5sYV9vayhubGFfb3B0X21zaywgbXNrX2RlcHRoKSkge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJBIG1hc2sgYXR0cmlidXRlIGlzIGludmFsaWRcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI3OjE5LjU1NzM2NTUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQ1NDYwNTA5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX0ZMT1dFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZsX2NoYW5nZVwiLFxuICAgIFwiZmxfdG1wbHRfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIGludmFsaWQgYXR0cmlidXRlIHBhcnNpbmcgaW4gYGZsX3NldF9lbmNfb3B0YCB3aGVuIHBhcnNpbmcgbmVzdGVkIG5ldGxpbmsgYXR0cmlidXRlcyBmb3IgZmxvd2VyIGNsYXNzaWZpZXIgZW5jYXBzdWxhdGlvbiBvcHRpb25zLiBJdCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIGBtc2tfZGVwdGhgIGlzIHZhbGlkIGJlZm9yZSBjb250aW51aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgcGFja2V0IGNsYXNzaWZpY2F0aW9uIGxvZ2ljIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGMgbmV0bGluay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWQxODhjOTg5MDZhOWEzZjVhYTEzNWY2YzA0OGY2MDM2ZGRhODAyYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDAzOjI3OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYyBiL25ldC9zY2hlZC9jbHNfZmxvd2VyLmNcbmluZGV4IDBlMjc1YjU4MTUxYzQuLjFjZWZlYTU3MWVmZDcgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXG5AQCAtMTcwMyw2ICsxNzAzLDExIEBAIHN0YXRpYyBpbnQgZmxfc2V0X2VuY19vcHQoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSxcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFx0XHRubGFfb3B0X21zayA9IG5sYV9uZXh0KG5sYV9vcHRfbXNrLCBcdTAwMjZtc2tfZGVwdGgpO1xuK1xuK1x0XHRpZiAobXNrX2RlcHRoIFx1MDAyNlx1MDAyNiAhbmxhX29rKG5sYV9vcHRfbXNrLCBtc2tfZGVwdGgpKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkEgbWFzayBhdHRyaWJ1dGUgaXMgaW52YWxpZFwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyNzoxOS41NTczNjY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxMDk0ODExNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgRmxvd2VyIENsYXNzaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3NjaGVkL2Nsc19mbG93ZXIuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBmbF9zZXRfZW5jX29wdGAgZnVuY3Rpb24uIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIHRoZXkndmUgYWRkZWQgYSBjaGVjayBoZXJlOlxuXG5gYGBjXG5cdFx0bmxhX29wdF9tc2sgPSBubGFfbmV4dChubGFfb3B0X21zaywgXHUwMDI2bXNrX2RlcHRoKTtcbitcbitcdFx0aWYgKG1za19kZXB0aCBcdTAwMjZcdTAwMjYgIW5sYV9vayhubGFfb3B0X21zaywgbXNrX2RlcHRoKSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJBIG1hc2sgYXR0cmlidXRlIGlzIGludmFsaWRcIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIGl0J3MgZ3VhcmRpbmcgYWdhaW5zdCBpbnZhbGlkIG1hc2sgYXR0cmlidXRlcywgcmlnaHQ/IE1ha2VzIHNlbnNlLiBgbmxhX25leHRgIGFkdmFuY2VzIHRoZSBOTEEgcG9pbnRlciwgYW5kIHRoaXMgY29kZSBpcyBub3cgY2hlY2tpbmcgaWYsIGFmdGVyIHRoZSBhZHZhbmNlLCB0aGUgTkxBIGlzIHN0aWxsIHZhbGlkIGdpdmVuIHRoZSBjdXJyZW50IGBtc2tfZGVwdGhgLiBUaGUgYG5sYV9va2AgZnVuY3Rpb24gaXMga2V5IGhlcmUg4oCTIHRoYXQncyB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjaGVjay4gSXQncyBwcm9iYWJseSB2ZXJpZnlpbmcgdGhhdCB3ZSBoYXZlbid0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgb3IgZW5jb3VudGVyZWQgc29tZSBvdGhlciBOTEEtcmVsYXRlZCBjb3JydXB0aW9uLiBJZiBgbXNrX2RlcHRoYCBpcyBub24temVybyAobWVhbmluZyB0aGVyZSAqaXMqIGEgbWFzayB0byBjb25zaWRlcikgYW5kIGBubGFfb2tgIGZhaWxzLCB3ZSBzZXQgYW4gZXh0ZW5kZWQgYWNrIG1lc3NhZ2UgYW5kIHJldHVybiAtRUlOVkFMLCBpbmRpY2F0aW5nIGFuIGludmFsaWQgbWFzayBhdHRyaWJ1dGUuIFRoYXQncyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4gR290dGEgZW5zdXJlIGRhdGEgaW50ZWdyaXR5IHdoZW4gZGVhbGluZyB3aXRoIE5MQXMuIEknbGwgbmVlZCB0byBkaWcgaW50byBgbmxhX29rYCBub3cgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSB2YWxpZGF0aW9uIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjc6MzEuNjY2ODUwOTk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Mzk0ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsX3NldF9lbmNfb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfZmxvd2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0xNDY4PXN0YXRpYyBpbnQgZmxfc2V0X3BmY3Bfb3B0KGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE1MDUtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxNTA2OnN0YXRpYyBpbnQgZmxfc2V0X2VuY19vcHQoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE1MDctXFx0XFx0XFx0ICBzdHJ1Y3QgZmxfZmxvd19rZXkgKm1hc2ssXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTE4NzE9c3RhdGljIGludCBmbF9zZXRfa2V5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGNhX29wdHMsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwOTUtXFx0aWYgKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTXSkge1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjA5NjpcXHRcXHRyZXQgPSBmbF9zZXRfZW5jX29wdCh0Yiwga2V5LCBtYXNrLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA5Ny1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyNzozMS43MTUyNTA0NzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDY3MDUxODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiBhIFRyYWZmaWMgQ2xhc3NpZmllciBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIHZ1bG5lcmFiaWxpdHkgaXMgc2l0dGluZyB3aXRoaW4gdGhlIGBjbHNfZmxvd2VyYCB0cmFmZmljIGNsYXNzaWZpZXIsIHNwZWNpZmljYWxseSwgaXQncyB0cmlnZ2VyZWQgZHVyaW5nIGF0dHJpYnV0ZSBwYXJzaW5nIGluIHRoZSBgZmxfc2V0X2VuY19vcHRgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIGlzIHJlYWNoZWQgdmlhIGBmbF9zZXRfa2V5YCwgd2hpY2ggaXMgYSBwYXJ0IG9mIHRoZSBgY2xzX2Zsb3dlcmAgY29kZSwgYW5kIGl0J3MgdWx0aW1hdGVseSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIG5ldGxpbmssIGxpa2VseSB2aWEgdGhlIGB0Y2AgY29tbWFuZC1saW5lIHV0aWxpdHkuIFRoZSByb290IGNhdXNlIGFwcGVhcnMgdG8gYmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBvciBzb21lIG90aGVyIGlzc3VlIHdpdGggaW52YWxpZCBhdHRyaWJ1dGUgaGFuZGxpbmcsIGluIGBmbF9zZXRfZW5jX29wdGAuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgd2F5IHRyYWZmaWMgY2xhc3NpZmljYXRpb24gd29ya3MsIGFuZCBpdCBkZWZpbml0ZWx5IG5lZWRzIGEgZ29vZCBmdXp6aW5nIGNhbXBhaWduLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgc2hvdWxkIGZpcnN0IGZpbmQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IGFwcGx5IHRvIGBjbHNfZmxvd2VyYCwgYXMgdGhlIGZ1enppbmcgc3RyYXRlZ3kgd2lsbCBkZXBlbmQgb24gdW5kZXJzdGFuZGluZyBob3cgaXQncyBzZXQgdXAgdG8gcHJvY2VzcyB0cmFmZmljIGFuZCB0aGUgc3BlY2lmaWMgYXR0cmlidXRlcyBpdCBpcyBkZXNpZ25lZCB0byBoYW5kbGUuIFRoYXQgd2lsbCBnaXZlIG1lIGEgcHJvcGVyIGhhbmRsZSBvbiB0aGUgaW5wdXRzIHRoYXQgY2FuIHJlYWNoIHRoaXMgZmF1bHR5IGNvZGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyNzozNi4xODIzMDQ0ODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxNTQwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9DTFNfRkxPV0VSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTU2Mj1jb25maWcgTkVUX0NMU19CUEZcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTU3MS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo1NzI6Y29uZmlnIE5FVF9DTFNfRkxPV0VSXFxubmV0L3NjaGVkL0tjb25maWctNTczLVxcdHRyaXN0YXRlIFxcXCJGbG93ZXIgY2xhc3NpZmllclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjc6MzYuMjMyNDY0MzAyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMDk4ODYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBGbG93IFRhYmxlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgY29uZmlnIEknbSB3b3JraW5nIHdpdGggdXNlcyBgTkVUX0NMU19GTE9XRVJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUga2V5IG9wZXJhdGlvbnMgaW4gdGhpcyBjb250ZXh0LCB0aGUgY2VudHJhbCBmdW5jdGlvbnMgdGhhdCBtYW5pcHVsYXRlIHRoZSBmbG93IHRhYmxlIGVudHJpZXMuIGBmbF9zZXRfZW5jX29wdGAgYmVpbmcgc3RhdGljIGlzbid0IGhlbHBmdWwsIHNvIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJdCdzIGxpa2VseSBgZmxfc2V0X2tleWAgb3IsIHBlcmhhcHMgbW9yZSBpbnRyaWd1aW5nbHksIGBmbF9jaGFuZ2VgIHdpbGwgYmUgdGhlIHNpZ25pZmljYW50IGZ1bmN0aW9ucyBoZXJlLiBUaGUgXCJjaGFuZ2VcIiBmdW5jdGlvbiBzZWVtcyBsaWtlIHRoZSBtb3JlIGxpa2VseSBjYW5kaWRhdGUgZm9yIGNsb3NlciBleGFtaW5hdGlvbiwgc2luY2UgaXQgaW1wbGllcyBtb2RpZmljYXRpb24gb2YgZXhpc3RpbmcgZW50cmllcy4gTGV0J3Mgc3RhcnQgYnkgY2hlY2tpbmcgdGhhdCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyNzozOS42NjM0NTU5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODExMTgyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbF9zZXRfa2V5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfZmxvd2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc19mbG93ZXIuYz04MDM9Y2ZtX29wdF9wb2xpY3lbVENBX0ZMT1dFUl9LRVlfQ0ZNX09QVF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODA4LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6ODA5OnN0YXRpYyB2b2lkIGZsX3NldF9rZXlfdmFsKHN0cnVjdCBubGF0dHIgKip0YixcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTgxMC1cXHRcXHRcXHQgICB2b2lkICp2YWwsIGludCB2YWxfdHlwZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODIxLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6ODIyOnN0YXRpYyBpbnQgZmxfc2V0X2tleV9zcGkoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTgyMy1cXHRcXHRcXHQgIHN0cnVjdCBmbF9mbG93X2tleSAqbWFzayxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODMyLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6ODMzOlxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VpcHNlYy5zcGksXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy04MzQtXFx0XFx0ICAgICAgIFRDQV9GTE9XRVJfS0VZX1NQSSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODM5LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6ODQwOnN0YXRpYyBpbnQgZmxfc2V0X2tleV9wb3J0X3JhbmdlKHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy04NDEtXFx0XFx0XFx0XFx0IHN0cnVjdCBmbF9mbG93X2tleSAqbWFzayxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODQzLXtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjg0NDpcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNldHBfcmFuZ2UudHBfbWluLmRzdCxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg0NS1cXHRcXHQgICAgICAgVENBX0ZMT1dFUl9LRVlfUE9SVF9EU1RfTUlOLCBcXHUwMDI2bWFzay1cXHUwMDNldHBfcmFuZ2UudHBfbWluLmRzdCxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg0Ni1cXHRcXHQgICAgICAgVENBX0ZMT1dFUl9VTlNQRUMsIHNpemVvZihrZXktXFx1MDAzZXRwX3JhbmdlLnRwX21pbi5kc3QpKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjg0NzpcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNldHBfcmFuZ2UudHBfbWF4LmRzdCxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg0OC1cXHRcXHQgICAgICAgVENBX0ZMT1dFUl9LRVlfUE9SVF9EU1RfTUFYLCBcXHUwMDI2bWFzay1cXHUwMDNldHBfcmFuZ2UudHBfbWF4LmRzdCxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg0OS1cXHRcXHQgICAgICAgVENBX0ZMT1dFUl9VTlNQRUMsIHNpemVvZihrZXktXFx1MDAzZXRwX3JhbmdlLnRwX21heC5kc3QpKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjg1MDpcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNldHBfcmFuZ2UudHBfbWluLnNyYyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg1MS1cXHRcXHQgICAgICAgVENBX0ZMT1dFUl9LRVlfUE9SVF9TUkNfTUlOLCBcXHUwMDI2bWFzay1cXHUwMDNldHBfcmFuZ2UudHBfbWluLnNyYyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg1Mi1cXHRcXHQgICAgICAgVENBX0ZMT1dFUl9VTlNQRUMsIHNpemVvZihrZXktXFx1MDAzZXRwX3JhbmdlLnRwX21pbi5zcmMpKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjg1MzpcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNldHBfcmFuZ2UudHBfbWF4LnNyYyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg1NC1cXHRcXHQgICAgICAgVENBX0ZMT1dFUl9LRVlfUE9SVF9TUkNfTUFYLCBcXHUwMDI2bWFzay1cXHUwMDNldHBfcmFuZ2UudHBfbWF4LnNyYyxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODg2LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6ODg3OnN0YXRpYyBpbnQgZmxfc2V0X2tleV9tcGxzX2xzZShjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGFfbHNlLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODg4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X21wbHMgKmtleV92YWwsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTk3MS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjk3MjpzdGF0aWMgaW50IGZsX3NldF9rZXlfbXBsc19vcHRzKGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYV9tcGxzX29wdHMsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy05NzMtXFx0XFx0XFx0XFx0c3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9tcGxzICprZXlfdmFsLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy05OTMtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzo5OTQ6XFx0XFx0ZXJyID0gZmxfc2V0X2tleV9tcGxzX2xzZShubGFfbHNlLCBrZXlfdmFsLCBrZXlfbWFzaywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTk5NS1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTAwNi1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjEwMDc6c3RhdGljIGludCBmbF9zZXRfa2V5X21wbHMoc3RydWN0IG5sYXR0ciAqKnRiLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTAwOC1cXHRcXHRcXHQgICBzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X21wbHMgKmtleV92YWwsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTEwMjUtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMDI2OlxcdFxcdHJldHVybiBmbF9zZXRfa2V5X21wbHNfb3B0cyh0YltUQ0FfRkxPV0VSX0tFWV9NUExTX09QVFNdLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTAyNy1cXHRcXHRcXHRcXHRcXHQgICAga2V5X3ZhbCwga2V5X21hc2ssIGV4dGFjayk7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTEwODMtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMDg0OnN0YXRpYyB2b2lkIGZsX3NldF9rZXlfdmxhbihzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMDg1LVxcdFxcdFxcdCAgICBfX2JlMTYgZXRoZXJ0eXBlLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTE0LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTExNTpzdGF0aWMgdm9pZCBmbF9zZXRfa2V5X3BwcG9lKHN0cnVjdCBubGF0dHIgKip0YixcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTExMTYtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BwcG9lICprZXlfdmFsLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTU4LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTE1OTpzdGF0aWMgdm9pZCBmbF9zZXRfa2V5X2ZsYWcodTMyIGZsb3dlcl9rZXksIHUzMiBmbG93ZXJfbWFzayxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTExNjAtXFx0XFx0XFx0ICAgIHUzMiAqZGlzc2VjdG9yX2tleSwgdTMyICpkaXNzZWN0b3JfbWFzayxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTE2OS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjExNzA6c3RhdGljIGludCBmbF9zZXRfa2V5X2ZsYWdzKHN0cnVjdCBubGF0dHIgKnRjYV9vcHRzLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTcxLVxcdFxcdFxcdCAgICBib29sIGVuY2FwLCB1MzIgKmZsYWdzX2tleSwgdTMyICpmbGFnc19tYXNrLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTk2LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTE5NzpcXHRmbF9zZXRfa2V5X2ZsYWcoa2V5LCBtYXNrLCBmbGFnc19rZXksIGZsYWdzX21hc2ssXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTk4LVxcdFxcdFxcdFRDQV9GTE9XRVJfS0VZX0ZMQUdTX0lTX0ZSQUdNRU5ULCBGTE9XX0RJU19JU19GUkFHTUVOVCk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMTk5OlxcdGZsX3NldF9rZXlfZmxhZyhrZXksIG1hc2ssIGZsYWdzX2tleSwgZmxhZ3NfbWFzayxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTEyMDAtXFx0XFx0XFx0VENBX0ZMT1dFUl9LRVlfRkxBR1NfRlJBR19JU19GSVJTVCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIwMi1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjEyMDM6XFx0Zmxfc2V0X2tleV9mbGFnKGtleSwgbWFzaywgZmxhZ3Nfa2V5LCBmbGFnc19tYXNrLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIwNC1cXHRcXHRcXHRUQ0FfRkxPV0VSX0tFWV9GTEFHU19UVU5ORUxfQ1NVTSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIwNi1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjEyMDc6XFx0Zmxfc2V0X2tleV9mbGFnKGtleSwgbWFzaywgZmxhZ3Nfa2V5LCBmbGFnc19tYXNrLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIwOC1cXHRcXHRcXHRUQ0FfRkxPV0VSX0tFWV9GTEFHU19UVU5ORUxfRE9OVF9GUkFHTUVOVCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIxMC1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjEyMTE6XFx0Zmxfc2V0X2tleV9mbGFnKGtleSwgbWFzaywgZmxhZ3Nfa2V5LCBmbGFnc19tYXNrLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIxMi1cXHRcXHRcXHRUQ0FfRkxPV0VSX0tFWV9GTEFHU19UVU5ORUxfT0FNLCBGTE9XX0RJU19GX1RVTk5FTF9PQU0pO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIxMy1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjEyMTQ6XFx0Zmxfc2V0X2tleV9mbGFnKGtleSwgbWFzaywgZmxhZ3Nfa2V5LCBmbGFnc19tYXNrLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIxNS1cXHRcXHRcXHRUQ0FfRkxPV0VSX0tFWV9GTEFHU19UVU5ORUxfQ1JJVF9PUFQsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTEyMjAtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMjIxOnN0YXRpYyB2b2lkIGZsX3NldF9rZXlfaXAoc3RydWN0IG5sYXR0ciAqKnRiLCBib29sIGVuY2FwLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIyMi1cXHRcXHRcXHQgIHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfaXAgKmtleSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIyOS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjEyMzA6XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZXRvcywgdG9zX2tleSwgXFx1MDAyNm1hc2stXFx1MDAzZXRvcywgdG9zX21hc2ssIHNpemVvZihrZXktXFx1MDAzZXRvcykpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTIzMTpcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNldHRsLCB0dGxfa2V5LCBcXHUwMDI2bWFzay1cXHUwMDNldHRsLCB0dGxfbWFzaywgc2l6ZW9mKGtleS1cXHUwMDNldHRsKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMjMyLX1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MTcxNj1zdGF0aWMgaW50IGZsX3ZhbGlkYXRlX2N0X3N0YXRlKHUxNiBzdGF0ZSwgc3RydWN0IG5sYXR0ciAqdGIsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE3NDktXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxNzUwOnN0YXRpYyBpbnQgZmxfc2V0X2tleV9jdChzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzUxLVxcdFxcdFxcdCBzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X2N0ICprZXksXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE3NjEtXFx0XFx0fVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTc2MjpcXHRcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNlY3Rfc3RhdGUsIFRDQV9GTE9XRVJfS0VZX0NUX1NUQVRFLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTc2My1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hc2stXFx1MDAzZWN0X3N0YXRlLCBUQ0FfRkxPV0VSX0tFWV9DVF9TVEFURV9NQVNLLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzc3LVxcdFxcdH1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE3Nzg6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWN0X3pvbmUsIFRDQV9GTE9XRVJfS0VZX0NUX1pPTkUsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzc5LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNlY3Rfem9uZSwgVENBX0ZMT1dFUl9LRVlfQ1RfWk9ORV9NQVNLLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzg2LVxcdFxcdH1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE3ODc6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWN0X21hcmssIFRDQV9GTE9XRVJfS0VZX0NUX01BUkssXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzg4LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNlY3RfbWFyaywgVENBX0ZMT1dFUl9LRVlfQ1RfTUFSS19NQVNLLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzk1LVxcdFxcdH1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE3OTY6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIGtleS1cXHUwMDNlY3RfbGFiZWxzLCBUQ0FfRkxPV0VSX0tFWV9DVF9MQUJFTFMsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzk3LVxcdFxcdFxcdCAgICAgICBtYXNrLVxcdTAwM2VjdF9sYWJlbHMsIFRDQV9GTE9XRVJfS0VZX0NUX0xBQkVMU19NQVNLLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0xODA0PXN0YXRpYyBib29sIGlzX3ZsYW5fa2V5KHN0cnVjdCBubGF0dHIgKnRiLCBfX2JlMTYgKmV0aGVydHlwZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTgyMy1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE4MjQ6c3RhdGljIHZvaWQgZmxfc2V0X2tleV9jZm1fbWRfbGV2ZWwoc3RydWN0IG5sYXR0ciAqKnRiLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTgyNS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4MzgtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxODM5OnN0YXRpYyB2b2lkIGZsX3NldF9rZXlfY2ZtX29wY29kZShzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODQwLVxcdFxcdFxcdFxcdCAgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4NDMte1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTg0NDpcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNlY2ZtLm9wY29kZSwgVENBX0ZMT1dFUl9LRVlfQ0ZNX09QQ09ERSxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4NDUtXFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2VjZm0ub3Bjb2RlLCBUQ0FfRkxPV0VSX1VOU1BFQyxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg0OC1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE4NDk6c3RhdGljIGludCBmbF9zZXRfa2V5X2NmbShzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODUwLVxcdFxcdFxcdCAgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4NjQtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxODY1OlxcdGZsX3NldF9rZXlfY2ZtX29wY29kZShubGFfY2ZtX29wdCwga2V5LCBtYXNrLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTg2NjpcXHRmbF9zZXRfa2V5X2NmbV9tZF9sZXZlbChubGFfY2ZtX29wdCwga2V5LCBtYXNrLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg2Ny1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg3MC1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE4NzE6c3RhdGljIGludCBmbF9zZXRfa2V5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGNhX29wdHMsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODcyLVxcdFxcdCAgICAgIHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4ODUtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxODg2OlxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VtZXRhLmwyX21pc3MsIFRDQV9GTE9XRVJfTDJfTUlTUyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4ODctXFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2VtZXRhLmwyX21pc3MsIFRDQV9GTE9XRVJfVU5TUEVDLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODg5LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTg5MDpcXHRmbF9zZXRfa2V5X3ZhbCh0Yiwga2V5LVxcdTAwM2VldGguZHN0LCBUQ0FfRkxPV0VSX0tFWV9FVEhfRFNULFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg5MS1cXHRcXHQgICAgICAgbWFzay1cXHUwMDNlZXRoLmRzdCwgVENBX0ZMT1dFUl9LRVlfRVRIX0RTVF9NQVNLLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg5Mi1cXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNlZXRoLmRzdCkpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTg5MzpcXHRmbF9zZXRfa2V5X3ZhbCh0Yiwga2V5LVxcdTAwM2VldGguc3JjLCBUQ0FfRkxPV0VSX0tFWV9FVEhfU1JDLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg5NC1cXHRcXHQgICAgICAgbWFzay1cXHUwMDNlZXRoLnNyYywgVENBX0ZMT1dFUl9LRVlfRVRIX1NSQ19NQVNLLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg5NS1cXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNlZXRoLnNyYykpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTg5NjpcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNlbnVtX29mX3ZsYW5zLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg5Ny1cXHRcXHQgICAgICAgVENBX0ZMT1dFUl9LRVlfTlVNX09GX1ZMQU5TLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTAyLVxcdGlmIChpc192bGFuX2tleSh0YltUQ0FfRkxPV0VSX0tFWV9FVEhfVFlQRV0sIFxcdTAwMjZldGhlcnR5cGUsIGtleSwgbWFzaywgMCkpIHtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5MDM6XFx0XFx0Zmxfc2V0X2tleV92bGFuKHRiLCBldGhlcnR5cGUsIFRDQV9GTE9XRVJfS0VZX1ZMQU5fSUQsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTA0LVxcdFxcdFxcdFxcdFRDQV9GTE9XRVJfS0VZX1ZMQU5fUFJJTyxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkwOS1cXHRcXHRcXHRcXHRcXHUwMDI2ZXRoZXJ0eXBlLCBrZXksIG1hc2ssIDEpKSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTEwOlxcdFxcdFxcdGZsX3NldF9rZXlfdmxhbih0YiwgZXRoZXJ0eXBlLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkxMS1cXHRcXHRcXHRcXHRcXHRUQ0FfRkxPV0VSX0tFWV9DVkxBTl9JRCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkxNC1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2a2V5LVxcdTAwM2VjdmxhbiwgXFx1MDAyNm1hc2stXFx1MDAzZWN2bGFuKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5MTU6XFx0XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWJhc2ljLm5fcHJvdG8sXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTE2LVxcdFxcdFxcdFxcdCAgICAgICBUQ0FfRkxPV0VSX0tFWV9DVkxBTl9FVEhfVFlQRSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkyMy1cXHRpZiAoa2V5LVxcdTAwM2ViYXNpYy5uX3Byb3RvID09IGh0b25zKEVUSF9QX1BQUF9TRVMpKVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTkyNDpcXHRcXHRmbF9zZXRfa2V5X3BwcG9lKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VwcHBvZSwgXFx1MDAyNm1hc2stXFx1MDAzZXBwcG9lLCBrZXksIG1hc2spO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkyNS1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkyNy1cXHQgICAga2V5LVxcdTAwM2ViYXNpYy5uX3Byb3RvID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTI4OlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2ViYXNpYy5pcF9wcm90bywgVENBX0ZMT1dFUl9LRVlfSVBfUFJPVE8sXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTI5LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNlYmFzaWMuaXBfcHJvdG8sIFRDQV9GTE9XRVJfVU5TUEVDLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkzMC1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNlYmFzaWMuaXBfcHJvdG8pKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5MzE6XFx0XFx0Zmxfc2V0X2tleV9pcCh0YiwgZmFsc2UsIFxcdTAwMjZrZXktXFx1MDAzZWlwLCBcXHUwMDI2bWFzay1cXHUwMDNlaXApO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkzMi1cXHR9XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MzYtXFx0XFx0bWFzay1cXHUwMDNlY29udHJvbC5hZGRyX3R5cGUgPSB+MDtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5Mzc6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWlwdjQuc3JjLCBUQ0FfRkxPV0VSX0tFWV9JUFY0X1NSQyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MzgtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2VpcHY0LnNyYywgVENBX0ZMT1dFUl9LRVlfSVBWNF9TUkNfTUFTSyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MzktXFx0XFx0XFx0ICAgICAgIHNpemVvZihrZXktXFx1MDAzZWlwdjQuc3JjKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTQwOlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VpcHY0LmRzdCwgVENBX0ZMT1dFUl9LRVlfSVBWNF9EU1QsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTQxLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNlaXB2NC5kc3QsIFRDQV9GTE9XRVJfS0VZX0lQVjRfRFNUX01BU0ssXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NDUtXFx0XFx0bWFzay1cXHUwMDNlY29udHJvbC5hZGRyX3R5cGUgPSB+MDtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5NDY6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWlwdjYuc3JjLCBUQ0FfRkxPV0VSX0tFWV9JUFY2X1NSQyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NDctXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2VpcHY2LnNyYywgVENBX0ZMT1dFUl9LRVlfSVBWNl9TUkNfTUFTSyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NDgtXFx0XFx0XFx0ICAgICAgIHNpemVvZihrZXktXFx1MDAzZWlwdjYuc3JjKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTQ5OlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VpcHY2LmRzdCwgVENBX0ZMT1dFUl9LRVlfSVBWNl9EU1QsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTUwLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNlaXB2Ni5kc3QsIFRDQV9GTE9XRVJfS0VZX0lQVjZfRFNUX01BU0ssXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NTQtXFx0aWYgKGtleS1cXHUwMDNlYmFzaWMuaXBfcHJvdG8gPT0gSVBQUk9UT19UQ1ApIHtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5NTU6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZXRwLnNyYywgVENBX0ZMT1dFUl9LRVlfVENQX1NSQyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NTYtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2V0cC5zcmMsIFRDQV9GTE9XRVJfS0VZX1RDUF9TUkNfTUFTSyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NTctXFx0XFx0XFx0ICAgICAgIHNpemVvZihrZXktXFx1MDAzZXRwLnNyYykpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTk1ODpcXHRcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNldHAuZHN0LCBUQ0FfRkxPV0VSX0tFWV9UQ1BfRFNULFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk1OS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hc2stXFx1MDAzZXRwLmRzdCwgVENBX0ZMT1dFUl9LRVlfVENQX0RTVF9NQVNLLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk2MC1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNldHAuZHN0KSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTYxOlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2V0Y3AuZmxhZ3MsIFRDQV9GTE9XRVJfS0VZX1RDUF9GTEFHUyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NjItXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2V0Y3AuZmxhZ3MsIFRDQV9GTE9XRVJfS0VZX1RDUF9GTEFHU19NQVNLLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTY0LVxcdH0gZWxzZSBpZiAoa2V5LVxcdTAwM2ViYXNpYy5pcF9wcm90byA9PSBJUFBST1RPX1VEUCkge1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTk2NTpcXHRcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNldHAuc3JjLCBUQ0FfRkxPV0VSX0tFWV9VRFBfU1JDLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk2Ni1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hc2stXFx1MDAzZXRwLnNyYywgVENBX0ZMT1dFUl9LRVlfVURQX1NSQ19NQVNLLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk2Ny1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNldHAuc3JjKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTY4OlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2V0cC5kc3QsIFRDQV9GTE9XRVJfS0VZX1VEUF9EU1QsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTY5LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNldHAuZHN0LCBUQ0FfRkxPV0VSX0tFWV9VRFBfRFNUX01BU0ssXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NzEtXFx0fSBlbHNlIGlmIChrZXktXFx1MDAzZWJhc2ljLmlwX3Byb3RvID09IElQUFJPVE9fU0NUUCkge1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTk3MjpcXHRcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNldHAuc3JjLCBUQ0FfRkxPV0VSX0tFWV9TQ1RQX1NSQyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NzMtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2V0cC5zcmMsIFRDQV9GTE9XRVJfS0VZX1NDVFBfU1JDX01BU0ssXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTc0LVxcdFxcdFxcdCAgICAgICBzaXplb2Yoa2V5LVxcdTAwM2V0cC5zcmMpKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5NzU6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZXRwLmRzdCwgVENBX0ZMT1dFUl9LRVlfU0NUUF9EU1QsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTc2LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNldHAuZHN0LCBUQ0FfRkxPV0VSX0tFWV9TQ1RQX0RTVF9NQVNLLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTc5LVxcdFxcdCAgIGtleS1cXHUwMDNlYmFzaWMuaXBfcHJvdG8gPT0gSVBQUk9UT19JQ01QKSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTgwOlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VpY21wLnR5cGUsIFRDQV9GTE9XRVJfS0VZX0lDTVBWNF9UWVBFLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk4MS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hc2stXFx1MDAzZWljbXAudHlwZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk4My1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNlaWNtcC50eXBlKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTg0OlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VpY21wLmNvZGUsIFRDQV9GTE9XRVJfS0VZX0lDTVBWNF9DT0RFLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk4NS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hc2stXFx1MDAzZWljbXAuY29kZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk4OS1cXHRcXHQgICBrZXktXFx1MDAzZWJhc2ljLmlwX3Byb3RvID09IElQUFJPVE9fSUNNUFY2KSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTkwOlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VpY21wLnR5cGUsIFRDQV9GTE9XRVJfS0VZX0lDTVBWNl9UWVBFLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk5MS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hc2stXFx1MDAzZWljbXAudHlwZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk5My1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNlaWNtcC50eXBlKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTk0OlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VpY21wLmNvZGUsIFRDQV9GTE9XRVJfS0VZX0lDTVBWNl9DT0RFLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk5NS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hc2stXFx1MDAzZWljbXAuY29kZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk5OS1cXHRcXHQgICBrZXktXFx1MDAzZWJhc2ljLm5fcHJvdG8gPT0gaHRvbnMoRVRIX1BfTVBMU19NQykpIHtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwMDA6XFx0XFx0cmV0ID0gZmxfc2V0X2tleV9tcGxzKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VtcGxzLCBcXHUwMDI2bWFzay1cXHUwMDNlbXBscywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMDEtXFx0XFx0aWYgKHJldClcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjAwNC1cXHRcXHQgICBrZXktXFx1MDAzZWJhc2ljLm5fcHJvdG8gPT0gaHRvbnMoRVRIX1BfUkFSUCkpIHtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwMDU6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWFycC5zaXAsIFRDQV9GTE9XRVJfS0VZX0FSUF9TSVAsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDA2LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNlYXJwLnNpcCwgVENBX0ZMT1dFUl9LRVlfQVJQX1NJUF9NQVNLLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjAwNy1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNlYXJwLnNpcCkpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjAwODpcXHRcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNlYXJwLnRpcCwgVENBX0ZMT1dFUl9LRVlfQVJQX1RJUCxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMDktXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2VhcnAudGlwLCBUQ0FfRkxPV0VSX0tFWV9BUlBfVElQX01BU0ssXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDEwLVxcdFxcdFxcdCAgICAgICBzaXplb2Yoa2V5LVxcdTAwM2VhcnAudGlwKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDExOlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VhcnAub3AsIFRDQV9GTE9XRVJfS0VZX0FSUF9PUCxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMTItXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2VhcnAub3AsIFRDQV9GTE9XRVJfS0VZX0FSUF9PUF9NQVNLLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjAxMy1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNlYXJwLm9wKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDE0OlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBrZXktXFx1MDAzZWFycC5zaGEsIFRDQV9GTE9XRVJfS0VZX0FSUF9TSEEsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDE1LVxcdFxcdFxcdCAgICAgICBtYXNrLVxcdTAwM2VhcnAuc2hhLCBUQ0FfRkxPV0VSX0tFWV9BUlBfU0hBX01BU0ssXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDE2LVxcdFxcdFxcdCAgICAgICBzaXplb2Yoa2V5LVxcdTAwM2VhcnAuc2hhKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDE3OlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBrZXktXFx1MDAzZWFycC50aGEsIFRDQV9GTE9XRVJfS0VZX0FSUF9USEEsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDE4LVxcdFxcdFxcdCAgICAgICBtYXNrLVxcdTAwM2VhcnAudGhhLCBUQ0FfRkxPV0VSX0tFWV9BUlBfVEhBX01BU0ssXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMjAtXFx0fSBlbHNlIGlmIChrZXktXFx1MDAzZWJhc2ljLmlwX3Byb3RvID09IElQUFJPVE9fTDJUUCkge1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjAyMTpcXHRcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNlbDJ0cHYzLnNlc3Npb25faWQsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDIyLVxcdFxcdFxcdCAgICAgICBUQ0FfRkxPV0VSX0tFWV9MMlRQVjNfU0lELFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDI1LVxcdH0gZWxzZSBpZiAoa2V5LVxcdTAwM2ViYXNpYy5uX3Byb3RvICA9PSBodG9ucyhFVEhfUF9DRk0pKSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDI2OlxcdFxcdHJldCA9IGZsX3NldF9rZXlfY2ZtKHRiLCBrZXksIG1hc2ssIGV4dGFjayk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDI3LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMzMtXFx0ICAgIGtleS1cXHUwMDNlYmFzaWMuaXBfcHJvdG8gPT0gSVBQUk9UT19TQ1RQKSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDM0OlxcdFxcdHJldCA9IGZsX3NldF9rZXlfcG9ydF9yYW5nZSh0Yiwga2V5LCBtYXNrLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjAzNS1cXHRcXHRpZiAocmV0KVxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDM5LVxcdGlmICh0YltUQ0FfRkxPV0VSX0tFWV9TUEldKSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDQwOlxcdFxcdHJldCA9IGZsX3NldF9rZXlfc3BpKHRiLCBrZXksIG1hc2ssIGV4dGFjayk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDQxLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwNDgtXFx0XFx0bWFzay1cXHUwMDNlZW5jX2NvbnRyb2wuYWRkcl90eXBlID0gfjA7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDQ5OlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VlbmNfaXB2NC5zcmMsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDUwLVxcdFxcdFxcdCAgICAgICBUQ0FfRkxPV0VSX0tFWV9FTkNfSVBWNF9TUkMsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwNTMtXFx0XFx0XFx0ICAgICAgIHNpemVvZihrZXktXFx1MDAzZWVuY19pcHY0LnNyYykpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjA1NDpcXHRcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNlZW5jX2lwdjQuZHN0LFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA1NS1cXHRcXHRcXHQgICAgICAgVENBX0ZMT1dFUl9LRVlfRU5DX0lQVjRfRFNULFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDY0LVxcdFxcdG1hc2stXFx1MDAzZWVuY19jb250cm9sLmFkZHJfdHlwZSA9IH4wO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjA2NTpcXHRcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNlZW5jX2lwdjYuc3JjLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA2Ni1cXHRcXHRcXHQgICAgICAgVENBX0ZMT1dFUl9LRVlfRU5DX0lQVjZfU1JDLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDY5LVxcdFxcdFxcdCAgICAgICBzaXplb2Yoa2V5LVxcdTAwM2VlbmNfaXB2Ni5zcmMpKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwNzA6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWVuY19pcHY2LmRzdCxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwNzEtXFx0XFx0XFx0ICAgICAgIFRDQV9GTE9XRVJfS0VZX0VOQ19JUFY2X0RTVCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA3Ni1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwNzc6XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWVuY19rZXlfaWQua2V5aWQsIFRDQV9GTE9XRVJfS0VZX0VOQ19LRVlfSUQsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDc4LVxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNlZW5jX2tleV9pZC5rZXlpZCwgVENBX0ZMT1dFUl9VTlNQRUMsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwODAtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDgxOlxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VlbmNfdHAuc3JjLCBUQ0FfRkxPV0VSX0tFWV9FTkNfVURQX1NSQ19QT1JULFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA4Mi1cXHRcXHQgICAgICAgXFx1MDAyNm1hc2stXFx1MDAzZWVuY190cC5zcmMsIFRDQV9GTE9XRVJfS0VZX0VOQ19VRFBfU1JDX1BPUlRfTUFTSyxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA4NC1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwODU6XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWVuY190cC5kc3QsIFRDQV9GTE9XRVJfS0VZX0VOQ19VRFBfRFNUX1BPUlQsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDg2LVxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNlZW5jX3RwLmRzdCwgVENBX0ZMT1dFUl9LRVlfRU5DX1VEUF9EU1RfUE9SVF9NQVNLLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDg4LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjA4OTpcXHRmbF9zZXRfa2V5X2lwKHRiLCB0cnVlLCBcXHUwMDI2a2V5LVxcdTAwM2VlbmNfaXAsIFxcdTAwMjZtYXNrLVxcdTAwM2VlbmNfaXApO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA5MC1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwOTE6XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWhhc2guaGFzaCwgVENBX0ZMT1dFUl9LRVlfSEFTSCxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwOTItXFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2VoYXNoLmhhc2gsIFRDQV9GTE9XRVJfS0VZX0hBU0hfTUFTSyxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjEwMC1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIxMDE6XFx0cmV0ID0gZmxfc2V0X2tleV9jdCh0YiwgXFx1MDAyNmtleS1cXHUwMDNlY3QsIFxcdTAwMjZtYXNrLVxcdTAwM2VjdCwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIxMDItXFx0aWYgKHJldClcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjEwNS1cXHRpZiAodGJbVENBX0ZMT1dFUl9LRVlfRkxBR1NdKSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMTA2OlxcdFxcdHJldCA9IGZsX3NldF9rZXlfZmxhZ3ModGNhX29wdHMsIHRiLCBmYWxzZSxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIxMDctXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZrZXktXFx1MDAzZWNvbnRyb2wuZmxhZ3MsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIxMTMtXFx0aWYgKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19GTEFHU10pXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMTE0OlxcdFxcdHJldCA9IGZsX3NldF9rZXlfZmxhZ3ModGNhX29wdHMsIHRiLCB0cnVlLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjExNS1cXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmtleS1cXHUwMDNlZW5jX2NvbnRyb2wuZmxhZ3MsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTIzNTg9c3RhdGljIGludCBmbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNDY4LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjQ2OTpcXHRlcnIgPSBmbF9zZXRfa2V5KG5ldCwgdGNhX29wdHMsIHRiLCBcXHUwMDI2Zm5ldy1cXHUwMDNla2V5LCBcXHUwMDI2bWFzay1cXHUwMDNla2V5LCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjQ3MC1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0yODA3PXN0YXRpYyB2b2lkICpmbF90bXBsdF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2NoYWluICpjaGFpbixcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjgzMi1cXHR0bXBsdC1cXHUwMDNlY2hhaW4gPSBjaGFpbjtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjI4MzM6XFx0ZXJyID0gZmxfc2V0X2tleShuZXQsIHRjYV9vcHRzLCB0YiwgXFx1MDAyNnRtcGx0LVxcdTAwM2VkdW1teV9rZXksXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yODM0LVxcdFxcdFxcdCBcXHUwMDI2dG1wbHQtXFx1MDAzZW1hc2ssIGV4dGFjayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI3OjM5LjcxMTU3MjIyOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTA3OTgxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZsb3dlciBGaWx0ZXIgTW9kaWZpY2F0aW9uIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGZsb3dlciBmaWx0ZXIgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgYGZsX2NoYW5nZWAgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gZm9yLCB3ZWxsLCBjaGFuZ2luZyB0aGUgZmlsdGVyLiBBbmQgdGhlbiB0aGVyZSdzIGBmbF90bXBsdF9jcmVhdGVgLCB3aGljaCBhbHNvIHNlZW1zIHRvIGJlIGEga2V5IGVudHJ5IHBvaW50IGZvciB0aGlzLCBwb3RlbnRpYWxseSB3aGVuIHdlJ3JlIGNyZWF0aW5nIGEgbmV3IGZsb3dlciBmaWx0ZXIgdGVtcGxhdGUuIEJvdGggb2YgdGhlc2UgZW50cnkgcG9pbnRzIOKAkyBgZmxfY2hhbmdlYCBhbmQgYGZsX3RtcGx0X2NyZWF0ZWAg4oCTIGV2ZW50dWFsbHkgY2FsbCBgZmxfc2V0X2tleWAsIHdoaWNoIHByb2JhYmx5IGRvZXMgdGhlIGNvcmUgd29yayBvZiBhY3R1YWxseSBjb25maWd1cmluZyB0aGUgZmlsdGVyLiBBbHJpZ2h0LCBzbyBJJ3ZlIGdvdCB0d28gZ29vZCBmb2NhbCBwb2ludHMgaGVyZTogYGZsX2NoYW5nZWAgYW5kIGBmbF90bXBsdF9jcmVhdGVgLlxuXG5XYWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBIYW5nIG9uLCBgZmxfY2hhbmdlYCBpcyBhICpjYWxsYmFjayogd2l0aGluIGBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfZmxfb3BzYD8gSW50ZXJlc3RpbmcuIEkgc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBsb29rIGF0IGBjbHNfZmxfb3BzYCB0byBzZWUgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIgaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsuIExldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IHN0cnVjdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyOCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyNzo0My45NjIzNzIyNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MTg2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHRjZl9wcm90b19vcHMgY2xzX2ZsX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvY2xzX2Zsb3dlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MzgyMj1zdGF0aWMgYm9vbCBmbF9kZWxldGVfZW1wdHkoc3RydWN0IHRjZl9wcm90byAqdHApXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4MzItXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzozODMzOnN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfZmxfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODM0LVxcdC5raW5kXFx0XFx0PSBcXFwiZmxvd2VyXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjc6NDQuMDEwNzkzNjk4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjQ4MTM3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRmxvd2VyIENsYXNzaWZpZXIgQ29uZmlndXJhdGlvbiBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIHRoZSBgLmNoYW5nZWAgY2FsbGJhY2ssIHdoaWNoIEknbSBjb25maXJtaW5nIGlzIGBmbF9jaGFuZ2VgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIHNwZWNpZmljcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGF2b2lkaW5nIHRob3NlIGZydXN0cmF0aW5nIGRlYnVnZ2luZyBzZXNzaW9ucyBsYXRlci5cblxuVGhlIGNvcmUgaW1wbGVtZW50YXRpb24gc2VlbXMgdG8gYmUgaW4gYG5ldC9zY2hlZC9jbHNfZmxvd2VyLmNgLCBzbyBJJ2xsIGJlIGxvb2tpbmcgdGhlcmUgZm9yIHRoZSBtZWF0IG9mIHRoZSBmdW5jdGlvbmFsaXR5LiBOb3csIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbiBpdHNlbGYsIGl0IGxvb2tzIGxpa2UgYE5FVF9DTFNfRkxPV0VSYCBpcyB0aGUga2V5LiBCdXQgdGhhdCBhbG9uZSBkb2Vzbid0IGd1YXJhbnRlZSBldmVyeXRoaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkuIEkgc2hvdWxkIGFsd2F5cyBjcm9zcy1yZWZlcmVuY2UgdGhlIGBLY29uZmlnYCBmaWxlcywganVzdCB0byBiZSB0aG9yb3VnaC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgbmV0L3NjaGVkL0tjb25maWdgIHRvIGJlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciByZWxhdGVkLCBwb3RlbnRpYWxseSBvYnNjdXJlLCBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZsb3dlciBjbGFzc2lmaWVyLiBHb3R0YSBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyNzo0Ny43NzU2MTAxMzJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTI0OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTX0ZMT1dFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz01NjI9Y29uZmlnIE5FVF9DTFNfQlBGXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01NzEtXFxubmV0L3NjaGVkL0tjb25maWc6NTcyOmNvbmZpZyBORVRfQ0xTX0ZMT1dFUlxcbm5ldC9zY2hlZC9LY29uZmlnLTU3My1cXHR0cmlzdGF0ZSBcXFwiRmxvd2VyIGNsYXNzaWZpZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI3OjQ3LjgyNDczOTc0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5Njc0OTg1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBgTkVUX0NMU19GTE9XRVJgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9DTFNfRkxPV0VSYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgY29udGV4dC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBjb3JlIGNsYXNzaWZpY2F0aW9uIG1lY2hhbmlzbXMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbiB0aGUga2VybmVsLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIHJlbHkgb24gYE5FVF9DTFNfRkxPV0VSYCBhbmQsIGNvbnZlcnNlbHksIHdoYXQgaXQgbGV2ZXJhZ2VzLlxuXG5TcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dDpcblxuKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIFdoYXQgc3RydWN0dXJlcyBkb2VzIGBORVRfQ0xTX0ZMT1dFUmAgZGVmaW5lIG9yIHVzZT8gSXMgaXQgbWFuaXB1bGF0aW5nIGZsb3cga2V5cywgbWFza3MsIGFjdGlvbnMsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBVbmRlcnN0YW5kaW5nIGl0cyBkYXRhIG1vZGVsIGlzIGNydWNpYWwuXG4qICAgKipBUEkgSW50ZXJhY3Rpb25zOioqIFdoYXQga2VybmVsIEFQSXMgZG9lcyBgTkVUX0NMU19GTE9XRVJgIGV4cG9zZT8gQXJlIHRoZXJlIGlvY3RscywgbmV0bGluayBtZXNzYWdlcywgb3Igb3RoZXIgaW50ZXJmYWNlcyB0aGF0IGFkbWluaXN0cmF0b3JzIG9yIGFwcGxpY2F0aW9ucyB1c2UgdG8gY29uZmlndXJlIGl0P1xuKiAgICoqSW50ZWdyYXRpb24gUG9pbnRzOioqIFdoZXJlIGRvZXMgaXQgaG9vayBpbnRvIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoPyBJcyBpdCBpbnZvbHZlZCBpbiBpbmdyZXNzLCBlZ3Jlc3MsIG9yIGJvdGg/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciBjbGFzc2lmaWVycyBvciB0cmFmZmljIGNvbnRyb2wgbW9kdWxlcyBsaWtlIGB0Y2A/XG4qICAgKipIYXJkd2FyZSBBYnN0cmFjdGlvbjoqKiBEb2VzIGl0IHN1cHBvcnQgaGFyZHdhcmUgb2ZmbG9hZGluZz8gSWYgc28sIHdoYXQgYXJlIHRoZSByZWxldmFudCBkZXZpY2UgZHJpdmVycyBhbmQgaG93IGRvZXMgaXQgaW50ZXJmYWNlIHdpdGggdGhlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaXMgaW1wbGVtZW50ZWQuXG4qICAgKipDb25maWd1cmF0aW9uOioqIFRoZSBjb25maWd1cmF0aW9uIHRvb2xzIGZvciBgTkVUX0NMU19GTE9XRVJgLiBIb3cgaXMgaXQgY29uZmlndXJlZD8gRG9lcyBpdCBuZWVkIGV4dGVybmFsIGhlbHAsIG9yIGlzIHRoZXJlIGEgc3BlY2lmaWMgY29tbWFuZCB0byBzZXQgcGFyYW1ldGVycy5cblxuVWx0aW1hdGVseSwgSSB3YW50IGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgXCJyYWlzb24gZCfDqnRyZVwiLiBJIG5lZWQgdG8gaWRlbnRpZnkgYm90aCB0aGUgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gZGVwZW5kZW5jaWVzIHRvIHVuZGVyc3RhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCB0cmFmZmljIG1hbmFnZW1lbnQgc2NoZW1lLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXAgaW50byB0aGUgc291cmNlIGNvZGUsIG1heWJlIGV2ZW4gcnVuIHNvbWUgcXVpY2sgYGdyZXBgIHF1ZXJpZXMgb24gdGhlIGNvZGViYXNlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTIwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjc6NTIuNzkyMjQxODQxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3MDpcXHRcXHQgIGJlIGNhbGxlZCBjbHNfYnBmLlxcbiA1NzE6XFx0XFxuIDU3MjpcXHRjb25maWcgTkVUX0NMU19GTE9XRVJcXG4gNTczOlxcdFxcdHRyaXN0YXRlIFxcXCJGbG93ZXIgY2xhc3NpZmllclxcXCJcXG4gNTc0OlxcdFxcdHNlbGVjdCBORVRfQ0xTXFxuIDU3NTpcXHRcXHRoZWxwXFxuIDU3NjpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgYmFzZWQgb25cXG4gNTc3OlxcdFxcdCAgYSBjb25maWd1cmFibGUgY29tYmluYXRpb24gb2YgcGFja2V0IGtleXMgYW5kIG1hc2tzLlxcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gNTgwOlxcdFxcdCAgYmUgY2FsbGVkIGNsc19mbG93ZXIuXFxuIDU4MTpcXHRcXG4gNTgyOlxcdGNvbmZpZyBORVRfQ0xTX01BVENIQUxMXFxuIDU4MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTWF0Y2gtYWxsIGNsYXNzaWZpZXJcXFwiXFxuIDU4NDpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA1ODU6XFx0XFx0aGVscFxcbiA1ODY6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzIGJhc2VkIG9uXFxuIDU4NzpcXHRcXHQgIG5vdGhpbmcuIEV2ZXJ5IHBhY2tldCB3aWxsIG1hdGNoLlxcbiA1ODg6XFx0XFxuIDU4OTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjc6NTIuNzkyMzI4ODQxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTc0NDIyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgTmV0d29yayBDbGFzc2lmaWVyIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgbmV0d29yayBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0cmFmZmljIGNsYXNzaWZpY2F0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBORVRfQ0xTYCBzZXR0aW5nLiBJJ3ZlIGdvdCB0byBkZXRlcm1pbmUgaXRzIG1lYW5pbmcgYW5kIGltcGxpY2F0aW9uIHdpdGhpbiB0aGUgZ3JlYXRlciBjb250ZXh0IG9mIHRoZSBuZXR3b3JrIHNjaGVkdWxlciwgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgYE5FVF9TQ0hFRGAuIEVzc2VudGlhbGx5LCBgTkVUX0NMU2AgaXMgYSBjaGlsZCBvciBkZXBlbmRlbnQgaXRlbSB3aXRoaW4gdGhlIG92ZXJhbGwgYE5FVF9TQ0hFRGAgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBORVRfQ0xTYCBpcyBzZWxlY3RlZCBhbmQgaG93IGl0cyBzZXR0aW5ncyBpbmZsdWVuY2UgdGhlIG5ldHdvcmsgc2NoZWR1bGVyLiBJIHdpbGwgbm93IHJldmlldyB0aGUgcGFyZW50IGNvbmZpZyBgTkVUX1NDSEVEYCB0byBnYWluIGFuIHVuZGVyc3RhbmRpbmcgb2YgYE5FVF9DTFNgIHdpdGhpbiB0aGF0IGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NjMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI3OjU2LjE0OTc3NDExM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMjg0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBORVRfU0NIRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI3OjU2LjE5OTEwNzkxMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDk2MzgwMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIHVuZGVyc3RhbmQgaXQ6XG5cbioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgXHUwMDI2IFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBzZWVtcyBsaWtlIGBORVRfU0NIRURgIGFuZCBgTkVUX0NMU19GTE9XRVJgIGFyZSB0aGUga2V5IG9uZXMgSSBuZWVkIHRvIGNvbnNpZGVyIGluaXRpYWxseS4gQnV0IGhhbmcgb24sIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IERvZXMgYE5FVF9DTFNgIGFsc28gZmFjdG9yIGluIGhlcmU/IEl0IGxvb2tzIGxpa2UgYE5FVF9DTFNfRkxPV0VSYCBtaWdodCBpbXBsaWNpdGx5IHNlbGVjdCBgTkVUX0NMU2AsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kIGZvciBmdWxsIGNvbmZpZ3VyYWJpbGl0eS5cblxuUmlnaHQsIGxldCdzIGp1c3QgY29uZmlybSBpZiBgTkVUX1NDSEVEYCBpcyB0cnVseSBlc3NlbnRpYWwsIGFuZCB0aGVuIGRvdWJsZS1jaGVjayB0aGUgbWVudWNvbmZpZyB0byBiZSBzdXJlLiBZZXAsIGl0IGFwcGVhcnMgaXQgaXMgcGFydCBvZiB0aGF0IGNvbmZpZy4gU28sIGFnYWluLCBgTkVUX1NDSEVEYCBhbmQgYE5FVF9DTFNfRkxPV0VSYCBhcmUgdGhlIHR3byBtYWpvciBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBjb25maWd1cmVkLlxuXG5Ob3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgYGZsX3NldF9lbmNfb3B0YCBmdW5jdGlvbi4gSSB3YW50IHRvIG1ha2Ugc3VyZSBpdCdzIG5vdCBndWFyZGVkIGJ5IHNvbWUgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbiBJJ3ZlIG92ZXJsb29rZWQuIEdvdHRhIGJlIGNvbXByZWhlbnNpdmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTI5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI4OjAwLjY5NTQ5MDUyMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2Nsc19mbG93ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDk1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDk1OlxcdFxcdH1cXG4xNDk2OlxcdFxcbjE0OTc6XFx0XFx0aWYgKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRfUEZDUF9UWVBFXSlcXG4xNDk4OlxcdFxcdFxcdG1kLVxcdTAwM2V0eXBlID0gbmxhX2dldF91OCh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX1BGQ1BfVFlQRV0pO1xcbjE0OTk6XFx0XFxuMTUwMDpcXHRcXHRpZiAodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVF9QRkNQX1NFSURdKVxcbjE1MDE6XFx0XFx0XFx0bWQtXFx1MDAzZXNlaWQgPSBubGFfZ2V0X2JlNjQodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVF9QRkNQX1NFSURdKTtcXG4xNTAyOlxcdFxcbjE1MDM6XFx0XFx0cmV0dXJuIHNpemVvZigqbWQpO1xcbjE1MDQ6XFx0fVxcbjE1MDU6XFx0XFxuMTUwNjpcXHRzdGF0aWMgaW50IGZsX3NldF9lbmNfb3B0KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxuMTUwNzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBmbF9mbG93X2tleSAqbWFzayxcXG4xNTA4OlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjE1MDk6XFx0e1xcbjE1MTA6XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhX2VuY19rZXksICpubGFfb3B0X2tleSwgKm5sYV9vcHRfbXNrID0gTlVMTDtcXG4xNTExOlxcdFxcdGludCBlcnIsIG9wdGlvbl9sZW4sIGtleV9kZXB0aCwgbXNrX2RlcHRoID0gMDtcXG4xNTEyOlxcdFxcbjE1MTM6XFx0XFx0ZXJyID0gbmxhX3ZhbGlkYXRlX25lc3RlZF9kZXByZWNhdGVkKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTXSxcXG4xNTE0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfTUFYLFxcbjE1MTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBlbmNfb3B0c19wb2xpY3ksIGV4dGFjayk7XFxuMTUxNjpcXHRcXHRpZiAoZXJyKVxcbjE1MTc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNTE4OlxcdFxcbjE1MTk6XFx0XFx0bmxhX2VuY19rZXkgPSBubGFfZGF0YSh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU10pO1xcbjE1MjA6XFx0XFxuMTUyMTpcXHRcXHRpZiAodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfTUFTS10pIHtcXG4xNTIyOlxcdFxcdFxcdGVyciA9IG5sYV92YWxpZGF0ZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVNLXSxcXG4xNTIzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfTUFYLFxcbjE1MjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBlbmNfb3B0c19wb2xpY3ksIGV4dGFjayk7XFxuMTUyNTpcXHRcXHRcXHRpZiAoZXJyKVxcbjE1MjY6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNTI3OlxcdFxcbjE1Mjg6XFx0XFx0XFx0bmxhX29wdF9tc2sgPSBubGFfZGF0YSh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVNLXSk7XFxuMTUyOTpcXHRcXHRcXHRtc2tfZGVwdGggPSBubGFfbGVuKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX01BU0tdKTtcXG4xNTMwOlxcdFxcdFxcdGlmICghbmxhX29rKG5sYV9vcHRfbXNrLCBtc2tfZGVwdGgpKSB7XFxuMTUzMTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIG5lc3RlZCBhdHRyaWJ1dGUgZm9yIG1hc2tzXFxcIik7XFxuMTUzMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTMzOlxcdFxcdFxcdH1cXG4xNTM0OlxcdFxcdH1cXG4xNTM1OlxcdFxcbjE1MzY6XFx0XFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhX29wdF9rZXksIG5sYV9lbmNfa2V5LFxcbjE1Mzc6XFx0XFx0XFx0XFx0ICBubGFfbGVuKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTXSksIGtleV9kZXB0aCkge1xcbjE1Mzg6XFx0XFx0XFx0c3dpdGNoIChubGFfdHlwZShubGFfb3B0X2tleSkpIHtcXG4xNTM5OlxcdFxcdFxcdGNhc2UgVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfR0VORVZFOlxcbjE1NDA6XFx0XFx0XFx0XFx0aWYgKGtleS1cXHUwMDNlZW5jX29wdHMuZHN0X29wdF90eXBlIFxcdTAwMjZcXHUwMDI2XFxuMTU0MTpcXHRcXHRcXHRcXHQgICAga2V5LVxcdTAwM2VlbmNfb3B0cy5kc3Rfb3B0X3R5cGUgIT1cXG4xNTQyOlxcdFxcdFxcdFxcdCAgICBJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQpIHtcXG4xNTQzOlxcdFxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkR1cGxpY2F0ZSB0eXBlIGZvciBnZW5ldmUgb3B0aW9uc1xcXCIpO1xcbjE1NDQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI4OjAwLjY5NTczNTcwMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjUwNjUxMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBCdWcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGV4cGVydCBleWUgZ29lcyB0byB0aGUgZmFjdCB0aGF0IHRoaXMgZml4IGZvciBgZmxfc2V0X2VuY19vcHRgIGRvZXNuJ3Qgc2VlbSB0byBiZSBndWFyZGVkIGJ5IGFueXRoaW5nIGJlc2lkZXMgYE5FVF9DTFNfRkxPV0VSYC4gVGhhdCdzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCwgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIGFuIHVuY2hlY2tlZCBgbXNrX2RlcHRoYCBpbiB0aGUgaXRlcmF0aW9uIHVzaW5nIGBubGFfbmV4dGAgd2l0aGluIGBmbF9zZXRfZW5jX29wdGAuIFRoaXMgY291bGQgZWFzaWx5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcywgd2hpY2ggaXMgYSBiaWcgZGVhbC4gVGhlIGZpeCBpdHNlbGYgbG9va3Mgc3RyYWlnaHRmb3J3YXJkIOKAkyB3ZSdyZSBleHBsaWNpdGx5IHZhbGlkYXRpbmcgYG1za19kZXB0aGAgYmVmb3JlIGFjY2Vzc2luZyB0aGUgYG5sYV9vcHRfbXNrYCBkYXRhOlxuXG5gYGBjXG5cdFx0bmxhX29wdF9tc2sgPSBubGFfbmV4dChubGFfb3B0X21zaywgXHUwMDI2bXNrX2RlcHRoKTtcblxuXHRcdGlmIChtc2tfZGVwdGggXHUwMDI2XHUwMDI2ICFubGFfb2sobmxhX29wdF9tc2ssIG1za19kZXB0aCkpIHtcblx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJBIG1hc2sgYXR0cmlidXRlIGlzIGludmFsaWRcIik7XG5cdFx0XHRyZXR1cm4gLUVJTlZBTDtcblx0XHR9XG5gYGBcblxuVGhpcyBwcmV2ZW50cyBpbnZhbGlkIHBhcnNpbmcgYW5kIHBvdGVudGlhbGx5IGNyYXNoZXMuIEZ1bmN0aW9uYWxseSwgaXQncyBhIHByZXR0eSBjbGVhbiBmaXgsIGJ1dCBsZXQncyBzZWUgaG93IGl0J3MgdHJpZ2dlcmVkLiBJdCdzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRjIG5ldGxpbmssIHdoaWNoIG1lYW5zIHRoaXMgY291bGQgYmUgZXhwbG9pdGVkLiBJIG5lZWQgdG8ga25vdyB0aGUgZW50cnkgcG9pbnRzLlxuXG5UaGUgZm9jdXMgc3ltYm9scywgYmFzZWQgb24gdGhlIGNvZGUncyBjYWxsIGdyYXBoLCBhcmUgYGZsX2NoYW5nZWAgYW5kIGBmbF90bXBsdF9jcmVhdGVgLiBBbmQgdGhlIGNvbmZpZ3MgSSdtIGludGVyZXN0ZWQgaW4gYXJlIGBORVRfU0NIRURgIGFuZCBgTkVUX0NMU19GTE9XRVJgLlxuXG5Ob3csIGxldCdzIHZlcmlmeSBpZiBgZmxfc2V0X2VuY19vcHRgIGlzIHN0YXRpYywgYmVjYXVzZSB0aGF0IGhlbHBzIG5hcnJvdyBkb3duIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBZZXAsIGl0IGlzLiBUaGF0IG1lYW5zIHRoZSBmdW5jdGlvbnMgY2FsbGluZyBpdCBkaXJlY3RseSBhcmUgdGhlIGltcG9ydGFudCBvbmVzIHRvIHVuZGVyc3RhbmQuIFNvIGBmbF9jaGFuZ2VgIGFuZCBgZmxfdG1wbHRfY3JlYXRlYCBzZWVtIHRvIGJlIHRoZSBjb3JyZWN0IHN5bWJvbHMgdG8gZm9jdXMgb24uXG5cbkxldCdzIGNoZWNrIGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zIGNhbGxpbmcgYGZsX3NldF9lbmNfb3B0YC4gYGZsX3NldF9rZXlgIGNhbGxzIGl0LiBIbW0sIGBmbF9zZXRfa2V5YCBpcyBhbHNvIHN0YXRpYy4gQW5kIGBmbF9jaGFuZ2VgIGFuZCBgZmxfdG1wbHRfY3JlYXRlYCBib3RoIGNhbGwgYGZsX3NldF9rZXlgLiBPa2F5LCBzbyBgZmxfY2hhbmdlYCBhbmQgYGZsX3RtcGx0X2NyZWF0ZWAgYXJlIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cywgYXMgZXhwZWN0ZWQuIFdhaXQuLi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIElzIGBmbF9jaGFuZ2VgIHN0YXRpYz8gWWVzLCBpdCBpcy4gU28gdGhlIG9ubHkgZW50cnkgcG9pbnRzIGFyZSB0aHJvdWdoIGBjbHNfZmxfb3BzYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyODoxMC4zNDYzODkzNTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTA1Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsX2NoYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvY2xzX2Zsb3dlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MjMzNj1zdGF0aWMgaW50IGZsX2h0X2luc2VydF91bmlxdWUoc3RydWN0IGNsc19mbF9maWx0ZXIgKmZuZXcsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIzNTctXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMzU4OnN0YXRpYyBpbnQgZmxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIzNTktXFx0XFx0ICAgICBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0zODMzPXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfZmxfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4MzktXFx0LnB1dFxcdFxcdD0gZmxfcHV0LFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6Mzg0MDpcXHQuY2hhbmdlXFx0XFx0PSBmbF9jaGFuZ2UsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODQxLVxcdC5kZWxldGVcXHRcXHQ9IGZsX2RlbGV0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjg6MTAuMzk3MzA1MTk0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0ODE2MDcxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTeW1ib2wgVmlzaWJpbGl0eSBmb3IgRmlsdGVyaW5nIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSBiZXN0IHN5bWJvbCB0byBmb2N1cyBvbi4gSSBzZWUgYGZsX2NoYW5nZWAg4oCTIGl0J3Mgc3RhdGljLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0J3MgaW50ZXJuYWwuIEJ1dCB3YWl0IGEgbWludXRl4oCmIGl0J3MgdGhlIGNhbGxiYWNrIGZvciB0aGUgYC5jaGFuZ2VgIG9wZXJhdGlvbiEgVGhhdCdzIGEga2V5IGRldGFpbC4gSSB3YXMgaW5pdGlhbGx5IHdvbmRlcmluZyBpZiB0aGVyZSB3YXMgYSBub24tc3RhdGljIGFsdGVybmF0aXZlLCBidXQgYGZsX2NoYW5nZWAgaXMgdXNlZCBpbiB0aGUgYGNsc19mbF9vcHNgIHN0cnVjdHVyZSB3aGljaCBpcyB0aGVuIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl90Y2ZfcHJvdG9fb3BzKFx1MDAyNmNsc19mbF9vcHMpYC5cblxuRnJvbSB3aGF0IEkgY2FuIHRlbGwgZnJvbSBteSB1bmRlcnN0YW5kaW5nIG9mIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCwgdGhlIGFjdHVhbCBlbnRyeSBwb2ludCBpcyBgdGNfbmV3X3RmaWx0ZXJgLCB3aGljaCB0aGVuIGNhbGxzIGB0cC1cdTAwM2VvcHMtXHUwMDNlY2hhbmdlKClgLiBTbywgZXZlbiB0aG91Z2ggYGZsX2NoYW5nZWAgaXMgc3RhdGljLCBpdCdzICp0aGUqIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQncyBiZWluZyB1c2VkIGFuZCBpdHMgYWRkcmVzcyBpcyB0YWtlbi4gVGhhdCBtYWtlcyBpdCBhIHN0cm9uZyBjb250ZW5kZXIsIGV2ZW4gZGVzcGl0ZSB0aGUgJ3N0YXRpYycgZGVzaWduYXRpb24uXG5cblJpZ2h0LCBsZXQgbWUgcmV2aXNpdCB0aGUgb3JpZ2luYWwgcHJvbXB0OiBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1wiLiAqQWghKiBTaW5jZSBgZmxfY2hhbmdlYCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0ICpjYW5ub3QqIGJlIGZ1bGx5IGlubGluZWQuIFRoZSBjb21waWxlciBoYXMgdG8gcHJlc2VydmUgaXRzIGFkZHJlc3MuIFNvLCBldmVuIHRob3VnaCBpdCdzIGRlY2xhcmVkIHdpdGggYHN0YXRpY2AsIGl0ICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MgYmVjYXVzZSBpdCdzIGJlaW5nIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIuIE1ha2VzIHNlbnNlLiBPa2F5LCB0aGVuLCBjb25zaWRlcmluZyB0aGlzLCB0aGF0IG1lYW5zIHRoYXQgYGZsX3RtcGx0X2NyZWF0ZWAgd2lsbCBhbHNvIGJlIGluIHRoZSBzYW1lIGJvYXQ7IGl0IGFsc28gaGFzIGEgZnVuY3Rpb24gcG9pbnRlciBhbmQgd2lsbCBub3QgYmUgaW5saW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjg6MTguODc4OTE1Mjg5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTgyMzA3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmxfdG1wbHRfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfZmxvd2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0yNzk0PXN0YXRpYyB2b2lkIGZsX2h3X2Rlc3Ryb3lfdG1wbHQoc3RydWN0IHRjZl9jaGFpbiAqY2hhaW4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI4MDYtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyODA3OnN0YXRpYyB2b2lkICpmbF90bXBsdF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2NoYWluICpjaGFpbixcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI4MDgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmxhdHRyICoqdGNhLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0zODMzPXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfZmxfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4NDktXFx0LmJpbmRfY2xhc3NcXHQ9IGZsX2JpbmRfY2xhc3MsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzozODUwOlxcdC50bXBsdF9jcmVhdGVcXHQ9IGZsX3RtcGx0X2NyZWF0ZSxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4NTEtXFx0LnRtcGx0X2Rlc3Ryb3lcXHQ9IGZsX3RtcGx0X2Rlc3Ryb3ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI4OjE5LjI5NzE1MTQ2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MjkyNzcyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIEZsb3dlciBDbGFzc2lmaWVyIFBhdGNoKipcblxuT2theSwgc28gYm90aCBgZmxfY2hhbmdlYCBhbmQgYGZsX3RtcGx0X2NyZWF0ZWAgYXJlIGluZGVlZCBjYWxsYmFja3MsIHRoYXQgbXVjaCBpcyBjbGVhci4gSSdsbCBtZW50YWxseSB0YWcgdGhlbSBhcyB0aGUgY2VudHJhbCBmb2N1cyBwb2ludHMsIHRoZSAnZm9jdXMgc3ltYm9scycgaW4gdGhpcyBzaXR1YXRpb24uXG5cblJpZ2h0LCBsZXQncyBzZWUuLi4gdGhlIHBhdGNoIGlzIGFsbCBhYm91dCBmaXhpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIHNvbWUga2luZCBvZiBwcm9ibGVtYXRpYyBhdHRyaWJ1dGUgcGFyc2luZyBpc3N1ZSB3aXRoaW4gYGZsX3NldF9lbmNfb3B0YC4gVGhpcyBoYXBwZW5zIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiBuZXN0ZWQgbmV0bGluayBhdHRyaWJ1dGVzLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byBmbG93ZXIgY2xhc3NpZmllciBlbmNhcHN1bGF0aW9uIG9wdGlvbnMuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNydWNpYWwgY2hlY2sgdG8gdmFsaWRhdGUgYG1za19kZXB0aGAgYmVmb3JlIHRoZSBwcm9jZXNzIGNvbnRpbnVlcy4gVGhpcyB3aWxsIHByZXZlbnQgYSBsb3Qgb2YgcHJvYmxlbXMgaW4gdGhlIGZ1dHVyZS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB0b3VjaGluZyB0aGUgY29yZSBwYWNrZXQgY2xhc3NpZmljYXRpb24gbG9naWMsIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRjIG5ldGxpbmssIHNvIHdlIHdpbGwgY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MzcsIk91dHB1dFRva2VucyI6MTMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI4OjI0LjAyNjQzMTM1MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTgzMTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9DTFNfRkxPV0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmxfY2hhbmdlXCIsXG4gICAgXCJmbF90bXBsdF9jcmVhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3IgaW52YWxpZCBhdHRyaWJ1dGUgcGFyc2luZyBpbiBgZmxfc2V0X2VuY19vcHRgIHdoZW4gcGFyc2luZyBuZXN0ZWQgbmV0bGluayBhdHRyaWJ1dGVzIGZvciBmbG93ZXIgY2xhc3NpZmllciBlbmNhcHN1bGF0aW9uIG9wdGlvbnMuIEl0IGFkZHMgYSBjaGVjayB0byBlbnN1cmUgYG1za19kZXB0aGAgaXMgdmFsaWQgYmVmb3JlIGNvbnRpbnVpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBwYWNrZXQgY2xhc3NpZmljYXRpb24gbG9naWMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0YyBuZXRsaW5rLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19GTE9XRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmbF9jaGFuZ2VcIixcbiAgICBcImZsX3RtcGx0X2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciBpbnZhbGlkIGF0dHJpYnV0ZSBwYXJzaW5nIGluIGBmbF9zZXRfZW5jX29wdGAgd2hlbiBwYXJzaW5nIG5lc3RlZCBuZXRsaW5rIGF0dHJpYnV0ZXMgZm9yIGZsb3dlciBjbGFzc2lmaWVyIGVuY2Fwc3VsYXRpb24gb3B0aW9ucy4gSXQgYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSBgbXNrX2RlcHRoYCBpcyB2YWxpZCBiZWZvcmUgY29udGludWluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHBhY2tldCBjbGFzc2lmaWNhdGlvbiBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRjIG5ldGxpbmsuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI4OjI0LjEwMzQyMDMwOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzMTU5NTc2MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyODoyNC4xMDM5Mjc0MThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDIzMTU0NDYwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGJvdW5kcyBjaGVjayAoYG5sYV9va2ApIGZvciBuZXRsaW5rIGF0dHJpYnV0ZXMgYWZ0ZXIgYWR2YW5jaW5nIHRoZSBhdHRyaWJ1dGUgcG9pbnRlciB3aXRoIGBubGFfbmV4dGAuIFdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIGNvZGUgY291bGQgcmVhZCBvdXQtb2YtYm91bmRzIG1lbW9yeSB3aGVuIGFjY2Vzc2luZyB0aGUgbmV4dCBhdHRyaWJ1dGUncyBoZWFkZXIgb3IgZGF0YS4gT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFkMTg4Yzk4OTA2YTlhM2Y1YWExMzVmNmMwNDhmNjAzNmRkYTgwMmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwMzoyNzoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXG5pbmRleCAwZTI3NWI1ODE1MWM0Li4xY2VmZWE1NzFlZmQ3IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19mbG93ZXIuY1xuQEAgLTE3MDMsNiArMTcwMywxMSBAQCBzdGF0aWMgaW50IGZsX3NldF9lbmNfb3B0KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdFx0bmxhX29wdF9tc2sgPSBubGFfbmV4dChubGFfb3B0X21zaywgXHUwMDI2bXNrX2RlcHRoKTtcbitcbitcdFx0aWYgKG1za19kZXB0aCBcdTAwMjZcdTAwMjYgIW5sYV9vayhubGFfb3B0X21zaywgbXNrX2RlcHRoKSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJBIG1hc2sgYXR0cmlidXRlIGlzIGludmFsaWRcIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjg6MjQuMTAzOTI4MjI4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzY1NjAyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBSZWNlbnQgRmxvd2VyIENsYXNzaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBuZXQvc2NoZWQvY2xzX2Zsb3dlci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIGluIGBmbF9zZXRfZW5jX29wdGAuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdGhleSd2ZSBhZGRlZCBhIGJvdW5kcyBjaGVjay4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIHVzaW5nIGBubGFfb2soKWAgdG8gdmFsaWRhdGUgdGhlIGBubGFfb3B0X21za2AgbmV0bGluayBhdHRyaWJ1dGUgYmVmb3JlIGFjY2Vzc2luZyBpdC4gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBiZWNhdXNlLCB3aXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIGNvdWxkIHBvdGVudGlhbGx5IHJlYWQgbWVtb3J5IG91dHNpZGUgb2YgdGhlIGFsbG9jYXRlZCBib3VuZHMsIGEgY2xhc3NpYyBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LiBUaGUgY29kZSBub3cgY2hlY2tzIGlmIGBtc2tfZGVwdGhgIGlzIHZhbGlkLCBhbmQgaWYgbm90LCBpdCB0aHJvd3MgYW4gYC1FSU5WQUxgIGVycm9yIHZpYSBgTkxfU0VUX0VSUl9NU0dgLlxuXG5UaGUgdXNlIG9mIGBubGFfb2tgIGlzIGEgc29saWQgZGVmZW5zZSBhZ2FpbnN0IG91dC1vZi1ib3VuZHMgcmVhZHMgZHVyaW5nIHRoZSBwcm9jZXNzaW5nIG9mIE5ldGxpbmsgYXR0cmlidXRlcywgYSBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBhcHByb2FjaC4gQSByb2d1ZSBOZXRsaW5rIG1lc3NhZ2UgY3JhZnRlZCB3aXRoIGEgZ2FyYmFnZSBsZW5ndGggY291bGQgY2F1c2UgYSBjcmFzaCBvciBldmVuIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3MuIFRoYW5rZnVsbHksIEtBU0FOIHdvdWxkIGxpa2VseSBjYXRjaCB0aGF0LCBidXQgcHJldmVudGluZyB0aGUgaXNzdWUgZW50aXJlbHkgaXMgYWx3YXlzIHByZWZlcmFibGUsIHNvIEkgYXBwcmVjaWF0ZSBzZWVpbmcgdGhpcyB0eXBlIG9mIHByb2FjdGl2ZSBtZWFzdXJlLlxuXG5Ob3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLi4uIGRvZXMgdGhpcyBwYXRjaCwgaW4gaXRzIGltcGxlbWVudGF0aW9uLCBpbnRyb2R1Y2UgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeT8gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgYGZsX3NldF9lbmNfb3B0YCBpdHNlbGYgdG8gYmUgc3VyZS4gSSdtIHNhdGlzZmllZCBzbyBmYXIsIHRob3VnaCwgdGhhdCB0aGlzIHBhdGNoIGlzIGEgZGVmaW5pdGUgcG9zaXRpdmUgaW4gdGVybXMgb2YgaGFyZGVuaW5nIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjg6MjkuNTgwNDkyNzQ1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODcxMTE3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbF9zZXRfZW5jX29wdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvY2xzX2Zsb3dlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MTQ2OD1zdGF0aWMgaW50IGZsX3NldF9wZmNwX29wdChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBmbF9mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNTA1LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTUwNjpzdGF0aWMgaW50IGZsX3NldF9lbmNfb3B0KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNTA3LVxcdFxcdFxcdCAgc3RydWN0IGZsX2Zsb3dfa2V5ICptYXNrLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0xODcxPXN0YXRpYyBpbnQgZmxfc2V0X2tleShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRjYV9vcHRzLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDk1LVxcdGlmICh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU10pIHtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwOTY6XFx0XFx0cmV0ID0gZmxfc2V0X2VuY19vcHQodGIsIGtleSwgbWFzaywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwOTctXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjg6MjkuNjI5MjEwNTQzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMjk0MDU0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBmbF9zZXRfZW5jX29wdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gVGltZSB0byB1bmRlcnN0YW5kIGBmbF9zZXRfZW5jX29wdGAuIEkgbmVlZCB0byBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4gSXMgaXQgc2V0dGluZyBlbmNvZGluZyBvcHRpb25zIGZvciB0aGUgZmlsZSwgcGVyaGFwcz8gTWF5YmUgaXQncyBhZGp1c3RpbmcgY29tcHJlc3Npb24gcGFyYW1ldGVycz8gV2hhdGV2ZXIgaXQncyBkb2luZywgaXQncyBjbGVhcmx5IGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLCBzbyBJJ20gZ29pbmcgdG8gZGlnIGluIGFuZCBicmVhayBpdCBkb3duLiBHb3R0YSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzeXN0ZW0ncyBiZWhhdmlvci4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjg6MzUuOTU4NjM0OTIzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX2Zsb3dlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2ODA6XFx0XFx0XFx0XFx0bWFzay1cXHUwMDNlZW5jX29wdHMuZHN0X29wdF90eXBlID0gSVBfVFVOTkVMX1BGQ1BfT1BUX0JJVDtcXG4xNjgxOlxcdFxcdFxcdFxcdG9wdGlvbl9sZW4gPSBmbF9zZXRfcGZjcF9vcHQobmxhX29wdF9tc2ssIG1hc2ssXFxuMTY4MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG1za19kZXB0aCwgb3B0aW9uX2xlbixcXG4xNjgzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXh0YWNrKTtcXG4xNjg0OlxcdFxcdFxcdFxcdGlmIChvcHRpb25fbGVuIFxcdTAwM2MgMClcXG4xNjg1OlxcdFxcdFxcdFxcdFxcdHJldHVybiBvcHRpb25fbGVuO1xcbjE2ODY6XFx0XFxuMTY4NzpcXHRcXHRcXHRcXHRtYXNrLVxcdTAwM2VlbmNfb3B0cy5sZW4gKz0gb3B0aW9uX2xlbjtcXG4xNjg4OlxcdFxcdFxcdFxcdGlmIChrZXktXFx1MDAzZWVuY19vcHRzLmxlbiAhPSBtYXNrLVxcdTAwM2VlbmNfb3B0cy5sZW4pIHtcXG4xNjg5OlxcdFxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJLZXkgYW5kIG1hc2sgbWlzcyBhbGlnbmVkXFxcIik7XFxuMTY5MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjkxOlxcdFxcdFxcdFxcdH1cXG4xNjkyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE2OTM6XFx0XFx0XFx0ZGVmYXVsdDpcXG4xNjk0OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlVua25vd24gdHVubmVsIG9wdGlvbiB0eXBlXFxcIik7XFxuMTY5NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjk2OlxcdFxcdFxcdH1cXG4xNjk3OlxcdFxcbjE2OTg6XFx0XFx0XFx0aWYgKCFtc2tfZGVwdGgpXFxuMTY5OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xNzAwOlxcdFxcbjE3MDE6XFx0XFx0XFx0aWYgKCFubGFfb2sobmxhX29wdF9tc2ssIG1za19kZXB0aCkpIHtcXG4xNzAyOlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkEgbWFzayBhdHRyaWJ1dGUgaXMgaW52YWxpZFxcXCIpO1xcbjE3MDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTcwNDpcXHRcXHRcXHR9XFxuMTcwNTpcXHRcXHRcXHRubGFfb3B0X21zayA9IG5sYV9uZXh0KG5sYV9vcHRfbXNrLCBcXHUwMDI2bXNrX2RlcHRoKTtcXG4xNzA2OlxcdFxcbjE3MDc6XFx0XFx0XFx0aWYgKG1za19kZXB0aCBcXHUwMDI2XFx1MDAyNiAhbmxhX29rKG5sYV9vcHRfbXNrLCBtc2tfZGVwdGgpKSB7XFxuMTcwODpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJBIG1hc2sgYXR0cmlidXRlIGlzIGludmFsaWRcXFwiKTtcXG4xNzA5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3MTA6XFx0XFx0XFx0fVxcbjE3MTE6XFx0XFx0fVxcbjE3MTI6XFx0XFxuMTcxMzpcXHRcXHRyZXR1cm4gMDtcXG4xNzE0OlxcdH1cXG4xNzE1OlxcdFxcbjE3MTY6XFx0c3RhdGljIGludCBmbF92YWxpZGF0ZV9jdF9zdGF0ZSh1MTYgc3RhdGUsIHN0cnVjdCBubGF0dHIgKnRiLFxcbjE3MTc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjE3MTg6XFx0e1xcbjE3MTk6XFx0XFx0aWYgKHN0YXRlIFxcdTAwMjZcXHUwMDI2ICEoc3RhdGUgXFx1MDAyNiBUQ0FfRkxPV0VSX0tFWV9DVF9GTEFHU19UUkFDS0VEKSkge1xcbjE3MjA6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihleHRhY2ssIHRiLFxcbjE3MjE6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJubyB0cmssIHNvIG5vIG90aGVyIGZsYWcgY2FuIGJlIHNldFxcXCIpO1xcbjE3MjI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTcyMzpcXHRcXHR9XFxuMTcyNDpcXHRcXG4xNzI1OlxcdFxcdGlmIChzdGF0ZSBcXHUwMDI2IFRDQV9GTE9XRVJfS0VZX0NUX0ZMQUdTX05FVyBcXHUwMDI2XFx1MDAyNlxcbjE3MjY6XFx0XFx0ICAgIHN0YXRlIFxcdTAwMjYgVENBX0ZMT1dFUl9LRVlfQ1RfRkxBR1NfRVNUQUJMSVNIRUQpIHtcXG4xNzI3OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCB0YixcXG4xNzI4OlxcdFxcdFxcdFxcdFxcdCAgICBcXFwibmV3IGFuZCBlc3QgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZVxcXCIpO1xcbjE3Mjk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI4OjM1Ljk1ODkyNDY4M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDg2MjYwMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBPdXQtb2YtQm91bmRzIEFjY2VzcyBpbiBOZXRsaW5rIEF0dHJpYnV0ZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBjaGVjayBmb3IgYG5sYV9va2AgYWZ0ZXIgYSBjYWxsIHRvIGBubGFfbmV4dGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgZGVzaWduZWQgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGUgcmVhc29uaW5nIHNlZW1zIHRvIGJlIHRoYXQgYWZ0ZXIgYG5sYV9uZXh0YCB1cGRhdGVzIHRoZSBwb2ludGVyLCB0aGUgcmVtYWluaW5nIGxlbmd0aCBgbXNrX2RlcHRoYCBtaWdodCBzdGlsbCBiZSBwb3NpdGl2ZSwgYnV0IHRoZSBuZXcgYG5sYV9vcHRfbXNrYCB3b3VsZG4ndCBiZSBjb21wbGV0ZWx5IHdpdGhpbiB0aGUgYnVmZmVyJ3MgYm91bmRhcmllcy4gSSBpbW1lZGlhdGVseSBoYXZlIGEgcXVlc3Rpb246IGRvZXNuJ3QgYG5sYV9uZXh0YCAqaXRzZWxmKiB1cGRhdGUgYm90aCB0aGUgcG9pbnRlciBhbmQgdGhlIHJlbWFpbmluZyBsZW5ndGg/IElmIGBtc2tfZGVwdGhgIGlzIHBvc2l0aXZlLCB0aGUgbG9vcCBzaG91bGQgY29udGludWUsIGFuZCBpbiB0aGUgbmV4dCBpdGVyYXRpb24sIHdlJ2xsIGFjY2VzcyBgbmxhX29wdF9tc2tgLiBTbywgd2hlcmUgaXMgdGhlIHZ1bG5lcmFiaWxpdHk/XG5cbldhaXQsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIGhvdyB0aGlzIHdob2xlIHRoaW5nIGlzIHN0cnVjdHVyZWQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoZSBvdXRlciBsb29wIGlzIGFjdHVhbGx5IGEgYG5sYV9mb3JfZWFjaF9uZXN0ZWRgIGxvb3AuIE9rLCB5ZXMsIHRoYXQncyByaWdodC4gYG5sYV9mb3JfZWFjaF9uZXN0ZWQobmxhX29wdF9rZXksIG5sYV9vcHRfa2V5X3RiLCBrZXlfZGVwdGgpYC5cblxuQWxyaWdodCwgSSBzaG91bGQgcHJvYmFibHkgcmUtcmVhZCB0aGUgc3RhcnQgb2YgdGhhdCBsb29wIHRvIHNlZSBob3cgdGhpcyB3b3Jrcy4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIHRoZSBwcm9jZXNzIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGVkZ2UgY2FzZSBiZWluZyBhZGRyZXNzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyODo0MS40NDUxODdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9jbHNfZmxvd2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUwMDpcXHRcXHRpZiAodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVF9QRkNQX1NFSURdKVxcbjE1MDE6XFx0XFx0XFx0bWQtXFx1MDAzZXNlaWQgPSBubGFfZ2V0X2JlNjQodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVF9QRkNQX1NFSURdKTtcXG4xNTAyOlxcdFxcbjE1MDM6XFx0XFx0cmV0dXJuIHNpemVvZigqbWQpO1xcbjE1MDQ6XFx0fVxcbjE1MDU6XFx0XFxuMTUwNjpcXHRzdGF0aWMgaW50IGZsX3NldF9lbmNfb3B0KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxuMTUwNzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBmbF9mbG93X2tleSAqbWFzayxcXG4xNTA4OlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjE1MDk6XFx0e1xcbjE1MTA6XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhX2VuY19rZXksICpubGFfb3B0X2tleSwgKm5sYV9vcHRfbXNrID0gTlVMTDtcXG4xNTExOlxcdFxcdGludCBlcnIsIG9wdGlvbl9sZW4sIGtleV9kZXB0aCwgbXNrX2RlcHRoID0gMDtcXG4xNTEyOlxcdFxcbjE1MTM6XFx0XFx0ZXJyID0gbmxhX3ZhbGlkYXRlX25lc3RlZF9kZXByZWNhdGVkKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTXSxcXG4xNTE0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfTUFYLFxcbjE1MTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBlbmNfb3B0c19wb2xpY3ksIGV4dGFjayk7XFxuMTUxNjpcXHRcXHRpZiAoZXJyKVxcbjE1MTc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNTE4OlxcdFxcbjE1MTk6XFx0XFx0bmxhX2VuY19rZXkgPSBubGFfZGF0YSh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU10pO1xcbjE1MjA6XFx0XFxuMTUyMTpcXHRcXHRpZiAodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfTUFTS10pIHtcXG4xNTIyOlxcdFxcdFxcdGVyciA9IG5sYV92YWxpZGF0ZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVNLXSxcXG4xNTIzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfTUFYLFxcbjE1MjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBlbmNfb3B0c19wb2xpY3ksIGV4dGFjayk7XFxuMTUyNTpcXHRcXHRcXHRpZiAoZXJyKVxcbjE1MjY6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNTI3OlxcdFxcbjE1Mjg6XFx0XFx0XFx0bmxhX29wdF9tc2sgPSBubGFfZGF0YSh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVNLXSk7XFxuMTUyOTpcXHRcXHRcXHRtc2tfZGVwdGggPSBubGFfbGVuKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX01BU0tdKTtcXG4xNTMwOlxcdFxcdFxcdGlmICghbmxhX29rKG5sYV9vcHRfbXNrLCBtc2tfZGVwdGgpKSB7XFxuMTUzMTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIG5lc3RlZCBhdHRyaWJ1dGUgZm9yIG1hc2tzXFxcIik7XFxuMTUzMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTMzOlxcdFxcdFxcdH1cXG4xNTM0OlxcdFxcdH1cXG4xNTM1OlxcdFxcbjE1MzY6XFx0XFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhX29wdF9rZXksIG5sYV9lbmNfa2V5LFxcbjE1Mzc6XFx0XFx0XFx0XFx0ICBubGFfbGVuKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTXSksIGtleV9kZXB0aCkge1xcbjE1Mzg6XFx0XFx0XFx0c3dpdGNoIChubGFfdHlwZShubGFfb3B0X2tleSkpIHtcXG4xNTM5OlxcdFxcdFxcdGNhc2UgVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfR0VORVZFOlxcbjE1NDA6XFx0XFx0XFx0XFx0aWYgKGtleS1cXHUwMDNlZW5jX29wdHMuZHN0X29wdF90eXBlIFxcdTAwMjZcXHUwMDI2XFxuMTU0MTpcXHRcXHRcXHRcXHQgICAga2V5LVxcdTAwM2VlbmNfb3B0cy5kc3Rfb3B0X3R5cGUgIT1cXG4xNTQyOlxcdFxcdFxcdFxcdCAgICBJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQpIHtcXG4xNTQzOlxcdFxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkR1cGxpY2F0ZSB0eXBlIGZvciBnZW5ldmUgb3B0aW9uc1xcXCIpO1xcbjE1NDQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTU0NTpcXHRcXHRcXHRcXHR9XFxuMTU0NjpcXHRcXHRcXHRcXHRvcHRpb25fbGVuID0gMDtcXG4xNTQ3OlxcdFxcdFxcdFxcdGtleS1cXHUwMDNlZW5jX29wdHMuZHN0X29wdF90eXBlID0gSVBfVFVOTkVMX0dFTkVWRV9PUFRfQklUO1xcbjE1NDg6XFx0XFx0XFx0XFx0b3B0aW9uX2xlbiA9IGZsX3NldF9nZW5ldmVfb3B0KG5sYV9vcHRfa2V5LCBrZXksXFxuMTU0OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAga2V5X2RlcHRoLCBvcHRpb25fbGVuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyODo0MS40NDU0MzA1M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTM0MzgyOTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXR0cmlidXRlIFByb2Nlc3NpbmcgTG9vcCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhlIGBubGFfZm9yX2VhY2hfYXR0cmAgbG9vcC4gVGhhdCdzIG91ciBzdGFydGluZyBwb2ludCwgaXRlcmF0aW5nIHRocm91Z2ggYXR0cmlidXRlcyB1c2luZyBgbmxhX29wdF9rZXlgLiBJdCB0aGVuIHByb2NlZWRzIHRvIHByb2Nlc3MgYG5sYV9vcHRfbXNrYCBpZiBgbXNrX2RlcHRoYCBpcyBhbnl0aGluZyBvdGhlciB0aGFuIHplcm8uXG5cbkFoLCBJIHNlZS4uLiBhZnRlciB0aGUgbWFpbiBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgbG9vcCwgdGhlcmUncyBhIGNvbmRpdGlvbmFsIGJsb2NrLiBJZiBgbXNrX2RlcHRoYCBpcyB6ZXJvLCB3ZSBgY29udGludWVgIOKAkyBtYWtlcyBzZW5zZSwgc2tpcCB0aGUgbWFzayBwcm9jZXNzaW5nLiBCdXQgaWYgaXQncyBub3QgemVybywgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdlIGhhdmUgdGhpcyBgbmxhX29rYCBjaGVjaywgZ29vZCwgZW5zdXJpbmcgdGhlIG1hc2sgYXR0cmlidXRlIGlzIHZhbGlkLiBUaGVuLCBgbmxhX25leHRgIGFkdmFuY2VzIGBubGFfb3B0X21za2AgYW5kIHVwZGF0ZXMgdGhlIGRlcHRoLiAgXG5cbkhhbmcgb24uLi4gdGhlICpwYXRjaCogc3BlY2lmaWNhbGx5IGFkZHMgYSAqc2Vjb25kKiBgbmxhX29rYCBjaGVjayBhZnRlciB0aGUgY2FsbCB0byBgbmxhX25leHRgLiBUaGF0J3MgdGhlIGtleSBhZGRpdGlvbi4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCBhZnRlciB0aGUgZmlyc3QgY2FsbCB0byBgbmxhX29rYCB0byBtYWtlIHN1cmUgd2UncmUgb24gYSB2YWxpZCBhdHRyaWJ1dGUsIHdlICphZHZhbmNlKiB0aGUgcG9pbnRlciB1c2luZyBgbmxhX25leHRgIGFuZCBjaGVjayB0aGUgKm5leHQqIGF0dHJpYnV0ZS4gVGhpcyBtZWFucyBpbiB0aGUgc3Vic2VxdWVudCBpdGVyYXRpb24gb2YgdGhlIGxvb3AsIHRoZSBjb2RlIHdpbGwgYmUgd29ya2luZyB3aXRoIHRoZSAqbmV4dCogbWFzayBhdHRyaWJ1dGUuXG5cblNvLCBgbmxhX25leHRgIG1vdmVzIHRoZSBwb2ludGVyIGFuZCB1cGRhdGVzIHRoZSByZW1haW5pbmcgbGVuZ3RoIChgbXNrX2RlcHRoYCkuIFRoZW4sIGluIHRoZSAqbmV4dCogaXRlcmF0aW9uIG9mIHRoZSBtYWluIGxvb3AsIGl0J2xsIHBhc3MgdGhpcyB1cGRhdGVkIGBubGFfb3B0X21za2AgdG8gZnVuY3Rpb25zIGxpa2UgYGZsX3NldF9nZW5ldmVfb3B0YCwgYGZsX3NldF92eGxhbl9vcHRgLCBgZmxfc2V0X2Vyc3Bhbl9vcHRgLCBvciBgZmxfc2V0X3BmY3Bfb3B0YC4gIEkgbmVlZCB0byBjaGVjayB3aGF0IHRob3NlIGZ1bmN0aW9ucyBkby4gTGV0J3Mgc3RhcnQgd2l0aCB3aGF0IGBmbF9zZXRfZ2VuZXZlX29wdGAgZG9lcywgYW5kIHdoYXQgaXQgZXhwZWN0cyBmb3IgdGhlIGF0dHJpYnV0ZS4gVGhhdCdsbCB0ZWxsIG1lIGlmIHRoaXMgYWRkaXRpb24gb2YgdGhlIHNlY29uZCBgbmxhX29rYCBjYWxsIHJlYWxseSBtYWtlcyBzZW5zZSwgb3IgaWYgaXQgaGFzIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQwMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI4OjQ5LjU3OTgxNjg3NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDcyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2Nsc19mbG93ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzMwOlxcdFxcdG1kID0gKHN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqKVxcdTAwMjZrZXktXFx1MDAzZWVuY19vcHRzLmRhdGFba2V5LVxcdTAwM2VlbmNfb3B0cy5sZW5dO1xcbjEzMzE6XFx0XFx0bWVtc2V0KG1kLCAweGZmLCBzaXplb2YoKm1kKSk7XFxuMTMzMjpcXHRcXG4xMzMzOlxcdFxcdGlmICghZGVwdGgpXFxuMTMzNDpcXHRcXHRcXHRyZXR1cm4gc2l6ZW9mKCptZCk7XFxuMTMzNTpcXHRcXG4xMzM2OlxcdFxcdGlmIChubGFfdHlwZShubGEpICE9IFRDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX1ZYTEFOKSB7XFxuMTMzNzpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJOb24tdnhsYW4gb3B0aW9uIHR5cGUgZm9yIG1hc2tcXFwiKTtcXG4xMzM4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEzMzk6XFx0XFx0fVxcbjEzNDA6XFx0XFxuMTM0MTpcXHRcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX1ZYTEFOX01BWCwgbmxhLFxcbjEzNDI6XFx0XFx0XFx0XFx0ICAgICAgIHZ4bGFuX29wdF9wb2xpY3ksIGV4dGFjayk7XFxuMTM0MzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMzQ0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTM0NTpcXHRcXG4xMzQ2OlxcdFxcdGlmICghb3B0aW9uX2xlbiBcXHUwMDI2XFx1MDAyNiAhdGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVF9WWExBTl9HQlBdKSB7XFxuMTM0NzpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJNaXNzaW5nIHR1bm5lbCBrZXkgdnhsYW4gb3B0aW9uIGdicFxcXCIpO1xcbjEzNDg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTM0OTpcXHRcXHR9XFxuMTM1MDpcXHRcXG4xMzUxOlxcdFxcdGlmICh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX1ZYTEFOX0dCUF0pIHtcXG4xMzUyOlxcdFxcdFxcdG1kLVxcdTAwM2VnYnAgPSBubGFfZ2V0X3UzMih0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX1ZYTEFOX0dCUF0pO1xcbjEzNTM6XFx0XFx0XFx0bWQtXFx1MDAzZWdicCBcXHUwMDI2PSBWWExBTl9HQlBfTUFTSztcXG4xMzU0OlxcdFxcdH1cXG4xMzU1OlxcdFxcbjEzNTY6XFx0XFx0cmV0dXJuIHNpemVvZigqbWQpO1xcbjEzNTc6XFx0fVxcbjEzNTg6XFx0XFxuMTM1OTpcXHRzdGF0aWMgaW50IGZsX3NldF9lcnNwYW5fb3B0KGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxuMTM2MDpcXHRcXHRcXHRcXHQgICAgIGludCBkZXB0aCwgaW50IG9wdGlvbl9sZW4sXFxuMTM2MTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xMzYyOlxcdHtcXG4xMzYzOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRfRVJTUEFOX01BWCArIDFdO1xcbjEzNjQ6XFx0XFx0c3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqbWQ7XFxuMTM2NTpcXHRcXHRpbnQgZXJyO1xcbjEzNjY6XFx0XFxuMTM2NzpcXHRcXHRtZCA9IChzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICopXFx1MDAyNmtleS1cXHUwMDNlZW5jX29wdHMuZGF0YVtrZXktXFx1MDAzZWVuY19vcHRzLmxlbl07XFxuMTM2ODpcXHRcXHRtZC1cXHUwMDNldmVyc2lvbiA9IDE7XFxuMTM2OTpcXHRcXG4xMzcwOlxcdFxcdGlmICghZGVwdGgpXFxuMTM3MTpcXHRcXHRcXHRyZXR1cm4gc2l6ZW9mKCptZCk7XFxuMTM3MjpcXHRcXG4xMzczOlxcdFxcdGlmIChubGFfdHlwZShubGEpICE9IFRDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX0VSU1BBTikge1xcbjEzNzQ6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiTm9uLWVyc3BhbiBvcHRpb24gdHlwZSBmb3IgbWFza1xcXCIpO1xcbjEzNzU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTM3NjpcXHRcXHR9XFxuMTM3NzpcXHRcXG4xMzc4OlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIFRDQV9GTE9XRVJfS0VZX0VOQ19PUFRfRVJTUEFOX01BWCwgbmxhLFxcbjEzNzk6XFx0XFx0XFx0XFx0ICAgICAgIGVyc3Bhbl9vcHRfcG9saWN5LCBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyODo0OS41ODAwNjk5MDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY4MzkyODUxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS0FTQU4ncyBHb3QgVGhpczogTmV0bGluayBBdHRyaWJ1dGUgUGFyc2luZyBCdWcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyc3BlY3RpdmUuIEluIGBmbF9zZXRfdnhsYW5fb3B0YCBhbmQgYGZsX3NldF9lcnNwYW5fb3B0YCwgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsaW5nIGBubGFfcGFyc2VfbmVzdGVkYC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IGlmIGBubGFgIGlzbid0IGEgdmFsaWQgYXR0cmlidXRlLCB0aGUgYG5sYV9wYXJzZV9uZXN0ZWRgIGZ1bmN0aW9uIGNvdWxkIGVuZCB1cCBhY2Nlc3NpbmcgbWVtb3J5IGl0IHNob3VsZG4ndC4gQW5kIHllcywgSSB1bmRlcnN0YW5kIHRoYXQgaW50ZXJuYWxseSwgYG5sYV9wYXJzZV9uZXN0ZWRgIHVzZXMgYG5sYV9wYXJzZWAsIHdoaWNoIHVzZXMgYG5sYV9kYXRhKG5sYSlgIGFuZCBgbmxhX2xlbihubGEpYC4gSWYgYG5sYWAgaXMgb3V0IG9mIGJvdW5kcywgdGhpcyBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS5cblxuTXkgZmlyc3QgdGhvdWdodD8gVGhpcyBsb29rcyBsaWtlIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgc2NlbmFyaW8uIEFuZCwgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgaXMgKmRlc2lnbmVkKiB0byBjYXRjaCB0aGVzZSBwZXJmZWN0bHkuIFNvLCBJIGhhdmUgdG8gYXNrIG15c2VsZiwgaXMgdGhlcmUgYW4gKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSBwcm9ibGVtIGhlcmU/XG5cbkxldCdzIGxvb2sgYXQgYG5sYV9vcHRfbXNrYC4gVGhpcyB2YXJpYWJsZSBpcyBkZXJpdmVkIGZyb20gYHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX01BU0tdYCwgd2hpY2ggY29tZXMgZnJvbSBhIG5ldGxpbmsgYXR0cmlidXRlIGZyb20gdXNlciBzcGFjZS4gVGhlIG5ldGxpbmsgbWVzc2FnZSBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlLCBzbyBpdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgYWxlcnQgb24gYW4gb3V0LW9mLWJvdW5kcyBpc3N1ZS5cblxuQnV0LCBpZiBgbmxhX25leHRgIGFkdmFuY2VzIGBubGFfb3B0X21za2AgYmV5b25kIHRoZSBlbmQgb2YgdGhlIG5ldGxpbmsgbWVzc2FnZSwgdGhlbiBpdCdzIGdvaW5nIHRvIHBvaW50IHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gSWYgaXQncyBvdXQgb2YgYm91bmRzLCBLQVNBTiB3aWxsIGNhdGNoIGl0LiBJZiBpdCdzIHdpdGhpbiB0aGUgc2tiIGJ1dCB1bmluaXRpYWxpemVkIOKAkyBwZXJoYXBzIHBhZGRpbmcg4oCTIEtNU0FOICptaWdodCogY2F0Y2ggaXQsIGJ1dCBLQVNBTiB3b3VsZG4ndC4gSG93ZXZlciwgbmV0bGluayBtZXNzYWdlcyBhcmUgdXN1YWxseSBhbGxvY2F0ZWQgd2l0aCBzb21ldGhpbmcgbGlrZSBga21hbGxvY2AsIGFuZCB0aGUgc2tiIGRhdGEgaXMgY29waWVkIGZyb20gdXNlciBzcGFjZS4gVGhlIGxlbmd0aCBvZiB0aGUgc2tiIGlzIHdlbGwtZGVmaW5lZC4gSWYgYG5sYV9uZXh0YCBhZHZhbmNlcyBiZXlvbmQgdGhlIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCwgaXQgY291bGQgYmUgd2l0aGluIHRoZSBza2IgZGF0YS4gSG93ZXZlciwgYG1za19kZXB0aGAgcmVwcmVzZW50cyB0aGUgcmVtYWluaW5nIGxlbmd0aCBvZiB0aGUgbmVzdGVkIGF0dHJpYnV0ZS4gSWYgYG1za19kZXB0aGAgaXMgcG9zaXRpdmUsIHRoZSBuZXN0ZWQgYXR0cmlidXRlJ3MgbGVuZ3RoIGhlYWRlciBpbmRpY2F0ZXMgaXQncyBsYXJnZXIgdGhhbiB3aGF0J3MgYWN0dWFsbHkgaW4gaXQuXG5cbk5vdywgYG5sYV9va2AgaXMgaW1wb3J0YW50LiBUaGlzIGNoZWNrIGVuc3VyZXMgdGhhdCBgbmxhYCBpcyBhY3R1YWxseSAqd2l0aGluKiBgbXNrX2RlcHRoYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZTpcblxuYGBgY1xuc3RhdGljIGlubGluZSBpbnQgbmxhX29rKGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgaW50IHJlbWFpbmluZylcbntcblx0cmV0dXJuIHJlbWFpbmluZyBcdTAwM2U9IChpbnQpIHNpemVvZihzdHJ1Y3QgbmxhdHRyKSBcdTAwMjZcdTAwMjZcblx0ICAgICAgIG5sYS1cdTAwM2VubGFfbGVuIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBubGF0dHIpIFx1MDAyNlx1MDAyNlxuXHQgICAgICAgbmxhLVx1MDAzZW5sYV9sZW4gXHUwMDNjPSByZW1haW5pbmc7XG59XG5gYGBcblxuSWYgYG5sYV9va2AgaXMgZmFsc2UsIHRoZSBhdHRyaWJ1dGUgaXMgbWFsZm9ybWVkLiBJZiB3ZSAqZG9uJ3QqIGNoZWNrIGBubGFfb2tgIGFmdGVyIGBubGFfbmV4dGAsIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uIGlzIGdvaW5nIHRvIHVzZSBgbmxhX29wdF9tc2tgLiBUaGF0IHdpbGwgcG90ZW50aWFsbHkgcmVhZCBgbmxhX3R5cGUobmxhX29wdF9tc2spYC4gSWYgYG5sYV9vcHRfbXNrYCBpc24ndCBgbmxhX29rYCwgYG5sYV90eXBlYCBjb3VsZCByZWFkIGdhcmJhZ2Ugb3IsIGFnYWluLCBnbyBvdXQgb2YgYm91bmRzLiBJZiBpdCByZWFkcyBnYXJiYWdlLCB3ZSBtaWdodCBqdXN0IGZhaWwgdGhlIGNoZWNrLiBJZiBpdCdzIG91dCBvZiBib3VuZHMsIEtBU0FOIGNhdGNoZXMgaXQuXG5cblNvLCBpcyB0aGVyZSBhbnkgcmVhbCAqcmlzayogaGVyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGEgd2F5IG9ubHkgS01TQU4gY291bGQgY2F0Y2g/IE5vLCBub3QgcmVhbGx5LiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIG5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcgYnVnOiBhIG1pc3NpbmcgbGVuZ3RoIGNoZWNrIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcy4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGNhdGNoIHRob3NlLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaCwgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpsZWFrcyouLi4gTm8sIHRoZSBuZXRsaW5rIG1lc3NhZ2UgZGF0YSBvcmlnaW5hdGVzIGZyb20gdXNlciBzcGFjZS5cblxuVGhlIHBhdGNoIGp1c3QgYWRkcyBhIGJvdW5kcyBjaGVjaywgd2hpY2ggaXMgYSBzdGFuZGFyZCBmaXggZm9yIGEgbWlzc2luZyBgbmxhX29rYCBhZnRlciBgbmxhX25leHRgIGNhbGwuIFN1Y2ggYnVncyB0eXBpY2FsbHkgcmVzdWx0IGluIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZXNlIGFyZSBjYXVnaHQgYnkgS0FTQU4uIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGxlYWsuXG5cblRoZSBwYXRjaDpcblxuYGBgY1xuIFx0XHRubGFfb3B0X21zayA9IG5sYV9uZXh0KG5sYV9vcHRfbXNrLCBcdTAwMjZtc2tfZGVwdGgpO1xuK1xuK1x0XHRpZiAobXNrX2RlcHRoIFx1MDAyNlx1MDAyNiAhbmxhX29rKG5sYV9vcHRfbXNrLCBtc2tfZGVwdGgpKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkEgbWFzayBhdHRyaWJ1dGUgaXMgaW52YWxpZFwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuXG4iLCJJbnB1dFRva2VucyI6NzE3MCwiT3V0cHV0VG9rZW5zIjoxMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjk6MDYuNDE5MzU2ODUxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZHMgY2hlY2sgKGBubGFfb2tgKSBmb3IgbmV0bGluayBhdHRyaWJ1dGVzIGFmdGVyIGFkdmFuY2luZyB0aGUgYXR0cmlidXRlIHBvaW50ZXIgd2l0aCBgbmxhX25leHRgLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIGNvdWxkIHJlYWQgb3V0LW9mLWJvdW5kcyBtZW1vcnkgd2hlbiBhY2Nlc3NpbmcgdGhlIG5leHQgYXR0cmlidXRlJ3MgaGVhZGVyIG9yIGRhdGEuIE91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZHMgY2hlY2sgKGBubGFfb2tgKSBmb3IgbmV0bGluayBhdHRyaWJ1dGVzIGFmdGVyIGFkdmFuY2luZyB0aGUgYXR0cmlidXRlIHBvaW50ZXIgd2l0aCBgbmxhX25leHRgLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIGNvdWxkIHJlYWQgb3V0LW9mLWJvdW5kcyBtZW1vcnkgd2hlbiBhY2Nlc3NpbmcgdGhlIG5leHQgYXR0cmlidXRlJ3MgaGVhZGVyIG9yIGRhdGEuIE91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfm56[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 02:59:00 +0000 UTC FinishedAt: 2026-08-26 03:29:08 +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": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_FLOWER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_FLOWER" ], "series_id": "0fd077f0-43fc-47bb-b7a9-8634a118f4d0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fl_change", "fl_tmplt_create" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0ZMT1dFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZsX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmbF90bXBsdF9jcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZHMgY2hlY2sgKGBubGFfb2tgKSBmb3IgbmV0bGluayBhdHRyaWJ1dGVzIGFmdGVyIGFkdmFuY2luZyB0aGUgYXR0cmlidXRlIHBvaW50ZXIgd2l0aCBgbmxhX25leHRgLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIGNvdWxkIHJlYWQgb3V0LW9mLWJvdW5kcyBtZW1vcnkgd2hlbiBhY2Nlc3NpbmcgdGhlIG5leHQgYXR0cmlidXRlJiMzOTtzIGhlYWRlciBvciBkYXRhLiBPdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciBpbnZhbGlkIGF0dHJpYnV0ZSBwYXJzaW5nIGluIGBmbF9zZXRfZW5jX29wdGAgd2hlbiBwYXJzaW5nIG5lc3RlZCBuZXRsaW5rIGF0dHJpYnV0ZXMgZm9yIGZsb3dlciBjbGFzc2lmaWVyIGVuY2Fwc3VsYXRpb24gb3B0aW9ucy4gSXQgYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSBgbXNrX2RlcHRoYCBpcyB2YWxpZCBiZWZvcmUgY29udGludWluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHBhY2tldCBjbGFzc2lmaWNhdGlvbiBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRjIG5ldGxpbmsuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxZDE4OGM5ODkwNmE5YTNmNWFhMTM1ZjZjMDQ4ZjYwMzZkZGE4MDJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDM6Mjc6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYyBiL25ldC9zY2hlZC9jbHNfZmxvd2VyLmNcbmluZGV4IDBlMjc1YjU4MTUxYzQuLjFjZWZlYTU3MWVmZDcgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXG5AQCAtMTcwMyw2ICYjNDM7MTcwMywxMSBAQCBzdGF0aWMgaW50IGZsX3NldF9lbmNfb3B0KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdFx0bmxhX29wdF9tc2sgPSBubGFfbmV4dChubGFfb3B0X21zaywgXHUwMDI2bXNrX2RlcHRoKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobXNrX2RlcHRoIFx1MDAyNlx1MDAyNiAhbmxhX29rKG5sYV9vcHRfbXNrLCBtc2tfZGVwdGgpKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7QSBtYXNrIGF0dHJpYnV0ZSBpcyBpbnZhbGlkXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9DTFNfRkxPV0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmxfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZsX3RtcGx0X2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3IgaW52YWxpZCBhdHRyaWJ1dGUgcGFyc2luZyBpbiBgZmxfc2V0X2VuY19vcHRgIHdoZW4gcGFyc2luZyBuZXN0ZWQgbmV0bGluayBhdHRyaWJ1dGVzIGZvciBmbG93ZXIgY2xhc3NpZmllciBlbmNhcHN1bGF0aW9uIG9wdGlvbnMuIEl0IGFkZHMgYSBjaGVjayB0byBlbnN1cmUgYG1za19kZXB0aGAgaXMgdmFsaWQgYmVmb3JlIGNvbnRpbnVpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBwYWNrZXQgY2xhc3NpZmljYXRpb24gbG9naWMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0YyBuZXRsaW5rLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWQxODhjOTg5MDZhOWEzZjVhYTEzNWY2YzA0OGY2MDM2ZGRhODAyYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDAzOjI3OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYyBiL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMKaW5kZXggMGUyNzViNTgxNTFjNC4uMWNlZmVhNTcxZWZkNyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jCkBAIC0xNzAzLDYgJiM0MzsxNzAzLDExIEBAIHN0YXRpYyBpbnQgZmxfc2V0X2VuY19vcHQoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSwKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCW5sYV9vcHRfbXNrID0gbmxhX25leHQobmxhX29wdF9tc2ssICZhbXA7bXNrX2RlcHRoKTsKJiM0MzsKJiM0MzsJCWlmIChtc2tfZGVwdGggJmFtcDsmYW1wOyAhbmxhX29rKG5sYV9vcHRfbXNrLCBtc2tfZGVwdGgpKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0EgbWFzayBhdHRyaWJ1dGUgaXMgaW52YWxpZCYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KIAl9CiAKIAlyZXR1cm4gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBGbG93ZXIgQ2xhc3NpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9jbHNfZmxvd2VyLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZmxfc2V0X2VuY19vcHRgIGZ1bmN0aW9uLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIOKAkyB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIGhlcmU6CgpgYGBjCgkJbmxhX29wdF9tc2sgPSBubGFfbmV4dChubGFfb3B0X21zaywgJmFtcDttc2tfZGVwdGgpOwomIzQzOwomIzQzOwkJaWYgKG1za19kZXB0aCAmYW1wOyZhbXA7ICFubGFfb2sobmxhX29wdF9tc2ssIG1za19kZXB0aCkpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7QSBtYXNrIGF0dHJpYnV0ZSBpcyBpbnZhbGlkJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQpgYGAKCk15IGluaXRpYWwgdGhvdWdodCBpcywgaXQmIzM5O3MgZ3VhcmRpbmcgYWdhaW5zdCBpbnZhbGlkIG1hc2sgYXR0cmlidXRlcywgcmlnaHQ/IE1ha2VzIHNlbnNlLiBgbmxhX25leHRgIGFkdmFuY2VzIHRoZSBOTEEgcG9pbnRlciwgYW5kIHRoaXMgY29kZSBpcyBub3cgY2hlY2tpbmcgaWYsIGFmdGVyIHRoZSBhZHZhbmNlLCB0aGUgTkxBIGlzIHN0aWxsIHZhbGlkIGdpdmVuIHRoZSBjdXJyZW50IGBtc2tfZGVwdGhgLiBUaGUgYG5sYV9va2AgZnVuY3Rpb24gaXMga2V5IGhlcmUg4oCTIHRoYXQmIzM5O3MgdGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hlY2suIEl0JiMzOTtzIHByb2JhYmx5IHZlcmlmeWluZyB0aGF0IHdlIGhhdmVuJiMzOTt0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgb3IgZW5jb3VudGVyZWQgc29tZSBvdGhlciBOTEEtcmVsYXRlZCBjb3JydXB0aW9uLiBJZiBgbXNrX2RlcHRoYCBpcyBub24temVybyAobWVhbmluZyB0aGVyZSAqaXMqIGEgbWFzayB0byBjb25zaWRlcikgYW5kIGBubGFfb2tgIGZhaWxzLCB3ZSBzZXQgYW4gZXh0ZW5kZWQgYWNrIG1lc3NhZ2UgYW5kIHJldHVybiAtRUlOVkFMLCBpbmRpY2F0aW5nIGFuIGludmFsaWQgbWFzayBhdHRyaWJ1dGUuIFRoYXQmIzM5O3MgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuIEdvdHRhIGVuc3VyZSBkYXRhIGludGVncml0eSB3aGVuIGRlYWxpbmcgd2l0aCBOTEFzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBubGFfb2tgIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIHZhbGlkYXRpb24gbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zmxfc2V0X2VuY19vcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2Zsb3dlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MTQ2OD1zdGF0aWMgaW50IGZsX3NldF9wZmNwX29wdChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBmbF9mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTUwNS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTUwNjpzdGF0aWMgaW50IGZsX3NldF9lbmNfb3B0KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE1MDctXHRcdFx0ICBzdHJ1Y3QgZmxfZmxvd19rZXkgKm1hc2ssXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0xODcxPXN0YXRpYyBpbnQgZmxfc2V0X2tleShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRjYV9vcHRzLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA5NS1cdGlmICh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU10pIHtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjA5NjpcdFx0cmV0ID0gZmxfc2V0X2VuY19vcHQodGIsIGtleSwgbWFzaywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA5Ny1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiBhIFRyYWZmaWMgQ2xhc3NpZmllciBWdWxuZXJhYmlsaXR5KioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBUaGlzIHZ1bG5lcmFiaWxpdHkgaXMgc2l0dGluZyB3aXRoaW4gdGhlIGBjbHNfZmxvd2VyYCB0cmFmZmljIGNsYXNzaWZpZXIsIHNwZWNpZmljYWxseSwgaXQmIzM5O3MgdHJpZ2dlcmVkIGR1cmluZyBhdHRyaWJ1dGUgcGFyc2luZyBpbiB0aGUgYGZsX3NldF9lbmNfb3B0YCBmdW5jdGlvbi4gVGhhdCBmdW5jdGlvbiBpcyByZWFjaGVkIHZpYSBgZmxfc2V0X2tleWAsIHdoaWNoIGlzIGEgcGFydCBvZiB0aGUgYGNsc19mbG93ZXJgIGNvZGUsIGFuZCBpdCYjMzk7cyB1bHRpbWF0ZWx5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHRocm91Z2ggbmV0bGluaywgbGlrZWx5IHZpYSB0aGUgYHRjYCBjb21tYW5kLWxpbmUgdXRpbGl0eS4gVGhlIHJvb3QgY2F1c2UgYXBwZWFycyB0byBiZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIG9yIHNvbWUgb3RoZXIgaXNzdWUgd2l0aCBpbnZhbGlkIGF0dHJpYnV0ZSBoYW5kbGluZywgaW4gYGZsX3NldF9lbmNfb3B0YC4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgd2F5IHRyYWZmaWMgY2xhc3NpZmljYXRpb24gd29ya3MsIGFuZCBpdCBkZWZpbml0ZWx5IG5lZWRzIGEgZ29vZCBmdXp6aW5nIGNhbXBhaWduLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgc2hvdWxkIGZpcnN0IGZpbmQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IGFwcGx5IHRvIGBjbHNfZmxvd2VyYCwgYXMgdGhlIGZ1enppbmcgc3RyYXRlZ3kgd2lsbCBkZXBlbmQgb24gdW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3Mgc2V0IHVwIHRvIHByb2Nlc3MgdHJhZmZpYyBhbmQgdGhlIHNwZWNpZmljIGF0dHJpYnV0ZXMgaXQgaXMgZGVzaWduZWQgdG8gaGFuZGxlLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIHByb3BlciBoYW5kbGUgb24gdGhlIGlucHV0cyB0aGF0IGNhbiByZWFjaCB0aGlzIGZhdWx0eSBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DTFNfRkxPV0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NTYyPWNvbmZpZyBORVRfQ0xTX0JQRlxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTU3MS1cbm5ldC9zY2hlZC9LY29uZmlnOjU3Mjpjb25maWcgTkVUX0NMU19GTE9XRVJcbm5ldC9zY2hlZC9LY29uZmlnLTU3My1cdHRyaXN0YXRlIFwmIzM0O0Zsb3dlciBjbGFzc2lmaWVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgRmxvdyBUYWJsZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoZSBjb25maWcgSSYjMzk7bSB3b3JraW5nIHdpdGggdXNlcyBgTkVUX0NMU19GTE9XRVJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUga2V5IG9wZXJhdGlvbnMgaW4gdGhpcyBjb250ZXh0LCB0aGUgY2VudHJhbCBmdW5jdGlvbnMgdGhhdCBtYW5pcHVsYXRlIHRoZSBmbG93IHRhYmxlIGVudHJpZXMuIGBmbF9zZXRfZW5jX29wdGAgYmVpbmcgc3RhdGljIGlzbiYjMzk7dCBoZWxwZnVsLCBzbyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSXQmIzM5O3MgbGlrZWx5IGBmbF9zZXRfa2V5YCBvciwgcGVyaGFwcyBtb3JlIGludHJpZ3VpbmdseSwgYGZsX2NoYW5nZWAgd2lsbCBiZSB0aGUgc2lnbmlmaWNhbnQgZnVuY3Rpb25zIGhlcmUuIFRoZSAmIzM0O2NoYW5nZSYjMzQ7IGZ1bmN0aW9uIHNlZW1zIGxpa2UgdGhlIG1vcmUgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgY2xvc2VyIGV4YW1pbmF0aW9uLCBzaW5jZSBpdCBpbXBsaWVzIG1vZGlmaWNhdGlvbiBvZiBleGlzdGluZyBlbnRyaWVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgY2hlY2tpbmcgdGhhdCBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zmxfc2V0X2tleSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfZmxvd2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19mbG93ZXIuYz04MDM9Y2ZtX29wdF9wb2xpY3lbVENBX0ZMT1dFUl9LRVlfQ0ZNX09QVF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy04MDgtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjgwOTpzdGF0aWMgdm9pZCBmbF9zZXRfa2V5X3ZhbChzdHJ1Y3QgbmxhdHRyICoqdGIsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTgxMC1cdFx0XHQgICB2b2lkICp2YWwsIGludCB2YWxfdHlwZSxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTgyMS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6ODIyOnN0YXRpYyBpbnQgZmxfc2V0X2tleV9zcGkoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODIzLVx0XHRcdCAgc3RydWN0IGZsX2Zsb3dfa2V5ICptYXNrLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODMyLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzo4MzM6XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWlwc2VjLnNwaSxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODM0LVx0XHQgICAgICAgVENBX0ZMT1dFUl9LRVlfU1BJLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODM5LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzo4NDA6c3RhdGljIGludCBmbF9zZXRfa2V5X3BvcnRfcmFuZ2Uoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODQxLVx0XHRcdFx0IHN0cnVjdCBmbF9mbG93X2tleSAqbWFzayxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg0My17XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjg0NDpcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNldHBfcmFuZ2UudHBfbWluLmRzdCxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODQ1LVx0XHQgICAgICAgVENBX0ZMT1dFUl9LRVlfUE9SVF9EU1RfTUlOLCBcdTAwMjZtYXNrLVx1MDAzZXRwX3JhbmdlLnRwX21pbi5kc3QsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg0Ni1cdFx0ICAgICAgIFRDQV9GTE9XRVJfVU5TUEVDLCBzaXplb2Yoa2V5LVx1MDAzZXRwX3JhbmdlLnRwX21pbi5kc3QpKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6ODQ3Olx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2V0cF9yYW5nZS50cF9tYXguZHN0LFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy04NDgtXHRcdCAgICAgICBUQ0FfRkxPV0VSX0tFWV9QT1JUX0RTVF9NQVgsIFx1MDAyNm1hc2stXHUwMDNldHBfcmFuZ2UudHBfbWF4LmRzdCxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODQ5LVx0XHQgICAgICAgVENBX0ZMT1dFUl9VTlNQRUMsIHNpemVvZihrZXktXHUwMDNldHBfcmFuZ2UudHBfbWF4LmRzdCkpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzo4NTA6XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZXRwX3JhbmdlLnRwX21pbi5zcmMsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg1MS1cdFx0ICAgICAgIFRDQV9GTE9XRVJfS0VZX1BPUlRfU1JDX01JTiwgXHUwMDI2bWFzay1cdTAwM2V0cF9yYW5nZS50cF9taW4uc3JjLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy04NTItXHRcdCAgICAgICBUQ0FfRkxPV0VSX1VOU1BFQywgc2l6ZW9mKGtleS1cdTAwM2V0cF9yYW5nZS50cF9taW4uc3JjKSk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjg1MzpcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNldHBfcmFuZ2UudHBfbWF4LnNyYyxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODU0LVx0XHQgICAgICAgVENBX0ZMT1dFUl9LRVlfUE9SVF9TUkNfTUFYLCBcdTAwMjZtYXNrLVx1MDAzZXRwX3JhbmdlLnRwX21heC5zcmMsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy04ODYtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjg4NzpzdGF0aWMgaW50IGZsX3NldF9rZXlfbXBsc19sc2UoY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhX2xzZSxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODg4LVx0XHRcdCAgICAgICBzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X21wbHMgKmtleV92YWwsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy05NzEtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjk3MjpzdGF0aWMgaW50IGZsX3NldF9rZXlfbXBsc19vcHRzKGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYV9tcGxzX29wdHMsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTk3My1cdFx0XHRcdHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfbXBscyAqa2V5X3ZhbCxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTk5My1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6OTk0Olx0XHRlcnIgPSBmbF9zZXRfa2V5X21wbHNfbHNlKG5sYV9sc2UsIGtleV92YWwsIGtleV9tYXNrLCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy05OTUtXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMDA2LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMDA3OnN0YXRpYyBpbnQgZmxfc2V0X2tleV9tcGxzKHN0cnVjdCBubGF0dHIgKip0Yixcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTAwOC1cdFx0XHQgICBzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X21wbHMgKmtleV92YWwsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMDI1LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMDI2Olx0XHRyZXR1cm4gZmxfc2V0X2tleV9tcGxzX29wdHModGJbVENBX0ZMT1dFUl9LRVlfTVBMU19PUFRTXSxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTAyNy1cdFx0XHRcdFx0ICAgIGtleV92YWwsIGtleV9tYXNrLCBleHRhY2spO1xuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTA4My1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTA4NDpzdGF0aWMgdm9pZCBmbF9zZXRfa2V5X3ZsYW4oc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMDg1LVx0XHRcdCAgICBfX2JlMTYgZXRoZXJ0eXBlLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTExNC1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTExNTpzdGF0aWMgdm9pZCBmbF9zZXRfa2V5X3BwcG9lKHN0cnVjdCBubGF0dHIgKip0Yixcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTExNi1cdFx0XHQgICAgIHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfcHBwb2UgKmtleV92YWwsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTU4LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMTU5OnN0YXRpYyB2b2lkIGZsX3NldF9rZXlfZmxhZyh1MzIgZmxvd2VyX2tleSwgdTMyIGZsb3dlcl9tYXNrLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTYwLVx0XHRcdCAgICB1MzIgKmRpc3NlY3Rvcl9rZXksIHUzMiAqZGlzc2VjdG9yX21hc2ssXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTY5LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMTcwOnN0YXRpYyBpbnQgZmxfc2V0X2tleV9mbGFncyhzdHJ1Y3QgbmxhdHRyICp0Y2Ffb3B0cywgc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTcxLVx0XHRcdCAgICBib29sIGVuY2FwLCB1MzIgKmZsYWdzX2tleSwgdTMyICpmbGFnc19tYXNrLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTE5Ni1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTE5NzpcdGZsX3NldF9rZXlfZmxhZyhrZXksIG1hc2ssIGZsYWdzX2tleSwgZmxhZ3NfbWFzayxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTE5OC1cdFx0XHRUQ0FfRkxPV0VSX0tFWV9GTEFHU19JU19GUkFHTUVOVCwgRkxPV19ESVNfSVNfRlJBR01FTlQpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMTk5Olx0Zmxfc2V0X2tleV9mbGFnKGtleSwgbWFzaywgZmxhZ3Nfa2V5LCBmbGFnc19tYXNrLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMjAwLVx0XHRcdFRDQV9GTE9XRVJfS0VZX0ZMQUdTX0ZSQUdfSVNfRklSU1QsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMjAyLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMjAzOlx0Zmxfc2V0X2tleV9mbGFnKGtleSwgbWFzaywgZmxhZ3Nfa2V5LCBmbGFnc19tYXNrLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMjA0LVx0XHRcdFRDQV9GTE9XRVJfS0VZX0ZMQUdTX1RVTk5FTF9DU1VNLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIwNi1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTIwNzpcdGZsX3NldF9rZXlfZmxhZyhrZXksIG1hc2ssIGZsYWdzX2tleSwgZmxhZ3NfbWFzayxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIwOC1cdFx0XHRUQ0FfRkxPV0VSX0tFWV9GTEFHU19UVU5ORUxfRE9OVF9GUkFHTUVOVCxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTEyMTAtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjEyMTE6XHRmbF9zZXRfa2V5X2ZsYWcoa2V5LCBtYXNrLCBmbGFnc19rZXksIGZsYWdzX21hc2ssXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTEyMTItXHRcdFx0VENBX0ZMT1dFUl9LRVlfRkxBR1NfVFVOTkVMX09BTSwgRkxPV19ESVNfRl9UVU5ORUxfT0FNKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIxMy1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTIxNDpcdGZsX3NldF9rZXlfZmxhZyhrZXksIG1hc2ssIGZsYWdzX2tleSwgZmxhZ3NfbWFzayxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIxNS1cdFx0XHRUQ0FfRkxPV0VSX0tFWV9GTEFHU19UVU5ORUxfQ1JJVF9PUFQsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMjIwLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMjIxOnN0YXRpYyB2b2lkIGZsX3NldF9rZXlfaXAoc3RydWN0IG5sYXR0ciAqKnRiLCBib29sIGVuY2FwLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMjIyLVx0XHRcdCAgc3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9pcCAqa2V5LFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIyOS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTIzMDpcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNldG9zLCB0b3Nfa2V5LCBcdTAwMjZtYXNrLVx1MDAzZXRvcywgdG9zX21hc2ssIHNpemVvZihrZXktXHUwMDNldG9zKSk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjEyMzE6XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZXR0bCwgdHRsX2tleSwgXHUwMDI2bWFzay1cdTAwM2V0dGwsIHR0bF9tYXNrLCBzaXplb2Yoa2V5LVx1MDAzZXR0bCkpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMjMyLX1cbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTE3MTY9c3RhdGljIGludCBmbF92YWxpZGF0ZV9jdF9zdGF0ZSh1MTYgc3RhdGUsIHN0cnVjdCBubGF0dHIgKnRiLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTc0OS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTc1MDpzdGF0aWMgaW50IGZsX3NldF9rZXlfY3Qoc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzUxLVx0XHRcdCBzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X2N0ICprZXksXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzYxLVx0XHR9XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE3NjI6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNlY3Rfc3RhdGUsIFRDQV9GTE9XRVJfS0VZX0NUX1NUQVRFLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzYzLVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZWN0X3N0YXRlLCBUQ0FfRkxPV0VSX0tFWV9DVF9TVEFURV9NQVNLLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTc3Ny1cdFx0fVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxNzc4Olx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWN0X3pvbmUsIFRDQV9GTE9XRVJfS0VZX0NUX1pPTkUsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE3NzktXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNlY3Rfem9uZSwgVENBX0ZMT1dFUl9LRVlfQ1RfWk9ORV9NQVNLLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTc4Ni1cdFx0fVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxNzg3Olx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWN0X21hcmssIFRDQV9GTE9XRVJfS0VZX0NUX01BUkssXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE3ODgtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNlY3RfbWFyaywgVENBX0ZMT1dFUl9LRVlfQ1RfTUFSS19NQVNLLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTc5NS1cdFx0fVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxNzk2Olx0XHRmbF9zZXRfa2V5X3ZhbCh0Yiwga2V5LVx1MDAzZWN0X2xhYmVscywgVENBX0ZMT1dFUl9LRVlfQ1RfTEFCRUxTLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzk3LVx0XHRcdCAgICAgICBtYXNrLVx1MDAzZWN0X2xhYmVscywgVENBX0ZMT1dFUl9LRVlfQ1RfTEFCRUxTX01BU0ssXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0xODA0PXN0YXRpYyBib29sIGlzX3ZsYW5fa2V5KHN0cnVjdCBubGF0dHIgKnRiLCBfX2JlMTYgKmV0aGVydHlwZSxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4MjMtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE4MjQ6c3RhdGljIHZvaWQgZmxfc2V0X2tleV9jZm1fbWRfbGV2ZWwoc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODI1LVx0XHRcdFx0ICAgIHN0cnVjdCBmbF9mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTgzOC1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTgzOTpzdGF0aWMgdm9pZCBmbF9zZXRfa2V5X2NmbV9vcGNvZGUoc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODQwLVx0XHRcdFx0ICBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4NDMte1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxODQ0Olx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VjZm0ub3Bjb2RlLCBUQ0FfRkxPV0VSX0tFWV9DRk1fT1BDT0RFLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODQ1LVx0XHQgICAgICAgXHUwMDI2bWFzay1cdTAwM2VjZm0ub3Bjb2RlLCBUQ0FfRkxPV0VSX1VOU1BFQyxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4NDgtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE4NDk6c3RhdGljIGludCBmbF9zZXRfa2V5X2NmbShzdHJ1Y3QgbmxhdHRyICoqdGIsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4NTAtXHRcdFx0ICBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4NjQtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE4NjU6XHRmbF9zZXRfa2V5X2NmbV9vcGNvZGUobmxhX2NmbV9vcHQsIGtleSwgbWFzaywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTg2NjpcdGZsX3NldF9rZXlfY2ZtX21kX2xldmVsKG5sYV9jZm1fb3B0LCBrZXksIG1hc2ssIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4NjctXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODcwLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxODcxOnN0YXRpYyBpbnQgZmxfc2V0X2tleShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRjYV9vcHRzLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODcyLVx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBmbF9mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg4NS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTg4NjpcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNlbWV0YS5sMl9taXNzLCBUQ0FfRkxPV0VSX0wyX01JU1MsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4ODctXHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZW1ldGEubDJfbWlzcywgVENBX0ZMT1dFUl9VTlNQRUMsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODg5LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxODkwOlx0Zmxfc2V0X2tleV92YWwodGIsIGtleS1cdTAwM2VldGguZHN0LCBUQ0FfRkxPV0VSX0tFWV9FVEhfRFNULFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODkxLVx0XHQgICAgICAgbWFzay1cdTAwM2VldGguZHN0LCBUQ0FfRkxPV0VSX0tFWV9FVEhfRFNUX01BU0ssXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4OTItXHRcdCAgICAgICBzaXplb2Yoa2V5LVx1MDAzZWV0aC5kc3QpKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTg5MzpcdGZsX3NldF9rZXlfdmFsKHRiLCBrZXktXHUwMDNlZXRoLnNyYywgVENBX0ZMT1dFUl9LRVlfRVRIX1NSQyxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg5NC1cdFx0ICAgICAgIG1hc2stXHUwMDNlZXRoLnNyYywgVENBX0ZMT1dFUl9LRVlfRVRIX1NSQ19NQVNLLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODk1LVx0XHQgICAgICAgc2l6ZW9mKGtleS1cdTAwM2VldGguc3JjKSk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE4OTY6XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZW51bV9vZl92bGFucyxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg5Ny1cdFx0ICAgICAgIFRDQV9GTE9XRVJfS0VZX05VTV9PRl9WTEFOUyxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MDItXHRpZiAoaXNfdmxhbl9rZXkodGJbVENBX0ZMT1dFUl9LRVlfRVRIX1RZUEVdLCBcdTAwMjZldGhlcnR5cGUsIGtleSwgbWFzaywgMCkpIHtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTkwMzpcdFx0Zmxfc2V0X2tleV92bGFuKHRiLCBldGhlcnR5cGUsIFRDQV9GTE9XRVJfS0VZX1ZMQU5fSUQsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MDQtXHRcdFx0XHRUQ0FfRkxPV0VSX0tFWV9WTEFOX1BSSU8sXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTA5LVx0XHRcdFx0XHUwMDI2ZXRoZXJ0eXBlLCBrZXksIG1hc2ssIDEpKSB7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5MTA6XHRcdFx0Zmxfc2V0X2tleV92bGFuKHRiLCBldGhlcnR5cGUsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MTEtXHRcdFx0XHRcdFRDQV9GTE9XRVJfS0VZX0NWTEFOX0lELFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkxNC1cdFx0XHRcdFx0XHUwMDI2a2V5LVx1MDAzZWN2bGFuLCBcdTAwMjZtYXNrLVx1MDAzZWN2bGFuKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTkxNTpcdFx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWJhc2ljLm5fcHJvdG8sXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MTYtXHRcdFx0XHQgICAgICAgVENBX0ZMT1dFUl9LRVlfQ1ZMQU5fRVRIX1RZUEUsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTIzLVx0aWYgKGtleS1cdTAwM2ViYXNpYy5uX3Byb3RvID09IGh0b25zKEVUSF9QX1BQUF9TRVMpKVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTI0Olx0XHRmbF9zZXRfa2V5X3BwcG9lKHRiLCBcdTAwMjZrZXktXHUwMDNlcHBwb2UsIFx1MDAyNm1hc2stXHUwMDNlcHBwb2UsIGtleSwgbWFzayk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MjUtXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTI3LVx0ICAgIGtleS1cdTAwM2ViYXNpYy5uX3Byb3RvID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5Mjg6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNlYmFzaWMuaXBfcHJvdG8sIFRDQV9GTE9XRVJfS0VZX0lQX1BST1RPLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTI5LVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZWJhc2ljLmlwX3Byb3RvLCBUQ0FfRkxPV0VSX1VOU1BFQyxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkzMC1cdFx0XHQgICAgICAgc2l6ZW9mKGtleS1cdTAwM2ViYXNpYy5pcF9wcm90bykpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTMxOlx0XHRmbF9zZXRfa2V5X2lwKHRiLCBmYWxzZSwgXHUwMDI2a2V5LVx1MDAzZWlwLCBcdTAwMjZtYXNrLVx1MDAzZWlwKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkzMi1cdH1cbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MzYtXHRcdG1hc2stXHUwMDNlY29udHJvbC5hZGRyX3R5cGUgPSB+MDtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTkzNzpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VpcHY0LnNyYywgVENBX0ZMT1dFUl9LRVlfSVBWNF9TUkMsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MzgtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNlaXB2NC5zcmMsIFRDQV9GTE9XRVJfS0VZX0lQVjRfU1JDX01BU0ssXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MzktXHRcdFx0ICAgICAgIHNpemVvZihrZXktXHUwMDNlaXB2NC5zcmMpKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTk0MDpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VpcHY0LmRzdCwgVENBX0ZMT1dFUl9LRVlfSVBWNF9EU1QsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NDEtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNlaXB2NC5kc3QsIFRDQV9GTE9XRVJfS0VZX0lQVjRfRFNUX01BU0ssXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTQ1LVx0XHRtYXNrLVx1MDAzZWNvbnRyb2wuYWRkcl90eXBlID0gfjA7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5NDY6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNlaXB2Ni5zcmMsIFRDQV9GTE9XRVJfS0VZX0lQVjZfU1JDLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTQ3LVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZWlwdjYuc3JjLCBUQ0FfRkxPV0VSX0tFWV9JUFY2X1NSQ19NQVNLLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTQ4LVx0XHRcdCAgICAgICBzaXplb2Yoa2V5LVx1MDAzZWlwdjYuc3JjKSk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5NDk6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNlaXB2Ni5kc3QsIFRDQV9GTE9XRVJfS0VZX0lQVjZfRFNULFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTUwLVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZWlwdjYuZHN0LCBUQ0FfRkxPV0VSX0tFWV9JUFY2X0RTVF9NQVNLLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk1NC1cdGlmIChrZXktXHUwMDNlYmFzaWMuaXBfcHJvdG8gPT0gSVBQUk9UT19UQ1ApIHtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTk1NTpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2V0cC5zcmMsIFRDQV9GTE9XRVJfS0VZX1RDUF9TUkMsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NTYtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNldHAuc3JjLCBUQ0FfRkxPV0VSX0tFWV9UQ1BfU1JDX01BU0ssXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NTctXHRcdFx0ICAgICAgIHNpemVvZihrZXktXHUwMDNldHAuc3JjKSk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5NTg6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNldHAuZHN0LCBUQ0FfRkxPV0VSX0tFWV9UQ1BfRFNULFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTU5LVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZXRwLmRzdCwgVENBX0ZMT1dFUl9LRVlfVENQX0RTVF9NQVNLLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTYwLVx0XHRcdCAgICAgICBzaXplb2Yoa2V5LVx1MDAzZXRwLmRzdCkpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTYxOlx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZXRjcC5mbGFncywgVENBX0ZMT1dFUl9LRVlfVENQX0ZMQUdTLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTYyLVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZXRjcC5mbGFncywgVENBX0ZMT1dFUl9LRVlfVENQX0ZMQUdTX01BU0ssXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTY0LVx0fSBlbHNlIGlmIChrZXktXHUwMDNlYmFzaWMuaXBfcHJvdG8gPT0gSVBQUk9UT19VRFApIHtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTk2NTpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2V0cC5zcmMsIFRDQV9GTE9XRVJfS0VZX1VEUF9TUkMsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NjYtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNldHAuc3JjLCBUQ0FfRkxPV0VSX0tFWV9VRFBfU1JDX01BU0ssXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NjctXHRcdFx0ICAgICAgIHNpemVvZihrZXktXHUwMDNldHAuc3JjKSk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5Njg6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNldHAuZHN0LCBUQ0FfRkxPV0VSX0tFWV9VRFBfRFNULFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTY5LVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZXRwLmRzdCwgVENBX0ZMT1dFUl9LRVlfVURQX0RTVF9NQVNLLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk3MS1cdH0gZWxzZSBpZiAoa2V5LVx1MDAzZWJhc2ljLmlwX3Byb3RvID09IElQUFJPVE9fU0NUUCkge1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTcyOlx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZXRwLnNyYywgVENBX0ZMT1dFUl9LRVlfU0NUUF9TUkMsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NzMtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNldHAuc3JjLCBUQ0FfRkxPV0VSX0tFWV9TQ1RQX1NSQ19NQVNLLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTc0LVx0XHRcdCAgICAgICBzaXplb2Yoa2V5LVx1MDAzZXRwLnNyYykpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTc1Olx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZXRwLmRzdCwgVENBX0ZMT1dFUl9LRVlfU0NUUF9EU1QsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NzYtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNldHAuZHN0LCBUQ0FfRkxPV0VSX0tFWV9TQ1RQX0RTVF9NQVNLLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk3OS1cdFx0ICAga2V5LVx1MDAzZWJhc2ljLmlwX3Byb3RvID09IElQUFJPVE9fSUNNUCkge1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTgwOlx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWljbXAudHlwZSwgVENBX0ZMT1dFUl9LRVlfSUNNUFY0X1RZUEUsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5ODEtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNlaWNtcC50eXBlLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk4My1cdFx0XHQgICAgICAgc2l6ZW9mKGtleS1cdTAwM2VpY21wLnR5cGUpKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTk4NDpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VpY21wLmNvZGUsIFRDQV9GTE9XRVJfS0VZX0lDTVBWNF9DT0RFLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTg1LVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZWljbXAuY29kZSxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5ODktXHRcdCAgIGtleS1cdTAwM2ViYXNpYy5pcF9wcm90byA9PSBJUFBST1RPX0lDTVBWNikge1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTkwOlx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWljbXAudHlwZSwgVENBX0ZMT1dFUl9LRVlfSUNNUFY2X1RZUEUsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5OTEtXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNlaWNtcC50eXBlLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk5My1cdFx0XHQgICAgICAgc2l6ZW9mKGtleS1cdTAwM2VpY21wLnR5cGUpKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTk5NDpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VpY21wLmNvZGUsIFRDQV9GTE9XRVJfS0VZX0lDTVBWNl9DT0RFLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTk1LVx0XHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZWljbXAuY29kZSxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5OTktXHRcdCAgIGtleS1cdTAwM2ViYXNpYy5uX3Byb3RvID09IGh0b25zKEVUSF9QX01QTFNfTUMpKSB7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwMDA6XHRcdHJldCA9IGZsX3NldF9rZXlfbXBscyh0YiwgXHUwMDI2a2V5LVx1MDAzZW1wbHMsIFx1MDAyNm1hc2stXHUwMDNlbXBscywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjAwMS1cdFx0aWYgKHJldClcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMDQtXHRcdCAgIGtleS1cdTAwM2ViYXNpYy5uX3Byb3RvID09IGh0b25zKEVUSF9QX1JBUlApKSB7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwMDU6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNlYXJwLnNpcCwgVENBX0ZMT1dFUl9LRVlfQVJQX1NJUCxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjAwNi1cdFx0XHQgICAgICAgXHUwMDI2bWFzay1cdTAwM2VhcnAuc2lwLCBUQ0FfRkxPV0VSX0tFWV9BUlBfU0lQX01BU0ssXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMDctXHRcdFx0ICAgICAgIHNpemVvZihrZXktXHUwMDNlYXJwLnNpcCkpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDA4Olx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWFycC50aXAsIFRDQV9GTE9XRVJfS0VZX0FSUF9USVAsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMDktXHRcdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNlYXJwLnRpcCwgVENBX0ZMT1dFUl9LRVlfQVJQX1RJUF9NQVNLLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDEwLVx0XHRcdCAgICAgICBzaXplb2Yoa2V5LVx1MDAzZWFycC50aXApKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjAxMTpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VhcnAub3AsIFRDQV9GTE9XRVJfS0VZX0FSUF9PUCxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjAxMi1cdFx0XHQgICAgICAgXHUwMDI2bWFzay1cdTAwM2VhcnAub3AsIFRDQV9GTE9XRVJfS0VZX0FSUF9PUF9NQVNLLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDEzLVx0XHRcdCAgICAgICBzaXplb2Yoa2V5LVx1MDAzZWFycC5vcCkpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDE0Olx0XHRmbF9zZXRfa2V5X3ZhbCh0Yiwga2V5LVx1MDAzZWFycC5zaGEsIFRDQV9GTE9XRVJfS0VZX0FSUF9TSEEsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMTUtXHRcdFx0ICAgICAgIG1hc2stXHUwMDNlYXJwLnNoYSwgVENBX0ZMT1dFUl9LRVlfQVJQX1NIQV9NQVNLLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDE2LVx0XHRcdCAgICAgICBzaXplb2Yoa2V5LVx1MDAzZWFycC5zaGEpKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjAxNzpcdFx0Zmxfc2V0X2tleV92YWwodGIsIGtleS1cdTAwM2VhcnAudGhhLCBUQ0FfRkxPV0VSX0tFWV9BUlBfVEhBLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDE4LVx0XHRcdCAgICAgICBtYXNrLVx1MDAzZWFycC50aGEsIFRDQV9GTE9XRVJfS0VZX0FSUF9USEFfTUFTSyxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMjAtXHR9IGVsc2UgaWYgKGtleS1cdTAwM2ViYXNpYy5pcF9wcm90byA9PSBJUFBST1RPX0wyVFApIHtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjAyMTpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VsMnRwdjMuc2Vzc2lvbl9pZCxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjAyMi1cdFx0XHQgICAgICAgVENBX0ZMT1dFUl9LRVlfTDJUUFYzX1NJRCxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMjUtXHR9IGVsc2UgaWYgKGtleS1cdTAwM2ViYXNpYy5uX3Byb3RvICA9PSBodG9ucyhFVEhfUF9DRk0pKSB7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwMjY6XHRcdHJldCA9IGZsX3NldF9rZXlfY2ZtKHRiLCBrZXksIG1hc2ssIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMjctXHRcdGlmIChyZXQpXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDMzLVx0ICAgIGtleS1cdTAwM2ViYXNpYy5pcF9wcm90byA9PSBJUFBST1RPX1NDVFApIHtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjAzNDpcdFx0cmV0ID0gZmxfc2V0X2tleV9wb3J0X3JhbmdlKHRiLCBrZXksIG1hc2ssIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMzUtXHRcdGlmIChyZXQpXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDM5LVx0aWYgKHRiW1RDQV9GTE9XRVJfS0VZX1NQSV0pIHtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjA0MDpcdFx0cmV0ID0gZmxfc2V0X2tleV9zcGkodGIsIGtleSwgbWFzaywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA0MS1cdFx0aWYgKHJldClcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwNDgtXHRcdG1hc2stXHUwMDNlZW5jX2NvbnRyb2wuYWRkcl90eXBlID0gfjA7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwNDk6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNlZW5jX2lwdjQuc3JjLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDUwLVx0XHRcdCAgICAgICBUQ0FfRkxPV0VSX0tFWV9FTkNfSVBWNF9TUkMsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDUzLVx0XHRcdCAgICAgICBzaXplb2Yoa2V5LVx1MDAzZWVuY19pcHY0LnNyYykpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDU0Olx0XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWVuY19pcHY0LmRzdCxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA1NS1cdFx0XHQgICAgICAgVENBX0ZMT1dFUl9LRVlfRU5DX0lQVjRfRFNULFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA2NC1cdFx0bWFzay1cdTAwM2VlbmNfY29udHJvbC5hZGRyX3R5cGUgPSB+MDtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjA2NTpcdFx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VlbmNfaXB2Ni5zcmMsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwNjYtXHRcdFx0ICAgICAgIFRDQV9GTE9XRVJfS0VZX0VOQ19JUFY2X1NSQyxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwNjktXHRcdFx0ICAgICAgIHNpemVvZihrZXktXHUwMDNlZW5jX2lwdjYuc3JjKSk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwNzA6XHRcdGZsX3NldF9rZXlfdmFsKHRiLCBcdTAwMjZrZXktXHUwMDNlZW5jX2lwdjYuZHN0LFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDcxLVx0XHRcdCAgICAgICBUQ0FfRkxPV0VSX0tFWV9FTkNfSVBWNl9EU1QsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDc2LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDc3Olx0Zmxfc2V0X2tleV92YWwodGIsIFx1MDAyNmtleS1cdTAwM2VlbmNfa2V5X2lkLmtleWlkLCBUQ0FfRkxPV0VSX0tFWV9FTkNfS0VZX0lELFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDc4LVx0XHQgICAgICAgXHUwMDI2bWFzay1cdTAwM2VlbmNfa2V5X2lkLmtleWlkLCBUQ0FfRkxPV0VSX1VOU1BFQyxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwODAtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwODE6XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWVuY190cC5zcmMsIFRDQV9GTE9XRVJfS0VZX0VOQ19VRFBfU1JDX1BPUlQsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwODItXHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZWVuY190cC5zcmMsIFRDQV9GTE9XRVJfS0VZX0VOQ19VRFBfU1JDX1BPUlRfTUFTSyxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwODQtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwODU6XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWVuY190cC5kc3QsIFRDQV9GTE9XRVJfS0VZX0VOQ19VRFBfRFNUX1BPUlQsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwODYtXHRcdCAgICAgICBcdTAwMjZtYXNrLVx1MDAzZWVuY190cC5kc3QsIFRDQV9GTE9XRVJfS0VZX0VOQ19VRFBfRFNUX1BPUlRfTUFTSyxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwODgtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwODk6XHRmbF9zZXRfa2V5X2lwKHRiLCB0cnVlLCBcdTAwMjZrZXktXHUwMDNlZW5jX2lwLCBcdTAwMjZtYXNrLVx1MDAzZWVuY19pcCk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwOTAtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwOTE6XHRmbF9zZXRfa2V5X3ZhbCh0YiwgXHUwMDI2a2V5LVx1MDAzZWhhc2guaGFzaCwgVENBX0ZMT1dFUl9LRVlfSEFTSCxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA5Mi1cdFx0ICAgICAgIFx1MDAyNm1hc2stXHUwMDNlaGFzaC5oYXNoLCBUQ0FfRkxPV0VSX0tFWV9IQVNIX01BU0ssXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMTAwLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMTAxOlx0cmV0ID0gZmxfc2V0X2tleV9jdCh0YiwgXHUwMDI2a2V5LVx1MDAzZWN0LCBcdTAwMjZtYXNrLVx1MDAzZWN0LCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMTAyLVx0aWYgKHJldClcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIxMDUtXHRpZiAodGJbVENBX0ZMT1dFUl9LRVlfRkxBR1NdKSB7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIxMDY6XHRcdHJldCA9IGZsX3NldF9rZXlfZmxhZ3ModGNhX29wdHMsIHRiLCBmYWxzZSxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjEwNy1cdFx0XHRcdCAgICAgICBcdTAwMjZrZXktXHUwMDNlY29udHJvbC5mbGFncyxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIxMTMtXHRpZiAodGJbVENBX0ZMT1dFUl9LRVlfRU5DX0ZMQUdTXSlcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjExNDpcdFx0cmV0ID0gZmxfc2V0X2tleV9mbGFncyh0Y2Ffb3B0cywgdGIsIHRydWUsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIxMTUtXHRcdFx0XHQgICAgICAgXHUwMDI2a2V5LVx1MDAzZWVuY19jb250cm9sLmZsYWdzLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MjM1OD1zdGF0aWMgaW50IGZsX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNDY4LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyNDY5Olx0ZXJyID0gZmxfc2V0X2tleShuZXQsIHRjYV9vcHRzLCB0YiwgXHUwMDI2Zm5ldy1cdTAwM2VrZXksIFx1MDAyNm1hc2stXHUwMDNla2V5LCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNDcwLVx0aWYgKGVycilcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTI4MDc9c3RhdGljIHZvaWQgKmZsX3RtcGx0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfY2hhaW4gKmNoYWluLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjgzMi1cdHRtcGx0LVx1MDAzZWNoYWluID0gY2hhaW47XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjI4MzM6XHRlcnIgPSBmbF9zZXRfa2V5KG5ldCwgdGNhX29wdHMsIHRiLCBcdTAwMjZ0bXBsdC1cdTAwM2VkdW1teV9rZXksXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI4MzQtXHRcdFx0IFx1MDAyNnRtcGx0LVx1MDAzZW1hc2ssIGV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMjgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZsb3dlciBGaWx0ZXIgTW9kaWZpY2F0aW9uIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgZmxvd2VyIGZpbHRlciBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgZmxfY2hhbmdlYCBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiBmb3IsIHdlbGwsIGNoYW5naW5nIHRoZSBmaWx0ZXIuIEFuZCB0aGVuIHRoZXJlJiMzOTtzIGBmbF90bXBsdF9jcmVhdGVgLCB3aGljaCBhbHNvIHNlZW1zIHRvIGJlIGEga2V5IGVudHJ5IHBvaW50IGZvciB0aGlzLCBwb3RlbnRpYWxseSB3aGVuIHdlJiMzOTtyZSBjcmVhdGluZyBhIG5ldyBmbG93ZXIgZmlsdGVyIHRlbXBsYXRlLiBCb3RoIG9mIHRoZXNlIGVudHJ5IHBvaW50cyDigJMgYGZsX2NoYW5nZWAgYW5kIGBmbF90bXBsdF9jcmVhdGVgIOKAkyBldmVudHVhbGx5IGNhbGwgYGZsX3NldF9rZXlgLCB3aGljaCBwcm9iYWJseSBkb2VzIHRoZSBjb3JlIHdvcmsgb2YgYWN0dWFsbHkgY29uZmlndXJpbmcgdGhlIGZpbHRlci4gQWxyaWdodCwgc28gSSYjMzk7dmUgZ290IHR3byBnb29kIGZvY2FsIHBvaW50cyBoZXJlOiBgZmxfY2hhbmdlYCBhbmQgYGZsX3RtcGx0X2NyZWF0ZWAuCgpXYWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBIYW5nIG9uLCBgZmxfY2hhbmdlYCBpcyBhICpjYWxsYmFjayogd2l0aGluIGBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfZmxfb3BzYD8gSW50ZXJlc3RpbmcuIEkgc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBsb29rIGF0IGBjbHNfZmxfb3BzYCB0byBzZWUgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIgaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsuIExldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IHN0cnVjdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfZmxfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19mbG93ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTM4MjI9c3RhdGljIGJvb2wgZmxfZGVsZXRlX2VtcHR5KHN0cnVjdCB0Y2ZfcHJvdG8gKnRwKVxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMzgzMi1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MzgzMzpzdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX2ZsX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODM0LVx0LmtpbmRcdFx0PSBcJiMzNDtmbG93ZXJcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzE5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRmxvd2VyIENsYXNzaWZpZXIgQ29uZmlndXJhdGlvbiBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlIGAuY2hhbmdlYCBjYWxsYmFjaywgd2hpY2ggSSYjMzk7bSBjb25maXJtaW5nIGlzIGBmbF9jaGFuZ2VgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIHNwZWNpZmljcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhdm9pZGluZyB0aG9zZSBmcnVzdHJhdGluZyBkZWJ1Z2dpbmcgc2Vzc2lvbnMgbGF0ZXIuCgpUaGUgY29yZSBpbXBsZW1lbnRhdGlvbiBzZWVtcyB0byBiZSBpbiBgbmV0L3NjaGVkL2Nsc19mbG93ZXIuY2AsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgdGhlcmUgZm9yIHRoZSBtZWF0IG9mIHRoZSBmdW5jdGlvbmFsaXR5LiBOb3csIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbiBpdHNlbGYsIGl0IGxvb2tzIGxpa2UgYE5FVF9DTFNfRkxPV0VSYCBpcyB0aGUga2V5LiBCdXQgdGhhdCBhbG9uZSBkb2VzbiYjMzk7dCBndWFyYW50ZWUgZXZlcnl0aGluZyBpcyBzZXQgdXAgY29ycmVjdGx5LiBJIHNob3VsZCBhbHdheXMgY3Jvc3MtcmVmZXJlbmNlIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBuZXQvc2NoZWQvS2NvbmZpZ2AgdG8gYmUgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciByZWxhdGVkLCBwb3RlbnRpYWxseSBvYnNjdXJlLCBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZsb3dlciBjbGFzc2lmaWVyLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQ0xTX0ZMT1dFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTU2Mj1jb25maWcgTkVUX0NMU19CUEZcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01NzEtXG5uZXQvc2NoZWQvS2NvbmZpZzo1NzI6Y29uZmlnIE5FVF9DTFNfRkxPV0VSXG5uZXQvc2NoZWQvS2NvbmZpZy01NzMtXHR0cmlzdGF0ZSBcJiMzNDtGbG93ZXIgY2xhc3NpZmllclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEyMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBgTkVUX0NMU19GTE9XRVJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0NMU19GTE9XRVJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGNvcmUgY2xhc3NpZmljYXRpb24gbWVjaGFuaXNtcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGluIHRoZSBrZXJuZWwuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIHJlbHkgb24gYE5FVF9DTFNfRkxPV0VSYCBhbmQsIGNvbnZlcnNlbHksIHdoYXQgaXQgbGV2ZXJhZ2VzLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0OgoKKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIFdoYXQgc3RydWN0dXJlcyBkb2VzIGBORVRfQ0xTX0ZMT1dFUmAgZGVmaW5lIG9yIHVzZT8gSXMgaXQgbWFuaXB1bGF0aW5nIGZsb3cga2V5cywgbWFza3MsIGFjdGlvbnMsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBVbmRlcnN0YW5kaW5nIGl0cyBkYXRhIG1vZGVsIGlzIGNydWNpYWwuCiogICAqKkFQSSBJbnRlcmFjdGlvbnM6KiogV2hhdCBrZXJuZWwgQVBJcyBkb2VzIGBORVRfQ0xTX0ZMT1dFUmAgZXhwb3NlPyBBcmUgdGhlcmUgaW9jdGxzLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciBvdGhlciBpbnRlcmZhY2VzIHRoYXQgYWRtaW5pc3RyYXRvcnMgb3IgYXBwbGljYXRpb25zIHVzZSB0byBjb25maWd1cmUgaXQ/CiogICAqKkludGVncmF0aW9uIFBvaW50czoqKiBXaGVyZSBkb2VzIGl0IGhvb2sgaW50byB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aD8gSXMgaXQgaW52b2x2ZWQgaW4gaW5ncmVzcywgZWdyZXNzLCBvciBib3RoPyBEb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgY2xhc3NpZmllcnMgb3IgdHJhZmZpYyBjb250cm9sIG1vZHVsZXMgbGlrZSBgdGNgPwoqICAgKipIYXJkd2FyZSBBYnN0cmFjdGlvbjoqKiBEb2VzIGl0IHN1cHBvcnQgaGFyZHdhcmUgb2ZmbG9hZGluZz8gSWYgc28sIHdoYXQgYXJlIHRoZSByZWxldmFudCBkZXZpY2UgZHJpdmVycyBhbmQgaG93IGRvZXMgaXQgaW50ZXJmYWNlIHdpdGggdGhlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaXMgaW1wbGVtZW50ZWQuCiogICAqKkNvbmZpZ3VyYXRpb246KiogVGhlIGNvbmZpZ3VyYXRpb24gdG9vbHMgZm9yIGBORVRfQ0xTX0ZMT1dFUmAuIEhvdyBpcyBpdCBjb25maWd1cmVkPyBEb2VzIGl0IG5lZWQgZXh0ZXJuYWwgaGVscCwgb3IgaXMgdGhlcmUgYSBzcGVjaWZpYyBjb21tYW5kIHRvIHNldCBwYXJhbWV0ZXJzLgoKVWx0aW1hdGVseSwgSSB3YW50IGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgJiMzNDtyYWlzb24gZCYjMzk7w6p0cmUmIzM0Oy4gSSBuZWVkIHRvIGlkZW50aWZ5IGJvdGggdGhlIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgdHJhZmZpYyBtYW5hZ2VtZW50IHNjaGVtZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcCBpbnRvIHRoZSBzb3VyY2UgY29kZSwgbWF5YmUgZXZlbiBydW4gc29tZSBxdWljayBgZ3JlcGAgcXVlcmllcyBvbiB0aGUgY29kZWJhc2UuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTcwOlx0XHQgIGJlIGNhbGxlZCBjbHNfYnBmLlxuIDU3MTpcdFxuIDU3MjpcdGNvbmZpZyBORVRfQ0xTX0ZMT1dFUlxuIDU3MzpcdFx0dHJpc3RhdGUgXCYjMzQ7Rmxvd2VyIGNsYXNzaWZpZXJcJiMzNDtcbiA1NzQ6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNTc1Olx0XHRoZWxwXG4gNTc2Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgYmFzZWQgb25cbiA1Nzc6XHRcdCAgYSBjb25maWd1cmFibGUgY29tYmluYXRpb24gb2YgcGFja2V0IGtleXMgYW5kIG1hc2tzLlxuIDU3ODpcdFxuIDU3OTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gNTgwOlx0XHQgIGJlIGNhbGxlZCBjbHNfZmxvd2VyLlxuIDU4MTpcdFxuIDU4MjpcdGNvbmZpZyBORVRfQ0xTX01BVENIQUxMXG4gNTgzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNYXRjaC1hbGwgY2xhc3NpZmllclwmIzM0O1xuIDU4NDpcdFx0c2VsZWN0IE5FVF9DTFNcbiA1ODU6XHRcdGhlbHBcbiA1ODY6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyBiYXNlZCBvblxuIDU4NzpcdFx0ICBub3RoaW5nLiBFdmVyeSBwYWNrZXQgd2lsbCBtYXRjaC5cbiA1ODg6XHRcbiA1ODk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgTmV0d29yayBDbGFzc2lmaWVyIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRyYWZmaWMgY2xhc3NpZmljYXRpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYE5FVF9DTFNgIHNldHRpbmcuIEkmIzM5O3ZlIGdvdCB0byBkZXRlcm1pbmUgaXRzIG1lYW5pbmcgYW5kIGltcGxpY2F0aW9uIHdpdGhpbiB0aGUgZ3JlYXRlciBjb250ZXh0IG9mIHRoZSBuZXR3b3JrIHNjaGVkdWxlciwgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgYE5FVF9TQ0hFRGAuIEVzc2VudGlhbGx5LCBgTkVUX0NMU2AgaXMgYSBjaGlsZCBvciBkZXBlbmRlbnQgaXRlbSB3aXRoaW4gdGhlIG92ZXJhbGwgYE5FVF9TQ0hFRGAgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBORVRfQ0xTYCBpcyBzZWxlY3RlZCBhbmQgaG93IGl0cyBzZXR0aW5ncyBpbmZsdWVuY2UgdGhlIG5ldHdvcmsgc2NoZWR1bGVyLiBJIHdpbGwgbm93IHJldmlldyB0aGUgcGFyZW50IGNvbmZpZyBgTkVUX1NDSEVEYCB0byBnYWluIGFuIHVuZGVyc3RhbmRpbmcgb2YgYE5FVF9DTFNgIHdpdGhpbiB0aGF0IGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZy01LVxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxubmV0L3NjaGVkL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTI5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSB1bmRlcnN0YW5kIGl0OgoKKipDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyAmYW1wOyBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBzZWVtcyBsaWtlIGBORVRfU0NIRURgIGFuZCBgTkVUX0NMU19GTE9XRVJgIGFyZSB0aGUga2V5IG9uZXMgSSBuZWVkIHRvIGNvbnNpZGVyIGluaXRpYWxseS4gQnV0IGhhbmcgb24sIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IERvZXMgYE5FVF9DTFNgIGFsc28gZmFjdG9yIGluIGhlcmU/IEl0IGxvb2tzIGxpa2UgYE5FVF9DTFNfRkxPV0VSYCBtaWdodCBpbXBsaWNpdGx5IHNlbGVjdCBgTkVUX0NMU2AsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCBmb3IgZnVsbCBjb25maWd1cmFiaWxpdHkuCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBpZiBgTkVUX1NDSEVEYCBpcyB0cnVseSBlc3NlbnRpYWwsIGFuZCB0aGVuIGRvdWJsZS1jaGVjayB0aGUgbWVudWNvbmZpZyB0byBiZSBzdXJlLiBZZXAsIGl0IGFwcGVhcnMgaXQgaXMgcGFydCBvZiB0aGF0IGNvbmZpZy4gU28sIGFnYWluLCBgTkVUX1NDSEVEYCBhbmQgYE5FVF9DTFNfRkxPV0VSYCBhcmUgdGhlIHR3byBtYWpvciBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBjb25maWd1cmVkLgoKTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCBgZmxfc2V0X2VuY19vcHRgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBndWFyZGVkIGJ5IHNvbWUgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbiBJJiMzOTt2ZSBvdmVybG9va2VkLiBHb3R0YSBiZSBjb21wcmVoZW5zaXZlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfZmxvd2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0OTU6XHRcdH1cbjE0OTY6XHRcbjE0OTc6XHRcdGlmICh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX1BGQ1BfVFlQRV0pXG4xNDk4Olx0XHRcdG1kLVx1MDAzZXR5cGUgPSBubGFfZ2V0X3U4KHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRfUEZDUF9UWVBFXSk7XG4xNDk5Olx0XG4xNTAwOlx0XHRpZiAodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVF9QRkNQX1NFSURdKVxuMTUwMTpcdFx0XHRtZC1cdTAwM2VzZWlkID0gbmxhX2dldF9iZTY0KHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRfUEZDUF9TRUlEXSk7XG4xNTAyOlx0XG4xNTAzOlx0XHRyZXR1cm4gc2l6ZW9mKCptZCk7XG4xNTA0Olx0fVxuMTUwNTpcdFxuMTUwNjpcdHN0YXRpYyBpbnQgZmxfc2V0X2VuY19vcHQoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSxcbjE1MDc6XHRcdFx0XHQgIHN0cnVjdCBmbF9mbG93X2tleSAqbWFzayxcbjE1MDg6XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjE1MDk6XHR7XG4xNTEwOlx0XHRjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGFfZW5jX2tleSwgKm5sYV9vcHRfa2V5LCAqbmxhX29wdF9tc2sgPSBOVUxMO1xuMTUxMTpcdFx0aW50IGVyciwgb3B0aW9uX2xlbiwga2V5X2RlcHRoLCBtc2tfZGVwdGggPSAwO1xuMTUxMjpcdFxuMTUxMzpcdFx0ZXJyID0gbmxhX3ZhbGlkYXRlX25lc3RlZF9kZXByZWNhdGVkKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTXSxcbjE1MTQ6XHRcdFx0XHRcdFx0ICAgICBUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVgsXG4xNTE1Olx0XHRcdFx0XHRcdCAgICAgZW5jX29wdHNfcG9saWN5LCBleHRhY2spO1xuMTUxNjpcdFx0aWYgKGVycilcbjE1MTc6XHRcdFx0cmV0dXJuIGVycjtcbjE1MTg6XHRcbjE1MTk6XHRcdG5sYV9lbmNfa2V5ID0gbmxhX2RhdGEodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNdKTtcbjE1MjA6XHRcbjE1MjE6XHRcdGlmICh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVNLXSkge1xuMTUyMjpcdFx0XHRlcnIgPSBubGFfdmFsaWRhdGVfbmVzdGVkX2RlcHJlY2F0ZWQodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfTUFTS10sXG4xNTIzOlx0XHRcdFx0XHRcdFx0ICAgICBUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVgsXG4xNTI0Olx0XHRcdFx0XHRcdFx0ICAgICBlbmNfb3B0c19wb2xpY3ksIGV4dGFjayk7XG4xNTI1Olx0XHRcdGlmIChlcnIpXG4xNTI2Olx0XHRcdFx0cmV0dXJuIGVycjtcbjE1Mjc6XHRcbjE1Mjg6XHRcdFx0bmxhX29wdF9tc2sgPSBubGFfZGF0YSh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVNLXSk7XG4xNTI5Olx0XHRcdG1za19kZXB0aCA9IG5sYV9sZW4odGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfTUFTS10pO1xuMTUzMDpcdFx0XHRpZiAoIW5sYV9vayhubGFfb3B0X21zaywgbXNrX2RlcHRoKSkge1xuMTUzMTpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBuZXN0ZWQgYXR0cmlidXRlIGZvciBtYXNrc1wmIzM0Oyk7XG4xNTMyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTMzOlx0XHRcdH1cbjE1MzQ6XHRcdH1cbjE1MzU6XHRcbjE1MzY6XHRcdG5sYV9mb3JfZWFjaF9hdHRyKG5sYV9vcHRfa2V5LCBubGFfZW5jX2tleSxcbjE1Mzc6XHRcdFx0XHQgIG5sYV9sZW4odGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNdKSwga2V5X2RlcHRoKSB7XG4xNTM4Olx0XHRcdHN3aXRjaCAobmxhX3R5cGUobmxhX29wdF9rZXkpKSB7XG4xNTM5Olx0XHRcdGNhc2UgVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfR0VORVZFOlxuMTU0MDpcdFx0XHRcdGlmIChrZXktXHUwMDNlZW5jX29wdHMuZHN0X29wdF90eXBlIFx1MDAyNlx1MDAyNlxuMTU0MTpcdFx0XHRcdCAgICBrZXktXHUwMDNlZW5jX29wdHMuZHN0X29wdF90eXBlICE9XG4xNTQyOlx0XHRcdFx0ICAgIElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVCkge1xuMTU0MzpcdFx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtEdXBsaWNhdGUgdHlwZSBmb3IgZ2VuZXZlIG9wdGlvbnNcJiMzNDspO1xuMTU0NDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTEyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBnb2VzIHRvIHRoZSBmYWN0IHRoYXQgdGhpcyBmaXggZm9yIGBmbF9zZXRfZW5jX29wdGAgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBndWFyZGVkIGJ5IGFueXRoaW5nIGJlc2lkZXMgYE5FVF9DTFNfRkxPV0VSYC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIHRoZSBjb250ZXh0LiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSBhbiB1bmNoZWNrZWQgYG1za19kZXB0aGAgaW4gdGhlIGl0ZXJhdGlvbiB1c2luZyBgbmxhX25leHRgIHdpdGhpbiBgZmxfc2V0X2VuY19vcHRgLiBUaGlzIGNvdWxkIGVhc2lseSBsZWFkIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMsIHdoaWNoIGlzIGEgYmlnIGRlYWwuIFRoZSBmaXggaXRzZWxmIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCDigJMgd2UmIzM5O3JlIGV4cGxpY2l0bHkgdmFsaWRhdGluZyBgbXNrX2RlcHRoYCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBgbmxhX29wdF9tc2tgIGRhdGE6CgpgYGBjCgkJbmxhX29wdF9tc2sgPSBubGFfbmV4dChubGFfb3B0X21zaywgJmFtcDttc2tfZGVwdGgpOwoKCQlpZiAobXNrX2RlcHRoICZhbXA7JmFtcDsgIW5sYV9vayhubGFfb3B0X21zaywgbXNrX2RlcHRoKSkgewoJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7QSBtYXNrIGF0dHJpYnV0ZSBpcyBpbnZhbGlkJiMzNDspOwoJCQlyZXR1cm4gLUVJTlZBTDsKCQl9CmBgYAoKVGhpcyBwcmV2ZW50cyBpbnZhbGlkIHBhcnNpbmcgYW5kIHBvdGVudGlhbGx5IGNyYXNoZXMuIEZ1bmN0aW9uYWxseSwgaXQmIzM5O3MgYSBwcmV0dHkgY2xlYW4gZml4LCBidXQgbGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgdHJpZ2dlcmVkLiBJdCYjMzk7cyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0YyBuZXRsaW5rLCB3aGljaCBtZWFucyB0aGlzIGNvdWxkIGJlIGV4cGxvaXRlZC4gSSBuZWVkIHRvIGtub3cgdGhlIGVudHJ5IHBvaW50cy4KClRoZSBmb2N1cyBzeW1ib2xzLCBiYXNlZCBvbiB0aGUgY29kZSYjMzk7cyBjYWxsIGdyYXBoLCBhcmUgYGZsX2NoYW5nZWAgYW5kIGBmbF90bXBsdF9jcmVhdGVgLiBBbmQgdGhlIGNvbmZpZ3MgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFyZSBgTkVUX1NDSEVEYCBhbmQgYE5FVF9DTFNfRkxPV0VSYC4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBpZiBgZmxfc2V0X2VuY19vcHRgIGlzIHN0YXRpYywgYmVjYXVzZSB0aGF0IGhlbHBzIG5hcnJvdyBkb3duIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBZZXAsIGl0IGlzLiBUaGF0IG1lYW5zIHRoZSBmdW5jdGlvbnMgY2FsbGluZyBpdCBkaXJlY3RseSBhcmUgdGhlIGltcG9ydGFudCBvbmVzIHRvIHVuZGVyc3RhbmQuIFNvIGBmbF9jaGFuZ2VgIGFuZCBgZmxfdG1wbHRfY3JlYXRlYCBzZWVtIHRvIGJlIHRoZSBjb3JyZWN0IHN5bWJvbHMgdG8gZm9jdXMgb24uCgpMZXQmIzM5O3MgY2hlY2sgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgY2FsbGluZyBgZmxfc2V0X2VuY19vcHRgLiBgZmxfc2V0X2tleWAgY2FsbHMgaXQuIEhtbSwgYGZsX3NldF9rZXlgIGlzIGFsc28gc3RhdGljLiBBbmQgYGZsX2NoYW5nZWAgYW5kIGBmbF90bXBsdF9jcmVhdGVgIGJvdGggY2FsbCBgZmxfc2V0X2tleWAuIE9rYXksIHNvIGBmbF9jaGFuZ2VgIGFuZCBgZmxfdG1wbHRfY3JlYXRlYCBhcmUgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBhcyBleHBlY3RlZC4gV2FpdC4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSXMgYGZsX2NoYW5nZWAgc3RhdGljPyBZZXMsIGl0IGlzLiBTbyB0aGUgb25seSBlbnRyeSBwb2ludHMgYXJlIHRocm91Z2ggYGNsc19mbF9vcHNgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbF9jaGFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2Zsb3dlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MjMzNj1zdGF0aWMgaW50IGZsX2h0X2luc2VydF91bmlxdWUoc3RydWN0IGNsc19mbF9maWx0ZXIgKmZuZXcsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMzU3LVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMzU4OnN0YXRpYyBpbnQgZmxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjM1OS1cdFx0ICAgICBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MzgzMz1zdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX2ZsX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMzgzOS1cdC5wdXRcdFx0PSBmbF9wdXQsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjM4NDA6XHQuY2hhbmdlXHRcdD0gZmxfY2hhbmdlLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODQxLVx0LmRlbGV0ZVx0XHQ9IGZsX2RlbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTeW1ib2wgVmlzaWJpbGl0eSBmb3IgRmlsdGVyaW5nIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCB0cnlpbmcgdG8gcGlucG9pbnQgdGhlIGJlc3Qgc3ltYm9sIHRvIGZvY3VzIG9uLiBJIHNlZSBgZmxfY2hhbmdlYCDigJMgaXQmIzM5O3Mgc3RhdGljLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIGludGVybmFsLiBCdXQgd2FpdCBhIG1pbnV0ZeKApiBpdCYjMzk7cyB0aGUgY2FsbGJhY2sgZm9yIHRoZSBgLmNoYW5nZWAgb3BlcmF0aW9uISBUaGF0JiMzOTtzIGEga2V5IGRldGFpbC4gSSB3YXMgaW5pdGlhbGx5IHdvbmRlcmluZyBpZiB0aGVyZSB3YXMgYSBub24tc3RhdGljIGFsdGVybmF0aXZlLCBidXQgYGZsX2NoYW5nZWAgaXMgdXNlZCBpbiB0aGUgYGNsc19mbF9vcHNgIHN0cnVjdHVyZSB3aGljaCBpcyB0aGVuIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl90Y2ZfcHJvdG9fb3BzKCZhbXA7Y2xzX2ZsX29wcylgLgoKRnJvbSB3aGF0IEkgY2FuIHRlbGwgZnJvbSBteSB1bmRlcnN0YW5kaW5nIG9mIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCwgdGhlIGFjdHVhbCBlbnRyeSBwb2ludCBpcyBgdGNfbmV3X3RmaWx0ZXJgLCB3aGljaCB0aGVuIGNhbGxzIGB0cC0mZ3Q7b3BzLSZndDtjaGFuZ2UoKWAuIFNvLCBldmVuIHRob3VnaCBgZmxfY2hhbmdlYCBpcyBzdGF0aWMsIGl0JiMzOTtzICp0aGUqIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQgaXRzIGFkZHJlc3MgaXMgdGFrZW4uIFRoYXQgbWFrZXMgaXQgYSBzdHJvbmcgY29udGVuZGVyLCBldmVuIGRlc3BpdGUgdGhlICYjMzk7c3RhdGljJiMzOTsgZGVzaWduYXRpb24uCgpSaWdodCwgbGV0IG1lIHJldmlzaXQgdGhlIG9yaWdpbmFsIHByb21wdDogJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMmIzM0Oy4gKkFoISogU2luY2UgYGZsX2NoYW5nZWAgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBpdCAqY2Fubm90KiBiZSBmdWxseSBpbmxpbmVkLiBUaGUgY29tcGlsZXIgaGFzIHRvIHByZXNlcnZlIGl0cyBhZGRyZXNzLiBTbywgZXZlbiB0aG91Z2ggaXQmIzM5O3MgZGVjbGFyZWQgd2l0aCBgc3RhdGljYCwgaXQgKndpbGwqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBiZWNhdXNlIGl0JiMzOTtzIGJlaW5nIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIuIE1ha2VzIHNlbnNlLiBPa2F5LCB0aGVuLCBjb25zaWRlcmluZyB0aGlzLCB0aGF0IG1lYW5zIHRoYXQgYGZsX3RtcGx0X2NyZWF0ZWAgd2lsbCBhbHNvIGJlIGluIHRoZSBzYW1lIGJvYXQ7IGl0IGFsc28gaGFzIGEgZnVuY3Rpb24gcG9pbnRlciBhbmQgd2lsbCBub3QgYmUgaW5saW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmxfdG1wbHRfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19mbG93ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTI3OTQ9c3RhdGljIHZvaWQgZmxfaHdfZGVzdHJveV90bXBsdChzdHJ1Y3QgdGNmX2NoYWluICpjaGFpbixcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI4MDYtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjI4MDc6c3RhdGljIHZvaWQgKmZsX3RtcGx0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfY2hhaW4gKmNoYWluLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yODA4LVx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqKnRjYSxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTM4MzM9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19mbF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4NDktXHQuYmluZF9jbGFzc1x0PSBmbF9iaW5kX2NsYXNzLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzozODUwOlx0LnRtcGx0X2NyZWF0ZVx0PSBmbF90bXBsdF9jcmVhdGUsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4NTEtXHQudG1wbHRfZGVzdHJveVx0PSBmbF90bXBsdF9kZXN0cm95LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYzNwoJCQkJCQkJb3V0cHV0OiAxMzIKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIEZsb3dlciBDbGFzc2lmaWVyIFBhdGNoKioKCk9rYXksIHNvIGJvdGggYGZsX2NoYW5nZWAgYW5kIGBmbF90bXBsdF9jcmVhdGVgIGFyZSBpbmRlZWQgY2FsbGJhY2tzLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEkmIzM5O2xsIG1lbnRhbGx5IHRhZyB0aGVtIGFzIHRoZSBjZW50cmFsIGZvY3VzIHBvaW50cywgdGhlICYjMzk7Zm9jdXMgc3ltYm9scyYjMzk7IGluIHRoaXMgc2l0dWF0aW9uLgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gdGhlIHBhdGNoIGlzIGFsbCBhYm91dCBmaXhpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIHNvbWUga2luZCBvZiBwcm9ibGVtYXRpYyBhdHRyaWJ1dGUgcGFyc2luZyBpc3N1ZSB3aXRoaW4gYGZsX3NldF9lbmNfb3B0YC4gVGhpcyBoYXBwZW5zIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiBuZXN0ZWQgbmV0bGluayBhdHRyaWJ1dGVzLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byBmbG93ZXIgY2xhc3NpZmllciBlbmNhcHN1bGF0aW9uIG9wdGlvbnMuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNydWNpYWwgY2hlY2sgdG8gdmFsaWRhdGUgYG1za19kZXB0aGAgYmVmb3JlIHRoZSBwcm9jZXNzIGNvbnRpbnVlcy4gVGhpcyB3aWxsIHByZXZlbnQgYSBsb3Qgb2YgcHJvYmxlbXMgaW4gdGhlIGZ1dHVyZS4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgdG91Y2hpbmcgdGhlIGNvcmUgcGFja2V0IGNsYXNzaWZpY2F0aW9uIGxvZ2ljLCBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0YyBuZXRsaW5rLCBzbyB3ZSB3aWxsIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX0NMU19GTE9XRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZmxfdG1wbHRfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciBpbnZhbGlkIGF0dHJpYnV0ZSBwYXJzaW5nIGluIGBmbF9zZXRfZW5jX29wdGAgd2hlbiBwYXJzaW5nIG5lc3RlZCBuZXRsaW5rIGF0dHJpYnV0ZXMgZm9yIGZsb3dlciBjbGFzc2lmaWVyIGVuY2Fwc3VsYXRpb24gb3B0aW9ucy4gSXQgYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSBgbXNrX2RlcHRoYCBpcyB2YWxpZCBiZWZvcmUgY29udGludWluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHBhY2tldCBjbGFzc2lmaWNhdGlvbiBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRjIG5ldGxpbmsuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0ZMT1dFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZsX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmbF90bXBsdF9jcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIGludmFsaWQgYXR0cmlidXRlIHBhcnNpbmcgaW4gYGZsX3NldF9lbmNfb3B0YCB3aGVuIHBhcnNpbmcgbmVzdGVkIG5ldGxpbmsgYXR0cmlidXRlcyBmb3IgZmxvd2VyIGNsYXNzaWZpZXIgZW5jYXBzdWxhdGlvbiBvcHRpb25zLiBJdCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIGBtc2tfZGVwdGhgIGlzIHZhbGlkIGJlZm9yZSBjb250aW51aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgcGFja2V0IGNsYXNzaWZpY2F0aW9uIGxvZ2ljIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGMgbmV0bGluay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZHMgY2hlY2sgKGBubGFfb2tgKSBmb3IgbmV0bGluayBhdHRyaWJ1dGVzIGFmdGVyIGFkdmFuY2luZyB0aGUgYXR0cmlidXRlIHBvaW50ZXIgd2l0aCBgbmxhX25leHRgLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIGNvdWxkIHJlYWQgb3V0LW9mLWJvdW5kcyBtZW1vcnkgd2hlbiBhY2Nlc3NpbmcgdGhlIG5leHQgYXR0cmlidXRlJiMzOTtzIGhlYWRlciBvciBkYXRhLiBPdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkMTg4Yzk4OTA2YTlhM2Y1YWExMzVmNmMwNDhmNjAzNmRkYTgwMmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAwMzoyNzoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jCmluZGV4IDBlMjc1YjU4MTUxYzQuLjFjZWZlYTU3MWVmZDcgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYwpAQCAtMTcwMyw2ICYjNDM7MTcwMywxMSBAQCBzdGF0aWMgaW50IGZsX3NldF9lbmNfb3B0KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlubGFfb3B0X21zayA9IG5sYV9uZXh0KG5sYV9vcHRfbXNrLCAmYW1wO21za19kZXB0aCk7CiYjNDM7CiYjNDM7CQlpZiAobXNrX2RlcHRoICZhbXA7JmFtcDsgIW5sYV9vayhubGFfb3B0X21zaywgbXNrX2RlcHRoKSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtBIG1hc2sgYXR0cmlidXRlIGlzIGludmFsaWQmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiAJfQogCiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDIxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUmVjZW50IEZsb3dlciBDbGFzc2lmaWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBuZXQvc2NoZWQvY2xzX2Zsb3dlci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIGluIGBmbF9zZXRfZW5jX29wdGAuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZXkmIzM5O3ZlIGFkZGVkIGEgYm91bmRzIGNoZWNrLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIHVzaW5nIGBubGFfb2soKWAgdG8gdmFsaWRhdGUgdGhlIGBubGFfb3B0X21za2AgbmV0bGluayBhdHRyaWJ1dGUgYmVmb3JlIGFjY2Vzc2luZyBpdC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoaXMgaXMgYmVjYXVzZSwgd2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgY29kZSBjb3VsZCBwb3RlbnRpYWxseSByZWFkIG1lbW9yeSBvdXRzaWRlIG9mIHRoZSBhbGxvY2F0ZWQgYm91bmRzLCBhIGNsYXNzaWMgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4gVGhlIGNvZGUgbm93IGNoZWNrcyBpZiBgbXNrX2RlcHRoYCBpcyB2YWxpZCwgYW5kIGlmIG5vdCwgaXQgdGhyb3dzIGFuIGAtRUlOVkFMYCBlcnJvciB2aWEgYE5MX1NFVF9FUlJfTVNHYC4KClRoZSB1c2Ugb2YgYG5sYV9va2AgaXMgYSBzb2xpZCBkZWZlbnNlIGFnYWluc3Qgb3V0LW9mLWJvdW5kcyByZWFkcyBkdXJpbmcgdGhlIHByb2Nlc3Npbmcgb2YgTmV0bGluayBhdHRyaWJ1dGVzLCBhIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIGFwcHJvYWNoLiBBIHJvZ3VlIE5ldGxpbmsgbWVzc2FnZSBjcmFmdGVkIHdpdGggYSBnYXJiYWdlIGxlbmd0aCBjb3VsZCBjYXVzZSBhIGNyYXNoIG9yIGV2ZW4gbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcy4gVGhhbmtmdWxseSwgS0FTQU4gd291bGQgbGlrZWx5IGNhdGNoIHRoYXQsIGJ1dCBwcmV2ZW50aW5nIHRoZSBpc3N1ZSBlbnRpcmVseSBpcyBhbHdheXMgcHJlZmVyYWJsZSwgc28gSSBhcHByZWNpYXRlIHNlZWluZyB0aGlzIHR5cGUgb2YgcHJvYWN0aXZlIG1lYXN1cmUuCgpOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLi4uIGRvZXMgdGhpcyBwYXRjaCwgaW4gaXRzIGltcGxlbWVudGF0aW9uLCBpbnRyb2R1Y2UgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeT8gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgYGZsX3NldF9lbmNfb3B0YCBpdHNlbGYgdG8gYmUgc3VyZS4gSSYjMzk7bSBzYXRpc2ZpZWQgc28gZmFyLCB0aG91Z2gsIHRoYXQgdGhpcyBwYXRjaCBpcyBhIGRlZmluaXRlIHBvc2l0aXZlIGluIHRlcm1zIG9mIGhhcmRlbmluZyB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zmxfc2V0X2VuY19vcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2Zsb3dlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MTQ2OD1zdGF0aWMgaW50IGZsX3NldF9wZmNwX29wdChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBmbF9mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTUwNS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTUwNjpzdGF0aWMgaW50IGZsX3NldF9lbmNfb3B0KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE1MDctXHRcdFx0ICBzdHJ1Y3QgZmxfZmxvd19rZXkgKm1hc2ssXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0xODcxPXN0YXRpYyBpbnQgZmxfc2V0X2tleShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRjYV9vcHRzLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA5NS1cdGlmICh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU10pIHtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjA5NjpcdFx0cmV0ID0gZmxfc2V0X2VuY19vcHQodGIsIGtleSwgbWFzaywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA5Ny1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgZmxfc2V0X2VuY19vcHRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBpdC4gVGltZSB0byB1bmRlcnN0YW5kIGBmbF9zZXRfZW5jX29wdGAuIEkgbmVlZCB0byBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4gSXMgaXQgc2V0dGluZyBlbmNvZGluZyBvcHRpb25zIGZvciB0aGUgZmlsZSwgcGVyaGFwcz8gTWF5YmUgaXQmIzM5O3MgYWRqdXN0aW5nIGNvbXByZXNzaW9uIHBhcmFtZXRlcnM/IFdoYXRldmVyIGl0JiMzOTtzIGRvaW5nLCBpdCYjMzk7cyBjbGVhcmx5IGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLCBzbyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbiBhbmQgYnJlYWsgaXQgZG93bi4gR290dGEgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgc3lzdGVtJiMzOTtzIGJlaGF2aW9yLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19mbG93ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY4MDpcdFx0XHRcdG1hc2stXHUwMDNlZW5jX29wdHMuZHN0X29wdF90eXBlID0gSVBfVFVOTkVMX1BGQ1BfT1BUX0JJVDtcbjE2ODE6XHRcdFx0XHRvcHRpb25fbGVuID0gZmxfc2V0X3BmY3Bfb3B0KG5sYV9vcHRfbXNrLCBtYXNrLFxuMTY4MjpcdFx0XHRcdFx0XHRcdCAgICAgbXNrX2RlcHRoLCBvcHRpb25fbGVuLFxuMTY4MzpcdFx0XHRcdFx0XHRcdCAgICAgZXh0YWNrKTtcbjE2ODQ6XHRcdFx0XHRpZiAob3B0aW9uX2xlbiBcdTAwM2MgMClcbjE2ODU6XHRcdFx0XHRcdHJldHVybiBvcHRpb25fbGVuO1xuMTY4NjpcdFxuMTY4NzpcdFx0XHRcdG1hc2stXHUwMDNlZW5jX29wdHMubGVuICYjNDM7PSBvcHRpb25fbGVuO1xuMTY4ODpcdFx0XHRcdGlmIChrZXktXHUwMDNlZW5jX29wdHMubGVuICE9IG1hc2stXHUwMDNlZW5jX29wdHMubGVuKSB7XG4xNjg5Olx0XHRcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtLZXkgYW5kIG1hc2sgbWlzcyBhbGlnbmVkXCYjMzQ7KTtcbjE2OTA6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTY5MTpcdFx0XHRcdH1cbjE2OTI6XHRcdFx0XHRicmVhaztcbjE2OTM6XHRcdFx0ZGVmYXVsdDpcbjE2OTQ6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1Vua25vd24gdHVubmVsIG9wdGlvbiB0eXBlXCYjMzQ7KTtcbjE2OTU6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE2OTY6XHRcdFx0fVxuMTY5NzpcdFxuMTY5ODpcdFx0XHRpZiAoIW1za19kZXB0aClcbjE2OTk6XHRcdFx0XHRjb250aW51ZTtcbjE3MDA6XHRcbjE3MDE6XHRcdFx0aWYgKCFubGFfb2sobmxhX29wdF9tc2ssIG1za19kZXB0aCkpIHtcbjE3MDI6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0EgbWFzayBhdHRyaWJ1dGUgaXMgaW52YWxpZFwmIzM0Oyk7XG4xNzAzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzA0Olx0XHRcdH1cbjE3MDU6XHRcdFx0bmxhX29wdF9tc2sgPSBubGFfbmV4dChubGFfb3B0X21zaywgXHUwMDI2bXNrX2RlcHRoKTtcbjE3MDY6XHRcbjE3MDc6XHRcdFx0aWYgKG1za19kZXB0aCBcdTAwMjZcdTAwMjYgIW5sYV9vayhubGFfb3B0X21zaywgbXNrX2RlcHRoKSkge1xuMTcwODpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7QSBtYXNrIGF0dHJpYnV0ZSBpcyBpbnZhbGlkXCYjMzQ7KTtcbjE3MDk6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE3MTA6XHRcdFx0fVxuMTcxMTpcdFx0fVxuMTcxMjpcdFxuMTcxMzpcdFx0cmV0dXJuIDA7XG4xNzE0Olx0fVxuMTcxNTpcdFxuMTcxNjpcdHN0YXRpYyBpbnQgZmxfdmFsaWRhdGVfY3Rfc3RhdGUodTE2IHN0YXRlLCBzdHJ1Y3QgbmxhdHRyICp0YixcbjE3MTc6XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjE3MTg6XHR7XG4xNzE5Olx0XHRpZiAoc3RhdGUgXHUwMDI2XHUwMDI2ICEoc3RhdGUgXHUwMDI2IFRDQV9GTE9XRVJfS0VZX0NUX0ZMQUdTX1RSQUNLRUQpKSB7XG4xNzIwOlx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCB0YixcbjE3MjE6XHRcdFx0XHRcdCAgICBcJiMzNDtubyB0cmssIHNvIG5vIG90aGVyIGZsYWcgY2FuIGJlIHNldFwmIzM0Oyk7XG4xNzIyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTcyMzpcdFx0fVxuMTcyNDpcdFxuMTcyNTpcdFx0aWYgKHN0YXRlIFx1MDAyNiBUQ0FfRkxPV0VSX0tFWV9DVF9GTEFHU19ORVcgXHUwMDI2XHUwMDI2XG4xNzI2Olx0XHQgICAgc3RhdGUgXHUwMDI2IFRDQV9GTE9XRVJfS0VZX0NUX0ZMQUdTX0VTVEFCTElTSEVEKSB7XG4xNzI3Olx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCB0YixcbjE3Mjg6XHRcdFx0XHRcdCAgICBcJiMzNDtuZXcgYW5kIGVzdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlXCYjMzQ7KTtcbjE3Mjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIE91dC1vZi1Cb3VuZHMgQWNjZXNzIGluIE5ldGxpbmsgQXR0cmlidXRlIEhhbmRsaW5nKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBjaGVjayBmb3IgYG5sYV9va2AgYWZ0ZXIgYSBjYWxsIHRvIGBubGFfbmV4dGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgZGVzaWduZWQgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGUgcmVhc29uaW5nIHNlZW1zIHRvIGJlIHRoYXQgYWZ0ZXIgYG5sYV9uZXh0YCB1cGRhdGVzIHRoZSBwb2ludGVyLCB0aGUgcmVtYWluaW5nIGxlbmd0aCBgbXNrX2RlcHRoYCBtaWdodCBzdGlsbCBiZSBwb3NpdGl2ZSwgYnV0IHRoZSBuZXcgYG5sYV9vcHRfbXNrYCB3b3VsZG4mIzM5O3QgYmUgY29tcGxldGVseSB3aXRoaW4gdGhlIGJ1ZmZlciYjMzk7cyBib3VuZGFyaWVzLiBJIGltbWVkaWF0ZWx5IGhhdmUgYSBxdWVzdGlvbjogZG9lc24mIzM5O3QgYG5sYV9uZXh0YCAqaXRzZWxmKiB1cGRhdGUgYm90aCB0aGUgcG9pbnRlciBhbmQgdGhlIHJlbWFpbmluZyBsZW5ndGg/IElmIGBtc2tfZGVwdGhgIGlzIHBvc2l0aXZlLCB0aGUgbG9vcCBzaG91bGQgY29udGludWUsIGFuZCBpbiB0aGUgbmV4dCBpdGVyYXRpb24sIHdlJiMzOTtsbCBhY2Nlc3MgYG5sYV9vcHRfbXNrYC4gU28sIHdoZXJlIGlzIHRoZSB2dWxuZXJhYmlsaXR5PwoKV2FpdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgaG93IHRoaXMgd2hvbGUgdGhpbmcgaXMgc3RydWN0dXJlZC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlIG91dGVyIGxvb3AgaXMgYWN0dWFsbHkgYSBgbmxhX2Zvcl9lYWNoX25lc3RlZGAgbG9vcC4gT2ssIHllcywgdGhhdCYjMzk7cyByaWdodC4gYG5sYV9mb3JfZWFjaF9uZXN0ZWQobmxhX29wdF9rZXksIG5sYV9vcHRfa2V5X3RiLCBrZXlfZGVwdGgpYC4KCkFscmlnaHQsIEkgc2hvdWxkIHByb2JhYmx5IHJlLXJlYWQgdGhlIHN0YXJ0IG9mIHRoYXQgbG9vcCB0byBzZWUgaG93IHRoaXMgd29ya3MuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiB0aGUgcHJvY2VzcyB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBlZGdlIGNhc2UgYmVpbmcgYWRkcmVzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfZmxvd2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MDA6XHRcdGlmICh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX1BGQ1BfU0VJRF0pXG4xNTAxOlx0XHRcdG1kLVx1MDAzZXNlaWQgPSBubGFfZ2V0X2JlNjQodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVF9QRkNQX1NFSURdKTtcbjE1MDI6XHRcbjE1MDM6XHRcdHJldHVybiBzaXplb2YoKm1kKTtcbjE1MDQ6XHR9XG4xNTA1Olx0XG4xNTA2Olx0c3RhdGljIGludCBmbF9zZXRfZW5jX29wdChzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBmbF9mbG93X2tleSAqa2V5LFxuMTUwNzpcdFx0XHRcdCAgc3RydWN0IGZsX2Zsb3dfa2V5ICptYXNrLFxuMTUwODpcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTUwOTpcdHtcbjE1MTA6XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYV9lbmNfa2V5LCAqbmxhX29wdF9rZXksICpubGFfb3B0X21zayA9IE5VTEw7XG4xNTExOlx0XHRpbnQgZXJyLCBvcHRpb25fbGVuLCBrZXlfZGVwdGgsIG1za19kZXB0aCA9IDA7XG4xNTEyOlx0XG4xNTEzOlx0XHRlcnIgPSBubGFfdmFsaWRhdGVfbmVzdGVkX2RlcHJlY2F0ZWQodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNdLFxuMTUxNDpcdFx0XHRcdFx0XHQgICAgIFRDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX01BWCxcbjE1MTU6XHRcdFx0XHRcdFx0ICAgICBlbmNfb3B0c19wb2xpY3ksIGV4dGFjayk7XG4xNTE2Olx0XHRpZiAoZXJyKVxuMTUxNzpcdFx0XHRyZXR1cm4gZXJyO1xuMTUxODpcdFxuMTUxOTpcdFx0bmxhX2VuY19rZXkgPSBubGFfZGF0YSh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU10pO1xuMTUyMDpcdFxuMTUyMTpcdFx0aWYgKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX01BU0tdKSB7XG4xNTIyOlx0XHRcdGVyciA9IG5sYV92YWxpZGF0ZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVNLXSxcbjE1MjM6XHRcdFx0XHRcdFx0XHQgICAgIFRDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX01BWCxcbjE1MjQ6XHRcdFx0XHRcdFx0XHQgICAgIGVuY19vcHRzX3BvbGljeSwgZXh0YWNrKTtcbjE1MjU6XHRcdFx0aWYgKGVycilcbjE1MjY6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTUyNzpcdFxuMTUyODpcdFx0XHRubGFfb3B0X21zayA9IG5sYV9kYXRhKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX01BU0tdKTtcbjE1Mjk6XHRcdFx0bXNrX2RlcHRoID0gbmxhX2xlbih0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVNLXSk7XG4xNTMwOlx0XHRcdGlmICghbmxhX29rKG5sYV9vcHRfbXNrLCBtc2tfZGVwdGgpKSB7XG4xNTMxOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIG5lc3RlZCBhdHRyaWJ1dGUgZm9yIG1hc2tzXCYjMzQ7KTtcbjE1MzI6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1MzM6XHRcdFx0fVxuMTUzNDpcdFx0fVxuMTUzNTpcdFxuMTUzNjpcdFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhX29wdF9rZXksIG5sYV9lbmNfa2V5LFxuMTUzNzpcdFx0XHRcdCAgbmxhX2xlbih0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU10pLCBrZXlfZGVwdGgpIHtcbjE1Mzg6XHRcdFx0c3dpdGNoIChubGFfdHlwZShubGFfb3B0X2tleSkpIHtcbjE1Mzk6XHRcdFx0Y2FzZSBUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19HRU5FVkU6XG4xNTQwOlx0XHRcdFx0aWYgKGtleS1cdTAwM2VlbmNfb3B0cy5kc3Rfb3B0X3R5cGUgXHUwMDI2XHUwMDI2XG4xNTQxOlx0XHRcdFx0ICAgIGtleS1cdTAwM2VlbmNfb3B0cy5kc3Rfb3B0X3R5cGUgIT1cbjE1NDI6XHRcdFx0XHQgICAgSVBfVFVOTkVMX0dFTkVWRV9PUFRfQklUKSB7XG4xNTQzOlx0XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0R1cGxpY2F0ZSB0eXBlIGZvciBnZW5ldmUgb3B0aW9uc1wmIzM0Oyk7XG4xNTQ0Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1NDU6XHRcdFx0XHR9XG4xNTQ2Olx0XHRcdFx0b3B0aW9uX2xlbiA9IDA7XG4xNTQ3Olx0XHRcdFx0a2V5LVx1MDAzZWVuY19vcHRzLmRzdF9vcHRfdHlwZSA9IElQX1RVTk5FTF9HRU5FVkVfT1BUX0JJVDtcbjE1NDg6XHRcdFx0XHRvcHRpb25fbGVuID0gZmxfc2V0X2dlbmV2ZV9vcHQobmxhX29wdF9rZXksIGtleSxcbjE1NDk6XHRcdFx0XHRcdFx0XHQgICAgICAga2V5X2RlcHRoLCBvcHRpb25fbGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDAzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQXR0cmlidXRlIFByb2Nlc3NpbmcgTG9vcCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGUgYG5sYV9mb3JfZWFjaF9hdHRyYCBsb29wLiBUaGF0JiMzOTtzIG91ciBzdGFydGluZyBwb2ludCwgaXRlcmF0aW5nIHRocm91Z2ggYXR0cmlidXRlcyB1c2luZyBgbmxhX29wdF9rZXlgLiBJdCB0aGVuIHByb2NlZWRzIHRvIHByb2Nlc3MgYG5sYV9vcHRfbXNrYCBpZiBgbXNrX2RlcHRoYCBpcyBhbnl0aGluZyBvdGhlciB0aGFuIHplcm8uCgpBaCwgSSBzZWUuLi4gYWZ0ZXIgdGhlIG1haW4gcHJvY2Vzc2luZyB3aXRoaW4gdGhlIGxvb3AsIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgYmxvY2suIElmIGBtc2tfZGVwdGhgIGlzIHplcm8sIHdlIGBjb250aW51ZWAg4oCTIG1ha2VzIHNlbnNlLCBza2lwIHRoZSBtYXNrIHByb2Nlc3NpbmcuIEJ1dCBpZiBpdCYjMzk7cyBub3QgemVybywgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBXZSBoYXZlIHRoaXMgYG5sYV9va2AgY2hlY2ssIGdvb2QsIGVuc3VyaW5nIHRoZSBtYXNrIGF0dHJpYnV0ZSBpcyB2YWxpZC4gVGhlbiwgYG5sYV9uZXh0YCBhZHZhbmNlcyBgbmxhX29wdF9tc2tgIGFuZCB1cGRhdGVzIHRoZSBkZXB0aC4gIAoKSGFuZyBvbi4uLiB0aGUgKnBhdGNoKiBzcGVjaWZpY2FsbHkgYWRkcyBhICpzZWNvbmQqIGBubGFfb2tgIGNoZWNrIGFmdGVyIHRoZSBjYWxsIHRvIGBubGFfbmV4dGAuIFRoYXQmIzM5O3MgdGhlIGtleSBhZGRpdGlvbi4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCBhZnRlciB0aGUgZmlyc3QgY2FsbCB0byBgbmxhX29rYCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIG9uIGEgdmFsaWQgYXR0cmlidXRlLCB3ZSAqYWR2YW5jZSogdGhlIHBvaW50ZXIgdXNpbmcgYG5sYV9uZXh0YCBhbmQgY2hlY2sgdGhlICpuZXh0KiBhdHRyaWJ1dGUuIFRoaXMgbWVhbnMgaW4gdGhlIHN1YnNlcXVlbnQgaXRlcmF0aW9uIG9mIHRoZSBsb29wLCB0aGUgY29kZSB3aWxsIGJlIHdvcmtpbmcgd2l0aCB0aGUgKm5leHQqIG1hc2sgYXR0cmlidXRlLgoKU28sIGBubGFfbmV4dGAgbW92ZXMgdGhlIHBvaW50ZXIgYW5kIHVwZGF0ZXMgdGhlIHJlbWFpbmluZyBsZW5ndGggKGBtc2tfZGVwdGhgKS4gVGhlbiwgaW4gdGhlICpuZXh0KiBpdGVyYXRpb24gb2YgdGhlIG1haW4gbG9vcCwgaXQmIzM5O2xsIHBhc3MgdGhpcyB1cGRhdGVkIGBubGFfb3B0X21za2AgdG8gZnVuY3Rpb25zIGxpa2UgYGZsX3NldF9nZW5ldmVfb3B0YCwgYGZsX3NldF92eGxhbl9vcHRgLCBgZmxfc2V0X2Vyc3Bhbl9vcHRgLCBvciBgZmxfc2V0X3BmY3Bfb3B0YC4gIEkgbmVlZCB0byBjaGVjayB3aGF0IHRob3NlIGZ1bmN0aW9ucyBkby4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggd2hhdCBgZmxfc2V0X2dlbmV2ZV9vcHRgIGRvZXMsIGFuZCB3aGF0IGl0IGV4cGVjdHMgZm9yIHRoZSBhdHRyaWJ1dGUuIFRoYXQmIzM5O2xsIHRlbGwgbWUgaWYgdGhpcyBhZGRpdGlvbiBvZiB0aGUgc2Vjb25kIGBubGFfb2tgIGNhbGwgcmVhbGx5IG1ha2VzIHNlbnNlLCBvciBpZiBpdCBoYXMgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfZmxvd2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMzA6XHRcdG1kID0gKHN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqKVx1MDAyNmtleS1cdTAwM2VlbmNfb3B0cy5kYXRhW2tleS1cdTAwM2VlbmNfb3B0cy5sZW5dO1xuMTMzMTpcdFx0bWVtc2V0KG1kLCAweGZmLCBzaXplb2YoKm1kKSk7XG4xMzMyOlx0XG4xMzMzOlx0XHRpZiAoIWRlcHRoKVxuMTMzNDpcdFx0XHRyZXR1cm4gc2l6ZW9mKCptZCk7XG4xMzM1Olx0XG4xMzM2Olx0XHRpZiAobmxhX3R5cGUobmxhKSAhPSBUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19WWExBTikge1xuMTMzNzpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O05vbi12eGxhbiBvcHRpb24gdHlwZSBmb3IgbWFza1wmIzM0Oyk7XG4xMzM4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTMzOTpcdFx0fVxuMTM0MDpcdFxuMTM0MTpcdFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgVENBX0ZMT1dFUl9LRVlfRU5DX09QVF9WWExBTl9NQVgsIG5sYSxcbjEzNDI6XHRcdFx0XHQgICAgICAgdnhsYW5fb3B0X3BvbGljeSwgZXh0YWNrKTtcbjEzNDM6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMzQ0Olx0XHRcdHJldHVybiBlcnI7XG4xMzQ1Olx0XG4xMzQ2Olx0XHRpZiAoIW9wdGlvbl9sZW4gXHUwMDI2XHUwMDI2ICF0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX1ZYTEFOX0dCUF0pIHtcbjEzNDc6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtNaXNzaW5nIHR1bm5lbCBrZXkgdnhsYW4gb3B0aW9uIGdicFwmIzM0Oyk7XG4xMzQ4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTM0OTpcdFx0fVxuMTM1MDpcdFxuMTM1MTpcdFx0aWYgKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRfVlhMQU5fR0JQXSkge1xuMTM1MjpcdFx0XHRtZC1cdTAwM2VnYnAgPSBubGFfZ2V0X3UzMih0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX1ZYTEFOX0dCUF0pO1xuMTM1MzpcdFx0XHRtZC1cdTAwM2VnYnAgXHUwMDI2PSBWWExBTl9HQlBfTUFTSztcbjEzNTQ6XHRcdH1cbjEzNTU6XHRcbjEzNTY6XHRcdHJldHVybiBzaXplb2YoKm1kKTtcbjEzNTc6XHR9XG4xMzU4Olx0XG4xMzU5Olx0c3RhdGljIGludCBmbF9zZXRfZXJzcGFuX29wdChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBmbF9mbG93X2tleSAqa2V5LFxuMTM2MDpcdFx0XHRcdCAgICAgaW50IGRlcHRoLCBpbnQgb3B0aW9uX2xlbixcbjEzNjE6XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjEzNjI6XHR7XG4xMzYzOlx0XHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX0VSU1BBTl9NQVggJiM0MzsgMV07XG4xMzY0Olx0XHRzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICptZDtcbjEzNjU6XHRcdGludCBlcnI7XG4xMzY2Olx0XG4xMzY3Olx0XHRtZCA9IChzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICopXHUwMDI2a2V5LVx1MDAzZWVuY19vcHRzLmRhdGFba2V5LVx1MDAzZWVuY19vcHRzLmxlbl07XG4xMzY4Olx0XHRtZC1cdTAwM2V2ZXJzaW9uID0gMTtcbjEzNjk6XHRcbjEzNzA6XHRcdGlmICghZGVwdGgpXG4xMzcxOlx0XHRcdHJldHVybiBzaXplb2YoKm1kKTtcbjEzNzI6XHRcbjEzNzM6XHRcdGlmIChubGFfdHlwZShubGEpICE9IFRDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX0VSU1BBTikge1xuMTM3NDpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O05vbi1lcnNwYW4gb3B0aW9uIHR5cGUgZm9yIG1hc2tcJiMzNDspO1xuMTM3NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEzNzY6XHRcdH1cbjEzNzc6XHRcbjEzNzg6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIFRDQV9GTE9XRVJfS0VZX0VOQ19PUFRfRVJTUEFOX01BWCwgbmxhLFxuMTM3OTpcdFx0XHRcdCAgICAgICBlcnNwYW5fb3B0X3BvbGljeSwgZXh0YWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE3MAoJCQkJCQkJb3V0cHV0OiAxMzQKCQkJCQkJCXRob3VnaHRzOiAxMjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktBU0FOJiMzOTtzIEdvdCBUaGlzOiBOZXRsaW5rIEF0dHJpYnV0ZSBQYXJzaW5nIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBlcnNwZWN0aXZlLiBJbiBgZmxfc2V0X3Z4bGFuX29wdGAgYW5kIGBmbF9zZXRfZXJzcGFuX29wdGAsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGluZyBgbmxhX3BhcnNlX25lc3RlZGAuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBpZiBgbmxhYCBpc24mIzM5O3QgYSB2YWxpZCBhdHRyaWJ1dGUsIHRoZSBgbmxhX3BhcnNlX25lc3RlZGAgZnVuY3Rpb24gY291bGQgZW5kIHVwIGFjY2Vzc2luZyBtZW1vcnkgaXQgc2hvdWxkbiYjMzk7dC4gQW5kIHllcywgSSB1bmRlcnN0YW5kIHRoYXQgaW50ZXJuYWxseSwgYG5sYV9wYXJzZV9uZXN0ZWRgIHVzZXMgYG5sYV9wYXJzZWAsIHdoaWNoIHVzZXMgYG5sYV9kYXRhKG5sYSlgIGFuZCBgbmxhX2xlbihubGEpYC4gSWYgYG5sYWAgaXMgb3V0IG9mIGJvdW5kcywgdGhpcyBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS4KCk15IGZpcnN0IHRob3VnaHQ/IFRoaXMgbG9va3MgbGlrZSBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHNjZW5hcmlvLiBBbmQsIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGlzICpkZXNpZ25lZCogdG8gY2F0Y2ggdGhlc2UgcGVyZmVjdGx5LiBTbywgSSBoYXZlIHRvIGFzayBteXNlbGYsIGlzIHRoZXJlIGFuICp1bmluaXRpYWxpemVkKiBtZW1vcnkgcHJvYmxlbSBoZXJlPwoKTGV0JiMzOTtzIGxvb2sgYXQgYG5sYV9vcHRfbXNrYC4gVGhpcyB2YXJpYWJsZSBpcyBkZXJpdmVkIGZyb20gYHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX01BU0tdYCwgd2hpY2ggY29tZXMgZnJvbSBhIG5ldGxpbmsgYXR0cmlidXRlIGZyb20gdXNlciBzcGFjZS4gVGhlIG5ldGxpbmsgbWVzc2FnZSBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlLCBzbyBpdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgYWxlcnQgb24gYW4gb3V0LW9mLWJvdW5kcyBpc3N1ZS4KCkJ1dCwgaWYgYG5sYV9uZXh0YCBhZHZhbmNlcyBgbmxhX29wdF9tc2tgIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBuZXRsaW5rIG1lc3NhZ2UsIHRoZW4gaXQmIzM5O3MgZ29pbmcgdG8gcG9pbnQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBJZiBpdCYjMzk7cyBvdXQgb2YgYm91bmRzLCBLQVNBTiB3aWxsIGNhdGNoIGl0LiBJZiBpdCYjMzk7cyB3aXRoaW4gdGhlIHNrYiBidXQgdW5pbml0aWFsaXplZCDigJMgcGVyaGFwcyBwYWRkaW5nIOKAkyBLTVNBTiAqbWlnaHQqIGNhdGNoIGl0LCBidXQgS0FTQU4gd291bGRuJiMzOTt0LiBIb3dldmVyLCBuZXRsaW5rIG1lc3NhZ2VzIGFyZSB1c3VhbGx5IGFsbG9jYXRlZCB3aXRoIHNvbWV0aGluZyBsaWtlIGBrbWFsbG9jYCwgYW5kIHRoZSBza2IgZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlLiBUaGUgbGVuZ3RoIG9mIHRoZSBza2IgaXMgd2VsbC1kZWZpbmVkLiBJZiBgbmxhX25leHRgIGFkdmFuY2VzIGJleW9uZCB0aGUgbmV0bGluayBhdHRyaWJ1dGUgbGVuZ3RoLCBpdCBjb3VsZCBiZSB3aXRoaW4gdGhlIHNrYiBkYXRhLiBIb3dldmVyLCBgbXNrX2RlcHRoYCByZXByZXNlbnRzIHRoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBuZXN0ZWQgYXR0cmlidXRlLiBJZiBgbXNrX2RlcHRoYCBpcyBwb3NpdGl2ZSwgdGhlIG5lc3RlZCBhdHRyaWJ1dGUmIzM5O3MgbGVuZ3RoIGhlYWRlciBpbmRpY2F0ZXMgaXQmIzM5O3MgbGFyZ2VyIHRoYW4gd2hhdCYjMzk7cyBhY3R1YWxseSBpbiBpdC4KCk5vdywgYG5sYV9va2AgaXMgaW1wb3J0YW50LiBUaGlzIGNoZWNrIGVuc3VyZXMgdGhhdCBgbmxhYCBpcyBhY3R1YWxseSAqd2l0aGluKiBgbXNrX2RlcHRoYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZToKCmBgYGMKc3RhdGljIGlubGluZSBpbnQgbmxhX29rKGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgaW50IHJlbWFpbmluZykKewoJcmV0dXJuIHJlbWFpbmluZyAmZ3Q7PSAoaW50KSBzaXplb2Yoc3RydWN0IG5sYXR0cikgJmFtcDsmYW1wOwoJICAgICAgIG5sYS0mZ3Q7bmxhX2xlbiAmZ3Q7PSBzaXplb2Yoc3RydWN0IG5sYXR0cikgJmFtcDsmYW1wOwoJICAgICAgIG5sYS0mZ3Q7bmxhX2xlbiAmbHQ7PSByZW1haW5pbmc7Cn0KYGBgCgpJZiBgbmxhX29rYCBpcyBmYWxzZSwgdGhlIGF0dHJpYnV0ZSBpcyBtYWxmb3JtZWQuIElmIHdlICpkb24mIzM5O3QqIGNoZWNrIGBubGFfb2tgIGFmdGVyIGBubGFfbmV4dGAsIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uIGlzIGdvaW5nIHRvIHVzZSBgbmxhX29wdF9tc2tgLiBUaGF0IHdpbGwgcG90ZW50aWFsbHkgcmVhZCBgbmxhX3R5cGUobmxhX29wdF9tc2spYC4gSWYgYG5sYV9vcHRfbXNrYCBpc24mIzM5O3QgYG5sYV9va2AsIGBubGFfdHlwZWAgY291bGQgcmVhZCBnYXJiYWdlIG9yLCBhZ2FpbiwgZ28gb3V0IG9mIGJvdW5kcy4gSWYgaXQgcmVhZHMgZ2FyYmFnZSwgd2UgbWlnaHQganVzdCBmYWlsIHRoZSBjaGVjay4gSWYgaXQmIzM5O3Mgb3V0IG9mIGJvdW5kcywgS0FTQU4gY2F0Y2hlcyBpdC4KClNvLCBpcyB0aGVyZSBhbnkgcmVhbCAqcmlzayogaGVyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGEgd2F5IG9ubHkgS01TQU4gY291bGQgY2F0Y2g/IE5vLCBub3QgcmVhbGx5LiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIG5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcgYnVnOiBhIG1pc3NpbmcgbGVuZ3RoIGNoZWNrIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcy4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGNhdGNoIHRob3NlLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2gsIGFib3V0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSAqbGVha3MqLi4uIE5vLCB0aGUgbmV0bGluayBtZXNzYWdlIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHVzZXIgc3BhY2UuCgpUaGUgcGF0Y2gganVzdCBhZGRzIGEgYm91bmRzIGNoZWNrLCB3aGljaCBpcyBhIHN0YW5kYXJkIGZpeCBmb3IgYSBtaXNzaW5nIGBubGFfb2tgIGFmdGVyIGBubGFfbmV4dGAgY2FsbC4gU3VjaCBidWdzIHR5cGljYWxseSByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlc2UgYXJlIGNhdWdodCBieSBLQVNBTi4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb24gb3IgbGVhay4KClRoZSBwYXRjaDoKCmBgYGMKIAkJbmxhX29wdF9tc2sgPSBubGFfbmV4dChubGFfb3B0X21zaywgJmFtcDttc2tfZGVwdGgpOwomIzQzOwomIzQzOwkJaWYgKG1za19kZXB0aCAmYW1wOyZhbXA7ICFubGFfb2sobmxhX29wdF9tc2ssIG1za19kZXB0aCkpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7QSBtYXNrIGF0dHJpYnV0ZSBpcyBpbnZhbGlkJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGJvdW5kcyBjaGVjayAoYG5sYV9va2ApIGZvciBuZXRsaW5rIGF0dHJpYnV0ZXMgYWZ0ZXIgYWR2YW5jaW5nIHRoZSBhdHRyaWJ1dGUgcG9pbnRlciB3aXRoIGBubGFfbmV4dGAuIFdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIGNvZGUgY291bGQgcmVhZCBvdXQtb2YtYm91bmRzIG1lbW9yeSB3aGVuIGFjY2Vzc2luZyB0aGUgbmV4dCBhdHRyaWJ1dGUmIzM5O3MgaGVhZGVyIG9yIGRhdGEuIE91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGJvdW5kcyBjaGVjayAoYG5sYV9va2ApIGZvciBuZXRsaW5rIGF0dHJpYnV0ZXMgYWZ0ZXIgYWR2YW5jaW5nIHRoZSBhdHRyaWJ1dGUgcG9pbnRlciB3aXRoIGBubGFfbmV4dGAuIFdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIGNvZGUgY291bGQgcmVhZCBvdXQtb2YtYm91bmRzIG1lbW9yeSB3aGVuIGFjY2Vzc2luZyB0aGUgbmV4dCBhdHRyaWJ1dGUmIzM5O3MgaGVhZGVyIG9yIGRhdGEuIE91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjc6MTkuMDMyNDg4MTkzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3Mzg2ODk5Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19GTE9XRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmbF9jaGFuZ2VcIixcbiAgICBcImZsX3RtcGx0X2NyZWF0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRzIGNoZWNrIChgbmxhX29rYCkgZm9yIG5ldGxpbmsgYXR0cmlidXRlcyBhZnRlciBhZHZhbmNpbmcgdGhlIGF0dHJpYnV0ZSBwb2ludGVyIHdpdGggYG5sYV9uZXh0YC4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgY29kZSBjb3VsZCByZWFkIG91dC1vZi1ib3VuZHMgbWVtb3J5IHdoZW4gYWNjZXNzaW5nIHRoZSBuZXh0IGF0dHJpYnV0ZSdzIGhlYWRlciBvciBkYXRhLiBPdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIGludmFsaWQgYXR0cmlidXRlIHBhcnNpbmcgaW4gYGZsX3NldF9lbmNfb3B0YCB3aGVuIHBhcnNpbmcgbmVzdGVkIG5ldGxpbmsgYXR0cmlidXRlcyBmb3IgZmxvd2VyIGNsYXNzaWZpZXIgZW5jYXBzdWxhdGlvbiBvcHRpb25zLiBJdCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIGBtc2tfZGVwdGhgIGlzIHZhbGlkIGJlZm9yZSBjb250aW51aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgcGFja2V0IGNsYXNzaWZpY2F0aW9uIGxvZ2ljIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGMgbmV0bGluay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjc6MTkuMDMyNDkyNTYzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQxMzQ4ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxZDE4OGM5ODkwNmE5YTNmNWFhMTM1ZjZjMDQ4ZjYwMzZkZGE4MDJiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDAzOjI3OjE4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXFxuaW5kZXggMGUyNzViNTgxNTFjNC4uMWNlZmVhNTcxZWZkNyAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXFxuKysrIGIvbmV0L3NjaGVkL2Nsc19mbG93ZXIuY1xcbkBAIC0xNzAzLDYgKzE3MDMsMTEgQEAgc3RhdGljIGludCBmbF9zZXRfZW5jX29wdChzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBmbF9mbG93X2tleSAqa2V5LFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRubGFfb3B0X21zayA9IG5sYV9uZXh0KG5sYV9vcHRfbXNrLCBcXHUwMDI2bXNrX2RlcHRoKTtcXG4rXFxuK1xcdFxcdGlmIChtc2tfZGVwdGggXFx1MDAyNlxcdTAwMjYgIW5sYV9vayhubGFfb3B0X21zaywgbXNrX2RlcHRoKSkge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJBIG1hc2sgYXR0cmlidXRlIGlzIGludmFsaWRcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI3OjE5LjU1NzM2NTUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQ1NDYwNTA5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX0ZMT1dFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZsX2NoYW5nZVwiLFxuICAgIFwiZmxfdG1wbHRfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIGludmFsaWQgYXR0cmlidXRlIHBhcnNpbmcgaW4gYGZsX3NldF9lbmNfb3B0YCB3aGVuIHBhcnNpbmcgbmVzdGVkIG5ldGxpbmsgYXR0cmlidXRlcyBmb3IgZmxvd2VyIGNsYXNzaWZpZXIgZW5jYXBzdWxhdGlvbiBvcHRpb25zLiBJdCBhZGRzIGEgY2hlY2sgdG8gZW5zdXJlIGBtc2tfZGVwdGhgIGlzIHZhbGlkIGJlZm9yZSBjb250aW51aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgcGFja2V0IGNsYXNzaWZpY2F0aW9uIGxvZ2ljIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGMgbmV0bGluay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWQxODhjOTg5MDZhOWEzZjVhYTEzNWY2YzA0OGY2MDM2ZGRhODAyYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDAzOjI3OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuYyBiL25ldC9zY2hlZC9jbHNfZmxvd2VyLmNcbmluZGV4IDBlMjc1YjU4MTUxYzQuLjFjZWZlYTU3MWVmZDcgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXG5AQCAtMTcwMyw2ICsxNzAzLDExIEBAIHN0YXRpYyBpbnQgZmxfc2V0X2VuY19vcHQoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSxcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFx0XHRubGFfb3B0X21zayA9IG5sYV9uZXh0KG5sYV9vcHRfbXNrLCBcdTAwMjZtc2tfZGVwdGgpO1xuK1xuK1x0XHRpZiAobXNrX2RlcHRoIFx1MDAyNlx1MDAyNiAhbmxhX29rKG5sYV9vcHRfbXNrLCBtc2tfZGVwdGgpKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkEgbWFzayBhdHRyaWJ1dGUgaXMgaW52YWxpZFwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyNzoxOS41NTczNjY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxMDk0ODExNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgRmxvd2VyIENsYXNzaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3NjaGVkL2Nsc19mbG93ZXIuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBmbF9zZXRfZW5jX29wdGAgZnVuY3Rpb24uIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIHRoZXkndmUgYWRkZWQgYSBjaGVjayBoZXJlOlxuXG5gYGBjXG5cdFx0bmxhX29wdF9tc2sgPSBubGFfbmV4dChubGFfb3B0X21zaywgXHUwMDI2bXNrX2RlcHRoKTtcbitcbitcdFx0aWYgKG1za19kZXB0aCBcdTAwMjZcdTAwMjYgIW5sYV9vayhubGFfb3B0X21zaywgbXNrX2RlcHRoKSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJBIG1hc2sgYXR0cmlidXRlIGlzIGludmFsaWRcIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIGl0J3MgZ3VhcmRpbmcgYWdhaW5zdCBpbnZhbGlkIG1hc2sgYXR0cmlidXRlcywgcmlnaHQ/IE1ha2VzIHNlbnNlLiBgbmxhX25leHRgIGFkdmFuY2VzIHRoZSBOTEEgcG9pbnRlciwgYW5kIHRoaXMgY29kZSBpcyBub3cgY2hlY2tpbmcgaWYsIGFmdGVyIHRoZSBhZHZhbmNlLCB0aGUgTkxBIGlzIHN0aWxsIHZhbGlkIGdpdmVuIHRoZSBjdXJyZW50IGBtc2tfZGVwdGhgLiBUaGUgYG5sYV9va2AgZnVuY3Rpb24gaXMga2V5IGhlcmUg4oCTIHRoYXQncyB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjaGVjay4gSXQncyBwcm9iYWJseSB2ZXJpZnlpbmcgdGhhdCB3ZSBoYXZlbid0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgb3IgZW5jb3VudGVyZWQgc29tZSBvdGhlciBOTEEtcmVsYXRlZCBjb3JydXB0aW9uLiBJZiBgbXNrX2RlcHRoYCBpcyBub24temVybyAobWVhbmluZyB0aGVyZSAqaXMqIGEgbWFzayB0byBjb25zaWRlcikgYW5kIGBubGFfb2tgIGZhaWxzLCB3ZSBzZXQgYW4gZXh0ZW5kZWQgYWNrIG1lc3NhZ2UgYW5kIHJldHVybiAtRUlOVkFMLCBpbmRpY2F0aW5nIGFuIGludmFsaWQgbWFzayBhdHRyaWJ1dGUuIFRoYXQncyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4gR290dGEgZW5zdXJlIGRhdGEgaW50ZWdyaXR5IHdoZW4gZGVhbGluZyB3aXRoIE5MQXMuIEknbGwgbmVlZCB0byBkaWcgaW50byBgbmxhX29rYCBub3cgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSB2YWxpZGF0aW9uIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjc6MzEuNjY2ODUwOTk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Mzk0ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsX3NldF9lbmNfb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfZmxvd2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0xNDY4PXN0YXRpYyBpbnQgZmxfc2V0X3BmY3Bfb3B0KGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE1MDUtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxNTA2OnN0YXRpYyBpbnQgZmxfc2V0X2VuY19vcHQoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE1MDctXFx0XFx0XFx0ICBzdHJ1Y3QgZmxfZmxvd19rZXkgKm1hc2ssXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTE4NzE9c3RhdGljIGludCBmbF9zZXRfa2V5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGNhX29wdHMsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwOTUtXFx0aWYgKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTXSkge1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjA5NjpcXHRcXHRyZXQgPSBmbF9zZXRfZW5jX29wdCh0Yiwga2V5LCBtYXNrLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA5Ny1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyNzozMS43MTUyNTA0NzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDY3MDUxODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiBhIFRyYWZmaWMgQ2xhc3NpZmllciBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIHZ1bG5lcmFiaWxpdHkgaXMgc2l0dGluZyB3aXRoaW4gdGhlIGBjbHNfZmxvd2VyYCB0cmFmZmljIGNsYXNzaWZpZXIsIHNwZWNpZmljYWxseSwgaXQncyB0cmlnZ2VyZWQgZHVyaW5nIGF0dHJpYnV0ZSBwYXJzaW5nIGluIHRoZSBgZmxfc2V0X2VuY19vcHRgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIGlzIHJlYWNoZWQgdmlhIGBmbF9zZXRfa2V5YCwgd2hpY2ggaXMgYSBwYXJ0IG9mIHRoZSBgY2xzX2Zsb3dlcmAgY29kZSwgYW5kIGl0J3MgdWx0aW1hdGVseSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIG5ldGxpbmssIGxpa2VseSB2aWEgdGhlIGB0Y2AgY29tbWFuZC1saW5lIHV0aWxpdHkuIFRoZSByb290IGNhdXNlIGFwcGVhcnMgdG8gYmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBvciBzb21lIG90aGVyIGlzc3VlIHdpdGggaW52YWxpZCBhdHRyaWJ1dGUgaGFuZGxpbmcsIGluIGBmbF9zZXRfZW5jX29wdGAuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgd2F5IHRyYWZmaWMgY2xhc3NpZmljYXRpb24gd29ya3MsIGFuZCBpdCBkZWZpbml0ZWx5IG5lZWRzIGEgZ29vZCBmdXp6aW5nIGNhbXBhaWduLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgc2hvdWxkIGZpcnN0IGZpbmQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IGFwcGx5IHRvIGBjbHNfZmxvd2VyYCwgYXMgdGhlIGZ1enppbmcgc3RyYXRlZ3kgd2lsbCBkZXBlbmQgb24gdW5kZXJzdGFuZGluZyBob3cgaXQncyBzZXQgdXAgdG8gcHJvY2VzcyB0cmFmZmljIGFuZCB0aGUgc3BlY2lmaWMgYXR0cmlidXRlcyBpdCBpcyBkZXNpZ25lZCB0byBoYW5kbGUuIFRoYXQgd2lsbCBnaXZlIG1lIGEgcHJvcGVyIGhhbmRsZSBvbiB0aGUgaW5wdXRzIHRoYXQgY2FuIHJlYWNoIHRoaXMgZmF1bHR5IGNvZGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyNzozNi4xODIzMDQ0ODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxNTQwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9DTFNfRkxPV0VSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTU2Mj1jb25maWcgTkVUX0NMU19CUEZcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTU3MS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo1NzI6Y29uZmlnIE5FVF9DTFNfRkxPV0VSXFxubmV0L3NjaGVkL0tjb25maWctNTczLVxcdHRyaXN0YXRlIFxcXCJGbG93ZXIgY2xhc3NpZmllclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjc6MzYuMjMyNDY0MzAyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMDk4ODYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBGbG93IFRhYmxlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgY29uZmlnIEknbSB3b3JraW5nIHdpdGggdXNlcyBgTkVUX0NMU19GTE9XRVJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUga2V5IG9wZXJhdGlvbnMgaW4gdGhpcyBjb250ZXh0LCB0aGUgY2VudHJhbCBmdW5jdGlvbnMgdGhhdCBtYW5pcHVsYXRlIHRoZSBmbG93IHRhYmxlIGVudHJpZXMuIGBmbF9zZXRfZW5jX29wdGAgYmVpbmcgc3RhdGljIGlzbid0IGhlbHBmdWwsIHNvIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJdCdzIGxpa2VseSBgZmxfc2V0X2tleWAgb3IsIHBlcmhhcHMgbW9yZSBpbnRyaWd1aW5nbHksIGBmbF9jaGFuZ2VgIHdpbGwgYmUgdGhlIHNpZ25pZmljYW50IGZ1bmN0aW9ucyBoZXJlLiBUaGUgXCJjaGFuZ2VcIiBmdW5jdGlvbiBzZWVtcyBsaWtlIHRoZSBtb3JlIGxpa2VseSBjYW5kaWRhdGUgZm9yIGNsb3NlciBleGFtaW5hdGlvbiwgc2luY2UgaXQgaW1wbGllcyBtb2RpZmljYXRpb24gb2YgZXhpc3RpbmcgZW50cmllcy4gTGV0J3Mgc3RhcnQgYnkgY2hlY2tpbmcgdGhhdCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyNzozOS42NjM0NTU5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODExMTgyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbF9zZXRfa2V5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfZmxvd2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc19mbG93ZXIuYz04MDM9Y2ZtX29wdF9wb2xpY3lbVENBX0ZMT1dFUl9LRVlfQ0ZNX09QVF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODA4LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6ODA5OnN0YXRpYyB2b2lkIGZsX3NldF9rZXlfdmFsKHN0cnVjdCBubGF0dHIgKip0YixcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTgxMC1cXHRcXHRcXHQgICB2b2lkICp2YWwsIGludCB2YWxfdHlwZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODIxLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6ODIyOnN0YXRpYyBpbnQgZmxfc2V0X2tleV9zcGkoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgZmxfZmxvd19rZXkgKmtleSxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTgyMy1cXHRcXHRcXHQgIHN0cnVjdCBmbF9mbG93X2tleSAqbWFzayxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODMyLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6ODMzOlxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VpcHNlYy5zcGksXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy04MzQtXFx0XFx0ICAgICAgIFRDQV9GTE9XRVJfS0VZX1NQSSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODM5LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6ODQwOnN0YXRpYyBpbnQgZmxfc2V0X2tleV9wb3J0X3JhbmdlKHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy04NDEtXFx0XFx0XFx0XFx0IHN0cnVjdCBmbF9mbG93X2tleSAqbWFzayxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODQzLXtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjg0NDpcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNldHBfcmFuZ2UudHBfbWluLmRzdCxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg0NS1cXHRcXHQgICAgICAgVENBX0ZMT1dFUl9LRVlfUE9SVF9EU1RfTUlOLCBcXHUwMDI2bWFzay1cXHUwMDNldHBfcmFuZ2UudHBfbWluLmRzdCxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg0Ni1cXHRcXHQgICAgICAgVENBX0ZMT1dFUl9VTlNQRUMsIHNpemVvZihrZXktXFx1MDAzZXRwX3JhbmdlLnRwX21pbi5kc3QpKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjg0NzpcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNldHBfcmFuZ2UudHBfbWF4LmRzdCxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg0OC1cXHRcXHQgICAgICAgVENBX0ZMT1dFUl9LRVlfUE9SVF9EU1RfTUFYLCBcXHUwMDI2bWFzay1cXHUwMDNldHBfcmFuZ2UudHBfbWF4LmRzdCxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg0OS1cXHRcXHQgICAgICAgVENBX0ZMT1dFUl9VTlNQRUMsIHNpemVvZihrZXktXFx1MDAzZXRwX3JhbmdlLnRwX21heC5kc3QpKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjg1MDpcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNldHBfcmFuZ2UudHBfbWluLnNyYyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg1MS1cXHRcXHQgICAgICAgVENBX0ZMT1dFUl9LRVlfUE9SVF9TUkNfTUlOLCBcXHUwMDI2bWFzay1cXHUwMDNldHBfcmFuZ2UudHBfbWluLnNyYyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg1Mi1cXHRcXHQgICAgICAgVENBX0ZMT1dFUl9VTlNQRUMsIHNpemVvZihrZXktXFx1MDAzZXRwX3JhbmdlLnRwX21pbi5zcmMpKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjg1MzpcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNldHBfcmFuZ2UudHBfbWF4LnNyYyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTg1NC1cXHRcXHQgICAgICAgVENBX0ZMT1dFUl9LRVlfUE9SVF9TUkNfTUFYLCBcXHUwMDI2bWFzay1cXHUwMDNldHBfcmFuZ2UudHBfbWF4LnNyYyxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODg2LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6ODg3OnN0YXRpYyBpbnQgZmxfc2V0X2tleV9tcGxzX2xzZShjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGFfbHNlLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtODg4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X21wbHMgKmtleV92YWwsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTk3MS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjk3MjpzdGF0aWMgaW50IGZsX3NldF9rZXlfbXBsc19vcHRzKGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYV9tcGxzX29wdHMsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy05NzMtXFx0XFx0XFx0XFx0c3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9tcGxzICprZXlfdmFsLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy05OTMtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzo5OTQ6XFx0XFx0ZXJyID0gZmxfc2V0X2tleV9tcGxzX2xzZShubGFfbHNlLCBrZXlfdmFsLCBrZXlfbWFzaywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTk5NS1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTAwNi1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjEwMDc6c3RhdGljIGludCBmbF9zZXRfa2V5X21wbHMoc3RydWN0IG5sYXR0ciAqKnRiLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTAwOC1cXHRcXHRcXHQgICBzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X21wbHMgKmtleV92YWwsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTEwMjUtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMDI2OlxcdFxcdHJldHVybiBmbF9zZXRfa2V5X21wbHNfb3B0cyh0YltUQ0FfRkxPV0VSX0tFWV9NUExTX09QVFNdLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTAyNy1cXHRcXHRcXHRcXHRcXHQgICAga2V5X3ZhbCwga2V5X21hc2ssIGV4dGFjayk7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTEwODMtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMDg0OnN0YXRpYyB2b2lkIGZsX3NldF9rZXlfdmxhbihzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMDg1LVxcdFxcdFxcdCAgICBfX2JlMTYgZXRoZXJ0eXBlLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTE0LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTExNTpzdGF0aWMgdm9pZCBmbF9zZXRfa2V5X3BwcG9lKHN0cnVjdCBubGF0dHIgKip0YixcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTExMTYtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BwcG9lICprZXlfdmFsLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTU4LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTE1OTpzdGF0aWMgdm9pZCBmbF9zZXRfa2V5X2ZsYWcodTMyIGZsb3dlcl9rZXksIHUzMiBmbG93ZXJfbWFzayxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTExNjAtXFx0XFx0XFx0ICAgIHUzMiAqZGlzc2VjdG9yX2tleSwgdTMyICpkaXNzZWN0b3JfbWFzayxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTE2OS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjExNzA6c3RhdGljIGludCBmbF9zZXRfa2V5X2ZsYWdzKHN0cnVjdCBubGF0dHIgKnRjYV9vcHRzLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTcxLVxcdFxcdFxcdCAgICBib29sIGVuY2FwLCB1MzIgKmZsYWdzX2tleSwgdTMyICpmbGFnc19tYXNrLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTk2LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTE5NzpcXHRmbF9zZXRfa2V5X2ZsYWcoa2V5LCBtYXNrLCBmbGFnc19rZXksIGZsYWdzX21hc2ssXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMTk4LVxcdFxcdFxcdFRDQV9GTE9XRVJfS0VZX0ZMQUdTX0lTX0ZSQUdNRU5ULCBGTE9XX0RJU19JU19GUkFHTUVOVCk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMTk5OlxcdGZsX3NldF9rZXlfZmxhZyhrZXksIG1hc2ssIGZsYWdzX2tleSwgZmxhZ3NfbWFzayxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTEyMDAtXFx0XFx0XFx0VENBX0ZMT1dFUl9LRVlfRkxBR1NfRlJBR19JU19GSVJTVCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIwMi1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjEyMDM6XFx0Zmxfc2V0X2tleV9mbGFnKGtleSwgbWFzaywgZmxhZ3Nfa2V5LCBmbGFnc19tYXNrLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIwNC1cXHRcXHRcXHRUQ0FfRkxPV0VSX0tFWV9GTEFHU19UVU5ORUxfQ1NVTSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIwNi1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjEyMDc6XFx0Zmxfc2V0X2tleV9mbGFnKGtleSwgbWFzaywgZmxhZ3Nfa2V5LCBmbGFnc19tYXNrLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIwOC1cXHRcXHRcXHRUQ0FfRkxPV0VSX0tFWV9GTEFHU19UVU5ORUxfRE9OVF9GUkFHTUVOVCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIxMC1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjEyMTE6XFx0Zmxfc2V0X2tleV9mbGFnKGtleSwgbWFzaywgZmxhZ3Nfa2V5LCBmbGFnc19tYXNrLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIxMi1cXHRcXHRcXHRUQ0FfRkxPV0VSX0tFWV9GTEFHU19UVU5ORUxfT0FNLCBGTE9XX0RJU19GX1RVTk5FTF9PQU0pO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIxMy1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjEyMTQ6XFx0Zmxfc2V0X2tleV9mbGFnKGtleSwgbWFzaywgZmxhZ3Nfa2V5LCBmbGFnc19tYXNrLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIxNS1cXHRcXHRcXHRUQ0FfRkxPV0VSX0tFWV9GTEFHU19UVU5ORUxfQ1JJVF9PUFQsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTEyMjAtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxMjIxOnN0YXRpYyB2b2lkIGZsX3NldF9rZXlfaXAoc3RydWN0IG5sYXR0ciAqKnRiLCBib29sIGVuY2FwLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIyMi1cXHRcXHRcXHQgIHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfaXAgKmtleSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTIyOS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjEyMzA6XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZXRvcywgdG9zX2tleSwgXFx1MDAyNm1hc2stXFx1MDAzZXRvcywgdG9zX21hc2ssIHNpemVvZihrZXktXFx1MDAzZXRvcykpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTIzMTpcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNldHRsLCB0dGxfa2V5LCBcXHUwMDI2bWFzay1cXHUwMDNldHRsLCB0dGxfbWFzaywgc2l6ZW9mKGtleS1cXHUwMDNldHRsKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xMjMyLX1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MTcxNj1zdGF0aWMgaW50IGZsX3ZhbGlkYXRlX2N0X3N0YXRlKHUxNiBzdGF0ZSwgc3RydWN0IG5sYXR0ciAqdGIsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE3NDktXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxNzUwOnN0YXRpYyBpbnQgZmxfc2V0X2tleV9jdChzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzUxLVxcdFxcdFxcdCBzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X2N0ICprZXksXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE3NjEtXFx0XFx0fVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTc2MjpcXHRcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNlY3Rfc3RhdGUsIFRDQV9GTE9XRVJfS0VZX0NUX1NUQVRFLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTc2My1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hc2stXFx1MDAzZWN0X3N0YXRlLCBUQ0FfRkxPV0VSX0tFWV9DVF9TVEFURV9NQVNLLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzc3LVxcdFxcdH1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE3Nzg6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWN0X3pvbmUsIFRDQV9GTE9XRVJfS0VZX0NUX1pPTkUsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzc5LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNlY3Rfem9uZSwgVENBX0ZMT1dFUl9LRVlfQ1RfWk9ORV9NQVNLLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzg2LVxcdFxcdH1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE3ODc6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWN0X21hcmssIFRDQV9GTE9XRVJfS0VZX0NUX01BUkssXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzg4LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNlY3RfbWFyaywgVENBX0ZMT1dFUl9LRVlfQ1RfTUFSS19NQVNLLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzk1LVxcdFxcdH1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE3OTY6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIGtleS1cXHUwMDNlY3RfbGFiZWxzLCBUQ0FfRkxPV0VSX0tFWV9DVF9MQUJFTFMsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNzk3LVxcdFxcdFxcdCAgICAgICBtYXNrLVxcdTAwM2VjdF9sYWJlbHMsIFRDQV9GTE9XRVJfS0VZX0NUX0xBQkVMU19NQVNLLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0xODA0PXN0YXRpYyBib29sIGlzX3ZsYW5fa2V5KHN0cnVjdCBubGF0dHIgKnRiLCBfX2JlMTYgKmV0aGVydHlwZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTgyMy1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE4MjQ6c3RhdGljIHZvaWQgZmxfc2V0X2tleV9jZm1fbWRfbGV2ZWwoc3RydWN0IG5sYXR0ciAqKnRiLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTgyNS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4MzgtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxODM5OnN0YXRpYyB2b2lkIGZsX3NldF9rZXlfY2ZtX29wY29kZShzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODQwLVxcdFxcdFxcdFxcdCAgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4NDMte1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTg0NDpcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNlY2ZtLm9wY29kZSwgVENBX0ZMT1dFUl9LRVlfQ0ZNX09QQ09ERSxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4NDUtXFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2VjZm0ub3Bjb2RlLCBUQ0FfRkxPV0VSX1VOU1BFQyxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg0OC1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE4NDk6c3RhdGljIGludCBmbF9zZXRfa2V5X2NmbShzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODUwLVxcdFxcdFxcdCAgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4NjQtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxODY1OlxcdGZsX3NldF9rZXlfY2ZtX29wY29kZShubGFfY2ZtX29wdCwga2V5LCBtYXNrLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTg2NjpcXHRmbF9zZXRfa2V5X2NmbV9tZF9sZXZlbChubGFfY2ZtX29wdCwga2V5LCBtYXNrLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg2Ny1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg3MC1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE4NzE6c3RhdGljIGludCBmbF9zZXRfa2V5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGNhX29wdHMsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODcyLVxcdFxcdCAgICAgIHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4ODUtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxODg2OlxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VtZXRhLmwyX21pc3MsIFRDQV9GTE9XRVJfTDJfTUlTUyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE4ODctXFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2VtZXRhLmwyX21pc3MsIFRDQV9GTE9XRVJfVU5TUEVDLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xODg5LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTg5MDpcXHRmbF9zZXRfa2V5X3ZhbCh0Yiwga2V5LVxcdTAwM2VldGguZHN0LCBUQ0FfRkxPV0VSX0tFWV9FVEhfRFNULFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg5MS1cXHRcXHQgICAgICAgbWFzay1cXHUwMDNlZXRoLmRzdCwgVENBX0ZMT1dFUl9LRVlfRVRIX0RTVF9NQVNLLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg5Mi1cXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNlZXRoLmRzdCkpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTg5MzpcXHRmbF9zZXRfa2V5X3ZhbCh0Yiwga2V5LVxcdTAwM2VldGguc3JjLCBUQ0FfRkxPV0VSX0tFWV9FVEhfU1JDLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg5NC1cXHRcXHQgICAgICAgbWFzay1cXHUwMDNlZXRoLnNyYywgVENBX0ZMT1dFUl9LRVlfRVRIX1NSQ19NQVNLLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg5NS1cXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNlZXRoLnNyYykpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTg5NjpcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNlbnVtX29mX3ZsYW5zLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTg5Ny1cXHRcXHQgICAgICAgVENBX0ZMT1dFUl9LRVlfTlVNX09GX1ZMQU5TLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTAyLVxcdGlmIChpc192bGFuX2tleSh0YltUQ0FfRkxPV0VSX0tFWV9FVEhfVFlQRV0sIFxcdTAwMjZldGhlcnR5cGUsIGtleSwgbWFzaywgMCkpIHtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5MDM6XFx0XFx0Zmxfc2V0X2tleV92bGFuKHRiLCBldGhlcnR5cGUsIFRDQV9GTE9XRVJfS0VZX1ZMQU5fSUQsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTA0LVxcdFxcdFxcdFxcdFRDQV9GTE9XRVJfS0VZX1ZMQU5fUFJJTyxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkwOS1cXHRcXHRcXHRcXHRcXHUwMDI2ZXRoZXJ0eXBlLCBrZXksIG1hc2ssIDEpKSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTEwOlxcdFxcdFxcdGZsX3NldF9rZXlfdmxhbih0YiwgZXRoZXJ0eXBlLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkxMS1cXHRcXHRcXHRcXHRcXHRUQ0FfRkxPV0VSX0tFWV9DVkxBTl9JRCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkxNC1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2a2V5LVxcdTAwM2VjdmxhbiwgXFx1MDAyNm1hc2stXFx1MDAzZWN2bGFuKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5MTU6XFx0XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWJhc2ljLm5fcHJvdG8sXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTE2LVxcdFxcdFxcdFxcdCAgICAgICBUQ0FfRkxPV0VSX0tFWV9DVkxBTl9FVEhfVFlQRSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkyMy1cXHRpZiAoa2V5LVxcdTAwM2ViYXNpYy5uX3Byb3RvID09IGh0b25zKEVUSF9QX1BQUF9TRVMpKVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTkyNDpcXHRcXHRmbF9zZXRfa2V5X3BwcG9lKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VwcHBvZSwgXFx1MDAyNm1hc2stXFx1MDAzZXBwcG9lLCBrZXksIG1hc2spO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkyNS1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkyNy1cXHQgICAga2V5LVxcdTAwM2ViYXNpYy5uX3Byb3RvID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTI4OlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2ViYXNpYy5pcF9wcm90bywgVENBX0ZMT1dFUl9LRVlfSVBfUFJPVE8sXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTI5LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNlYmFzaWMuaXBfcHJvdG8sIFRDQV9GTE9XRVJfVU5TUEVDLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkzMC1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNlYmFzaWMuaXBfcHJvdG8pKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5MzE6XFx0XFx0Zmxfc2V0X2tleV9pcCh0YiwgZmFsc2UsIFxcdTAwMjZrZXktXFx1MDAzZWlwLCBcXHUwMDI2bWFzay1cXHUwMDNlaXApO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTkzMi1cXHR9XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MzYtXFx0XFx0bWFzay1cXHUwMDNlY29udHJvbC5hZGRyX3R5cGUgPSB+MDtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5Mzc6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWlwdjQuc3JjLCBUQ0FfRkxPV0VSX0tFWV9JUFY0X1NSQyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MzgtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2VpcHY0LnNyYywgVENBX0ZMT1dFUl9LRVlfSVBWNF9TUkNfTUFTSyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5MzktXFx0XFx0XFx0ICAgICAgIHNpemVvZihrZXktXFx1MDAzZWlwdjQuc3JjKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTQwOlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VpcHY0LmRzdCwgVENBX0ZMT1dFUl9LRVlfSVBWNF9EU1QsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTQxLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNlaXB2NC5kc3QsIFRDQV9GTE9XRVJfS0VZX0lQVjRfRFNUX01BU0ssXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NDUtXFx0XFx0bWFzay1cXHUwMDNlY29udHJvbC5hZGRyX3R5cGUgPSB+MDtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5NDY6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWlwdjYuc3JjLCBUQ0FfRkxPV0VSX0tFWV9JUFY2X1NSQyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NDctXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2VpcHY2LnNyYywgVENBX0ZMT1dFUl9LRVlfSVBWNl9TUkNfTUFTSyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NDgtXFx0XFx0XFx0ICAgICAgIHNpemVvZihrZXktXFx1MDAzZWlwdjYuc3JjKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTQ5OlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VpcHY2LmRzdCwgVENBX0ZMT1dFUl9LRVlfSVBWNl9EU1QsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTUwLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNlaXB2Ni5kc3QsIFRDQV9GTE9XRVJfS0VZX0lQVjZfRFNUX01BU0ssXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NTQtXFx0aWYgKGtleS1cXHUwMDNlYmFzaWMuaXBfcHJvdG8gPT0gSVBQUk9UT19UQ1ApIHtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5NTU6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZXRwLnNyYywgVENBX0ZMT1dFUl9LRVlfVENQX1NSQyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NTYtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2V0cC5zcmMsIFRDQV9GTE9XRVJfS0VZX1RDUF9TUkNfTUFTSyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NTctXFx0XFx0XFx0ICAgICAgIHNpemVvZihrZXktXFx1MDAzZXRwLnNyYykpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTk1ODpcXHRcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNldHAuZHN0LCBUQ0FfRkxPV0VSX0tFWV9UQ1BfRFNULFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk1OS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hc2stXFx1MDAzZXRwLmRzdCwgVENBX0ZMT1dFUl9LRVlfVENQX0RTVF9NQVNLLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk2MC1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNldHAuZHN0KSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTYxOlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2V0Y3AuZmxhZ3MsIFRDQV9GTE9XRVJfS0VZX1RDUF9GTEFHUyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NjItXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2V0Y3AuZmxhZ3MsIFRDQV9GTE9XRVJfS0VZX1RDUF9GTEFHU19NQVNLLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTY0LVxcdH0gZWxzZSBpZiAoa2V5LVxcdTAwM2ViYXNpYy5pcF9wcm90byA9PSBJUFBST1RPX1VEUCkge1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTk2NTpcXHRcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNldHAuc3JjLCBUQ0FfRkxPV0VSX0tFWV9VRFBfU1JDLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk2Ni1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hc2stXFx1MDAzZXRwLnNyYywgVENBX0ZMT1dFUl9LRVlfVURQX1NSQ19NQVNLLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk2Ny1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNldHAuc3JjKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTY4OlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2V0cC5kc3QsIFRDQV9GTE9XRVJfS0VZX1VEUF9EU1QsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTY5LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNldHAuZHN0LCBUQ0FfRkxPV0VSX0tFWV9VRFBfRFNUX01BU0ssXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NzEtXFx0fSBlbHNlIGlmIChrZXktXFx1MDAzZWJhc2ljLmlwX3Byb3RvID09IElQUFJPVE9fU0NUUCkge1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTk3MjpcXHRcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNldHAuc3JjLCBUQ0FfRkxPV0VSX0tFWV9TQ1RQX1NSQyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTE5NzMtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2V0cC5zcmMsIFRDQV9GTE9XRVJfS0VZX1NDVFBfU1JDX01BU0ssXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTc0LVxcdFxcdFxcdCAgICAgICBzaXplb2Yoa2V5LVxcdTAwM2V0cC5zcmMpKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjE5NzU6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZXRwLmRzdCwgVENBX0ZMT1dFUl9LRVlfU0NUUF9EU1QsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTc2LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNldHAuZHN0LCBUQ0FfRkxPV0VSX0tFWV9TQ1RQX0RTVF9NQVNLLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xOTc5LVxcdFxcdCAgIGtleS1cXHUwMDNlYmFzaWMuaXBfcHJvdG8gPT0gSVBQUk9UT19JQ01QKSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTgwOlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VpY21wLnR5cGUsIFRDQV9GTE9XRVJfS0VZX0lDTVBWNF9UWVBFLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk4MS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hc2stXFx1MDAzZWljbXAudHlwZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk4My1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNlaWNtcC50eXBlKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTg0OlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VpY21wLmNvZGUsIFRDQV9GTE9XRVJfS0VZX0lDTVBWNF9DT0RFLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk4NS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hc2stXFx1MDAzZWljbXAuY29kZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk4OS1cXHRcXHQgICBrZXktXFx1MDAzZWJhc2ljLmlwX3Byb3RvID09IElQUFJPVE9fSUNNUFY2KSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTkwOlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VpY21wLnR5cGUsIFRDQV9GTE9XRVJfS0VZX0lDTVBWNl9UWVBFLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk5MS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hc2stXFx1MDAzZWljbXAudHlwZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk5My1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNlaWNtcC50eXBlKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoxOTk0OlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VpY21wLmNvZGUsIFRDQV9GTE9XRVJfS0VZX0lDTVBWNl9DT0RFLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk5NS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hc2stXFx1MDAzZWljbXAuY29kZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMTk5OS1cXHRcXHQgICBrZXktXFx1MDAzZWJhc2ljLm5fcHJvdG8gPT0gaHRvbnMoRVRIX1BfTVBMU19NQykpIHtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwMDA6XFx0XFx0cmV0ID0gZmxfc2V0X2tleV9tcGxzKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VtcGxzLCBcXHUwMDI2bWFzay1cXHUwMDNlbXBscywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMDEtXFx0XFx0aWYgKHJldClcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjAwNC1cXHRcXHQgICBrZXktXFx1MDAzZWJhc2ljLm5fcHJvdG8gPT0gaHRvbnMoRVRIX1BfUkFSUCkpIHtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwMDU6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWFycC5zaXAsIFRDQV9GTE9XRVJfS0VZX0FSUF9TSVAsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDA2LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNlYXJwLnNpcCwgVENBX0ZMT1dFUl9LRVlfQVJQX1NJUF9NQVNLLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjAwNy1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNlYXJwLnNpcCkpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjAwODpcXHRcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNlYXJwLnRpcCwgVENBX0ZMT1dFUl9LRVlfQVJQX1RJUCxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMDktXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2VhcnAudGlwLCBUQ0FfRkxPV0VSX0tFWV9BUlBfVElQX01BU0ssXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDEwLVxcdFxcdFxcdCAgICAgICBzaXplb2Yoa2V5LVxcdTAwM2VhcnAudGlwKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDExOlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VhcnAub3AsIFRDQV9GTE9XRVJfS0VZX0FSUF9PUCxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMTItXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2VhcnAub3AsIFRDQV9GTE9XRVJfS0VZX0FSUF9PUF9NQVNLLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjAxMy1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGtleS1cXHUwMDNlYXJwLm9wKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDE0OlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBrZXktXFx1MDAzZWFycC5zaGEsIFRDQV9GTE9XRVJfS0VZX0FSUF9TSEEsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDE1LVxcdFxcdFxcdCAgICAgICBtYXNrLVxcdTAwM2VhcnAuc2hhLCBUQ0FfRkxPV0VSX0tFWV9BUlBfU0hBX01BU0ssXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDE2LVxcdFxcdFxcdCAgICAgICBzaXplb2Yoa2V5LVxcdTAwM2VhcnAuc2hhKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDE3OlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBrZXktXFx1MDAzZWFycC50aGEsIFRDQV9GTE9XRVJfS0VZX0FSUF9USEEsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDE4LVxcdFxcdFxcdCAgICAgICBtYXNrLVxcdTAwM2VhcnAudGhhLCBUQ0FfRkxPV0VSX0tFWV9BUlBfVEhBX01BU0ssXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMjAtXFx0fSBlbHNlIGlmIChrZXktXFx1MDAzZWJhc2ljLmlwX3Byb3RvID09IElQUFJPVE9fTDJUUCkge1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjAyMTpcXHRcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNlbDJ0cHYzLnNlc3Npb25faWQsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDIyLVxcdFxcdFxcdCAgICAgICBUQ0FfRkxPV0VSX0tFWV9MMlRQVjNfU0lELFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDI1LVxcdH0gZWxzZSBpZiAoa2V5LVxcdTAwM2ViYXNpYy5uX3Byb3RvICA9PSBodG9ucyhFVEhfUF9DRk0pKSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDI2OlxcdFxcdHJldCA9IGZsX3NldF9rZXlfY2ZtKHRiLCBrZXksIG1hc2ssIGV4dGFjayk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDI3LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwMzMtXFx0ICAgIGtleS1cXHUwMDNlYmFzaWMuaXBfcHJvdG8gPT0gSVBQUk9UT19TQ1RQKSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDM0OlxcdFxcdHJldCA9IGZsX3NldF9rZXlfcG9ydF9yYW5nZSh0Yiwga2V5LCBtYXNrLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjAzNS1cXHRcXHRpZiAocmV0KVxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDM5LVxcdGlmICh0YltUQ0FfRkxPV0VSX0tFWV9TUEldKSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDQwOlxcdFxcdHJldCA9IGZsX3NldF9rZXlfc3BpKHRiLCBrZXksIG1hc2ssIGV4dGFjayk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDQxLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwNDgtXFx0XFx0bWFzay1cXHUwMDNlZW5jX2NvbnRyb2wuYWRkcl90eXBlID0gfjA7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDQ5OlxcdFxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VlbmNfaXB2NC5zcmMsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDUwLVxcdFxcdFxcdCAgICAgICBUQ0FfRkxPV0VSX0tFWV9FTkNfSVBWNF9TUkMsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwNTMtXFx0XFx0XFx0ICAgICAgIHNpemVvZihrZXktXFx1MDAzZWVuY19pcHY0LnNyYykpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjA1NDpcXHRcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNlZW5jX2lwdjQuZHN0LFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA1NS1cXHRcXHRcXHQgICAgICAgVENBX0ZMT1dFUl9LRVlfRU5DX0lQVjRfRFNULFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDY0LVxcdFxcdG1hc2stXFx1MDAzZWVuY19jb250cm9sLmFkZHJfdHlwZSA9IH4wO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjA2NTpcXHRcXHRmbF9zZXRfa2V5X3ZhbCh0YiwgXFx1MDAyNmtleS1cXHUwMDNlZW5jX2lwdjYuc3JjLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA2Ni1cXHRcXHRcXHQgICAgICAgVENBX0ZMT1dFUl9LRVlfRU5DX0lQVjZfU1JDLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDY5LVxcdFxcdFxcdCAgICAgICBzaXplb2Yoa2V5LVxcdTAwM2VlbmNfaXB2Ni5zcmMpKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwNzA6XFx0XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWVuY19pcHY2LmRzdCxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwNzEtXFx0XFx0XFx0ICAgICAgIFRDQV9GTE9XRVJfS0VZX0VOQ19JUFY2X0RTVCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA3Ni1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwNzc6XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWVuY19rZXlfaWQua2V5aWQsIFRDQV9GTE9XRVJfS0VZX0VOQ19LRVlfSUQsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDc4LVxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNlZW5jX2tleV9pZC5rZXlpZCwgVENBX0ZMT1dFUl9VTlNQRUMsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwODAtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMDgxOlxcdGZsX3NldF9rZXlfdmFsKHRiLCBcXHUwMDI2a2V5LVxcdTAwM2VlbmNfdHAuc3JjLCBUQ0FfRkxPV0VSX0tFWV9FTkNfVURQX1NSQ19QT1JULFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA4Mi1cXHRcXHQgICAgICAgXFx1MDAyNm1hc2stXFx1MDAzZWVuY190cC5zcmMsIFRDQV9GTE9XRVJfS0VZX0VOQ19VRFBfU1JDX1BPUlRfTUFTSyxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA4NC1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwODU6XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWVuY190cC5kc3QsIFRDQV9GTE9XRVJfS0VZX0VOQ19VRFBfRFNUX1BPUlQsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDg2LVxcdFxcdCAgICAgICBcXHUwMDI2bWFzay1cXHUwMDNlZW5jX3RwLmRzdCwgVENBX0ZMT1dFUl9LRVlfRU5DX1VEUF9EU1RfUE9SVF9NQVNLLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDg4LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjA4OTpcXHRmbF9zZXRfa2V5X2lwKHRiLCB0cnVlLCBcXHUwMDI2a2V5LVxcdTAwM2VlbmNfaXAsIFxcdTAwMjZtYXNrLVxcdTAwM2VlbmNfaXApO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjA5MC1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwOTE6XFx0Zmxfc2V0X2tleV92YWwodGIsIFxcdTAwMjZrZXktXFx1MDAzZWhhc2guaGFzaCwgVENBX0ZMT1dFUl9LRVlfSEFTSCxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwOTItXFx0XFx0ICAgICAgIFxcdTAwMjZtYXNrLVxcdTAwM2VoYXNoLmhhc2gsIFRDQV9GTE9XRVJfS0VZX0hBU0hfTUFTSyxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjEwMC1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIxMDE6XFx0cmV0ID0gZmxfc2V0X2tleV9jdCh0YiwgXFx1MDAyNmtleS1cXHUwMDNlY3QsIFxcdTAwMjZtYXNrLVxcdTAwM2VjdCwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIxMDItXFx0aWYgKHJldClcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjEwNS1cXHRpZiAodGJbVENBX0ZMT1dFUl9LRVlfRkxBR1NdKSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMTA2OlxcdFxcdHJldCA9IGZsX3NldF9rZXlfZmxhZ3ModGNhX29wdHMsIHRiLCBmYWxzZSxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIxMDctXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZrZXktXFx1MDAzZWNvbnRyb2wuZmxhZ3MsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIxMTMtXFx0aWYgKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19GTEFHU10pXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMTE0OlxcdFxcdHJldCA9IGZsX3NldF9rZXlfZmxhZ3ModGNhX29wdHMsIHRiLCB0cnVlLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjExNS1cXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmtleS1cXHUwMDNlZW5jX2NvbnRyb2wuZmxhZ3MsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTIzNTg9c3RhdGljIGludCBmbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNDY4LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjQ2OTpcXHRlcnIgPSBmbF9zZXRfa2V5KG5ldCwgdGNhX29wdHMsIHRiLCBcXHUwMDI2Zm5ldy1cXHUwMDNla2V5LCBcXHUwMDI2bWFzay1cXHUwMDNla2V5LCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjQ3MC1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0yODA3PXN0YXRpYyB2b2lkICpmbF90bXBsdF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2NoYWluICpjaGFpbixcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjgzMi1cXHR0bXBsdC1cXHUwMDNlY2hhaW4gPSBjaGFpbjtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjI4MzM6XFx0ZXJyID0gZmxfc2V0X2tleShuZXQsIHRjYV9vcHRzLCB0YiwgXFx1MDAyNnRtcGx0LVxcdTAwM2VkdW1teV9rZXksXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yODM0LVxcdFxcdFxcdCBcXHUwMDI2dG1wbHQtXFx1MDAzZW1hc2ssIGV4dGFjayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI3OjM5LjcxMTU3MjIyOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTA3OTgxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZsb3dlciBGaWx0ZXIgTW9kaWZpY2F0aW9uIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGZsb3dlciBmaWx0ZXIgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgYGZsX2NoYW5nZWAgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gZm9yLCB3ZWxsLCBjaGFuZ2luZyB0aGUgZmlsdGVyLiBBbmQgdGhlbiB0aGVyZSdzIGBmbF90bXBsdF9jcmVhdGVgLCB3aGljaCBhbHNvIHNlZW1zIHRvIGJlIGEga2V5IGVudHJ5IHBvaW50IGZvciB0aGlzLCBwb3RlbnRpYWxseSB3aGVuIHdlJ3JlIGNyZWF0aW5nIGEgbmV3IGZsb3dlciBmaWx0ZXIgdGVtcGxhdGUuIEJvdGggb2YgdGhlc2UgZW50cnkgcG9pbnRzIOKAkyBgZmxfY2hhbmdlYCBhbmQgYGZsX3RtcGx0X2NyZWF0ZWAg4oCTIGV2ZW50dWFsbHkgY2FsbCBgZmxfc2V0X2tleWAsIHdoaWNoIHByb2JhYmx5IGRvZXMgdGhlIGNvcmUgd29yayBvZiBhY3R1YWxseSBjb25maWd1cmluZyB0aGUgZmlsdGVyLiBBbHJpZ2h0LCBzbyBJJ3ZlIGdvdCB0d28gZ29vZCBmb2NhbCBwb2ludHMgaGVyZTogYGZsX2NoYW5nZWAgYW5kIGBmbF90bXBsdF9jcmVhdGVgLlxuXG5XYWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBIYW5nIG9uLCBgZmxfY2hhbmdlYCBpcyBhICpjYWxsYmFjayogd2l0aGluIGBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfZmxfb3BzYD8gSW50ZXJlc3RpbmcuIEkgc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBsb29rIGF0IGBjbHNfZmxfb3BzYCB0byBzZWUgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIgaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsuIExldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IHN0cnVjdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyOCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyNzo0My45NjIzNzIyNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MTg2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHRjZl9wcm90b19vcHMgY2xzX2ZsX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvY2xzX2Zsb3dlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MzgyMj1zdGF0aWMgYm9vbCBmbF9kZWxldGVfZW1wdHkoc3RydWN0IHRjZl9wcm90byAqdHApXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4MzItXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzozODMzOnN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfZmxfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODM0LVxcdC5raW5kXFx0XFx0PSBcXFwiZmxvd2VyXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjc6NDQuMDEwNzkzNjk4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjQ4MTM3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRmxvd2VyIENsYXNzaWZpZXIgQ29uZmlndXJhdGlvbiBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIHRoZSBgLmNoYW5nZWAgY2FsbGJhY2ssIHdoaWNoIEknbSBjb25maXJtaW5nIGlzIGBmbF9jaGFuZ2VgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIHNwZWNpZmljcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGF2b2lkaW5nIHRob3NlIGZydXN0cmF0aW5nIGRlYnVnZ2luZyBzZXNzaW9ucyBsYXRlci5cblxuVGhlIGNvcmUgaW1wbGVtZW50YXRpb24gc2VlbXMgdG8gYmUgaW4gYG5ldC9zY2hlZC9jbHNfZmxvd2VyLmNgLCBzbyBJJ2xsIGJlIGxvb2tpbmcgdGhlcmUgZm9yIHRoZSBtZWF0IG9mIHRoZSBmdW5jdGlvbmFsaXR5LiBOb3csIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbiBpdHNlbGYsIGl0IGxvb2tzIGxpa2UgYE5FVF9DTFNfRkxPV0VSYCBpcyB0aGUga2V5LiBCdXQgdGhhdCBhbG9uZSBkb2Vzbid0IGd1YXJhbnRlZSBldmVyeXRoaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkuIEkgc2hvdWxkIGFsd2F5cyBjcm9zcy1yZWZlcmVuY2UgdGhlIGBLY29uZmlnYCBmaWxlcywganVzdCB0byBiZSB0aG9yb3VnaC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgbmV0L3NjaGVkL0tjb25maWdgIHRvIGJlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciByZWxhdGVkLCBwb3RlbnRpYWxseSBvYnNjdXJlLCBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZsb3dlciBjbGFzc2lmaWVyLiBHb3R0YSBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyNzo0Ny43NzU2MTAxMzJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTI0OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTX0ZMT1dFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz01NjI9Y29uZmlnIE5FVF9DTFNfQlBGXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01NzEtXFxubmV0L3NjaGVkL0tjb25maWc6NTcyOmNvbmZpZyBORVRfQ0xTX0ZMT1dFUlxcbm5ldC9zY2hlZC9LY29uZmlnLTU3My1cXHR0cmlzdGF0ZSBcXFwiRmxvd2VyIGNsYXNzaWZpZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI3OjQ3LjgyNDczOTc0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5Njc0OTg1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBgTkVUX0NMU19GTE9XRVJgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9DTFNfRkxPV0VSYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgY29udGV4dC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBjb3JlIGNsYXNzaWZpY2F0aW9uIG1lY2hhbmlzbXMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbiB0aGUga2VybmVsLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIHJlbHkgb24gYE5FVF9DTFNfRkxPV0VSYCBhbmQsIGNvbnZlcnNlbHksIHdoYXQgaXQgbGV2ZXJhZ2VzLlxuXG5TcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dDpcblxuKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIFdoYXQgc3RydWN0dXJlcyBkb2VzIGBORVRfQ0xTX0ZMT1dFUmAgZGVmaW5lIG9yIHVzZT8gSXMgaXQgbWFuaXB1bGF0aW5nIGZsb3cga2V5cywgbWFza3MsIGFjdGlvbnMsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBVbmRlcnN0YW5kaW5nIGl0cyBkYXRhIG1vZGVsIGlzIGNydWNpYWwuXG4qICAgKipBUEkgSW50ZXJhY3Rpb25zOioqIFdoYXQga2VybmVsIEFQSXMgZG9lcyBgTkVUX0NMU19GTE9XRVJgIGV4cG9zZT8gQXJlIHRoZXJlIGlvY3RscywgbmV0bGluayBtZXNzYWdlcywgb3Igb3RoZXIgaW50ZXJmYWNlcyB0aGF0IGFkbWluaXN0cmF0b3JzIG9yIGFwcGxpY2F0aW9ucyB1c2UgdG8gY29uZmlndXJlIGl0P1xuKiAgICoqSW50ZWdyYXRpb24gUG9pbnRzOioqIFdoZXJlIGRvZXMgaXQgaG9vayBpbnRvIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoPyBJcyBpdCBpbnZvbHZlZCBpbiBpbmdyZXNzLCBlZ3Jlc3MsIG9yIGJvdGg/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciBjbGFzc2lmaWVycyBvciB0cmFmZmljIGNvbnRyb2wgbW9kdWxlcyBsaWtlIGB0Y2A/XG4qICAgKipIYXJkd2FyZSBBYnN0cmFjdGlvbjoqKiBEb2VzIGl0IHN1cHBvcnQgaGFyZHdhcmUgb2ZmbG9hZGluZz8gSWYgc28sIHdoYXQgYXJlIHRoZSByZWxldmFudCBkZXZpY2UgZHJpdmVycyBhbmQgaG93IGRvZXMgaXQgaW50ZXJmYWNlIHdpdGggdGhlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaXMgaW1wbGVtZW50ZWQuXG4qICAgKipDb25maWd1cmF0aW9uOioqIFRoZSBjb25maWd1cmF0aW9uIHRvb2xzIGZvciBgTkVUX0NMU19GTE9XRVJgLiBIb3cgaXMgaXQgY29uZmlndXJlZD8gRG9lcyBpdCBuZWVkIGV4dGVybmFsIGhlbHAsIG9yIGlzIHRoZXJlIGEgc3BlY2lmaWMgY29tbWFuZCB0byBzZXQgcGFyYW1ldGVycy5cblxuVWx0aW1hdGVseSwgSSB3YW50IGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgXCJyYWlzb24gZCfDqnRyZVwiLiBJIG5lZWQgdG8gaWRlbnRpZnkgYm90aCB0aGUgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gZGVwZW5kZW5jaWVzIHRvIHVuZGVyc3RhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCB0cmFmZmljIG1hbmFnZW1lbnQgc2NoZW1lLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXAgaW50byB0aGUgc291cmNlIGNvZGUsIG1heWJlIGV2ZW4gcnVuIHNvbWUgcXVpY2sgYGdyZXBgIHF1ZXJpZXMgb24gdGhlIGNvZGViYXNlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTIwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjc6NTIuNzkyMjQxODQxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3MDpcXHRcXHQgIGJlIGNhbGxlZCBjbHNfYnBmLlxcbiA1NzE6XFx0XFxuIDU3MjpcXHRjb25maWcgTkVUX0NMU19GTE9XRVJcXG4gNTczOlxcdFxcdHRyaXN0YXRlIFxcXCJGbG93ZXIgY2xhc3NpZmllclxcXCJcXG4gNTc0OlxcdFxcdHNlbGVjdCBORVRfQ0xTXFxuIDU3NTpcXHRcXHRoZWxwXFxuIDU3NjpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgYmFzZWQgb25cXG4gNTc3OlxcdFxcdCAgYSBjb25maWd1cmFibGUgY29tYmluYXRpb24gb2YgcGFja2V0IGtleXMgYW5kIG1hc2tzLlxcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gNTgwOlxcdFxcdCAgYmUgY2FsbGVkIGNsc19mbG93ZXIuXFxuIDU4MTpcXHRcXG4gNTgyOlxcdGNvbmZpZyBORVRfQ0xTX01BVENIQUxMXFxuIDU4MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTWF0Y2gtYWxsIGNsYXNzaWZpZXJcXFwiXFxuIDU4NDpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA1ODU6XFx0XFx0aGVscFxcbiA1ODY6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzIGJhc2VkIG9uXFxuIDU4NzpcXHRcXHQgIG5vdGhpbmcuIEV2ZXJ5IHBhY2tldCB3aWxsIG1hdGNoLlxcbiA1ODg6XFx0XFxuIDU4OTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjc6NTIuNzkyMzI4ODQxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTc0NDIyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgTmV0d29yayBDbGFzc2lmaWVyIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgbmV0d29yayBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0cmFmZmljIGNsYXNzaWZpY2F0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBORVRfQ0xTYCBzZXR0aW5nLiBJJ3ZlIGdvdCB0byBkZXRlcm1pbmUgaXRzIG1lYW5pbmcgYW5kIGltcGxpY2F0aW9uIHdpdGhpbiB0aGUgZ3JlYXRlciBjb250ZXh0IG9mIHRoZSBuZXR3b3JrIHNjaGVkdWxlciwgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgYE5FVF9TQ0hFRGAuIEVzc2VudGlhbGx5LCBgTkVUX0NMU2AgaXMgYSBjaGlsZCBvciBkZXBlbmRlbnQgaXRlbSB3aXRoaW4gdGhlIG92ZXJhbGwgYE5FVF9TQ0hFRGAgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBORVRfQ0xTYCBpcyBzZWxlY3RlZCBhbmQgaG93IGl0cyBzZXR0aW5ncyBpbmZsdWVuY2UgdGhlIG5ldHdvcmsgc2NoZWR1bGVyLiBJIHdpbGwgbm93IHJldmlldyB0aGUgcGFyZW50IGNvbmZpZyBgTkVUX1NDSEVEYCB0byBnYWluIGFuIHVuZGVyc3RhbmRpbmcgb2YgYE5FVF9DTFNgIHdpdGhpbiB0aGF0IGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NjMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI3OjU2LjE0OTc3NDExM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMjg0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBORVRfU0NIRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI3OjU2LjE5OTEwNzkxMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDk2MzgwMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIHVuZGVyc3RhbmQgaXQ6XG5cbioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgXHUwMDI2IFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBzZWVtcyBsaWtlIGBORVRfU0NIRURgIGFuZCBgTkVUX0NMU19GTE9XRVJgIGFyZSB0aGUga2V5IG9uZXMgSSBuZWVkIHRvIGNvbnNpZGVyIGluaXRpYWxseS4gQnV0IGhhbmcgb24sIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IERvZXMgYE5FVF9DTFNgIGFsc28gZmFjdG9yIGluIGhlcmU/IEl0IGxvb2tzIGxpa2UgYE5FVF9DTFNfRkxPV0VSYCBtaWdodCBpbXBsaWNpdGx5IHNlbGVjdCBgTkVUX0NMU2AsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kIGZvciBmdWxsIGNvbmZpZ3VyYWJpbGl0eS5cblxuUmlnaHQsIGxldCdzIGp1c3QgY29uZmlybSBpZiBgTkVUX1NDSEVEYCBpcyB0cnVseSBlc3NlbnRpYWwsIGFuZCB0aGVuIGRvdWJsZS1jaGVjayB0aGUgbWVudWNvbmZpZyB0byBiZSBzdXJlLiBZZXAsIGl0IGFwcGVhcnMgaXQgaXMgcGFydCBvZiB0aGF0IGNvbmZpZy4gU28sIGFnYWluLCBgTkVUX1NDSEVEYCBhbmQgYE5FVF9DTFNfRkxPV0VSYCBhcmUgdGhlIHR3byBtYWpvciBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBjb25maWd1cmVkLlxuXG5Ob3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgYGZsX3NldF9lbmNfb3B0YCBmdW5jdGlvbi4gSSB3YW50IHRvIG1ha2Ugc3VyZSBpdCdzIG5vdCBndWFyZGVkIGJ5IHNvbWUgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbiBJJ3ZlIG92ZXJsb29rZWQuIEdvdHRhIGJlIGNvbXByZWhlbnNpdmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTI5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI4OjAwLjY5NTQ5MDUyMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2Nsc19mbG93ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDk1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDk1OlxcdFxcdH1cXG4xNDk2OlxcdFxcbjE0OTc6XFx0XFx0aWYgKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRfUEZDUF9UWVBFXSlcXG4xNDk4OlxcdFxcdFxcdG1kLVxcdTAwM2V0eXBlID0gbmxhX2dldF91OCh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX1BGQ1BfVFlQRV0pO1xcbjE0OTk6XFx0XFxuMTUwMDpcXHRcXHRpZiAodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVF9QRkNQX1NFSURdKVxcbjE1MDE6XFx0XFx0XFx0bWQtXFx1MDAzZXNlaWQgPSBubGFfZ2V0X2JlNjQodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVF9QRkNQX1NFSURdKTtcXG4xNTAyOlxcdFxcbjE1MDM6XFx0XFx0cmV0dXJuIHNpemVvZigqbWQpO1xcbjE1MDQ6XFx0fVxcbjE1MDU6XFx0XFxuMTUwNjpcXHRzdGF0aWMgaW50IGZsX3NldF9lbmNfb3B0KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxuMTUwNzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBmbF9mbG93X2tleSAqbWFzayxcXG4xNTA4OlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjE1MDk6XFx0e1xcbjE1MTA6XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhX2VuY19rZXksICpubGFfb3B0X2tleSwgKm5sYV9vcHRfbXNrID0gTlVMTDtcXG4xNTExOlxcdFxcdGludCBlcnIsIG9wdGlvbl9sZW4sIGtleV9kZXB0aCwgbXNrX2RlcHRoID0gMDtcXG4xNTEyOlxcdFxcbjE1MTM6XFx0XFx0ZXJyID0gbmxhX3ZhbGlkYXRlX25lc3RlZF9kZXByZWNhdGVkKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTXSxcXG4xNTE0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfTUFYLFxcbjE1MTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBlbmNfb3B0c19wb2xpY3ksIGV4dGFjayk7XFxuMTUxNjpcXHRcXHRpZiAoZXJyKVxcbjE1MTc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNTE4OlxcdFxcbjE1MTk6XFx0XFx0bmxhX2VuY19rZXkgPSBubGFfZGF0YSh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU10pO1xcbjE1MjA6XFx0XFxuMTUyMTpcXHRcXHRpZiAodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfTUFTS10pIHtcXG4xNTIyOlxcdFxcdFxcdGVyciA9IG5sYV92YWxpZGF0ZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVNLXSxcXG4xNTIzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfTUFYLFxcbjE1MjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBlbmNfb3B0c19wb2xpY3ksIGV4dGFjayk7XFxuMTUyNTpcXHRcXHRcXHRpZiAoZXJyKVxcbjE1MjY6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNTI3OlxcdFxcbjE1Mjg6XFx0XFx0XFx0bmxhX29wdF9tc2sgPSBubGFfZGF0YSh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVNLXSk7XFxuMTUyOTpcXHRcXHRcXHRtc2tfZGVwdGggPSBubGFfbGVuKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX01BU0tdKTtcXG4xNTMwOlxcdFxcdFxcdGlmICghbmxhX29rKG5sYV9vcHRfbXNrLCBtc2tfZGVwdGgpKSB7XFxuMTUzMTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIG5lc3RlZCBhdHRyaWJ1dGUgZm9yIG1hc2tzXFxcIik7XFxuMTUzMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTMzOlxcdFxcdFxcdH1cXG4xNTM0OlxcdFxcdH1cXG4xNTM1OlxcdFxcbjE1MzY6XFx0XFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhX29wdF9rZXksIG5sYV9lbmNfa2V5LFxcbjE1Mzc6XFx0XFx0XFx0XFx0ICBubGFfbGVuKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTXSksIGtleV9kZXB0aCkge1xcbjE1Mzg6XFx0XFx0XFx0c3dpdGNoIChubGFfdHlwZShubGFfb3B0X2tleSkpIHtcXG4xNTM5OlxcdFxcdFxcdGNhc2UgVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfR0VORVZFOlxcbjE1NDA6XFx0XFx0XFx0XFx0aWYgKGtleS1cXHUwMDNlZW5jX29wdHMuZHN0X29wdF90eXBlIFxcdTAwMjZcXHUwMDI2XFxuMTU0MTpcXHRcXHRcXHRcXHQgICAga2V5LVxcdTAwM2VlbmNfb3B0cy5kc3Rfb3B0X3R5cGUgIT1cXG4xNTQyOlxcdFxcdFxcdFxcdCAgICBJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQpIHtcXG4xNTQzOlxcdFxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkR1cGxpY2F0ZSB0eXBlIGZvciBnZW5ldmUgb3B0aW9uc1xcXCIpO1xcbjE1NDQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI4OjAwLjY5NTczNTcwMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjUwNjUxMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBCdWcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGV4cGVydCBleWUgZ29lcyB0byB0aGUgZmFjdCB0aGF0IHRoaXMgZml4IGZvciBgZmxfc2V0X2VuY19vcHRgIGRvZXNuJ3Qgc2VlbSB0byBiZSBndWFyZGVkIGJ5IGFueXRoaW5nIGJlc2lkZXMgYE5FVF9DTFNfRkxPV0VSYC4gVGhhdCdzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCwgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIGFuIHVuY2hlY2tlZCBgbXNrX2RlcHRoYCBpbiB0aGUgaXRlcmF0aW9uIHVzaW5nIGBubGFfbmV4dGAgd2l0aGluIGBmbF9zZXRfZW5jX29wdGAuIFRoaXMgY291bGQgZWFzaWx5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcywgd2hpY2ggaXMgYSBiaWcgZGVhbC4gVGhlIGZpeCBpdHNlbGYgbG9va3Mgc3RyYWlnaHRmb3J3YXJkIOKAkyB3ZSdyZSBleHBsaWNpdGx5IHZhbGlkYXRpbmcgYG1za19kZXB0aGAgYmVmb3JlIGFjY2Vzc2luZyB0aGUgYG5sYV9vcHRfbXNrYCBkYXRhOlxuXG5gYGBjXG5cdFx0bmxhX29wdF9tc2sgPSBubGFfbmV4dChubGFfb3B0X21zaywgXHUwMDI2bXNrX2RlcHRoKTtcblxuXHRcdGlmIChtc2tfZGVwdGggXHUwMDI2XHUwMDI2ICFubGFfb2sobmxhX29wdF9tc2ssIG1za19kZXB0aCkpIHtcblx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJBIG1hc2sgYXR0cmlidXRlIGlzIGludmFsaWRcIik7XG5cdFx0XHRyZXR1cm4gLUVJTlZBTDtcblx0XHR9XG5gYGBcblxuVGhpcyBwcmV2ZW50cyBpbnZhbGlkIHBhcnNpbmcgYW5kIHBvdGVudGlhbGx5IGNyYXNoZXMuIEZ1bmN0aW9uYWxseSwgaXQncyBhIHByZXR0eSBjbGVhbiBmaXgsIGJ1dCBsZXQncyBzZWUgaG93IGl0J3MgdHJpZ2dlcmVkLiBJdCdzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRjIG5ldGxpbmssIHdoaWNoIG1lYW5zIHRoaXMgY291bGQgYmUgZXhwbG9pdGVkLiBJIG5lZWQgdG8ga25vdyB0aGUgZW50cnkgcG9pbnRzLlxuXG5UaGUgZm9jdXMgc3ltYm9scywgYmFzZWQgb24gdGhlIGNvZGUncyBjYWxsIGdyYXBoLCBhcmUgYGZsX2NoYW5nZWAgYW5kIGBmbF90bXBsdF9jcmVhdGVgLiBBbmQgdGhlIGNvbmZpZ3MgSSdtIGludGVyZXN0ZWQgaW4gYXJlIGBORVRfU0NIRURgIGFuZCBgTkVUX0NMU19GTE9XRVJgLlxuXG5Ob3csIGxldCdzIHZlcmlmeSBpZiBgZmxfc2V0X2VuY19vcHRgIGlzIHN0YXRpYywgYmVjYXVzZSB0aGF0IGhlbHBzIG5hcnJvdyBkb3duIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBZZXAsIGl0IGlzLiBUaGF0IG1lYW5zIHRoZSBmdW5jdGlvbnMgY2FsbGluZyBpdCBkaXJlY3RseSBhcmUgdGhlIGltcG9ydGFudCBvbmVzIHRvIHVuZGVyc3RhbmQuIFNvIGBmbF9jaGFuZ2VgIGFuZCBgZmxfdG1wbHRfY3JlYXRlYCBzZWVtIHRvIGJlIHRoZSBjb3JyZWN0IHN5bWJvbHMgdG8gZm9jdXMgb24uXG5cbkxldCdzIGNoZWNrIGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zIGNhbGxpbmcgYGZsX3NldF9lbmNfb3B0YC4gYGZsX3NldF9rZXlgIGNhbGxzIGl0LiBIbW0sIGBmbF9zZXRfa2V5YCBpcyBhbHNvIHN0YXRpYy4gQW5kIGBmbF9jaGFuZ2VgIGFuZCBgZmxfdG1wbHRfY3JlYXRlYCBib3RoIGNhbGwgYGZsX3NldF9rZXlgLiBPa2F5LCBzbyBgZmxfY2hhbmdlYCBhbmQgYGZsX3RtcGx0X2NyZWF0ZWAgYXJlIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cywgYXMgZXhwZWN0ZWQuIFdhaXQuLi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIElzIGBmbF9jaGFuZ2VgIHN0YXRpYz8gWWVzLCBpdCBpcy4gU28gdGhlIG9ubHkgZW50cnkgcG9pbnRzIGFyZSB0aHJvdWdoIGBjbHNfZmxfb3BzYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyODoxMC4zNDYzODkzNTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTA1Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsX2NoYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvY2xzX2Zsb3dlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MjMzNj1zdGF0aWMgaW50IGZsX2h0X2luc2VydF91bmlxdWUoc3RydWN0IGNsc19mbF9maWx0ZXIgKmZuZXcsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIzNTctXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyMzU4OnN0YXRpYyBpbnQgZmxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIzNTktXFx0XFx0ICAgICBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0zODMzPXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfZmxfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4MzktXFx0LnB1dFxcdFxcdD0gZmxfcHV0LFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6Mzg0MDpcXHQuY2hhbmdlXFx0XFx0PSBmbF9jaGFuZ2UsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODQxLVxcdC5kZWxldGVcXHRcXHQ9IGZsX2RlbGV0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjg6MTAuMzk3MzA1MTk0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0ODE2MDcxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTeW1ib2wgVmlzaWJpbGl0eSBmb3IgRmlsdGVyaW5nIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSBiZXN0IHN5bWJvbCB0byBmb2N1cyBvbi4gSSBzZWUgYGZsX2NoYW5nZWAg4oCTIGl0J3Mgc3RhdGljLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0J3MgaW50ZXJuYWwuIEJ1dCB3YWl0IGEgbWludXRl4oCmIGl0J3MgdGhlIGNhbGxiYWNrIGZvciB0aGUgYC5jaGFuZ2VgIG9wZXJhdGlvbiEgVGhhdCdzIGEga2V5IGRldGFpbC4gSSB3YXMgaW5pdGlhbGx5IHdvbmRlcmluZyBpZiB0aGVyZSB3YXMgYSBub24tc3RhdGljIGFsdGVybmF0aXZlLCBidXQgYGZsX2NoYW5nZWAgaXMgdXNlZCBpbiB0aGUgYGNsc19mbF9vcHNgIHN0cnVjdHVyZSB3aGljaCBpcyB0aGVuIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl90Y2ZfcHJvdG9fb3BzKFx1MDAyNmNsc19mbF9vcHMpYC5cblxuRnJvbSB3aGF0IEkgY2FuIHRlbGwgZnJvbSBteSB1bmRlcnN0YW5kaW5nIG9mIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCwgdGhlIGFjdHVhbCBlbnRyeSBwb2ludCBpcyBgdGNfbmV3X3RmaWx0ZXJgLCB3aGljaCB0aGVuIGNhbGxzIGB0cC1cdTAwM2VvcHMtXHUwMDNlY2hhbmdlKClgLiBTbywgZXZlbiB0aG91Z2ggYGZsX2NoYW5nZWAgaXMgc3RhdGljLCBpdCdzICp0aGUqIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQncyBiZWluZyB1c2VkIGFuZCBpdHMgYWRkcmVzcyBpcyB0YWtlbi4gVGhhdCBtYWtlcyBpdCBhIHN0cm9uZyBjb250ZW5kZXIsIGV2ZW4gZGVzcGl0ZSB0aGUgJ3N0YXRpYycgZGVzaWduYXRpb24uXG5cblJpZ2h0LCBsZXQgbWUgcmV2aXNpdCB0aGUgb3JpZ2luYWwgcHJvbXB0OiBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1wiLiAqQWghKiBTaW5jZSBgZmxfY2hhbmdlYCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0ICpjYW5ub3QqIGJlIGZ1bGx5IGlubGluZWQuIFRoZSBjb21waWxlciBoYXMgdG8gcHJlc2VydmUgaXRzIGFkZHJlc3MuIFNvLCBldmVuIHRob3VnaCBpdCdzIGRlY2xhcmVkIHdpdGggYHN0YXRpY2AsIGl0ICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MgYmVjYXVzZSBpdCdzIGJlaW5nIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIuIE1ha2VzIHNlbnNlLiBPa2F5LCB0aGVuLCBjb25zaWRlcmluZyB0aGlzLCB0aGF0IG1lYW5zIHRoYXQgYGZsX3RtcGx0X2NyZWF0ZWAgd2lsbCBhbHNvIGJlIGluIHRoZSBzYW1lIGJvYXQ7IGl0IGFsc28gaGFzIGEgZnVuY3Rpb24gcG9pbnRlciBhbmQgd2lsbCBub3QgYmUgaW5saW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjg6MTguODc4OTE1Mjg5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTgyMzA3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmxfdG1wbHRfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfZmxvd2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0yNzk0PXN0YXRpYyB2b2lkIGZsX2h3X2Rlc3Ryb3lfdG1wbHQoc3RydWN0IHRjZl9jaGFpbiAqY2hhaW4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI4MDYtXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyODA3OnN0YXRpYyB2b2lkICpmbF90bXBsdF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2NoYWluICpjaGFpbixcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI4MDgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmxhdHRyICoqdGNhLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0zODMzPXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfZmxfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4NDktXFx0LmJpbmRfY2xhc3NcXHQ9IGZsX2JpbmRfY2xhc3MsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzozODUwOlxcdC50bXBsdF9jcmVhdGVcXHQ9IGZsX3RtcGx0X2NyZWF0ZSxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4NTEtXFx0LnRtcGx0X2Rlc3Ryb3lcXHQ9IGZsX3RtcGx0X2Rlc3Ryb3ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI4OjE5LjI5NzE1MTQ2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MjkyNzcyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIEZsb3dlciBDbGFzc2lmaWVyIFBhdGNoKipcblxuT2theSwgc28gYm90aCBgZmxfY2hhbmdlYCBhbmQgYGZsX3RtcGx0X2NyZWF0ZWAgYXJlIGluZGVlZCBjYWxsYmFja3MsIHRoYXQgbXVjaCBpcyBjbGVhci4gSSdsbCBtZW50YWxseSB0YWcgdGhlbSBhcyB0aGUgY2VudHJhbCBmb2N1cyBwb2ludHMsIHRoZSAnZm9jdXMgc3ltYm9scycgaW4gdGhpcyBzaXR1YXRpb24uXG5cblJpZ2h0LCBsZXQncyBzZWUuLi4gdGhlIHBhdGNoIGlzIGFsbCBhYm91dCBmaXhpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIHNvbWUga2luZCBvZiBwcm9ibGVtYXRpYyBhdHRyaWJ1dGUgcGFyc2luZyBpc3N1ZSB3aXRoaW4gYGZsX3NldF9lbmNfb3B0YC4gVGhpcyBoYXBwZW5zIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiBuZXN0ZWQgbmV0bGluayBhdHRyaWJ1dGVzLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byBmbG93ZXIgY2xhc3NpZmllciBlbmNhcHN1bGF0aW9uIG9wdGlvbnMuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNydWNpYWwgY2hlY2sgdG8gdmFsaWRhdGUgYG1za19kZXB0aGAgYmVmb3JlIHRoZSBwcm9jZXNzIGNvbnRpbnVlcy4gVGhpcyB3aWxsIHByZXZlbnQgYSBsb3Qgb2YgcHJvYmxlbXMgaW4gdGhlIGZ1dHVyZS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB0b3VjaGluZyB0aGUgY29yZSBwYWNrZXQgY2xhc3NpZmljYXRpb24gbG9naWMsIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRjIG5ldGxpbmssIHNvIHdlIHdpbGwgY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MzcsIk91dHB1dFRva2VucyI6MTMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI4OjI0LjAyNjQzMTM1MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTgzMTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9DTFNfRkxPV0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmxfY2hhbmdlXCIsXG4gICAgXCJmbF90bXBsdF9jcmVhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3IgaW52YWxpZCBhdHRyaWJ1dGUgcGFyc2luZyBpbiBgZmxfc2V0X2VuY19vcHRgIHdoZW4gcGFyc2luZyBuZXN0ZWQgbmV0bGluayBhdHRyaWJ1dGVzIGZvciBmbG93ZXIgY2xhc3NpZmllciBlbmNhcHN1bGF0aW9uIG9wdGlvbnMuIEl0IGFkZHMgYSBjaGVjayB0byBlbnN1cmUgYG1za19kZXB0aGAgaXMgdmFsaWQgYmVmb3JlIGNvbnRpbnVpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBwYWNrZXQgY2xhc3NpZmljYXRpb24gbG9naWMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0YyBuZXRsaW5rLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19GTE9XRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmbF9jaGFuZ2VcIixcbiAgICBcImZsX3RtcGx0X2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciBpbnZhbGlkIGF0dHJpYnV0ZSBwYXJzaW5nIGluIGBmbF9zZXRfZW5jX29wdGAgd2hlbiBwYXJzaW5nIG5lc3RlZCBuZXRsaW5rIGF0dHJpYnV0ZXMgZm9yIGZsb3dlciBjbGFzc2lmaWVyIGVuY2Fwc3VsYXRpb24gb3B0aW9ucy4gSXQgYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSBgbXNrX2RlcHRoYCBpcyB2YWxpZCBiZWZvcmUgY29udGludWluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHBhY2tldCBjbGFzc2lmaWNhdGlvbiBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRjIG5ldGxpbmsuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI4OjI0LjEwMzQyMDMwOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzMTU5NTc2MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyODoyNC4xMDM5Mjc0MThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDIzMTU0NDYwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGJvdW5kcyBjaGVjayAoYG5sYV9va2ApIGZvciBuZXRsaW5rIGF0dHJpYnV0ZXMgYWZ0ZXIgYWR2YW5jaW5nIHRoZSBhdHRyaWJ1dGUgcG9pbnRlciB3aXRoIGBubGFfbmV4dGAuIFdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIGNvZGUgY291bGQgcmVhZCBvdXQtb2YtYm91bmRzIG1lbW9yeSB3aGVuIGFjY2Vzc2luZyB0aGUgbmV4dCBhdHRyaWJ1dGUncyBoZWFkZXIgb3IgZGF0YS4gT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFkMTg4Yzk4OTA2YTlhM2Y1YWExMzVmNmMwNDhmNjAzNmRkYTgwMmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwMzoyNzoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfZmxvd2VyLmMgYi9uZXQvc2NoZWQvY2xzX2Zsb3dlci5jXG5pbmRleCAwZTI3NWI1ODE1MWM0Li4xY2VmZWE1NzFlZmQ3IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19mbG93ZXIuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19mbG93ZXIuY1xuQEAgLTE3MDMsNiArMTcwMywxMSBAQCBzdGF0aWMgaW50IGZsX3NldF9lbmNfb3B0KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdFx0bmxhX29wdF9tc2sgPSBubGFfbmV4dChubGFfb3B0X21zaywgXHUwMDI2bXNrX2RlcHRoKTtcbitcbitcdFx0aWYgKG1za19kZXB0aCBcdTAwMjZcdTAwMjYgIW5sYV9vayhubGFfb3B0X21zaywgbXNrX2RlcHRoKSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJBIG1hc2sgYXR0cmlidXRlIGlzIGludmFsaWRcIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjg6MjQuMTAzOTI4MjI4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzY1NjAyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBSZWNlbnQgRmxvd2VyIENsYXNzaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBuZXQvc2NoZWQvY2xzX2Zsb3dlci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIGluIGBmbF9zZXRfZW5jX29wdGAuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdGhleSd2ZSBhZGRlZCBhIGJvdW5kcyBjaGVjay4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIHVzaW5nIGBubGFfb2soKWAgdG8gdmFsaWRhdGUgdGhlIGBubGFfb3B0X21za2AgbmV0bGluayBhdHRyaWJ1dGUgYmVmb3JlIGFjY2Vzc2luZyBpdC4gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBiZWNhdXNlLCB3aXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIGNvdWxkIHBvdGVudGlhbGx5IHJlYWQgbWVtb3J5IG91dHNpZGUgb2YgdGhlIGFsbG9jYXRlZCBib3VuZHMsIGEgY2xhc3NpYyBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LiBUaGUgY29kZSBub3cgY2hlY2tzIGlmIGBtc2tfZGVwdGhgIGlzIHZhbGlkLCBhbmQgaWYgbm90LCBpdCB0aHJvd3MgYW4gYC1FSU5WQUxgIGVycm9yIHZpYSBgTkxfU0VUX0VSUl9NU0dgLlxuXG5UaGUgdXNlIG9mIGBubGFfb2tgIGlzIGEgc29saWQgZGVmZW5zZSBhZ2FpbnN0IG91dC1vZi1ib3VuZHMgcmVhZHMgZHVyaW5nIHRoZSBwcm9jZXNzaW5nIG9mIE5ldGxpbmsgYXR0cmlidXRlcywgYSBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBhcHByb2FjaC4gQSByb2d1ZSBOZXRsaW5rIG1lc3NhZ2UgY3JhZnRlZCB3aXRoIGEgZ2FyYmFnZSBsZW5ndGggY291bGQgY2F1c2UgYSBjcmFzaCBvciBldmVuIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3MuIFRoYW5rZnVsbHksIEtBU0FOIHdvdWxkIGxpa2VseSBjYXRjaCB0aGF0LCBidXQgcHJldmVudGluZyB0aGUgaXNzdWUgZW50aXJlbHkgaXMgYWx3YXlzIHByZWZlcmFibGUsIHNvIEkgYXBwcmVjaWF0ZSBzZWVpbmcgdGhpcyB0eXBlIG9mIHByb2FjdGl2ZSBtZWFzdXJlLlxuXG5Ob3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLi4uIGRvZXMgdGhpcyBwYXRjaCwgaW4gaXRzIGltcGxlbWVudGF0aW9uLCBpbnRyb2R1Y2UgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeT8gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgYGZsX3NldF9lbmNfb3B0YCBpdHNlbGYgdG8gYmUgc3VyZS4gSSdtIHNhdGlzZmllZCBzbyBmYXIsIHRob3VnaCwgdGhhdCB0aGlzIHBhdGNoIGlzIGEgZGVmaW5pdGUgcG9zaXRpdmUgaW4gdGVybXMgb2YgaGFyZGVuaW5nIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjg6MjkuNTgwNDkyNzQ1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODcxMTE3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbF9zZXRfZW5jX29wdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvY2xzX2Zsb3dlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MTQ2OD1zdGF0aWMgaW50IGZsX3NldF9wZmNwX29wdChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBmbF9mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNTA1LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MTUwNjpzdGF0aWMgaW50IGZsX3NldF9lbmNfb3B0KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0xNTA3LVxcdFxcdFxcdCAgc3RydWN0IGZsX2Zsb3dfa2V5ICptYXNrLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0xODcxPXN0YXRpYyBpbnQgZmxfc2V0X2tleShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRjYV9vcHRzLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yMDk1LVxcdGlmICh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU10pIHtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjIwOTY6XFx0XFx0cmV0ID0gZmxfc2V0X2VuY19vcHQodGIsIGtleSwgbWFzaywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTIwOTctXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjg6MjkuNjI5MjEwNTQzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMjk0MDU0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBmbF9zZXRfZW5jX29wdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gVGltZSB0byB1bmRlcnN0YW5kIGBmbF9zZXRfZW5jX29wdGAuIEkgbmVlZCB0byBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4gSXMgaXQgc2V0dGluZyBlbmNvZGluZyBvcHRpb25zIGZvciB0aGUgZmlsZSwgcGVyaGFwcz8gTWF5YmUgaXQncyBhZGp1c3RpbmcgY29tcHJlc3Npb24gcGFyYW1ldGVycz8gV2hhdGV2ZXIgaXQncyBkb2luZywgaXQncyBjbGVhcmx5IGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLCBzbyBJJ20gZ29pbmcgdG8gZGlnIGluIGFuZCBicmVhayBpdCBkb3duLiBHb3R0YSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzeXN0ZW0ncyBiZWhhdmlvci4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjg6MzUuOTU4NjM0OTIzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX2Zsb3dlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2ODA6XFx0XFx0XFx0XFx0bWFzay1cXHUwMDNlZW5jX29wdHMuZHN0X29wdF90eXBlID0gSVBfVFVOTkVMX1BGQ1BfT1BUX0JJVDtcXG4xNjgxOlxcdFxcdFxcdFxcdG9wdGlvbl9sZW4gPSBmbF9zZXRfcGZjcF9vcHQobmxhX29wdF9tc2ssIG1hc2ssXFxuMTY4MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG1za19kZXB0aCwgb3B0aW9uX2xlbixcXG4xNjgzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXh0YWNrKTtcXG4xNjg0OlxcdFxcdFxcdFxcdGlmIChvcHRpb25fbGVuIFxcdTAwM2MgMClcXG4xNjg1OlxcdFxcdFxcdFxcdFxcdHJldHVybiBvcHRpb25fbGVuO1xcbjE2ODY6XFx0XFxuMTY4NzpcXHRcXHRcXHRcXHRtYXNrLVxcdTAwM2VlbmNfb3B0cy5sZW4gKz0gb3B0aW9uX2xlbjtcXG4xNjg4OlxcdFxcdFxcdFxcdGlmIChrZXktXFx1MDAzZWVuY19vcHRzLmxlbiAhPSBtYXNrLVxcdTAwM2VlbmNfb3B0cy5sZW4pIHtcXG4xNjg5OlxcdFxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJLZXkgYW5kIG1hc2sgbWlzcyBhbGlnbmVkXFxcIik7XFxuMTY5MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjkxOlxcdFxcdFxcdFxcdH1cXG4xNjkyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE2OTM6XFx0XFx0XFx0ZGVmYXVsdDpcXG4xNjk0OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlVua25vd24gdHVubmVsIG9wdGlvbiB0eXBlXFxcIik7XFxuMTY5NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjk2OlxcdFxcdFxcdH1cXG4xNjk3OlxcdFxcbjE2OTg6XFx0XFx0XFx0aWYgKCFtc2tfZGVwdGgpXFxuMTY5OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xNzAwOlxcdFxcbjE3MDE6XFx0XFx0XFx0aWYgKCFubGFfb2sobmxhX29wdF9tc2ssIG1za19kZXB0aCkpIHtcXG4xNzAyOlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkEgbWFzayBhdHRyaWJ1dGUgaXMgaW52YWxpZFxcXCIpO1xcbjE3MDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTcwNDpcXHRcXHRcXHR9XFxuMTcwNTpcXHRcXHRcXHRubGFfb3B0X21zayA9IG5sYV9uZXh0KG5sYV9vcHRfbXNrLCBcXHUwMDI2bXNrX2RlcHRoKTtcXG4xNzA2OlxcdFxcbjE3MDc6XFx0XFx0XFx0aWYgKG1za19kZXB0aCBcXHUwMDI2XFx1MDAyNiAhbmxhX29rKG5sYV9vcHRfbXNrLCBtc2tfZGVwdGgpKSB7XFxuMTcwODpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJBIG1hc2sgYXR0cmlidXRlIGlzIGludmFsaWRcXFwiKTtcXG4xNzA5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3MTA6XFx0XFx0XFx0fVxcbjE3MTE6XFx0XFx0fVxcbjE3MTI6XFx0XFxuMTcxMzpcXHRcXHRyZXR1cm4gMDtcXG4xNzE0OlxcdH1cXG4xNzE1OlxcdFxcbjE3MTY6XFx0c3RhdGljIGludCBmbF92YWxpZGF0ZV9jdF9zdGF0ZSh1MTYgc3RhdGUsIHN0cnVjdCBubGF0dHIgKnRiLFxcbjE3MTc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjE3MTg6XFx0e1xcbjE3MTk6XFx0XFx0aWYgKHN0YXRlIFxcdTAwMjZcXHUwMDI2ICEoc3RhdGUgXFx1MDAyNiBUQ0FfRkxPV0VSX0tFWV9DVF9GTEFHU19UUkFDS0VEKSkge1xcbjE3MjA6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihleHRhY2ssIHRiLFxcbjE3MjE6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJubyB0cmssIHNvIG5vIG90aGVyIGZsYWcgY2FuIGJlIHNldFxcXCIpO1xcbjE3MjI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTcyMzpcXHRcXHR9XFxuMTcyNDpcXHRcXG4xNzI1OlxcdFxcdGlmIChzdGF0ZSBcXHUwMDI2IFRDQV9GTE9XRVJfS0VZX0NUX0ZMQUdTX05FVyBcXHUwMDI2XFx1MDAyNlxcbjE3MjY6XFx0XFx0ICAgIHN0YXRlIFxcdTAwMjYgVENBX0ZMT1dFUl9LRVlfQ1RfRkxBR1NfRVNUQUJMSVNIRUQpIHtcXG4xNzI3OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCB0YixcXG4xNzI4OlxcdFxcdFxcdFxcdFxcdCAgICBcXFwibmV3IGFuZCBlc3QgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZVxcXCIpO1xcbjE3Mjk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI4OjM1Ljk1ODkyNDY4M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDg2MjYwMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBPdXQtb2YtQm91bmRzIEFjY2VzcyBpbiBOZXRsaW5rIEF0dHJpYnV0ZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBjaGVjayBmb3IgYG5sYV9va2AgYWZ0ZXIgYSBjYWxsIHRvIGBubGFfbmV4dGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgZGVzaWduZWQgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGUgcmVhc29uaW5nIHNlZW1zIHRvIGJlIHRoYXQgYWZ0ZXIgYG5sYV9uZXh0YCB1cGRhdGVzIHRoZSBwb2ludGVyLCB0aGUgcmVtYWluaW5nIGxlbmd0aCBgbXNrX2RlcHRoYCBtaWdodCBzdGlsbCBiZSBwb3NpdGl2ZSwgYnV0IHRoZSBuZXcgYG5sYV9vcHRfbXNrYCB3b3VsZG4ndCBiZSBjb21wbGV0ZWx5IHdpdGhpbiB0aGUgYnVmZmVyJ3MgYm91bmRhcmllcy4gSSBpbW1lZGlhdGVseSBoYXZlIGEgcXVlc3Rpb246IGRvZXNuJ3QgYG5sYV9uZXh0YCAqaXRzZWxmKiB1cGRhdGUgYm90aCB0aGUgcG9pbnRlciBhbmQgdGhlIHJlbWFpbmluZyBsZW5ndGg/IElmIGBtc2tfZGVwdGhgIGlzIHBvc2l0aXZlLCB0aGUgbG9vcCBzaG91bGQgY29udGludWUsIGFuZCBpbiB0aGUgbmV4dCBpdGVyYXRpb24sIHdlJ2xsIGFjY2VzcyBgbmxhX29wdF9tc2tgLiBTbywgd2hlcmUgaXMgdGhlIHZ1bG5lcmFiaWxpdHk/XG5cbldhaXQsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIGhvdyB0aGlzIHdob2xlIHRoaW5nIGlzIHN0cnVjdHVyZWQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoZSBvdXRlciBsb29wIGlzIGFjdHVhbGx5IGEgYG5sYV9mb3JfZWFjaF9uZXN0ZWRgIGxvb3AuIE9rLCB5ZXMsIHRoYXQncyByaWdodC4gYG5sYV9mb3JfZWFjaF9uZXN0ZWQobmxhX29wdF9rZXksIG5sYV9vcHRfa2V5X3RiLCBrZXlfZGVwdGgpYC5cblxuQWxyaWdodCwgSSBzaG91bGQgcHJvYmFibHkgcmUtcmVhZCB0aGUgc3RhcnQgb2YgdGhhdCBsb29wIHRvIHNlZSBob3cgdGhpcyB3b3Jrcy4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIHRoZSBwcm9jZXNzIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGVkZ2UgY2FzZSBiZWluZyBhZGRyZXNzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyODo0MS40NDUxODdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9jbHNfZmxvd2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUwMDpcXHRcXHRpZiAodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVF9QRkNQX1NFSURdKVxcbjE1MDE6XFx0XFx0XFx0bWQtXFx1MDAzZXNlaWQgPSBubGFfZ2V0X2JlNjQodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVF9QRkNQX1NFSURdKTtcXG4xNTAyOlxcdFxcbjE1MDM6XFx0XFx0cmV0dXJuIHNpemVvZigqbWQpO1xcbjE1MDQ6XFx0fVxcbjE1MDU6XFx0XFxuMTUwNjpcXHRzdGF0aWMgaW50IGZsX3NldF9lbmNfb3B0KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxuMTUwNzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBmbF9mbG93X2tleSAqbWFzayxcXG4xNTA4OlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjE1MDk6XFx0e1xcbjE1MTA6XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhX2VuY19rZXksICpubGFfb3B0X2tleSwgKm5sYV9vcHRfbXNrID0gTlVMTDtcXG4xNTExOlxcdFxcdGludCBlcnIsIG9wdGlvbl9sZW4sIGtleV9kZXB0aCwgbXNrX2RlcHRoID0gMDtcXG4xNTEyOlxcdFxcbjE1MTM6XFx0XFx0ZXJyID0gbmxhX3ZhbGlkYXRlX25lc3RlZF9kZXByZWNhdGVkKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTXSxcXG4xNTE0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfTUFYLFxcbjE1MTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBlbmNfb3B0c19wb2xpY3ksIGV4dGFjayk7XFxuMTUxNjpcXHRcXHRpZiAoZXJyKVxcbjE1MTc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNTE4OlxcdFxcbjE1MTk6XFx0XFx0bmxhX2VuY19rZXkgPSBubGFfZGF0YSh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU10pO1xcbjE1MjA6XFx0XFxuMTUyMTpcXHRcXHRpZiAodGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfTUFTS10pIHtcXG4xNTIyOlxcdFxcdFxcdGVyciA9IG5sYV92YWxpZGF0ZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVNLXSxcXG4xNTIzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfTUFYLFxcbjE1MjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBlbmNfb3B0c19wb2xpY3ksIGV4dGFjayk7XFxuMTUyNTpcXHRcXHRcXHRpZiAoZXJyKVxcbjE1MjY6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNTI3OlxcdFxcbjE1Mjg6XFx0XFx0XFx0bmxhX29wdF9tc2sgPSBubGFfZGF0YSh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUU19NQVNLXSk7XFxuMTUyOTpcXHRcXHRcXHRtc2tfZGVwdGggPSBubGFfbGVuKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX01BU0tdKTtcXG4xNTMwOlxcdFxcdFxcdGlmICghbmxhX29rKG5sYV9vcHRfbXNrLCBtc2tfZGVwdGgpKSB7XFxuMTUzMTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIG5lc3RlZCBhdHRyaWJ1dGUgZm9yIG1hc2tzXFxcIik7XFxuMTUzMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTMzOlxcdFxcdFxcdH1cXG4xNTM0OlxcdFxcdH1cXG4xNTM1OlxcdFxcbjE1MzY6XFx0XFx0bmxhX2Zvcl9lYWNoX2F0dHIobmxhX29wdF9rZXksIG5sYV9lbmNfa2V5LFxcbjE1Mzc6XFx0XFx0XFx0XFx0ICBubGFfbGVuKHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTXSksIGtleV9kZXB0aCkge1xcbjE1Mzg6XFx0XFx0XFx0c3dpdGNoIChubGFfdHlwZShubGFfb3B0X2tleSkpIHtcXG4xNTM5OlxcdFxcdFxcdGNhc2UgVENBX0ZMT1dFUl9LRVlfRU5DX09QVFNfR0VORVZFOlxcbjE1NDA6XFx0XFx0XFx0XFx0aWYgKGtleS1cXHUwMDNlZW5jX29wdHMuZHN0X29wdF90eXBlIFxcdTAwMjZcXHUwMDI2XFxuMTU0MTpcXHRcXHRcXHRcXHQgICAga2V5LVxcdTAwM2VlbmNfb3B0cy5kc3Rfb3B0X3R5cGUgIT1cXG4xNTQyOlxcdFxcdFxcdFxcdCAgICBJUF9UVU5ORUxfR0VORVZFX09QVF9CSVQpIHtcXG4xNTQzOlxcdFxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkR1cGxpY2F0ZSB0eXBlIGZvciBnZW5ldmUgb3B0aW9uc1xcXCIpO1xcbjE1NDQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTU0NTpcXHRcXHRcXHRcXHR9XFxuMTU0NjpcXHRcXHRcXHRcXHRvcHRpb25fbGVuID0gMDtcXG4xNTQ3OlxcdFxcdFxcdFxcdGtleS1cXHUwMDNlZW5jX29wdHMuZHN0X29wdF90eXBlID0gSVBfVFVOTkVMX0dFTkVWRV9PUFRfQklUO1xcbjE1NDg6XFx0XFx0XFx0XFx0b3B0aW9uX2xlbiA9IGZsX3NldF9nZW5ldmVfb3B0KG5sYV9vcHRfa2V5LCBrZXksXFxuMTU0OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAga2V5X2RlcHRoLCBvcHRpb25fbGVuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyODo0MS40NDU0MzA1M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTM0MzgyOTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXR0cmlidXRlIFByb2Nlc3NpbmcgTG9vcCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhlIGBubGFfZm9yX2VhY2hfYXR0cmAgbG9vcC4gVGhhdCdzIG91ciBzdGFydGluZyBwb2ludCwgaXRlcmF0aW5nIHRocm91Z2ggYXR0cmlidXRlcyB1c2luZyBgbmxhX29wdF9rZXlgLiBJdCB0aGVuIHByb2NlZWRzIHRvIHByb2Nlc3MgYG5sYV9vcHRfbXNrYCBpZiBgbXNrX2RlcHRoYCBpcyBhbnl0aGluZyBvdGhlciB0aGFuIHplcm8uXG5cbkFoLCBJIHNlZS4uLiBhZnRlciB0aGUgbWFpbiBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgbG9vcCwgdGhlcmUncyBhIGNvbmRpdGlvbmFsIGJsb2NrLiBJZiBgbXNrX2RlcHRoYCBpcyB6ZXJvLCB3ZSBgY29udGludWVgIOKAkyBtYWtlcyBzZW5zZSwgc2tpcCB0aGUgbWFzayBwcm9jZXNzaW5nLiBCdXQgaWYgaXQncyBub3QgemVybywgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdlIGhhdmUgdGhpcyBgbmxhX29rYCBjaGVjaywgZ29vZCwgZW5zdXJpbmcgdGhlIG1hc2sgYXR0cmlidXRlIGlzIHZhbGlkLiBUaGVuLCBgbmxhX25leHRgIGFkdmFuY2VzIGBubGFfb3B0X21za2AgYW5kIHVwZGF0ZXMgdGhlIGRlcHRoLiAgXG5cbkhhbmcgb24uLi4gdGhlICpwYXRjaCogc3BlY2lmaWNhbGx5IGFkZHMgYSAqc2Vjb25kKiBgbmxhX29rYCBjaGVjayBhZnRlciB0aGUgY2FsbCB0byBgbmxhX25leHRgLiBUaGF0J3MgdGhlIGtleSBhZGRpdGlvbi4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCBhZnRlciB0aGUgZmlyc3QgY2FsbCB0byBgbmxhX29rYCB0byBtYWtlIHN1cmUgd2UncmUgb24gYSB2YWxpZCBhdHRyaWJ1dGUsIHdlICphZHZhbmNlKiB0aGUgcG9pbnRlciB1c2luZyBgbmxhX25leHRgIGFuZCBjaGVjayB0aGUgKm5leHQqIGF0dHJpYnV0ZS4gVGhpcyBtZWFucyBpbiB0aGUgc3Vic2VxdWVudCBpdGVyYXRpb24gb2YgdGhlIGxvb3AsIHRoZSBjb2RlIHdpbGwgYmUgd29ya2luZyB3aXRoIHRoZSAqbmV4dCogbWFzayBhdHRyaWJ1dGUuXG5cblNvLCBgbmxhX25leHRgIG1vdmVzIHRoZSBwb2ludGVyIGFuZCB1cGRhdGVzIHRoZSByZW1haW5pbmcgbGVuZ3RoIChgbXNrX2RlcHRoYCkuIFRoZW4sIGluIHRoZSAqbmV4dCogaXRlcmF0aW9uIG9mIHRoZSBtYWluIGxvb3AsIGl0J2xsIHBhc3MgdGhpcyB1cGRhdGVkIGBubGFfb3B0X21za2AgdG8gZnVuY3Rpb25zIGxpa2UgYGZsX3NldF9nZW5ldmVfb3B0YCwgYGZsX3NldF92eGxhbl9vcHRgLCBgZmxfc2V0X2Vyc3Bhbl9vcHRgLCBvciBgZmxfc2V0X3BmY3Bfb3B0YC4gIEkgbmVlZCB0byBjaGVjayB3aGF0IHRob3NlIGZ1bmN0aW9ucyBkby4gTGV0J3Mgc3RhcnQgd2l0aCB3aGF0IGBmbF9zZXRfZ2VuZXZlX29wdGAgZG9lcywgYW5kIHdoYXQgaXQgZXhwZWN0cyBmb3IgdGhlIGF0dHJpYnV0ZS4gVGhhdCdsbCB0ZWxsIG1lIGlmIHRoaXMgYWRkaXRpb24gb2YgdGhlIHNlY29uZCBgbmxhX29rYCBjYWxsIHJlYWxseSBtYWtlcyBzZW5zZSwgb3IgaWYgaXQgaGFzIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQwMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAzOjI4OjQ5LjU3OTgxNjg3NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDcyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2Nsc19mbG93ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzMwOlxcdFxcdG1kID0gKHN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqKVxcdTAwMjZrZXktXFx1MDAzZWVuY19vcHRzLmRhdGFba2V5LVxcdTAwM2VlbmNfb3B0cy5sZW5dO1xcbjEzMzE6XFx0XFx0bWVtc2V0KG1kLCAweGZmLCBzaXplb2YoKm1kKSk7XFxuMTMzMjpcXHRcXG4xMzMzOlxcdFxcdGlmICghZGVwdGgpXFxuMTMzNDpcXHRcXHRcXHRyZXR1cm4gc2l6ZW9mKCptZCk7XFxuMTMzNTpcXHRcXG4xMzM2OlxcdFxcdGlmIChubGFfdHlwZShubGEpICE9IFRDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX1ZYTEFOKSB7XFxuMTMzNzpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJOb24tdnhsYW4gb3B0aW9uIHR5cGUgZm9yIG1hc2tcXFwiKTtcXG4xMzM4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEzMzk6XFx0XFx0fVxcbjEzNDA6XFx0XFxuMTM0MTpcXHRcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX1ZYTEFOX01BWCwgbmxhLFxcbjEzNDI6XFx0XFx0XFx0XFx0ICAgICAgIHZ4bGFuX29wdF9wb2xpY3ksIGV4dGFjayk7XFxuMTM0MzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMzQ0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTM0NTpcXHRcXG4xMzQ2OlxcdFxcdGlmICghb3B0aW9uX2xlbiBcXHUwMDI2XFx1MDAyNiAhdGJbVENBX0ZMT1dFUl9LRVlfRU5DX09QVF9WWExBTl9HQlBdKSB7XFxuMTM0NzpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJNaXNzaW5nIHR1bm5lbCBrZXkgdnhsYW4gb3B0aW9uIGdicFxcXCIpO1xcbjEzNDg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTM0OTpcXHRcXHR9XFxuMTM1MDpcXHRcXG4xMzUxOlxcdFxcdGlmICh0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX1ZYTEFOX0dCUF0pIHtcXG4xMzUyOlxcdFxcdFxcdG1kLVxcdTAwM2VnYnAgPSBubGFfZ2V0X3UzMih0YltUQ0FfRkxPV0VSX0tFWV9FTkNfT1BUX1ZYTEFOX0dCUF0pO1xcbjEzNTM6XFx0XFx0XFx0bWQtXFx1MDAzZWdicCBcXHUwMDI2PSBWWExBTl9HQlBfTUFTSztcXG4xMzU0OlxcdFxcdH1cXG4xMzU1OlxcdFxcbjEzNTY6XFx0XFx0cmV0dXJuIHNpemVvZigqbWQpO1xcbjEzNTc6XFx0fVxcbjEzNTg6XFx0XFxuMTM1OTpcXHRzdGF0aWMgaW50IGZsX3NldF9lcnNwYW5fb3B0KGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IGZsX2Zsb3dfa2V5ICprZXksXFxuMTM2MDpcXHRcXHRcXHRcXHQgICAgIGludCBkZXB0aCwgaW50IG9wdGlvbl9sZW4sXFxuMTM2MTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xMzYyOlxcdHtcXG4xMzYzOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRfRVJTUEFOX01BWCArIDFdO1xcbjEzNjQ6XFx0XFx0c3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqbWQ7XFxuMTM2NTpcXHRcXHRpbnQgZXJyO1xcbjEzNjY6XFx0XFxuMTM2NzpcXHRcXHRtZCA9IChzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICopXFx1MDAyNmtleS1cXHUwMDNlZW5jX29wdHMuZGF0YVtrZXktXFx1MDAzZWVuY19vcHRzLmxlbl07XFxuMTM2ODpcXHRcXHRtZC1cXHUwMDNldmVyc2lvbiA9IDE7XFxuMTM2OTpcXHRcXG4xMzcwOlxcdFxcdGlmICghZGVwdGgpXFxuMTM3MTpcXHRcXHRcXHRyZXR1cm4gc2l6ZW9mKCptZCk7XFxuMTM3MjpcXHRcXG4xMzczOlxcdFxcdGlmIChubGFfdHlwZShubGEpICE9IFRDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX0VSU1BBTikge1xcbjEzNzQ6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiTm9uLWVyc3BhbiBvcHRpb24gdHlwZSBmb3IgbWFza1xcXCIpO1xcbjEzNzU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTM3NjpcXHRcXHR9XFxuMTM3NzpcXHRcXG4xMzc4OlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIFRDQV9GTE9XRVJfS0VZX0VOQ19PUFRfRVJTUEFOX01BWCwgbmxhLFxcbjEzNzk6XFx0XFx0XFx0XFx0ICAgICAgIGVyc3Bhbl9vcHRfcG9saWN5LCBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMzoyODo0OS41ODAwNjk5MDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY4MzkyODUxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS0FTQU4ncyBHb3QgVGhpczogTmV0bGluayBBdHRyaWJ1dGUgUGFyc2luZyBCdWcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyc3BlY3RpdmUuIEluIGBmbF9zZXRfdnhsYW5fb3B0YCBhbmQgYGZsX3NldF9lcnNwYW5fb3B0YCwgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsaW5nIGBubGFfcGFyc2VfbmVzdGVkYC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IGlmIGBubGFgIGlzbid0IGEgdmFsaWQgYXR0cmlidXRlLCB0aGUgYG5sYV9wYXJzZV9uZXN0ZWRgIGZ1bmN0aW9uIGNvdWxkIGVuZCB1cCBhY2Nlc3NpbmcgbWVtb3J5IGl0IHNob3VsZG4ndC4gQW5kIHllcywgSSB1bmRlcnN0YW5kIHRoYXQgaW50ZXJuYWxseSwgYG5sYV9wYXJzZV9uZXN0ZWRgIHVzZXMgYG5sYV9wYXJzZWAsIHdoaWNoIHVzZXMgYG5sYV9kYXRhKG5sYSlgIGFuZCBgbmxhX2xlbihubGEpYC4gSWYgYG5sYWAgaXMgb3V0IG9mIGJvdW5kcywgdGhpcyBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS5cblxuTXkgZmlyc3QgdGhvdWdodD8gVGhpcyBsb29rcyBsaWtlIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgc2NlbmFyaW8uIEFuZCwgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgaXMgKmRlc2lnbmVkKiB0byBjYXRjaCB0aGVzZSBwZXJmZWN0bHkuIFNvLCBJIGhhdmUgdG8gYXNrIG15c2VsZiwgaXMgdGhlcmUgYW4gKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSBwcm9ibGVtIGhlcmU/XG5cbkxldCdzIGxvb2sgYXQgYG5sYV9vcHRfbXNrYC4gVGhpcyB2YXJpYWJsZSBpcyBkZXJpdmVkIGZyb20gYHRiW1RDQV9GTE9XRVJfS0VZX0VOQ19PUFRTX01BU0tdYCwgd2hpY2ggY29tZXMgZnJvbSBhIG5ldGxpbmsgYXR0cmlidXRlIGZyb20gdXNlciBzcGFjZS4gVGhlIG5ldGxpbmsgbWVzc2FnZSBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlLCBzbyBpdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgYWxlcnQgb24gYW4gb3V0LW9mLWJvdW5kcyBpc3N1ZS5cblxuQnV0LCBpZiBgbmxhX25leHRgIGFkdmFuY2VzIGBubGFfb3B0X21za2AgYmV5b25kIHRoZSBlbmQgb2YgdGhlIG5ldGxpbmsgbWVzc2FnZSwgdGhlbiBpdCdzIGdvaW5nIHRvIHBvaW50IHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gSWYgaXQncyBvdXQgb2YgYm91bmRzLCBLQVNBTiB3aWxsIGNhdGNoIGl0LiBJZiBpdCdzIHdpdGhpbiB0aGUgc2tiIGJ1dCB1bmluaXRpYWxpemVkIOKAkyBwZXJoYXBzIHBhZGRpbmcg4oCTIEtNU0FOICptaWdodCogY2F0Y2ggaXQsIGJ1dCBLQVNBTiB3b3VsZG4ndC4gSG93ZXZlciwgbmV0bGluayBtZXNzYWdlcyBhcmUgdXN1YWxseSBhbGxvY2F0ZWQgd2l0aCBzb21ldGhpbmcgbGlrZSBga21hbGxvY2AsIGFuZCB0aGUgc2tiIGRhdGEgaXMgY29waWVkIGZyb20gdXNlciBzcGFjZS4gVGhlIGxlbmd0aCBvZiB0aGUgc2tiIGlzIHdlbGwtZGVmaW5lZC4gSWYgYG5sYV9uZXh0YCBhZHZhbmNlcyBiZXlvbmQgdGhlIG5ldGxpbmsgYXR0cmlidXRlIGxlbmd0aCwgaXQgY291bGQgYmUgd2l0aGluIHRoZSBza2IgZGF0YS4gSG93ZXZlciwgYG1za19kZXB0aGAgcmVwcmVzZW50cyB0aGUgcmVtYWluaW5nIGxlbmd0aCBvZiB0aGUgbmVzdGVkIGF0dHJpYnV0ZS4gSWYgYG1za19kZXB0aGAgaXMgcG9zaXRpdmUsIHRoZSBuZXN0ZWQgYXR0cmlidXRlJ3MgbGVuZ3RoIGhlYWRlciBpbmRpY2F0ZXMgaXQncyBsYXJnZXIgdGhhbiB3aGF0J3MgYWN0dWFsbHkgaW4gaXQuXG5cbk5vdywgYG5sYV9va2AgaXMgaW1wb3J0YW50LiBUaGlzIGNoZWNrIGVuc3VyZXMgdGhhdCBgbmxhYCBpcyBhY3R1YWxseSAqd2l0aGluKiBgbXNrX2RlcHRoYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZTpcblxuYGBgY1xuc3RhdGljIGlubGluZSBpbnQgbmxhX29rKGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgaW50IHJlbWFpbmluZylcbntcblx0cmV0dXJuIHJlbWFpbmluZyBcdTAwM2U9IChpbnQpIHNpemVvZihzdHJ1Y3QgbmxhdHRyKSBcdTAwMjZcdTAwMjZcblx0ICAgICAgIG5sYS1cdTAwM2VubGFfbGVuIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBubGF0dHIpIFx1MDAyNlx1MDAyNlxuXHQgICAgICAgbmxhLVx1MDAzZW5sYV9sZW4gXHUwMDNjPSByZW1haW5pbmc7XG59XG5gYGBcblxuSWYgYG5sYV9va2AgaXMgZmFsc2UsIHRoZSBhdHRyaWJ1dGUgaXMgbWFsZm9ybWVkLiBJZiB3ZSAqZG9uJ3QqIGNoZWNrIGBubGFfb2tgIGFmdGVyIGBubGFfbmV4dGAsIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uIGlzIGdvaW5nIHRvIHVzZSBgbmxhX29wdF9tc2tgLiBUaGF0IHdpbGwgcG90ZW50aWFsbHkgcmVhZCBgbmxhX3R5cGUobmxhX29wdF9tc2spYC4gSWYgYG5sYV9vcHRfbXNrYCBpc24ndCBgbmxhX29rYCwgYG5sYV90eXBlYCBjb3VsZCByZWFkIGdhcmJhZ2Ugb3IsIGFnYWluLCBnbyBvdXQgb2YgYm91bmRzLiBJZiBpdCByZWFkcyBnYXJiYWdlLCB3ZSBtaWdodCBqdXN0IGZhaWwgdGhlIGNoZWNrLiBJZiBpdCdzIG91dCBvZiBib3VuZHMsIEtBU0FOIGNhdGNoZXMgaXQuXG5cblNvLCBpcyB0aGVyZSBhbnkgcmVhbCAqcmlzayogaGVyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGEgd2F5IG9ubHkgS01TQU4gY291bGQgY2F0Y2g/IE5vLCBub3QgcmVhbGx5LiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIG5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcgYnVnOiBhIG1pc3NpbmcgbGVuZ3RoIGNoZWNrIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcy4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGNhdGNoIHRob3NlLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaCwgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpsZWFrcyouLi4gTm8sIHRoZSBuZXRsaW5rIG1lc3NhZ2UgZGF0YSBvcmlnaW5hdGVzIGZyb20gdXNlciBzcGFjZS5cblxuVGhlIHBhdGNoIGp1c3QgYWRkcyBhIGJvdW5kcyBjaGVjaywgd2hpY2ggaXMgYSBzdGFuZGFyZCBmaXggZm9yIGEgbWlzc2luZyBgbmxhX29rYCBhZnRlciBgbmxhX25leHRgIGNhbGwuIFN1Y2ggYnVncyB0eXBpY2FsbHkgcmVzdWx0IGluIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZXNlIGFyZSBjYXVnaHQgYnkgS0FTQU4uIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGxlYWsuXG5cblRoZSBwYXRjaDpcblxuYGBgY1xuIFx0XHRubGFfb3B0X21zayA9IG5sYV9uZXh0KG5sYV9vcHRfbXNrLCBcdTAwMjZtc2tfZGVwdGgpO1xuK1xuK1x0XHRpZiAobXNrX2RlcHRoIFx1MDAyNlx1MDAyNiAhbmxhX29rKG5sYV9vcHRfbXNrLCBtc2tfZGVwdGgpKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkEgbWFzayBhdHRyaWJ1dGUgaXMgaW52YWxpZFwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuXG4iLCJJbnB1dFRva2VucyI6NzE3MCwiT3V0cHV0VG9rZW5zIjoxMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDM6Mjk6MDYuNDE5MzU2ODUxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZHMgY2hlY2sgKGBubGFfb2tgKSBmb3IgbmV0bGluayBhdHRyaWJ1dGVzIGFmdGVyIGFkdmFuY2luZyB0aGUgYXR0cmlidXRlIHBvaW50ZXIgd2l0aCBgbmxhX25leHRgLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIGNvdWxkIHJlYWQgb3V0LW9mLWJvdW5kcyBtZW1vcnkgd2hlbiBhY2Nlc3NpbmcgdGhlIG5leHQgYXR0cmlidXRlJ3MgaGVhZGVyIG9yIGRhdGEuIE91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZHMgY2hlY2sgKGBubGFfb2tgKSBmb3IgbmV0bGluayBhdHRyaWJ1dGVzIGFmdGVyIGFkdmFuY2luZyB0aGUgYXR0cmlidXRlIHBvaW50ZXIgd2l0aCBgbmxhX25leHRgLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIGNvdWxkIHJlYWQgb3V0LW9mLWJvdW5kcyBtZW1vcnkgd2hlbiBhY2Nlc3NpbmcgdGhlIG5leHQgYXR0cmlidXRlJ3MgaGVhZGVyIG9yIGRhdGEuIE91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfm56[1] Phase: Succeeded StartedAt: 2026-08-26 03:29:18 +0000 UTC FinishedAt: 2026-08-26 03:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 03:29:18 +0000 UTC FinishedAt: 2026-08-26 03:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2] Phase: Succeeded StartedAt: 2026-08-26 03:29:18 +0000 UTC FinishedAt: 2026-08-26 07:08:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 03:29:18 +0000 UTC FinishedAt: 2026-08-26 07:08:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 03:29:18 +0000 UTC FinishedAt: 2026-08-26 03:29:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 03:29:18 +0000 UTC FinishedAt: 2026-08-26 03:29:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-convert-artifact-3998175131/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 03:29:28 +0000 UTC FinishedAt: 2026-08-26 03:45:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 03:29:28 +0000 UTC FinishedAt: 2026-08-26 03:45:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2ce83af0-d1eb-40fa-a857-438fa805e260,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-convert-artifact-3998175131/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "d326f066-cc5f-432c-8255-68295d595c5f", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-build-action-4286897113/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 03:29:28 +0000 UTC FinishedAt: 2026-08-26 03:45:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2ce83af0-d1eb-40fa-a857-438fa805e260,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-convert-artifact-3998175131/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "d326f066-cc5f-432c-8255-68295d595c5f", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-build-action-4286897113/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 03:45:45 +0000 UTC FinishedAt: 2026-08-26 03:45:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 03:45:45 +0000 UTC FinishedAt: 2026-08-26 03:45:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 03:45:45 +0000 UTC FinishedAt: 2026-08-26 03:45:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 03:45:45 +0000 UTC FinishedAt: 2026-08-26 03:45:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-convert-artifact-1808187634/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 03:45:55 +0000 UTC FinishedAt: 2026-08-26 03:48:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 03:45:55 +0000 UTC FinishedAt: 2026-08-26 03:47:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d326f066-cc5f-432c-8255-68295d595c5f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-build-action-4286897113/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 03:48:05 +0000 UTC FinishedAt: 2026-08-26 03:48:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 03:48:05 +0000 UTC FinishedAt: 2026-08-26 03:48:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 03:48:05 +0000 UTC FinishedAt: 2026-08-26 04:04:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 03:48:05 +0000 UTC FinishedAt: 2026-08-26 04:04:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2ce83af0-d1eb-40fa-a857-438fa805e260,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-convert-artifact-1808187634/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "d2450cb8-aaa5-477b-baba-ae71db111f14", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-build-action-2473902214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 03:48:05 +0000 UTC FinishedAt: 2026-08-26 04:04:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2ce83af0-d1eb-40fa-a857-438fa805e260,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-convert-artifact-1808187634/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "d2450cb8-aaa5-477b-baba-ae71db111f14", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-build-action-2473902214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 04:04:22 +0000 UTC FinishedAt: 2026-08-26 04:04:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 04:04:22 +0000 UTC FinishedAt: 2026-08-26 04:04:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 04:04:22 +0000 UTC FinishedAt: 2026-08-26 04:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 04:04:22 +0000 UTC FinishedAt: 2026-08-26 04:06:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d2450cb8-aaa5-477b-baba-ae71db111f14,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-build-action-2473902214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 04:06:26 +0000 UTC FinishedAt: 2026-08-26 07:08:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 04:06:26 +0000 UTC FinishedAt: 2026-08-26 07:08:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*d326f066-cc5f-432c-8255-68295d595c5f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d2450cb8-aaa5-477b-baba-ae71db111f14,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-build-action-4286897113/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-build-action-2473902214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 04:06:26 +0000 UTC FinishedAt: 2026-08-26 04:06:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 04:06:26 +0000 UTC FinishedAt: 2026-08-26 04:06:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-convert-artifact-3104579399/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 04:06:26 +0000 UTC FinishedAt: 2026-08-26 04:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 04:06:26 +0000 UTC FinishedAt: 2026-08-26 04:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 04:06:26 +0000 UTC FinishedAt: 2026-08-26 04:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 04:06:36 +0000 UTC FinishedAt: 2026-08-26 07:08:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfm56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fl_change","fl_tmplt_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_FLOWER"],"series_id":"0fd077f0-43fc-47bb-b7a9-8634a118f4d0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 04:06:36 +0000 UTC FinishedAt: 2026-08-26 07:08:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d326f066-cc5f-432c-8255-68295d595c5f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d2450cb8-aaa5-477b-baba-ae71db111f14,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-build-action-4286897113/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-build-action-2473902214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfm56/series-workflowhfm56-convert-artifact-3104579399/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}